From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Roper Subject: [PATCH i-g-t 4/5] kms_universal_plane: Universal plane testing (v5) Date: Thu, 29 May 2014 08:09:16 -0700 Message-ID: <1401376157-24940-4-git-send-email-matthew.d.roper@intel.com> References: <1401376014-24845-1-git-send-email-matthew.d.roper@intel.com> <1401376157-24940-1-git-send-email-matthew.d.roper@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id DA6A26E9C1 for ; Thu, 29 May 2014 08:08:15 -0700 (PDT) In-Reply-To: <1401376157-24940-1-git-send-email-matthew.d.roper@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org QWRkIGEgc2ltcGxlIHRlc3QgdG8gZXhlcmNpc2UgdW5pdmVyc2FsIHBsYW5lIHN1cHBvcnQuCgp2 NToKIC0gQ2hlY2sgdGhhdCB3ZSBkb24ndCBoYXZlIG1vcmUgdGhhbiBvbmUgcHJpbWFyeSBvciBj dXJzb3IuICBUaGlzIHdpbGwKICAgY2F0Y2ggYWNjaWRlbnRhbCBjYWxscyB0byBkcm1fcGxhbmVf aW5pdCgpIGluIHRoZSBrZXJuZWwgd2hlcmUKICAgZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCkg d2FzIGludGVuZGVkICh0aGVzZSBkb24ndCBjYXVzZSBhIGNvbXBpbGUKICAgd2FybmluZyBkdWUg dG8gdHlwZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gZW51bSBhbmQgYm9vbCkuCnY0OgogLSBUZXN0 IGRpc2FibGluZyB0aGUgcHJpbWFyeSBwbGFuZSBleHBsaWNpdGx5IHdoZW4gaXQgaGFzIHByZXZp b3VzbHkKICAgYmVlbiBpbXBsaWNpdGx5IGRpc2FibGVkIGR1ZSB0byBjbGlwcGluZy4KIC0gU2tp cCB0ZXN0IGlmIGlndF9waXBlX2NyY19uZXcoKSBmYWlscwp2MzoKIC0gRm9yIHRlc3Rpbmcgd2hp bGUgY3J0YyBpcyBvZmYsIHN3aXRjaCBiZXR3ZWVuIHNldmVyYWwgZGlmZmVyZW50CiAgIHByaW1h cnkgcGxhbmUgZmIncyBiZWZvcmUgcmVlbmFibGluZyB0aGUgY3J0Yy4gIFRoaXMgd2lsbCBoZWxw CiAgIGNhdGNoIHBpbi91bnBpbiBtaXN0YWtlcy4KdjI6CiAtIFRlc3QgdGhhdCBwYWdlZmxpcHMg ZXJyb3Igb3V0IGdyYWNlZnVsbHkgd2hlbiB0aGUgcHJpbWFyeSBwbGFuZQogICBpcyBkaXNhYmxl ZCBiZWZvcmUgdGhlIGlvY3RsLCBvciBiZXR3ZWVuIGlvY3RsIGFuZCBwYWdlZmxpcAogICBleGVj dXRpb24uCiAtIFRlc3QgdGhhdCBub3RoaW5nIGJsb3dzIHVwIGlmIHdlIHRyeSB0byBkaXNhYmxl IHRoZSBwcmltYXJ5IHBsYW5lCiAgIGltbWVkaWF0ZWx5IGFmdGVyIGEgcGFnZWZsaXAgKHByZXN1 bWFibHkgYmVmb3JlIHRoZSBwYWdlZmxpcCBhY3R1YWxseQogICBjb21wbGV0ZXMpLgogLSBUZXN0 IHRoYXQgd2UgY2FuIHNldHVwIHByaW1hcnkgKyBzcHJpdGUgcGxhbmVzIHdpdGggdGhlIENSVEMg b2ZmIGFuZAogICB0aGVuIGhhdmUgdGhlbSBzaG93IHVwIHByb3Blcmx5IHdoZW4gd2UgZW5hYmxl IHRoZSBDUlRDCiAgIChkcm1Nb2RlU2V0Q3J0YyB3aXRoIGZiID0gLTEpLgogLSBUZXN0IHRoYXQg d2UgY2FuIG1vZGVzZXQgcHJvcGVybHkgYWZ0ZXIgaGF2aW5nIGRpc2FibGVkIHRoZSBwcmltYXJ5 CiAgIHBsYW5lCiAtIFRlc3QgdGhhdCBwcm9wZXIgZXJyb3IgY29kZXMgYXJlIHJldHVybmVkIGZv ciBpbnZhbGlkIHBsYW5lCiAgIHByb2dyYW1taW5nIGF0dGVtcHRzLgoKU2lnbmVkLW9mZi1ieTog TWF0dCBSb3BlciA8bWF0dGhldy5kLnJvcGVyQGludGVsLmNvbT4KLS0tCiB0ZXN0cy8uZ2l0aWdu b3JlICAgICAgICAgICAgfCAgIDEgKwogdGVzdHMvTWFrZWZpbGUuc291cmNlcyAgICAgIHwgICAx ICsKIHRlc3RzL2ttc191bml2ZXJzYWxfcGxhbmUuYyB8IDU5OCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA2MDAgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc191bml2ZXJzYWxfcGxhbmUuYwoKZGlm ZiAtLWdpdCBhL3Rlc3RzLy5naXRpZ25vcmUgYi90ZXN0cy8uZ2l0aWdub3JlCmluZGV4IGQ3YWQw NTQuLmQxYjAxZjcgMTAwNjQ0Ci0tLSBhL3Rlc3RzLy5naXRpZ25vcmUKKysrIGIvdGVzdHMvLmdp dGlnbm9yZQpAQCAtMTI0LDYgKzEyNCw3IEBAIGttc19waXBlX2NyY19iYXNpYwoga21zX3BsYW5l CiBrbXNfcmVuZGVyCiBrbXNfc2V0bW9kZQora21zX3VuaXZlcnNhbF9wbGFuZQogbXVsdGktdGVz dHMudHh0CiBwbV9scHNwCiBwbV9ycG0KZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJj ZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IGVjYTRhZjkuLjAxMzJmOGUgMTAwNjQ0 Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNl cwpAQCAtNzAsNiArNzAsNyBAQCBURVNUU19wcm9nc19NID0gXAogCWttc19wbGFuZSBcCiAJa21z X3JlbmRlciBcCiAJa21zX3NldG1vZGUgXAorCWttc191bml2ZXJzYWxfcGxhbmUgXAogCXBtX2xw c3AgXAogCXBtX3JwbSBcCiAJcG1fcnBzIFwKZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc191bml2ZXJz YWxfcGxhbmUuYyBiL3Rlc3RzL2ttc191bml2ZXJzYWxfcGxhbmUuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5kZjQ4YjUwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMva21z X3VuaXZlcnNhbF9wbGFuZS5jCkBAIC0wLDAgKzEsNTk4IEBACisvKgorICogQ29weXJpZ2h0IMKp IDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAq IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S CisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBU SEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkYm9v bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRl ICJkcm10ZXN0LmgiCisjaW5jbHVkZSAiaWd0X2RlYnVnZnMuaCIKKyNpbmNsdWRlICJpZ3Rfa21z LmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgZHJtX2ZkOworCWlndF9kaXNwbGF5X3QgZGlz cGxheTsKK30gZGF0YV90OworCit0eXBlZGVmIHN0cnVjdCB7CisJZGF0YV90ICpkYXRhOworCWln dF9waXBlX2NyY190ICpwaXBlX2NyYzsKKwlpZ3RfY3JjX3QgY3JjXzEsIGNyY18yLCBjcmNfMywg Y3JjXzQsIGNyY181LCBjcmNfNiwgY3JjXzcsIGNyY184LAorCQkgIGNyY185LCBjcmNfMTA7CisJ c3RydWN0IGlndF9mYiByZWRfZmIsIGJsdWVfZmIsIGJsYWNrX2ZiLCB5ZWxsb3dfZmI7CisJZHJt TW9kZU1vZGVJbmZvICptb2RlOworfSBmdW5jdGlvbmFsX3Rlc3RfdDsKKwordHlwZWRlZiBzdHJ1 Y3QgeworCWRhdGFfdCAqZGF0YTsKKwlkcm1Nb2RlUmVzUHRyIG1vZGVyZXM7CisJc3RydWN0IGln dF9mYiBibHVlX2ZiLCBvdmVyc2l6ZWRfZmIsIHVuZGVyc2l6ZWRfZmI7Cit9IHNhbml0eV90ZXN0 X3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlkYXRhX3QgKmRhdGE7CisJc3RydWN0IGlndF9mYiBy ZWRfZmIsIGJsdWVfZmI7Cit9IHBhZ2VmbGlwX3Rlc3RfdDsKKworc3RhdGljIHZvaWQKK2Z1bmN0 aW9uYWxfdGVzdF9pbml0KGZ1bmN0aW9uYWxfdGVzdF90ICp0ZXN0LCBpZ3Rfb3V0cHV0X3QgKm91 dHB1dCwgZW51bSBwaXBlIHBpcGUpCit7CisJZGF0YV90ICpkYXRhID0gdGVzdC0+ZGF0YTsKKwlk cm1Nb2RlTW9kZUluZm8gKm1vZGU7CisKKwl0ZXN0LT5waXBlX2NyYyA9IGlndF9waXBlX2NyY19u ZXcocGlwZSwgSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOworCWlmICghdGVzdC0+cGlwZV9j cmMpCisJCWlndF9za2lwKCJhdXRvIGNyYyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgY29ubmVjdG9y IHdpdGggcGlwZSAlaVxuIiwKKwkJICAgICAgIHBpcGUpOworCisKKwlpZ3Rfb3V0cHV0X3NldF9w aXBlKG91dHB1dCwgcGlwZSk7CisKKwltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQp OworCWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9k ZS0+dmRpc3BsYXksCisJCQkJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwkJCQlmYWxzZSwgLyogdGls ZWQgKi8KKwkJCQkwLjAsIDAuMCwgMC4wLAorCQkJCSZ0ZXN0LT5ibGFja19mYik7CisJaWd0X2Ny ZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxh eSwKKwkJCQlEUk1fRk9STUFUX1hSR0I4ODg4LAorCQkJCWZhbHNlLCAvKiB0aWxlZCAqLworCQkJ CTAuMCwgMC4wLCAxLjAsCisJCQkJJnRlc3QtPmJsdWVfZmIpOworCWlndF9jcmVhdGVfY29sb3Jf ZmIoZGF0YS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCisJCQkJRFJN X0ZPUk1BVF9YUkdCODg4OCwKKwkJCQlmYWxzZSwgLyogdGlsZWQgKi8KKwkJCQkxLjAsIDEuMCwg MC4wLAorCQkJCSZ0ZXN0LT55ZWxsb3dfZmIpOworCWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ ZHJtX2ZkLCAxMDAsIDEwMCwKKwkJCQlEUk1fRk9STUFUX1hSR0I4ODg4LAorCQkJCWZhbHNlLCAv KiB0aWxlZCAqLworCQkJCTEuMCwgMC4wLCAwLjAsCisJCQkJJnRlc3QtPnJlZF9mYik7CisKKwl0 ZXN0LT5tb2RlID0gbW9kZTsKK30KKworc3RhdGljIHZvaWQKK2Z1bmN0aW9uYWxfdGVzdF9maW5p KGZ1bmN0aW9uYWxfdGVzdF90ICp0ZXN0LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKK3sKKwlpZ3Rf cGlwZV9jcmNfZnJlZSh0ZXN0LT5waXBlX2NyYyk7CisKKwlpZ3RfcmVtb3ZlX2ZiKHRlc3QtPmRh dGEtPmRybV9mZCwgJnRlc3QtPmJsYWNrX2ZiKTsKKwlpZ3RfcmVtb3ZlX2ZiKHRlc3QtPmRhdGEt PmRybV9mZCwgJnRlc3QtPmJsdWVfZmIpOworCWlndF9yZW1vdmVfZmIodGVzdC0+ZGF0YS0+ZHJt X2ZkLCAmdGVzdC0+cmVkX2ZiKTsKKwlpZ3RfcmVtb3ZlX2ZiKHRlc3QtPmRhdGEtPmRybV9mZCwg JnRlc3QtPnllbGxvd19mYik7CisKKwlpZ3RfZGlzcGxheV91c2VfdW5pdmVyc2FsX2NvbW1pdHMo JnRlc3QtPmRhdGEtPmRpc3BsYXksIGZhbHNlKTsKKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1 dCwgUElQRV9BTlkpOworCWlndF9kaXNwbGF5X2NvbW1pdCgmdGVzdC0+ZGF0YS0+ZGlzcGxheSk7 Cit9CisKKy8qCisgKiBVbml2ZXJzYWwgcGxhbmUgZnVuY3Rpb25hbCB0ZXN0aW5nLgorICogICAt IEJsYWNrIHByaW1hcnkgcGxhbmUgdmlhIHRyYWRpdGlvbmFsIGludGVyZmFjZXMsIHJlZCBzcHJp dGUsIGdyYWIgQ1JDOjEuCisgKiAgIC0gQmx1ZSBwcmltYXJ5IHBsYW5lIHZpYSB0cmFkaXRpb25h bCBpbnRlcmZhY2VzLCByZWQgc3ByaXRlLCBncmFiIENSQzoyLgorICogICAtIFllbGxvdyBwcmlt YXJ5IHZpYSB0cmFkaXRpb25hbCBpbnRlcmZhY2VzCisgKiAgIC0gQmx1ZSBwcmltYXJ5IHBsYW5l LCByZWQgc3ByaXRlIHZpYSB1bml2ZXJzYWwgcGxhbmVzLCBncmFiIENSQzozIGFuZCBjb21wYXJl CisgKiAgICAgd2l0aCBDUkM6MiAoc2hvdWxkIGJlIHRoZSBzYW1lKQorICogICAtIERpc2FibGUg cHJpbWFyeSBwbGFuZSwgZ3JhYiBDUkM6NCAoc2hvdWxkIGJlIHNhbWUgYXMgQ1JDOjEpCisgKiAg IC0gUmVlbmFibGUgcHJpbWFyeSwgZ3JhYiBDUkM6NSAoc2hvdWxkIGJlIHNhbWUgYXMgQ1JDOjIg YW5kIENSQzozKQorICogICAtIFllbGxvdyBwcmltYXJ5LCBubyBzcHJpdGUKKyAqICAgLSBEaXNh YmxlIENSVEMKKyAqICAgLSBQcm9ncmFtIHJlZCBzcHJpdGUgKHdoaWxlIENSVEMgb2ZmKQorICog ICAtIFByb2dyYW0gYmx1ZSBwcmltYXJ5ICh3aGlsZSBDUlRDIG9mZikKKyAqICAgLSBFbmFibGUg Q1JUQywgZ3JhYiBDUkM6NiAoc2hvdWxkIGJlIHNhbWUgYXMgQ1JDOjIpCisgKi8KK3N0YXRpYyB2 b2lkCitmdW5jdGlvbmFsX3Rlc3RfcGlwZShkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLCBp Z3Rfb3V0cHV0X3QgKm91dHB1dCkKK3sKKwlmdW5jdGlvbmFsX3Rlc3RfdCB0ZXN0ID0geyAuZGF0 YSA9IGRhdGEgfTsKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJ aWd0X3BsYW5lX3QgKnByaW1hcnksICpzcHJpdGU7CisJaW50IHJldDsKKwlpbnQgbnVtX3ByaW1h cnkgPSAwLCBudW1fY3Vyc29yID0gMDsKKwlpbnQgaTsKKworCWlndF9za2lwX29uKHBpcGUgPj0g ZGlzcGxheS0+bl9waXBlcyk7CisKKwlmcHJpbnRmKHN0ZG91dCwgIlRlc3RpbmcgY29ubmVjdG9y ICVzIHVzaW5nIHBpcGUgJWNcbiIsCisJCWlndF9vdXRwdXRfbmFtZShvdXRwdXQpLCBwaXBlX25h bWUocGlwZSkpOworCisJZnVuY3Rpb25hbF90ZXN0X2luaXQoJnRlc3QsIG91dHB1dCwgcGlwZSk7 CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSBoYXZlIG5vIG1vcmUgdGhhbiBvbmUgcHJpbWFyeSBv ciBjdXJzb3IgcGxhbmUgcGVyIGNydGMuCisJICogSWYgdGhlIGtlcm5lbCBhY2NpZGVudGFsbHkg Y2FsbHMgZHJtX3BsYW5lX2luaXQoKSByYXRoZXIgdGhhbgorCSAqIGRybV91bml2ZXJzYWxfcGxh bmVfaW5pdCgpLCB0aGUgdHlwZSBlbnVtIGNhbiBnZXQgaW50ZXJwcmV0ZWQgYXMgYQorCSAqIGJv b2xlYW4gYW5kIHNob3cgdXAgaW4gdXNlcnNwYWNlIGFzIHRoZSB3cm9uZyB0eXBlLgorCSAqLwor CWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5waXBlc1twaXBlXS5uX3BsYW5lczsgaSsrKQorCQlp ZiAoZGlzcGxheS0+cGlwZXNbcGlwZV0ucGxhbmVzW2ldLmlzX3ByaW1hcnkpCisJCQludW1fcHJp bWFyeSsrOworCQllbHNlIGlmIChkaXNwbGF5LT5waXBlc1twaXBlXS5wbGFuZXNbaV0uaXNfY3Vy c29yKQorCQkJbnVtX2N1cnNvcisrOworCisJaWd0X2Fzc2VydChudW1fcHJpbWFyeSA9PSAxKTsK KwlpZ3RfYXNzZXJ0KG51bV9jdXJzb3IgPD0gMSk7CisKKwlwcmltYXJ5ID0gaWd0X291dHB1dF9n ZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVfUFJJTUFSWSk7CisJc3ByaXRlID0gaWd0X291dHB1 dF9nZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVfMik7CisJaWYgKCFzcHJpdGUpIHsKKwkJZnVu Y3Rpb25hbF90ZXN0X2ZpbmkoJnRlc3QsIG91dHB1dCk7CisJCWlndF9za2lwKCJObyBzcHJpdGUg cGxhbmUgYXZhaWxhYmxlXG4iKTsKKwl9CisKKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHNwcml0 ZSwgMTAwLCAxMDApOworCisJLyogU3RlcCAxOiBMZWdhY3kgQVBJJ3MsIGJsYWNrIHByaW1hcnks IHJlZCBzcHJpdGUgKENSQyAxKSAqLworCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgJnRlc3Qu YmxhY2tfZmIpOworCWlndF9wbGFuZV9zZXRfZmIoc3ByaXRlLCAmdGVzdC5yZWRfZmIpOworCWln dF9kaXNwbGF5X2NvbW1pdChkaXNwbGF5KTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmModGVz dC5waXBlX2NyYywgJnRlc3QuY3JjXzEpOworCisJLyogU3RlcCAyOiBMZWdhY3kgQVBJJywgYmx1 ZSBwcmltYXJ5LCByZWQgc3ByaXRlIChDUkMgMikgKi8KKwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1h cnksICZ0ZXN0LmJsdWVfZmIpOworCWlndF9wbGFuZV9zZXRfZmIoc3ByaXRlLCAmdGVzdC5yZWRf ZmIpOworCWlndF9kaXNwbGF5X2NvbW1pdChkaXNwbGF5KTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVj dF9jcmModGVzdC5waXBlX2NyYywgJnRlc3QuY3JjXzIpOworCisJLyogU3RlcCAzOiBMZWdhY3kg QVBJJ3MsIHllbGxvdyBwcmltYXJ5IChDUkMgMykgKi8KKwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1h cnksICZ0ZXN0LnllbGxvd19mYik7CisJaWd0X2Rpc3BsYXlfY29tbWl0KGRpc3BsYXkpOworCWln dF9waXBlX2NyY19jb2xsZWN0X2NyYyh0ZXN0LnBpcGVfY3JjLCAmdGVzdC5jcmNfMyk7CisKKwkv KiBTdGVwIDQ6IFVuaXZlcnNhbCBBUEkncywgYmx1ZSBwcmltYXJ5LCByZWQgc3ByaXRlIChDUkMg NCkgKi8KKwlpZ3RfZGlzcGxheV91c2VfdW5pdmVyc2FsX2NvbW1pdHMoZGlzcGxheSwgdHJ1ZSk7 CisJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmdGVzdC5ibHVlX2ZiKTsKKwlpZ3RfcGxhbmVf c2V0X2ZiKHNwcml0ZSwgJnRlc3QucmVkX2ZiKTsKKwlpZ3RfZGlzcGxheV9jb21taXQoZGlzcGxh eSk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKHRlc3QucGlwZV9jcmMsICZ0ZXN0LmNyY180 KTsKKworCS8qIFN0ZXAgNTogVW5pdmVyc2FsIEFQSSdzLCBkaXNhYmxlIHByaW1hcnkgcGxhbmUg KENSQyA1KSAqLworCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgTlVMTCk7CisJaWd0X2Rpc3Bs YXlfY29tbWl0KGRpc3BsYXkpOworCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyh0ZXN0LnBpcGVf Y3JjLCAmdGVzdC5jcmNfNSk7CisKKwkvKiBTdGVwIDY6IFVuaXZlcnNhbCBBUEkncywgcmUtZW5h YmxlIHByaW1hcnkgd2l0aCBibHVlIChDUkMgNikgKi8KKwlpZ3RfZGlzcGxheV91c2VfdW5pdmVy c2FsX2NvbW1pdHMoZGlzcGxheSwgdHJ1ZSk7CisJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAm dGVzdC5ibHVlX2ZiKTsKKwlpZ3RfZGlzcGxheV9jb21taXQoZGlzcGxheSk7CisJaWd0X3BpcGVf Y3JjX2NvbGxlY3RfY3JjKHRlc3QucGlwZV9jcmMsICZ0ZXN0LmNyY182KTsKKworCS8qIFN0ZXAg NzogTGVnYWN5IEFQSSdzLCB5ZWxsb3cgcHJpbWFyeSwgbm8gc3ByaXRlICovCisJaWd0X2Rpc3Bs YXlfdXNlX3VuaXZlcnNhbF9jb21taXRzKGRpc3BsYXksIGZhbHNlKTsKKwlpZ3RfcGxhbmVfc2V0 X2ZiKHByaW1hcnksICZ0ZXN0LnllbGxvd19mYik7CisJaWd0X3BsYW5lX3NldF9mYihzcHJpdGUs IE5VTEwpOworCWlndF9kaXNwbGF5X2NvbW1pdChkaXNwbGF5KTsKKworCS8qIFN0ZXAgODogRGlz YWJsZSBDUlRDICovCisJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKKwlpZ3RfZGlz cGxheV9jb21taXQoZGlzcGxheSk7CisKKwkvKiBTdGVwIDk6IFVuaXZlcnNhbCBBUEkncyB3aXRo IGNydGMgb2ZmOgorCSAqICAtIHJlZCBzcHJpdGUKKwkgKiAgLSBtdWx0aXBsZSBwcmltYXJ5IGZi J3MsIGVuZGluZyBpbiBibHVlCisJICovCisJaWd0X2Rpc3BsYXlfdXNlX3VuaXZlcnNhbF9jb21t aXRzKGRpc3BsYXksIHRydWUpOworCWlndF9wbGFuZV9zZXRfZmIoc3ByaXRlLCAmdGVzdC5yZWRf ZmIpOworCXJldCA9IGlndF9kcm1fcGxhbmVfdHJ5X2NvbW1pdChzcHJpdGUsIG91dHB1dCk7CisJ aWd0X2Fzc2VydChyZXQgPT0gMCk7CisJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmdGVzdC55 ZWxsb3dfZmIpOworCXJldCA9IGlndF9kcm1fcGxhbmVfdHJ5X2NvbW1pdChwcmltYXJ5LCBvdXRw dXQpOworCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgJnRlc3QuYmxhY2tfZmIpOworCXJldCA9 IGlndF9kcm1fcGxhbmVfdHJ5X2NvbW1pdChwcmltYXJ5LCBvdXRwdXQpOworCWlndF9wbGFuZV9z ZXRfZmIocHJpbWFyeSwgJnRlc3QuYmx1ZV9mYik7CisJcmV0ID0gaWd0X2RybV9wbGFuZV90cnlf Y29tbWl0KHByaW1hcnksIG91dHB1dCk7CisJaWd0X2Fzc2VydChyZXQgPT0gMCk7CisJZGlzcGxh eS0+cGlwZXNbb3V0cHV0LT5jb25maWcucGlwZV0ubmVlZF93YWl0X2Zvcl92YmxhbmsgPSBmYWxz ZTsKKworCS8qIFN0ZXAgMTA6IEVuYWJsZSBjcnRjIChmYiA9IC0xKSwgdGFrZSBDUkMgKENSQyA3 KSAqLworCXJldCA9IGRybU1vZGVTZXRDcnRjKGRhdGEtPmRybV9mZCwgb3V0cHV0LT5jb25maWcu Y3J0Yy0+Y3J0Y19pZCwgLTEsCisJCQkgICAgIDAsIDAsICZvdXRwdXQtPmNvbmZpZy5jb25uZWN0 b3ItPmNvbm5lY3Rvcl9pZCwKKwkJCSAgICAgMSwgdGVzdC5tb2RlKTsKKwlpZ3RfYXNzZXJ0KHJl dCA9PSAwKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmModGVzdC5waXBlX2NyYywgJnRlc3Qu Y3JjXzcpOworCisJLyogU3RlcCAxMTogRGlzYWJsZSBwcmltYXJ5IHBsYW5lICovCisJaWd0X3Bs YW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKKwlpZ3RfZGlzcGxheV9jb21taXQoZGlzcGxheSk7 CisKKwkvKiBTdGVwIDEyOiBMZWdhY3kgbW9kZXNldCB0byB5ZWxsb3cgRkIgKENSQyA4KSAqLwor CWlndF9kaXNwbGF5X3VzZV91bml2ZXJzYWxfY29tbWl0cyhkaXNwbGF5LCBmYWxzZSk7CisJaWd0 X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmdGVzdC55ZWxsb3dfZmIpOworCWlndF9kaXNwbGF5X2Nv bW1pdChkaXNwbGF5KTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmModGVzdC5waXBlX2NyYywg JnRlc3QuY3JjXzgpOworCisJLyogU3RlcCAxMzogTGVnYWN5IEFQSScsIGJsdWUgcHJpbWFyeSwg cmVkIHNwcml0ZSAqLworCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgJnRlc3QuYmx1ZV9mYik7 CisJaWd0X3BsYW5lX3NldF9mYihzcHJpdGUsICZ0ZXN0LnJlZF9mYik7CisJaWd0X2Rpc3BsYXlf Y29tbWl0KGRpc3BsYXkpOworCisJLyogU3RlcCAxNDogVW5pdmVyc2FsIEFQSSwgc2V0IHByaW1h cnkgY29tcGxldGVseSBvZmZzY3JlZW4gKENSQyA5KSAqLworCXJldCA9IGRybU1vZGVTZXRQbGFu ZShkYXRhLT5kcm1fZmQsIHByaW1hcnktPmRybV9wbGFuZS0+cGxhbmVfaWQsCisJCQkgICAgICBv dXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAorCQkJICAgICAgdGVzdC5ibHVlX2ZiLmZiX2lk LCAwLAorCQkJICAgICAgOTAwMCwgOTAwMCwKKwkJCSAgICAgIHRlc3QubW9kZS0+aGRpc3BsYXks CisJCQkgICAgICB0ZXN0Lm1vZGUtPnZkaXNwbGF5LAorCQkJICAgICAgSUdUX0ZJWEVEKDAsMCks IElHVF9GSVhFRCgwLDApLAorCQkJICAgICAgSUdUX0ZJWEVEKHRlc3QubW9kZS0+aGRpc3BsYXks MCksCisJCQkgICAgICBJR1RfRklYRUQodGVzdC5tb2RlLT52ZGlzcGxheSwwKSk7CisJaWd0X2Fz c2VydChyZXQgPT0gMCk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKHRlc3QucGlwZV9jcmMs ICZ0ZXN0LmNyY185KTsKKworCS8qCisJICogU3RlcCAxNTogRXhwbGljaXRseSBkaXNhYmxlIHBy aW1hcnkgYWZ0ZXIgaXQncyBhbHJlYWR5IGJlZW4KKwkgKiBpbXBsaWNpdGx5IGRpc2FibGVkIChD UkMgMTApLgorCSAqLworCWlndF9kaXNwbGF5X3VzZV91bml2ZXJzYWxfY29tbWl0cyhkaXNwbGF5 LCB0cnVlKTsKKwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIE5VTEwpOworCWlndF9kaXNwbGF5 X2NvbW1pdChkaXNwbGF5KTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmModGVzdC5waXBlX2Ny YywgJnRlc3QuY3JjXzEwKTsKKworCS8qIFN0ZXAgMTY6IExlZ2FjeSBBUEkncywgYmx1ZSBwcmlt YXJ5LCByZWQgc3ByaXRlICovCisJaWd0X2Rpc3BsYXlfdXNlX3VuaXZlcnNhbF9jb21taXRzKGRp c3BsYXksIGZhbHNlKTsKKwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksICZ0ZXN0LmJsdWVfZmIp OworCWlndF9wbGFuZV9zZXRfZmIoc3ByaXRlLCAmdGVzdC5yZWRfZmIpOworCWlndF9kaXNwbGF5 X2NvbW1pdChkaXNwbGF5KTsKKworCS8qIEJsdWUgYmcgKyByZWQgc3ByaXRlIHNob3VsZCBiZSBz YW1lIHVuZGVyIGJvdGggdHlwZXMgb2YgQVBJJ3MgKi8KKwlpZ3RfYXNzZXJ0KGlndF9jcmNfZXF1 YWwoJnRlc3QuY3JjXzIsICZ0ZXN0LmNyY180KSk7CisKKwkvKiBEaXNhYmxpbmcgcHJpbWFyeSBw bGFuZSBzaG91bGQgYmUgc2FtZSBhcyBibGFjayBwcmltYXJ5ICovCisJaWd0X2Fzc2VydChpZ3Rf Y3JjX2VxdWFsKCZ0ZXN0LmNyY18xLCAmdGVzdC5jcmNfNSkpOworCisJLyogUmUtZW5hYmxpbmcg cHJpbWFyeSBzaG91bGQgcmV0dXJuIHRvIGJsdWUgcHJvcGVybHkgKi8KKwlpZ3RfYXNzZXJ0KGln dF9jcmNfZXF1YWwoJnRlc3QuY3JjXzIsICZ0ZXN0LmNyY182KSk7CisKKwkvKgorCSAqIFdlIHNo b3VsZCBiZSBhYmxlIHRvIHNldHVwIHBsYW5lIEZCJ3Mgd2hpbGUgQ1JUQyBpcyBkaXNhYmxlZCBh bmQKKwkgKiB0aGVuIGhhdmUgdGhlbSBwb3AgdXAgY29ycmVjdGx5IHdoZW4gdGhlIENSVEMgaXMg cmUtZW5hYmxlZC4KKwkgKi8KKwlpZ3RfYXNzZXJ0KGlndF9jcmNfZXF1YWwoJnRlc3QuY3JjXzIs ICZ0ZXN0LmNyY183KSk7CisKKwkvKgorCSAqIFdlIHNob3VsZCBiZSBhYmxlIHRvIG1vZGVzZXQg d2l0aCB0aGUgcHJpbWFyeSBwbGFuZSBvZmYKKwkgKiBzdWNjZXNzZnVsbHkKKwkgKi8KKwlpZ3Rf YXNzZXJ0KGlndF9jcmNfZXF1YWwoJnRlc3QuY3JjXzMsICZ0ZXN0LmNyY184KSk7CisKKwkvKgor CSAqIFdlIHNob3VsZCBiZSBhYmxlIHRvIG1vdmUgdGhlIHByaW1hcnkgcGxhbmUgY29tcGxldGVs eSBvZmZzY3JlZW4KKwkgKiBhbmQgaGF2ZSBpdCBkaXNhYmxlIHN1Y2Nlc3NmdWxseS4KKwkgKi8K KwlpZ3RfYXNzZXJ0KGlndF9jcmNfZXF1YWwoJnRlc3QuY3JjXzUsICZ0ZXN0LmNyY185KSk7CisK KwkvKgorCSAqIFdlIHNob3VsZCBiZSBhYmxlIHRvIGV4cGxpY2l0bHkgZGlzYWJsZSBhbiBhbHJl YWR5CisJICogaW1wbGljaXRseS1kaXNhYmxlZCBwcmltYXJ5IHBsYW5lCisJICovCisJaWd0X2Fz c2VydChpZ3RfY3JjX2VxdWFsKCZ0ZXN0LmNyY181LCAmdGVzdC5jcmNfMTApKTsKKworCWlndF9w bGFuZV9zZXRfZmIocHJpbWFyeSwgTlVMTCk7CisJaWd0X3BsYW5lX3NldF9mYihzcHJpdGUsIE5V TEwpOworCisJZnVuY3Rpb25hbF90ZXN0X2ZpbmkoJnRlc3QsIG91dHB1dCk7Cit9CisKK3N0YXRp YyB2b2lkCitzYW5pdHlfdGVzdF9pbml0KHNhbml0eV90ZXN0X3QgKnRlc3QsIGlndF9vdXRwdXRf dCAqb3V0cHV0LCBlbnVtIHBpcGUgcGlwZSkKK3sKKwlkYXRhX3QgKmRhdGEgPSB0ZXN0LT5kYXRh OworCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKKworCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0 LCBwaXBlKTsKKworCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7CisJaWd0X2Ny ZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxh eSwKKwkJCSAgICBEUk1fRk9STUFUX1hSR0I4ODg4LAorCQkJICAgIGZhbHNlLCAvKiB0aWxlZCAq LworCQkJICAgIDAuMCwgMC4wLCAxLjAsCisJCQkgICAgJnRlc3QtPmJsdWVfZmIpOworCWlndF9j cmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLAorCQkJICAgIG1vZGUtPmhkaXNwbGF5ICsgMTAw LCBtb2RlLT52ZGlzcGxheSArIDEwMCwKKwkJCSAgICBEUk1fRk9STUFUX1hSR0I4ODg4LAorCQkJ ICAgIGZhbHNlLCAvKiB0aWxlZCAqLworCQkJICAgIDAuMCwgMC4wLCAxLjAsCisJCQkgICAgJnRl c3QtPm92ZXJzaXplZF9mYik7CisJaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsCisJ CQkgICAgbW9kZS0+aGRpc3BsYXkgLSAxMDAsIG1vZGUtPnZkaXNwbGF5IC0gMTAwLAorCQkJICAg IERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkgICAgZmFsc2UsIC8qIHRpbGVkICovCisJCQkgICAg MC4wLCAwLjAsIDEuMCwKKwkJCSAgICAmdGVzdC0+dW5kZXJzaXplZF9mYik7CisKKwl0ZXN0LT5t b2RlcmVzID0gZHJtTW9kZUdldFJlc291cmNlcyhkYXRhLT5kcm1fZmQpOworfQorCitzdGF0aWMg dm9pZAorc2FuaXR5X3Rlc3RfZmluaShzYW5pdHlfdGVzdF90ICp0ZXN0LCBpZ3Rfb3V0cHV0X3Qg Km91dHB1dCkKK3sKKwlkcm1Nb2RlRnJlZVJlc291cmNlcyh0ZXN0LT5tb2RlcmVzKTsKKworCWln dF9yZW1vdmVfZmIodGVzdC0+ZGF0YS0+ZHJtX2ZkLCAmdGVzdC0+b3ZlcnNpemVkX2ZiKTsKKwlp Z3RfcmVtb3ZlX2ZiKHRlc3QtPmRhdGEtPmRybV9mZCwgJnRlc3QtPnVuZGVyc2l6ZWRfZmIpOwor CWlndF9yZW1vdmVfZmIodGVzdC0+ZGF0YS0+ZHJtX2ZkLCAmdGVzdC0+Ymx1ZV9mYik7CisKKwlp Z3RfZGlzcGxheV91c2VfdW5pdmVyc2FsX2NvbW1pdHMoJnRlc3QtPmRhdGEtPmRpc3BsYXksIGZh bHNlKTsKKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9BTlkpOworCWlndF9kaXNw bGF5X2NvbW1pdCgmdGVzdC0+ZGF0YS0+ZGlzcGxheSk7Cit9CisKKy8qCisgKiBVbml2ZXJzYWwg cGxhbmUgc2FuaXR5IHRlc3RpbmcuCisgKiAgIC0gUHJpbWFyeSBkb2Vzbid0IGNvdmVyIENSVEMK KyAqICAgLSBQcmltYXJ5IHBsYW5lIHRyaWVzIHRvIHNjYWxlIGRvd24KKyAqICAgLSBQcmltYXJ5 IHBsYW5lIHRyaWVzIHRvIHNjYWxlIHVwCisgKi8KK3N0YXRpYyB2b2lkCitzYW5pdHlfdGVzdF9w aXBlKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGlndF9vdXRwdXRfdCAqb3V0cHV0KQor eworCXNhbml0eV90ZXN0X3QgdGVzdCA9IHsgLmRhdGEgPSBkYXRhIH07CisJaWd0X3BsYW5lX3Qg KnByaW1hcnk7CisJZHJtTW9kZU1vZGVJbmZvICptb2RlOworCWludCBpLCByZXQgPSAwOworCisJ aWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOworCW1vZGUgPSBpZ3Rfb3V0cHV0X2dl dF9tb2RlKG91dHB1dCk7CisKKwlzYW5pdHlfdGVzdF9pbml0KCZ0ZXN0LCBvdXRwdXQsIHBpcGUp OworCisJcHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgSUdUX1BMQU5FX1BS SU1BUlkpOworCisJLyogVXNlIGxlZ2FjeSBBUEkgdG8gc2V0IGEgbW9kZSB3aXRoIGEgYmx1ZSBG QiAqLworCWlndF9kaXNwbGF5X3VzZV91bml2ZXJzYWxfY29tbWl0cygmZGF0YS0+ZGlzcGxheSwg ZmFsc2UpOworCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgJnRlc3QuYmx1ZV9mYik7CisJaWd0 X2Rpc3BsYXlfY29tbWl0KCZkYXRhLT5kaXNwbGF5KTsKKworCS8qCisJICogVHJ5IHRvIHVzZSB1 bml2ZXJzYWwgcGxhbmUgQVBJIHRvIHNldCBwcmltYXJ5IHBsYW5lIHRoYXQKKwkgKiBkb2Vzbid0 IGNvdmVyIENSVEMgKHNob3VsZCBmYWlsKS4KKwkgKi8KKwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1h cnksICZ0ZXN0LnVuZGVyc2l6ZWRfZmIpOworCXJldCA9IGlndF9kcm1fcGxhbmVfdHJ5X2NvbW1p dChwcmltYXJ5LCBvdXRwdXQpOworCWlndF9hc3NlcnQocmV0ID09IC1FSU5WQUwpOworCisJLyog U2FtZSBhcyBhYm92ZSwgYnV0IGRpZmZlcmVudCBwbGFuZSBwb3NpdGlvbmluZy4gKi8KKwlwcmlt YXJ5LT5jcnRjX3ggPSAxMDA7CisJcHJpbWFyeS0+Y3J0Y195ID0gMTAwOworCXByaW1hcnktPnBv c2l0aW9uX2NoYW5nZWQgPSB0cnVlOworCXJldCA9IGlndF9kcm1fcGxhbmVfdHJ5X2NvbW1pdChw cmltYXJ5LCBvdXRwdXQpOworCWlndF9hc3NlcnQocmV0ID09IC1FSU5WQUwpOworCisJcHJpbWFy eS0+Y3J0Y194ID0gMDsKKwlwcmltYXJ5LT5jcnRjX3kgPSAwOworCXByaW1hcnktPnBvc2l0aW9u X2NoYW5nZWQgPSBmYWxzZTsKKworCS8qIFRyeSB0byB1c2UgdW5pdmVyc2FsIHBsYW5lIEFQSSB0 byBzY2FsZSBkb3duIChzaG91bGQgZmFpbCkgKi8KKwlyZXQgPSBkcm1Nb2RlU2V0UGxhbmUoZGF0 YS0+ZHJtX2ZkLCBwcmltYXJ5LT5kcm1fcGxhbmUtPnBsYW5lX2lkLAorCQkJICAgICAgb3V0cHV0 LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwKKwkJCSAgICAgIHRlc3Qub3ZlcnNpemVkX2ZiLmZiX2lk LCAwLAorCQkJICAgICAgMCwgMCwKKwkJCSAgICAgIG1vZGUtPmhkaXNwbGF5ICsgMTAwLAorCQkJ ICAgICAgbW9kZS0+dmRpc3BsYXkgKyAxMDAsCisJCQkgICAgICBJR1RfRklYRUQoMCwwKSwgSUdU X0ZJWEVEKDAsMCksCisJCQkgICAgICBJR1RfRklYRUQobW9kZS0+aGRpc3BsYXksMCksCisJCQkg ICAgICBJR1RfRklYRUQobW9kZS0+dmRpc3BsYXksMCkpOworCWlndF9hc3NlcnQocmV0ID09IC1F UkFOR0UpOworCisJLyogVHJ5IHRvIHVzZSB1bml2ZXJzYWwgcGxhbmUgQVBJIHRvIHNjYWxlIHVw IChzaG91bGQgZmFpbCkgKi8KKwlyZXQgPSBkcm1Nb2RlU2V0UGxhbmUoZGF0YS0+ZHJtX2ZkLCBw cmltYXJ5LT5kcm1fcGxhbmUtPnBsYW5lX2lkLAorCQkJICAgICAgb3V0cHV0LT5jb25maWcuY3J0 Yy0+Y3J0Y19pZCwKKwkJCSAgICAgIHRlc3Qub3ZlcnNpemVkX2ZiLmZiX2lkLCAwLAorCQkJICAg ICAgMCwgMCwKKwkJCSAgICAgIG1vZGUtPmhkaXNwbGF5LAorCQkJICAgICAgbW9kZS0+dmRpc3Bs YXksCisJCQkgICAgICBJR1RfRklYRUQoMCwwKSwgSUdUX0ZJWEVEKDAsMCksCisJCQkgICAgICBJ R1RfRklYRUQobW9kZS0+aGRpc3BsYXkgLSAxMDAsMCksCisJCQkgICAgICBJR1RfRklYRUQobW9k ZS0+dmRpc3BsYXkgLSAxMDAsMCkpOworCWlndF9hc3NlcnQocmV0ID09IC1FUkFOR0UpOworCisJ LyogRmluZCBvdGhlciBjcnRjcyBhbmQgdHJ5IHRvIHByb2dyYW0gb3VyIHByaW1hcnkgcGxhbmUg b24gdGhlbSAqLworCWZvciAoaSA9IDA7IGkgPCB0ZXN0Lm1vZGVyZXMtPmNvdW50X2NydGNzOyBp KyspCisJCWlmICh0ZXN0Lm1vZGVyZXMtPmNydGNzW2ldICE9IG91dHB1dC0+Y29uZmlnLmNydGMt PmNydGNfaWQpIHsKKwkJCXJldCA9IGRybU1vZGVTZXRQbGFuZShkYXRhLT5kcm1fZmQsCisJCQkJ CSAgICAgIHByaW1hcnktPmRybV9wbGFuZS0+cGxhbmVfaWQsCisJCQkJCSAgICAgIHRlc3QubW9k ZXJlcy0+Y3J0Y3NbaV0sCisJCQkJCSAgICAgIHRlc3QuYmx1ZV9mYi5mYl9pZCwgMCwKKwkJCQkJ ICAgICAgMCwgMCwKKwkJCQkJICAgICAgbW9kZS0+aGRpc3BsYXksCisJCQkJCSAgICAgIG1vZGUt PnZkaXNwbGF5LAorCQkJCQkgICAgICBJR1RfRklYRUQoMCwwKSwgSUdUX0ZJWEVEKDAsMCksCisJ CQkJCSAgICAgIElHVF9GSVhFRChtb2RlLT5oZGlzcGxheSwwKSwKKwkJCQkJICAgICAgSUdUX0ZJ WEVEKG1vZGUtPnZkaXNwbGF5LDApKTsKKwkJCWlndF9hc3NlcnQocmV0ID09IC1FSU5WQUwpOwor CQl9CisKKwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIE5VTEwpOworCXNhbml0eV90ZXN0X2Zp bmkoJnRlc3QsIG91dHB1dCk7Cit9CisKK3N0YXRpYyB2b2lkCitwYWdlZmxpcF90ZXN0X2luaXQo cGFnZWZsaXBfdGVzdF90ICp0ZXN0LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgZW51bSBwaXBlIHBp cGUpCit7CisJZGF0YV90ICpkYXRhID0gdGVzdC0+ZGF0YTsKKwlkcm1Nb2RlTW9kZUluZm8gKm1v ZGU7CisKKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7CisKKwltb2RlID0gaWd0 X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJt X2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCisJCQkgICAgRFJNX0ZPUk1BVF9Y UkdCODg4OCwKKwkJCSAgICBmYWxzZSwgLyogdGlsZWQgKi8KKwkJCSAgICAxLjAsIDAuMCwgMC4w LAorCQkJICAgICZ0ZXN0LT5yZWRfZmIpOworCWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJt X2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCisJCQkgICAgRFJNX0ZPUk1BVF9Y UkdCODg4OCwKKwkJCSAgICBmYWxzZSwgLyogdGlsZWQgKi8KKwkJCSAgICAwLjAsIDAuMCwgMS4w LAorCQkJICAgICZ0ZXN0LT5ibHVlX2ZiKTsKK30KKworc3RhdGljIHZvaWQKK3BhZ2VmbGlwX3Rl c3RfZmluaShwYWdlZmxpcF90ZXN0X3QgKnRlc3QsIGlndF9vdXRwdXRfdCAqb3V0cHV0KQorewor CWlndF9yZW1vdmVfZmIodGVzdC0+ZGF0YS0+ZHJtX2ZkLCAmdGVzdC0+cmVkX2ZiKTsKKwlpZ3Rf cmVtb3ZlX2ZiKHRlc3QtPmRhdGEtPmRybV9mZCwgJnRlc3QtPmJsdWVfZmIpOworCisJaWd0X2Rp c3BsYXlfdXNlX3VuaXZlcnNhbF9jb21taXRzKCZ0ZXN0LT5kYXRhLT5kaXNwbGF5LCBmYWxzZSk7 CisJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIFBJUEVfQU5ZKTsKKwlpZ3RfZGlzcGxheV9j b21taXQoJnRlc3QtPmRhdGEtPmRpc3BsYXkpOworfQorCitzdGF0aWMgdm9pZAorcGFnZWZsaXBf dGVzdF9waXBlKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGlndF9vdXRwdXRfdCAqb3V0 cHV0KQoreworCXBhZ2VmbGlwX3Rlc3RfdCB0ZXN0ID0geyAuZGF0YSA9IGRhdGEgfTsKKwlpZ3Rf cGxhbmVfdCAqcHJpbWFyeTsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0ID0geyAudHZfc2VjID0g MCwgLnR2X3VzZWMgPSA1MDAgfTsKKwlkcm1FdmVudENvbnRleHQgZXZjdHggPSB7IC52ZXJzaW9u ID0gRFJNX0VWRU5UX0NPTlRFWFRfVkVSU0lPTiB9OworCisJZmRfc2V0IGZkczsKKwlpbnQgcmV0 ID0gMDsKKworCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsKKworCXBhZ2VmbGlw X3Rlc3RfaW5pdCgmdGVzdCwgb3V0cHV0LCBwaXBlKTsKKworCXByaW1hcnkgPSBpZ3Rfb3V0cHV0 X2dldF9wbGFuZShvdXRwdXQsIElHVF9QTEFORV9QUklNQVJZKTsKKworCS8qIFVzZSBsZWdhY3kg QVBJIHRvIHNldCBhIG1vZGUgd2l0aCBhIGJsdWUgRkIgKi8KKwlpZ3RfZGlzcGxheV91c2VfdW5p dmVyc2FsX2NvbW1pdHMoJmRhdGEtPmRpc3BsYXksIGZhbHNlKTsKKwlpZ3RfcGxhbmVfc2V0X2Zi KHByaW1hcnksICZ0ZXN0LmJsdWVfZmIpOworCWlndF9kaXNwbGF5X2NvbW1pdCgmZGF0YS0+ZGlz cGxheSk7CisKKwkvKiBEaXNhYmxlIHRoZSBwcmltYXJ5IHBsYW5lICovCisJaWd0X2Rpc3BsYXlf dXNlX3VuaXZlcnNhbF9jb21taXRzKCZkYXRhLT5kaXNwbGF5LCB0cnVlKTsKKwlpZ3RfcGxhbmVf c2V0X2ZiKHByaW1hcnksIE5VTEwpOworCWlndF9kaXNwbGF5X2NvbW1pdCgmZGF0YS0+ZGlzcGxh eSk7CisKKwkvKgorCSAqIElzc3VlIGEgcGFnZWZsaXAgdG8gcmVkIEZCCisJICoKKwkgKiBOb3Rl IHRoYXQgY3J0Yy0+cHJpbWFyeS0+ZmIgPSBOVUxMIGNhdXNlcyBmbGlwIHRvIHJldHVybiBFQlVT WSBmb3IKKwkgKiBoaXN0b3JpY2FsIHJlYXNvbnMuLi4KKwkgKi8KKwlyZXQgPSBkcm1Nb2RlUGFn ZUZsaXAoZGF0YS0+ZHJtX2ZkLCBvdXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAorCQkJICAg ICAgdGVzdC5yZWRfZmIuZmJfaWQsIDAsIE5VTEwpOworCWlndF9hc3NlcnQocmV0ID09IC1FQlVT WSk7CisKKwkvKiBUdXJuIHByaW1hcnkgcGxhbmUgYmFjayBvbiAqLworCWlndF9wbGFuZV9zZXRf ZmIocHJpbWFyeSwgJnRlc3QuYmx1ZV9mYik7CisJaWd0X2Rpc3BsYXlfY29tbWl0KCZkYXRhLT5k aXNwbGF5KTsKKworCS8qCisJICogSXNzdWUgYSBwYWdlZmxpcCB0byByZWQsIHRoZW4gaW1tZWRp YXRlbHkgdHJ5IHRvIGRpc2FibGUgdGhlIHByaW1hcnkKKwkgKiBwbGFuZSwgaG9wZWZ1bGx5IGJl Zm9yZSB0aGUgcGFnZWZsaXAgaGFzIGEgY2hhbmNlIHRvIGNvbXBsZXRlLiAgVGhlCisJICogcGxh bmUgZGlzYWJsZSBvcGVyYXRpb24gc2hvdWxkIHdpbmQgdXAgYmxvY2tpbmcgd2hpbGUgdGhlIHBh Z2VmbGlwCisJICogY29tcGxldGVzLCB3aGljaCB3ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8g c3BlY2lmaWNhbGx5IHRlc3QgZm9yLAorCSAqIGJ1dCBhdCBsZWFzdCB3ZSBjYW4gbWFrZSBzdXJl IHRoYXQgbm90aGluZyBibG93cyB1cC4KKwkgKi8KKwlyZXQgPSBkcm1Nb2RlUGFnZUZsaXAoZGF0 YS0+ZHJtX2ZkLCBvdXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAorCQkJICAgICAgdGVzdC5y ZWRfZmIuZmJfaWQsIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCwKKwkJCSAgICAgICZ0ZXN0KTsK KwlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKKwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIE5VTEwp OworCWlndF9kaXNwbGF5X2NvbW1pdCgmZGF0YS0+ZGlzcGxheSk7CisKKwkvKiBXYWl0IGZvciBw YWdlZmxpcCBjb21wbGV0aW9uLCB0aGVuIGNvbnN1bWUgZXZlbnQgb24gZmQgKi8KKwlGRF9aRVJP KCZmZHMpOworCUZEX1NFVChkYXRhLT5kcm1fZmQsICZmZHMpOworCWRvIHsKKwkJcmV0ID0gc2Vs ZWN0KGRhdGEtPmRybV9mZCArIDEsICZmZHMsIE5VTEwsIE5VTEwsICZ0aW1lb3V0KTsKKwl9IHdo aWxlIChyZXQgPCAwICYmIGVycm5vID09IEVJTlRSKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAxKTsK KwlyZXQgPSBkcm1IYW5kbGVFdmVudChkYXRhLT5kcm1fZmQsICZldmN0eCk7CisJaWd0X2Fzc2Vy dChyZXQgPT0gMCk7CisKKwlpZ3RfZGlzcGxheV91c2VfdW5pdmVyc2FsX2NvbW1pdHMoJmRhdGEt PmRpc3BsYXksIGZhbHNlKTsKKwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIE5VTEwpOworCXBh Z2VmbGlwX3Rlc3RfZmluaSgmdGVzdCwgb3V0cHV0KTsKK30KKworc3RhdGljIHZvaWQKK3J1bl90 ZXN0c19mb3JfcGlwZShkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlKQoreworCWlndF9vdXRw dXRfdCAqb3V0cHV0OworCisJaWd0X2Fzc2VydChkYXRhLT5kaXNwbGF5Lmhhc191bml2ZXJzYWxf cGxhbmVzKTsKKworCWlndF9zdWJ0ZXN0X2YoInVuaXZlcnNhbC1wbGFuZS1waXBlLSVjLWZ1bmN0 aW9uYWwiLCBwaXBlX25hbWUocGlwZSkpCisJCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRh dGEtPmRpc3BsYXksIG91dHB1dCkKKwkJCWZ1bmN0aW9uYWxfdGVzdF9waXBlKGRhdGEsIHBpcGUs IG91dHB1dCk7CisKKwlpZ3Rfc3VidGVzdF9mKCJ1bml2ZXJzYWwtcGxhbmUtcGlwZS0lYy1zYW5p dHkiLCBwaXBlX25hbWUocGlwZSkpCisJCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEt PmRpc3BsYXksIG91dHB1dCkKKwkJCXNhbml0eV90ZXN0X3BpcGUoZGF0YSwgcGlwZSwgb3V0cHV0 KTsKKworCWlndF9zdWJ0ZXN0X2YoImRpc2FibGUtcHJpbWFyeS12cy1mbGlwLXBpcGUtJWMiLCBw aXBlX25hbWUocGlwZSkpCisJCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRpc3Bs YXksIG91dHB1dCkKKwkJCXBhZ2VmbGlwX3Rlc3RfcGlwZShkYXRhLCBwaXBlLCBvdXRwdXQpOwor fQorCitzdGF0aWMgZGF0YV90IGRhdGE7CisKK2lndF9tYWluCit7CisKKwlpZ3Rfc2tpcF9vbl9z aW11bGF0aW9uKCk7CisKKwlpZ3RfZml4dHVyZSB7CisJCWRhdGEuZHJtX2ZkID0gZHJtX29wZW5f YW55KCk7CisKKwkJaWd0X3NldF92dF9ncmFwaGljc19tb2RlKCk7CisKKwkJaWd0X3JlcXVpcmVf cGlwZV9jcmMoKTsKKwkJaWd0X2Rpc3BsYXlfaW5pdCgmZGF0YS5kaXNwbGF5LCBkYXRhLmRybV9m ZCk7CisKKwkJaWd0X3JlcXVpcmUoZGF0YS5kaXNwbGF5Lmhhc191bml2ZXJzYWxfcGxhbmVzKTsK Kwl9CisKKwlmb3IgKGludCBwaXBlID0gMDsgcGlwZSA8IDM7IHBpcGUrKykKKwkJcnVuX3Rlc3Rz X2Zvcl9waXBlKCZkYXRhLCBwaXBlKTsKKworCWlndF9maXh0dXJlIHsKKwkJaWd0X2Rpc3BsYXlf ZmluaSgmZGF0YS5kaXNwbGF5KTsKKwl9Cit9Ci0tIAoxLjguNS4xCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=