From mboxrd@z Thu Jan 1 00:00:00 1970 From: Keith Packard Subject: [PATCH 8/8] Add DRI3+Present loader Date: Mon, 4 Nov 2013 18:23:28 -0800 Message-ID: <1383618208-21310-9-git-send-email-keithp@keithp.com> References: <1383618208-21310-1-git-send-email-keithp@keithp.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from keithp.com (home.keithp.com [63.227.221.253]) by gabe.freedesktop.org (Postfix) with ESMTP id 7C197EF525 for ; Mon, 4 Nov 2013 18:24:02 -0800 (PST) In-Reply-To: <1383618208-21310-1-git-send-email-keithp@keithp.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org To: mesa3d-dev@lists.freedesktop.org Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VXNlcyB0aGUgX19EUklpbWFnZSBsb2FkZXIgaW50ZXJmYWNlcy4KClNpZ25lZC1vZmYtYnk6IEtl aXRoIFBhY2thcmQgPGtlaXRocEBrZWl0aHAuY29tPgotLS0KIGNvbmZpZ3VyZS5hYyAgICAgICAg ICB8ICAgMTIgKy0KIHNyYy9nbHgvTWFrZWZpbGUuYW0gICB8ICAgIDIgKwogc3JjL2dseC9kcmkz X2NvbW1vbi5jIHwgIDE0NiArKysrKwogc3JjL2dseC9kcmkzX2dseC5jICAgIHwgMTcyMiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvZ2x4L2Ry aTNfcHJpdi5oICAgfCAgMTk5ICsrKysrKwogc3JjL2dseC9nbHhjbGllbnQuaCAgIHwgICAgMiAr CiBzcmMvZ2x4L2dseGV4dC5jICAgICAgfCAgICA2ICstCiA3IGZpbGVzIGNoYW5nZWQsIDIwODUg aW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvZ2x4 L2RyaTNfY29tbW9uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvZ2x4L2RyaTNfZ2x4LmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvZ2x4L2RyaTNfcHJpdi5oCgpkaWZmIC0tZ2l0IGEvY29uZmln dXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDBhMjUwNDcuLjA3NDM2OGMgMTAwNjQ0Ci0tLSBh L2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTM4LDYgKzM4LDkgQEAgTElCRFJN X05WVklFVVhfUkVRVUlSRUQ9Mi40LjMzCiBMSUJEUk1fTk9VVkVBVV9SRVFVSVJFRD0iMi40LjMz IGxpYmRybSA+PSAyLjQuNDEiCiBMSUJEUk1fRlJFRURSRU5PX1JFUVVJUkVEPTIuNC4zOQogRFJJ MlBST1RPX1JFUVVJUkVEPTIuNgorRFJJM1BST1RPX1JFUVVJUkVEPTEuMAorUFJFU0VOVFBST1RP X1JFUVVJUkVEPTEuMAorTElCVURFVl9SRVFVSVJFRD0xNTEKIEdMUFJPVE9fUkVRVUlSRUQ9MS40 LjE0CiBMSUJEUk1fWE9SR19SRVFVSVJFRD0yLjQuMjQKIExJQktNU19YT1JHX1JFUVVJUkVEPTEu MC4wCkBAIC04MjAsMTAgKzgyMywxMyBAQCB4eWVzbm8pCiAgICAgICAgIGZpCiAgICAgICAgIFBL R19DSEVDS19NT0RVTEVTKFtEUkkyUFJPVE9dLCBbZHJpMnByb3RvID49ICREUkkyUFJPVE9fUkVR VUlSRURdKQogICAgICAgICBHTF9QQ19SRVFfUFJJVj0iJEdMX1BDX1JFUV9QUklWIGxpYmRybSA+ PSAkTElCRFJNX1JFUVVJUkVEIgorICAgICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbRFJJM1BST1RP XSwgW2RyaTNwcm90byA+PSAkRFJJM1BST1RPX1JFUVVJUkVEXSkKKyAgICAgICAgUEtHX0NIRUNL X01PRFVMRVMoW1BSRVNFTlRQUk9UT10sIFtwcmVzZW50cHJvdG8gPj0gJFBSRVNFTlRQUk9UT19S RVFVSVJFRF0pCisgICAgICAgIFBLR19DSEVDS19NT0RVTEVTKFtMSUJVREVWXSwgW2xpYnVkZXYg Pj0gJExJQlVERVZfUkVRVUlSRURdKQogICAgIGZpCiAKICAgICAjIGZpbmQgdGhlIERSSSBkZXBz IGZvciBsaWJHTAotICAgIGRyaV9tb2R1bGVzPSJ4MTEgeGV4dCB4ZGFtYWdlIHhmaXhlcyB4MTEt eGNiIHhjYi1nbHggPj0gMS44LjEgeGNiLWRyaTIgPj0gMS44IgorICAgIGRyaV9tb2R1bGVzPSJ4 MTEgeGV4dCB4ZGFtYWdlIHhmaXhlcyB4MTEteGNiIHhjYi1nbHggPj0gMS44LjEgeGNiLWRyaTIg Pj0gMS44IHhjYi1kcmkzIHhjYi1wcmVzZW50IHhjYi1zeW5jIHhzaG1mZW5jZSIKIAogICAgICMg YWRkIHhmODZ2aWRtb2RlIGlmIGF2YWlsYWJsZQogICAgIFBLR19DSEVDS19NT0RVTEVTKFtYRjg2 VklETU9ERV0sIFt4eGY4NnZtXSwgSEFWRV9YRjg2VklETU9ERT15ZXMsIEhBVkVfWEY4NlZJRE1P REU9bm8pCkBAIC04MzMsOCArODM5LDggQEAgeHllc25vKQogCiAgICAgUEtHX0NIRUNLX01PRFVM RVMoW0RSSUdMXSwgWyRkcmlfbW9kdWxlc10pCiAgICAgR0xfUENfUkVRX1BSSVY9IiRHTF9QQ19S RVFfUFJJViAkZHJpX21vZHVsZXMiCi0gICAgWDExX0lOQ0xVREVTPSIkWDExX0lOQ0xVREVTICRE UklHTF9DRkxBR1MiCi0gICAgR0xfTElCX0RFUFM9IiREUklHTF9MSUJTIgorICAgIFgxMV9JTkNM VURFUz0iJFgxMV9JTkNMVURFUyAkRFJJR0xfQ0ZMQUdTICRMSUJVREVWX0NGTEFHUyIKKyAgICBH TF9MSUJfREVQUz0iJERSSUdMX0xJQlMgJExJQlVERVZfTElCUyIKIAogICAgICMgbmVlZCBEUk0g bGlicywgJFBUSFJFQURfTElCUywgZXRjLgogICAgIEdMX0xJQl9ERVBTPSIkR0xfTElCX0RFUFMg JExJQkRSTV9MSUJTIC1sbSAkUFRIUkVBRF9MSUJTICRETE9QRU5fTElCUyIKZGlmZiAtLWdpdCBh L3NyYy9nbHgvTWFrZWZpbGUuYW0gYi9zcmMvZ2x4L01ha2VmaWxlLmFtCmluZGV4IGYwMTcwOWIu Ljg1NDAyNWQgMTAwNjQ0Ci0tLSBhL3NyYy9nbHgvTWFrZWZpbGUuYW0KKysrIGIvc3JjL2dseC9N YWtlZmlsZS5hbQpAQCAtOTIsNiArOTIsOCBAQCBsaWJnbHhfbGFfU09VUkNFUyA9IFwKIAkgIGds eGhhc2guYyBcCiAJICBkcmkyX2dseC5jIFwKIAkgIGRyaTIuYyBcCisgICAgICAgICAgZHJpM19n bHguYyBcCisgICAgICAgICAgZHJpM19jb21tb24uYyBcCiAJICBhcHBsZWdsX2dseC5jCiAKIEdM X0xJQlMgPSBcCmRpZmYgLS1naXQgYS9zcmMvZ2x4L2RyaTNfY29tbW9uLmMgYi9zcmMvZ2x4L2Ry aTNfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc1OGY5Ngot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9nbHgvZHJpM19jb21tb24uYwpAQCAtMCwwICsxLDE0NiBA QAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDEzIEtlaXRoIFBhY2thcmQKKyAqCisgKiBQZXJtaXNz aW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3 YXJlIGFuZCBpdHMKKyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBn cmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0 CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRp bmcgZG9jdW1lbnRhdGlvbiwgYW5kCisgKiB0aGF0IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQg aG9sZGVycyBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRh aW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAor ICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgVGhlIGNvcHlyaWdodCBob2xkZXJzIG1ha2Ug bm8gcmVwcmVzZW50YXRpb25zCisgKiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0 d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMKKyAqIGlzIiB3aXRob3V0 IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKiBUSEUgQ09QWVJJR0hUIEhPTERF UlMgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwK KyAqIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUywgSU4gTk8KKyAqIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgorICogQ09OU0VRVUVOVElBTCBE QU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBV U0UsCisgKiBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBORUdMSUdFTkNFIE9SIE9USEVSCisgKiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFCisgKiBPRiBUSElT IFNPRlRXQVJFLgorICovCisKKy8qCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNyYy9l Z2wvZHJpdmVycy9kcmkyL2NvbW1vbi5jIHdoaWNoCisgKiBjYXJyaWVzIHRoZSBmb2xsb3dpbmcg Y29weXJpZ2h0OgorICogCisgKiBDb3B5cmlnaHQgwqkgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgor ICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29m dHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICog V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICog QXV0aG9yczoKKyAqICAgIEtyaXN0aWFuIEjDuGdzYmVyZyA8a3JoQGJpdHBsYW5ldC5uZXQ+Cisg KiAgICBCZW5qYW1pbiBGcmFuemtlIDxiZW5qYW1pbmZyYW56a2VAZ29vZ2xlbWFpbC5jb20+Cisg Ki8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRl IDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5o PgorI2luY2x1ZGUgPEdML2dsLmg+CisjaW5jbHVkZSAiZ2xhcGkuaCIKKyNpbmNsdWRlICJnbHhj bGllbnQuaCIKKyNpbmNsdWRlICJ4Zjg2ZHJpLmgiCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNs dWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5o PgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRl ICJ4Zjg2ZHJtLmgiCisjaW5jbHVkZSAiZHJpX2NvbW1vbi5oIgorI2luY2x1ZGUgImRyaTNfcHJp di5oIgorCisjZGVmaW5lIERSSVZFUl9NQVBfRFJJM19PTkxZCisjaW5jbHVkZSAicGNpX2lkcy9w Y2lfaWRfZHJpdmVyX21hcC5oIgorCisjaW5jbHVkZSA8bGlidWRldi5oPgorCitzdGF0aWMgc3Ry dWN0IHVkZXZfZGV2aWNlICoKK2RyaTNfdWRldl9kZXZpY2VfbmV3X2Zyb21fZmQoc3RydWN0IHVk ZXYgKnVkZXYsIGludCBmZCkKK3sKKyAgIHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2aWNlOworICAg c3RydWN0IHN0YXQgYnVmOworCisgICBpZiAoZnN0YXQoZmQsICZidWYpIDwgMCkgeworICAgICAg RXJyb3JNZXNzYWdlRigiRFJJMzogZmFpbGVkIHRvIHN0YXQgZmQgJWQiLCBmZCk7CisgICAgICBy ZXR1cm4gTlVMTDsKKyAgIH0KKworICAgZGV2aWNlID0gdWRldl9kZXZpY2VfbmV3X2Zyb21fZGV2 bnVtKHVkZXYsICdjJywgYnVmLnN0X3JkZXYpOworICAgaWYgKGRldmljZSA9PSBOVUxMKSB7Cisg ICAgICBFcnJvck1lc3NhZ2VGKCJEUkkzOiBjb3VsZCBub3QgY3JlYXRlIHVkZXYgZGV2aWNlIGZv ciBmZCAlZCIsIGZkKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgfQorCisgICByZXR1cm4gZGV2 aWNlOworfQorCitjaGFyICoKK2RyaTNfZ2V0X2RyaXZlcl9mb3JfZmQoaW50IGZkKQoreworICAg c3RydWN0IHVkZXYgKnVkZXY7CisgICBzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldmljZSwgKnBhcmVu dDsKKyAgIGNvbnN0IGNoYXIgKnBjaV9pZDsKKyAgIGNoYXIgKmRyaXZlciA9IE5VTEw7CisgICBp bnQgdmVuZG9yX2lkLCBjaGlwX2lkLCBpLCBqOworCisgICB1ZGV2ID0gdWRldl9uZXcoKTsKKyAg IGRldmljZSA9IGRyaTNfdWRldl9kZXZpY2VfbmV3X2Zyb21fZmQodWRldiwgZmQpOworICAgaWYg KGRldmljZSA9PSBOVUxMKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgIHBhcmVudCA9IHVkZXZf ZGV2aWNlX2dldF9wYXJlbnQoZGV2aWNlKTsKKyAgIGlmIChwYXJlbnQgPT0gTlVMTCkgeworICAg ICAgRXJyb3JNZXNzYWdlRigiRFJJMzogY291bGQgbm90IGdldCBwYXJlbnQgZGV2aWNlIik7Cisg ICAgICBnb3RvIG91dDsKKyAgIH0KKworICAgcGNpX2lkID0gdWRldl9kZXZpY2VfZ2V0X3Byb3Bl cnR5X3ZhbHVlKHBhcmVudCwgIlBDSV9JRCIpOworICAgaWYgKHBjaV9pZCA9PSBOVUxMIHx8Cisg ICAgICAgc3NjYW5mKHBjaV9pZCwgIiV4OiV4IiwgJnZlbmRvcl9pZCwgJmNoaXBfaWQpICE9IDIp IHsKKyAgICAgIEVycm9yTWVzc2FnZUYoIkRSSTM6IG1hbGZvcm1lZCBvciBubyBQQ0kgSUQiKTsK KyAgICAgIGdvdG8gb3V0OworICAgfQorCisgICBmb3IgKGkgPSAwOyBkcml2ZXJfbWFwW2ldLmRy aXZlcjsgaSsrKSB7CisgICAgICBpZiAodmVuZG9yX2lkICE9IGRyaXZlcl9tYXBbaV0udmVuZG9y X2lkKQorICAgICAgICAgY29udGludWU7CisgICAgICBpZiAoZHJpdmVyX21hcFtpXS5udW1fY2hp cHNfaWRzID09IC0xKSB7CisgICAgICAgICBkcml2ZXIgPSBzdHJkdXAoZHJpdmVyX21hcFtpXS5k cml2ZXIpOworICAgICAgICAgZ290byBvdXQ7CisgICAgICB9CisKKyAgICAgIGZvciAoaiA9IDA7 IGogPCBkcml2ZXJfbWFwW2ldLm51bV9jaGlwc19pZHM7IGorKykKKyAgICAgICAgIGlmIChkcml2 ZXJfbWFwW2ldLmNoaXBfaWRzW2pdID09IGNoaXBfaWQpIHsKKyAgICAgICAgICAgIGRyaXZlciA9 IHN0cmR1cChkcml2ZXJfbWFwW2ldLmRyaXZlcik7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAg ICAgICAgIH0KKyAgIH0KKworb3V0OgorICAgdWRldl9kZXZpY2VfdW5yZWYoZGV2aWNlKTsKKyAg IHVkZXZfdW5yZWYodWRldik7CisKKyAgIHJldHVybiBkcml2ZXI7Cit9CmRpZmYgLS1naXQgYS9z cmMvZ2x4L2RyaTNfZ2x4LmMgYi9zcmMvZ2x4L2RyaTNfZ2x4LmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uNDAyMWJhYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9nbHgvZHJp M19nbHguYwpAQCAtMCwwICsxLDE3MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxMyBLZWl0 aCBQYWNrYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJp YnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBkb2N1bWVudGF0aW9uIGZv ciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhh dAorICogdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5k IHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZAorICogdGhhdCB0 aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNp bmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29m dHdhcmUgd2l0aG91dCBzcGVjaWZpYywKKyAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIFRo ZSBjb3B5cmlnaHQgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucworICogYWJvdXQgdGhl IHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJv dmlkZWQgImFzCisgKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisg KgorICogVEhFIENPUFlSSUdIVCBIT0xERVJTIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIFdJVEgg UkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCisgKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PCisgKiBFVkVOVCBTSEFM TCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJF Q1QgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVS IFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAorICogREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgorICogVE9SVElP VVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBP UiBQRVJGT1JNQU5DRQorICogT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisvKgorICogUG9ydGlv bnMgb2YgdGhpcyBjb2RlIHdlcmUgYWRhcHRlZCBmcm9tIGRyaTJfZ2x4LmMgd2hpY2ggY2Fycmll cyB0aGUKKyAqIGZvbGxvd2luZyBjb3B5cmlnaHQ6CisgKgorICogQ29weXJpZ2h0IMKpIDIwMDgg UmVkIEhhdCwgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0LQorICog d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dAorICogbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBv ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5 cmlnaHQKKyAqIG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4g YWxsIGNvcGllcyBvZiB0aGUgU29mdC0KKyAqIHdhcmUgYW5kIHRoYXQgYm90aCB0aGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uCisgKiBub3RpY2UgYXBwZWFy IGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICog T1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUwtCisgKiBJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkKKyAqIFJJR0hUUy4gSU4gTk8gRVZF TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgSE9MREVSUyBJTkNMVURFRCBJTgorICog VEhJUyBOT1RJQ0UgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElS RUNUIE9SIENPTlNFLQorICogUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNP RVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwKKyAqIERBVEEgT1IgUFJPRklUUywgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKKyAqIFRP UlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBV U0UgT1IgUEVSRk9SLQorICogTUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKiBFeGNlcHQg YXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBhIGNvcHlyaWdodCBob2xk ZXIgc2hhbGwKKyAqIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBw cm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3IKKyAqIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdh cmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gb2YKKyAqIHRoZSBjb3B5cmln aHQgaG9sZGVyLgorICoKKyAqIEF1dGhvcnM6CisgKiAgIEtyaXN0aWFuIEjDuGdzYmVyZyAoa3Jo QHJlZGhhdC5jb20pCisgKi8KKworI2lmIGRlZmluZWQoR0xYX0RJUkVDVF9SRU5ERVJJTkcpICYm ICFkZWZpbmVkKEdMWF9VU0VfQVBQTEVHTCkKKworI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5j bHVkZSA8WDExL2V4dGVuc2lvbnMvWGZpeGVzLmg+CisjaW5jbHVkZSA8WDExL1hsaWIteGNiLmg+ CisjaW5jbHVkZSA8WDExL3hzaG1mZW5jZS5oPgorI2luY2x1ZGUgPHhjYi94Y2IuaD4KKyNpbmNs dWRlIDx4Y2IvZHJpMy5oPgorI2luY2x1ZGUgPHhjYi9wcmVzZW50Lmg+CisjaW5jbHVkZSA8R0wv Z2wuaD4KKyNpbmNsdWRlICJnbGFwaS5oIgorI2luY2x1ZGUgImdseGNsaWVudC5oIgorI2luY2x1 ZGUgInhmODZkcmkuaCIKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+Cisj aW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lz L21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjaW5jbHVkZSAieGY4NmRybS5oIgor I2luY2x1ZGUgImRyaV9jb21tb24uaCIKKyNpbmNsdWRlICJkcmkzX3ByaXYuaCIKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBnbHhfY29udGV4dF92dGFibGUgZHJpM19jb250ZXh0X3Z0YWJsZTsKKwor c3RhdGljIGlubGluZSB2b2lkCitkcmkzX2ZlbmNlX3Jlc2V0KHhjYl9jb25uZWN0aW9uX3QgKmMs IHN0cnVjdCBkcmkzX2J1ZmZlciAqYnVmZmVyKSB7CisgICB4c2htZmVuY2VfcmVzZXQoYnVmZmVy LT5zaG1fZmVuY2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RyaTNfZmVuY2Vfc2V0KHN0 cnVjdCBkcmkzX2J1ZmZlciAqYnVmZmVyKSB7CisgICB4c2htZmVuY2VfdHJpZ2dlcihidWZmZXIt PnNobV9mZW5jZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZHJpM19mZW5jZV90cmlnZ2Vy KHhjYl9jb25uZWN0aW9uX3QgKmMsIHN0cnVjdCBkcmkzX2J1ZmZlciAqYnVmZmVyKSB7CisgICB4 Y2Jfc3luY190cmlnZ2VyX2ZlbmNlKGMsIGJ1ZmZlci0+c3luY19mZW5jZSk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZAorZHJpM19mZW5jZV9hd2FpdCh4Y2JfY29ubmVjdGlvbl90ICpjLCBzdHJ1 Y3QgZHJpM19idWZmZXIgKmJ1ZmZlcikgeworICAgeGNiX2ZsdXNoKGMpOworICAgeHNobWZlbmNl X2F3YWl0KGJ1ZmZlci0+c2htX2ZlbmNlKTsKK30KKworc3RhdGljIGlubGluZSBCb29sCitkcmkz X2ZlbmNlX3RyaWdnZXJlZChzdHJ1Y3QgZHJpM19idWZmZXIgKmJ1ZmZlcikgeworICAgcmV0dXJu IHhzaG1mZW5jZV9xdWVyeShidWZmZXItPnNobV9mZW5jZSk7Cit9CisKK3N0YXRpYyB2b2lkCitk cmkzX2Rlc3Ryb3lfY29udGV4dChzdHJ1Y3QgZ2x4X2NvbnRleHQgKmNvbnRleHQpCit7CisgICBz dHJ1Y3QgZHJpM19jb250ZXh0ICpwY3AgPSAoc3RydWN0IGRyaTNfY29udGV4dCAqKSBjb250ZXh0 OworICAgc3RydWN0IGRyaTNfc2NyZWVuICpwc2MgPSAoc3RydWN0IGRyaTNfc2NyZWVuICopIGNv bnRleHQtPnBzYzsKKworICAgZHJpUmVsZWFzZURyYXdhYmxlcygmcGNwLT5iYXNlKTsKKworICAg ZnJlZSgoY2hhciAqKSBjb250ZXh0LT5leHRlbnNpb25zKTsKKworICAgKCpwc2MtPmNvcmUtPmRl c3Ryb3lDb250ZXh0KSAocGNwLT5kcmlDb250ZXh0KTsKKworICAgZnJlZShwY3ApOworfQorCitz dGF0aWMgQm9vbAorZHJpM19iaW5kX2NvbnRleHQoc3RydWN0IGdseF9jb250ZXh0ICpjb250ZXh0 LCBzdHJ1Y3QgZ2x4X2NvbnRleHQgKm9sZCwKKwkJICBHTFhEcmF3YWJsZSBkcmF3LCBHTFhEcmF3 YWJsZSByZWFkKQoreworICAgc3RydWN0IGRyaTNfY29udGV4dCAqcGNwID0gKHN0cnVjdCBkcmkz X2NvbnRleHQgKikgY29udGV4dDsKKyAgIHN0cnVjdCBkcmkzX3NjcmVlbiAqcHNjID0gKHN0cnVj dCBkcmkzX3NjcmVlbiAqKSBwY3AtPmJhc2UucHNjOworICAgc3RydWN0IGRyaTNfZHJhd2FibGUg KnBkcmF3LCAqcHJlYWQ7CisKKyAgIHBkcmF3ID0gKHN0cnVjdCBkcmkzX2RyYXdhYmxlICopIGRy aUZldGNoRHJhd2FibGUoY29udGV4dCwgZHJhdyk7CisgICBwcmVhZCA9IChzdHJ1Y3QgZHJpM19k cmF3YWJsZSAqKSBkcmlGZXRjaERyYXdhYmxlKGNvbnRleHQsIHJlYWQpOworCisgICBkcmlSZWxl YXNlRHJhd2FibGVzKCZwY3AtPmJhc2UpOworCisgICBpZiAocGRyYXcgPT0gTlVMTCB8fCBwcmVh ZCA9PSBOVUxMKQorICAgICAgcmV0dXJuIEdMWEJhZERyYXdhYmxlOworCisgICBpZiAoISgqcHNj LT5jb3JlLT5iaW5kQ29udGV4dCkgKHBjcC0+ZHJpQ29udGV4dCwKKwkJCQkgICBwZHJhdy0+ZHJp RHJhd2FibGUsIHByZWFkLT5kcmlEcmF3YWJsZSkpCisgICAgICByZXR1cm4gR0xYQmFkQ29udGV4 dDsKKworICAgcmV0dXJuIFN1Y2Nlc3M7Cit9CisKK3N0YXRpYyB2b2lkCitkcmkzX3VuYmluZF9j b250ZXh0KHN0cnVjdCBnbHhfY29udGV4dCAqY29udGV4dCwgc3RydWN0IGdseF9jb250ZXh0ICpu ZXcpCit7CisgICBzdHJ1Y3QgZHJpM19jb250ZXh0ICpwY3AgPSAoc3RydWN0IGRyaTNfY29udGV4 dCAqKSBjb250ZXh0OworICAgc3RydWN0IGRyaTNfc2NyZWVuICpwc2MgPSAoc3RydWN0IGRyaTNf c2NyZWVuICopIHBjcC0+YmFzZS5wc2M7CisKKyAgICgqcHNjLT5jb3JlLT51bmJpbmRDb250ZXh0 KSAocGNwLT5kcmlDb250ZXh0KTsKK30KKworc3RhdGljIHN0cnVjdCBnbHhfY29udGV4dCAqCitk cmkzX2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBnbHhfc2NyZWVuICpiYXNlLAorCQkgICAgc3RydWN0 IGdseF9jb25maWcgKmNvbmZpZ19iYXNlLAorCQkgICAgc3RydWN0IGdseF9jb250ZXh0ICpzaGFy ZUxpc3QsIGludCByZW5kZXJUeXBlKQoreworICAgc3RydWN0IGRyaTNfY29udGV4dCAqcGNwLCAq cGNwX3NoYXJlZDsKKyAgIHN0cnVjdCBkcmkzX3NjcmVlbiAqcHNjID0gKHN0cnVjdCBkcmkzX3Nj cmVlbiAqKSBiYXNlOworICAgX19HTFhEUkljb25maWdQcml2YXRlICpjb25maWcgPSAoX19HTFhE Ukljb25maWdQcml2YXRlICopIGNvbmZpZ19iYXNlOworICAgX19EUkljb250ZXh0ICpzaGFyZWQg PSBOVUxMOworCisgICBpZiAoc2hhcmVMaXN0KSB7CisgICAgICAvKiBJZiB0aGUgc2hhcmVMaXN0 IGNvbnRleHQgaXMgbm90IGEgRFJJMyBjb250ZXh0LCB3ZSBjYW5ub3QgcG9zc2libHkKKyAgICAg ICAqIGNyZWF0ZSBhIERSSTMgY29udGV4dCB0aGF0IHNoYXJlcyBpdC4KKyAgICAgICAqLworICAg ICAgaWYgKHNoYXJlTGlzdC0+dnRhYmxlLT5kZXN0cm95ICE9IGRyaTNfZGVzdHJveV9jb250ZXh0 KSB7CisJIHJldHVybiBOVUxMOworICAgICAgfQorCisgICAgICBwY3Bfc2hhcmVkID0gKHN0cnVj dCBkcmkzX2NvbnRleHQgKikgc2hhcmVMaXN0OworICAgICAgc2hhcmVkID0gcGNwX3NoYXJlZC0+ ZHJpQ29udGV4dDsKKyAgIH0KKworICAgcGNwID0gY2FsbG9jKDEsIHNpemVvZiAqcGNwKTsKKyAg IGlmIChwY3AgPT0gTlVMTCkKKyAgICAgIHJldHVybiBOVUxMOworCisgICBpZiAoIWdseF9jb250 ZXh0X2luaXQoJnBjcC0+YmFzZSwgJnBzYy0+YmFzZSwgJmNvbmZpZy0+YmFzZSkpIHsKKyAgICAg IGZyZWUocGNwKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgfQorCisgICBwY3AtPmRyaUNvbnRl eHQgPQorICAgICAgKCpwc2MtPmltYWdlX2RyaXZlci0+Y3JlYXRlTmV3Q29udGV4dCkgKHBzYy0+ ZHJpU2NyZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbmZpZy0+ZHJpQ29uZmlnLCBzaGFyZWQsIHBjcCk7CisKKyAgIGlmIChwY3AtPmRyaUNvbnRl eHQgPT0gTlVMTCkgeworICAgICAgZnJlZShwY3ApOworICAgICAgcmV0dXJuIE5VTEw7CisgICB9 CisKKyAgIHBjcC0+YmFzZS52dGFibGUgPSAmZHJpM19jb250ZXh0X3Z0YWJsZTsKKworICAgcmV0 dXJuICZwY3AtPmJhc2U7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ2x4X2NvbnRleHQgKgorZHJpM19j cmVhdGVfY29udGV4dF9hdHRyaWJzKHN0cnVjdCBnbHhfc2NyZWVuICpiYXNlLAorCQkJICAgIHN0 cnVjdCBnbHhfY29uZmlnICpjb25maWdfYmFzZSwKKwkJCSAgICBzdHJ1Y3QgZ2x4X2NvbnRleHQg KnNoYXJlTGlzdCwKKwkJCSAgICB1bnNpZ25lZCBudW1fYXR0cmlicywKKwkJCSAgICBjb25zdCB1 aW50MzJfdCAqYXR0cmlicywKKwkJCSAgICB1bnNpZ25lZCAqZXJyb3IpCit7CisgICBzdHJ1Y3Qg ZHJpM19jb250ZXh0ICpwY3AgPSBOVUxMOworICAgc3RydWN0IGRyaTNfY29udGV4dCAqcGNwX3No YXJlZCA9IE5VTEw7CisgICBzdHJ1Y3QgZHJpM19zY3JlZW4gKnBzYyA9IChzdHJ1Y3QgZHJpM19z Y3JlZW4gKikgYmFzZTsKKyAgIF9fR0xYRFJJY29uZmlnUHJpdmF0ZSAqY29uZmlnID0gKF9fR0xY RFJJY29uZmlnUHJpdmF0ZSAqKSBjb25maWdfYmFzZTsKKyAgIF9fRFJJY29udGV4dCAqc2hhcmVk ID0gTlVMTDsKKworICAgdWludDMyX3QgbWlub3JfdmVyID0gMTsKKyAgIHVpbnQzMl90IG1ham9y X3ZlciA9IDI7CisgICB1aW50MzJfdCBmbGFncyA9IDA7CisgICB1bnNpZ25lZCBhcGk7CisgICBp bnQgcmVzZXQgPSBfX0RSSV9DVFhfUkVTRVRfTk9fTk9USUZJQ0FUSU9OOworICAgdWludDMyX3Qg Y3R4X2F0dHJpYnNbMiAqIDVdOworICAgdW5zaWduZWQgbnVtX2N0eF9hdHRyaWJzID0gMDsKKyAg IHVpbnQzMl90IHJlbmRlcl90eXBlOworCisgICAvKiBSZW1hcCB0aGUgR0xYIHRva2VucyB0byBE UkkyIHRva2Vucy4KKyAgICAqLworICAgaWYgKCFkcmkyX2NvbnZlcnRfZ2x4X2F0dHJpYnMobnVt X2F0dHJpYnMsIGF0dHJpYnMsCisJCQkJICZtYWpvcl92ZXIsICZtaW5vcl92ZXIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVuZGVyX3R5cGUsICZmbGFncywgJmFwaSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXNldCwgZXJyb3IpKQorICAgICAgZ290 byBlcnJvcl9leGl0OworCisgICAvKiBDaGVjayB0aGUgcmVuZGVyVHlwZSB2YWx1ZSAqLworICAg aWYgKCF2YWxpZGF0ZV9yZW5kZXJUeXBlX2FnYWluc3RfY29uZmlnKGNvbmZpZ19iYXNlLCByZW5k ZXJfdHlwZSkpCisgICAgICAgZ290byBlcnJvcl9leGl0OworCisgICBpZiAoc2hhcmVMaXN0KSB7 CisgICAgICBwY3Bfc2hhcmVkID0gKHN0cnVjdCBkcmkzX2NvbnRleHQgKikgc2hhcmVMaXN0Owor ICAgICAgc2hhcmVkID0gcGNwX3NoYXJlZC0+ZHJpQ29udGV4dDsKKyAgIH0KKworICAgcGNwID0g Y2FsbG9jKDEsIHNpemVvZiAqcGNwKTsKKyAgIGlmIChwY3AgPT0gTlVMTCkgeworICAgICAgKmVy cm9yID0gX19EUklfQ1RYX0VSUk9SX05PX01FTU9SWTsKKyAgICAgIGdvdG8gZXJyb3JfZXhpdDsK KyAgIH0KKworICAgaWYgKCFnbHhfY29udGV4dF9pbml0KCZwY3AtPmJhc2UsICZwc2MtPmJhc2Us ICZjb25maWctPmJhc2UpKQorICAgICAgZ290byBlcnJvcl9leGl0OworCisgICBjdHhfYXR0cmli c1tudW1fY3R4X2F0dHJpYnMrK10gPSBfX0RSSV9DVFhfQVRUUklCX01BSk9SX1ZFUlNJT047Cisg ICBjdHhfYXR0cmlic1tudW1fY3R4X2F0dHJpYnMrK10gPSBtYWpvcl92ZXI7CisgICBjdHhfYXR0 cmlic1tudW1fY3R4X2F0dHJpYnMrK10gPSBfX0RSSV9DVFhfQVRUUklCX01JTk9SX1ZFUlNJT047 CisgICBjdHhfYXR0cmlic1tudW1fY3R4X2F0dHJpYnMrK10gPSBtaW5vcl92ZXI7CisKKyAgIC8q IE9ubHkgc2VuZCBhIHZhbHVlIHdoZW4gdGhlIG5vbi1kZWZhdWx0IHZhbHVlIGlzIHJlcXVlc3Rl ZC4gIEJ5IGRvaW5nCisgICAgKiB0aGlzIHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgdGhlIGRyaXZl cidzIERSSTMgdmVyc2lvbiBiZWZvcmUgc2VuZGluZyB0aGUKKyAgICAqIGRlZmF1bHQgdmFsdWUu CisgICAgKi8KKyAgIGlmIChyZXNldCAhPSBfX0RSSV9DVFhfUkVTRVRfTk9fTk9USUZJQ0FUSU9O KSB7CisgICAgICBjdHhfYXR0cmlic1tudW1fY3R4X2F0dHJpYnMrK10gPSBfX0RSSV9DVFhfQVRU UklCX1JFU0VUX1NUUkFURUdZOworICAgICAgY3R4X2F0dHJpYnNbbnVtX2N0eF9hdHRyaWJzKytd ID0gcmVzZXQ7CisgICB9CisKKyAgIGlmIChmbGFncyAhPSAwKSB7CisgICAgICBjdHhfYXR0cmli c1tudW1fY3R4X2F0dHJpYnMrK10gPSBfX0RSSV9DVFhfQVRUUklCX0ZMQUdTOworCisgICAgICAv KiBUaGUgY3VycmVudCBfX0RSSV9DVFhfRkxBR18qIHZhbHVlcyBhcmUgaWRlbnRpY2FsIHRvIHRo ZQorICAgICAgICogR0xYX0NPTlRFWFRfKl9CSVQgdmFsdWVzLgorICAgICAgICovCisgICAgICBj dHhfYXR0cmlic1tudW1fY3R4X2F0dHJpYnMrK10gPSBmbGFnczsKKyAgIH0KKworICAgcGNwLT5k cmlDb250ZXh0ID0KKyAgICAgICgqcHNjLT5pbWFnZV9kcml2ZXItPmNyZWF0ZUNvbnRleHRBdHRy aWJzKSAocHNjLT5kcmlTY3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFwaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uZmlnLT5kcmlDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2N0eF9hdHRyaWJzIC8gMiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4X2F0dHJpYnMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY3Ap OworCisgICBpZiAocGNwLT5kcmlDb250ZXh0ID09IE5VTEwpCisgICAgICBnb3RvIGVycm9yX2V4 aXQ7CisKKyAgIHBjcC0+YmFzZS52dGFibGUgPSAmZHJpM19jb250ZXh0X3Z0YWJsZTsKKworICAg cmV0dXJuICZwY3AtPmJhc2U7CisKK2Vycm9yX2V4aXQ6CisgICBmcmVlKHBjcCk7CisKKyAgIHJl dHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorZHJpM19kZXN0cm95X2RyYXdhYmxlKF9fR0xY RFJJZHJhd2FibGUgKmJhc2UpCit7CisgICBzdHJ1Y3QgZHJpM19zY3JlZW4gKnBzYyA9IChzdHJ1 Y3QgZHJpM19zY3JlZW4gKikgYmFzZS0+cHNjOworICAgc3RydWN0IGRyaTNfZHJhd2FibGUgKnBk cmF3ID0gKHN0cnVjdCBkcmkzX2RyYXdhYmxlICopIGJhc2U7CisKKyAgICgqcHNjLT5jb3JlLT5k ZXN0cm95RHJhd2FibGUpIChwZHJhdy0+ZHJpRHJhd2FibGUpOworCisgICBmcmVlKHBkcmF3KTsK K30KKworc3RhdGljIF9fR0xYRFJJZHJhd2FibGUgKgorZHJpM19jcmVhdGVfZHJhd2FibGUoc3Ry dWN0IGdseF9zY3JlZW4gKmJhc2UsIFhJRCB4RHJhd2FibGUsCisgICAgICAgICAgICAgICAgICAg ICBHTFhEcmF3YWJsZSBkcmF3YWJsZSwgc3RydWN0IGdseF9jb25maWcgKmNvbmZpZ19iYXNlKQor eworICAgc3RydWN0IGRyaTNfZHJhd2FibGUgKnBkcmF3OworICAgc3RydWN0IGRyaTNfc2NyZWVu ICpwc2MgPSAoc3RydWN0IGRyaTNfc2NyZWVuICopIGJhc2U7CisgICBfX0dMWERSSWNvbmZpZ1By aXZhdGUgKmNvbmZpZyA9IChfX0dMWERSSWNvbmZpZ1ByaXZhdGUgKikgY29uZmlnX2Jhc2U7Cisg ICBHTGludCB2YmxhbmtfbW9kZSA9IERSSV9DT05GX1ZCTEFOS19ERUZfSU5URVJWQUxfMTsKKwor ICAgcGRyYXcgPSBjYWxsb2MoMSwgc2l6ZW9mKCpwZHJhdykpOworICAgaWYgKCFwZHJhdykKKyAg ICAgIHJldHVybiBOVUxMOworCisgICBwZHJhdy0+YmFzZS5kZXN0cm95RHJhd2FibGUgPSBkcmkz X2Rlc3Ryb3lfZHJhd2FibGU7CisgICBwZHJhdy0+YmFzZS54RHJhd2FibGUgPSB4RHJhd2FibGU7 CisgICBwZHJhdy0+YmFzZS5kcmF3YWJsZSA9IGRyYXdhYmxlOworICAgcGRyYXctPmJhc2UucHNj ID0gJnBzYy0+YmFzZTsKKy8vICAgcGRyYXctPmJ1ZmZlckNvdW50ID0gMDsKKyAgIHBkcmF3LT5z d2FwX2ludGVydmFsID0gMTsgLyogZGVmYXVsdCBtYXkgYmUgb3ZlcnJpZGRlbiBiZWxvdyAqLwor ICAgcGRyYXctPmhhdmVfYmFjayA9IDA7CisgICBwZHJhdy0+aGF2ZV9mYWtlX2Zyb250ID0gMDsK KworICAgaWYgKHBzYy0+Y29uZmlnKQorICAgICAgcHNjLT5jb25maWctPmNvbmZpZ1F1ZXJ5aShw c2MtPmRyaVNjcmVlbiwKKwkJCQkidmJsYW5rX21vZGUiLCAmdmJsYW5rX21vZGUpOworCisgICBz d2l0Y2ggKHZibGFua19tb2RlKSB7CisgICBjYXNlIERSSV9DT05GX1ZCTEFOS19ORVZFUjoKKyAg IGNhc2UgRFJJX0NPTkZfVkJMQU5LX0RFRl9JTlRFUlZBTF8wOgorICAgICAgcGRyYXctPnN3YXBf aW50ZXJ2YWwgPSAwOworICAgICAgYnJlYWs7CisgICBjYXNlIERSSV9DT05GX1ZCTEFOS19ERUZf SU5URVJWQUxfMToKKyAgIGNhc2UgRFJJX0NPTkZfVkJMQU5LX0FMV0FZU19TWU5DOgorICAgZGVm YXVsdDoKKyAgICAgIHBkcmF3LT5zd2FwX2ludGVydmFsID0gMTsKKyAgICAgIGJyZWFrOworICAg fQorCisgICAodm9pZCkgX19nbFhJbml0aWFsaXplKHBzYy0+YmFzZS5kcHkpOworCisgICAvKiBD cmVhdGUgYSBuZXcgZHJhd2FibGUgKi8KKyAgIHBkcmF3LT5kcmlEcmF3YWJsZSA9CisgICAgICAo KnBzYy0+aW1hZ2VfZHJpdmVyLT5jcmVhdGVOZXdEcmF3YWJsZSkgKHBzYy0+ZHJpU2NyZWVuLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmRy aUNvbmZpZywgcGRyYXcpOworCisgICBpZiAoIXBkcmF3LT5kcmlEcmF3YWJsZSkgeworICAgICAg ZnJlZShwZHJhdyk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgIH0KKworICAgLyoKKyAgICAqIE1h a2Ugc3VyZSBzZXJ2ZXIgaGFzIHRoZSBzYW1lIHN3YXAgaW50ZXJ2YWwgd2UgZG8gZm9yIHRoZSBu ZXcKKyAgICAqIGRyYXdhYmxlLgorICAgICovCisgICBpZiAocHNjLT52dGFibGUuc2V0U3dhcElu dGVydmFsKQorICAgICAgcHNjLT52dGFibGUuc2V0U3dhcEludGVydmFsKCZwZHJhdy0+YmFzZSwg cGRyYXctPnN3YXBfaW50ZXJ2YWwpOworCisgICByZXR1cm4gJnBkcmF3LT5iYXNlOworfQorCitz dGF0aWMgdm9pZAorcHJlc2VudF9oYW5kbGVfc3BlY2lhbF9ldmVudChzdHJ1Y3QgZHJpM19kcmF3 YWJsZSAqcHJpdiwgeGNiX3ByZXNlbnRfZ2VuZXJpY19ldmVudF90ICpnZSkKK3sKKyAgIHN3aXRj aCAoZ2UtPmV2dHlwZSkgeworICAgY2FzZSBYQ0JfUFJFU0VOVF9DT05GSUdVUkVfTk9USUZZOiB7 CisgICAgICB4Y2JfcHJlc2VudF9jb25maWd1cmVfbm90aWZ5X2V2ZW50X3QgKmNlID0gKHZvaWQg KikgZ2U7CisKKyAgICAgIHByaXYtPndpZHRoID0gY2UtPndpZHRoOworICAgICAgcHJpdi0+aGVp Z2h0ID0gY2UtPmhlaWdodDsKKyAgICAgIGJyZWFrOworICAgfQorICAgY2FzZSBYQ0JfUFJFU0VO VF9DT01QTEVURV9OT1RJRlk6IHsKKyAgICAgIHhjYl9wcmVzZW50X2NvbXBsZXRlX25vdGlmeV9l dmVudF90ICpjZSA9ICh2b2lkICopIGdlOworCisgICAgICBpZiAoY2UtPmtpbmQgPT0gWENCX1BS RVNFTlRfQ09NUExFVEVfS0lORF9QSVhNQVApCisgICAgICAgICBwcml2LT5wcmVzZW50X2V2ZW50 X3NlcmlhbCA9IGNlLT5zZXJpYWw7CisgICAgICBlbHNlCisgICAgICAgICBwcml2LT5wcmVzZW50 X21zY19ldmVudF9zZXJpYWwgPSBjZS0+c2VyaWFsOworICAgICAgcHJpdi0+dXN0ID0gY2UtPnVz dDsKKyAgICAgIHByaXYtPm1zYyA9IGNlLT5tc2M7CisgICAgICBicmVhazsKKyAgIH0KKyAgIGNh c2UgWENCX1BSRVNFTlRfRVZFTlRfSURMRV9OT1RJRlk6IHsKKyAgICAgIHhjYl9wcmVzZW50X2lk bGVfbm90aWZ5X2V2ZW50X3QgKmllID0gKHZvaWQgKikgZ2U7CisgICAgICBpbnQgYjsKKworICAg ICAgZm9yIChiID0gMDsgYiA8IHNpemVvZiAocHJpdi0+YnVmZmVycykgLyBzaXplb2YgKHByaXYt PmJ1ZmZlcnNbMF0pOyBiKyspIHsKKyAgICAgICAgIHN0cnVjdCBkcmkzX2J1ZmZlciAgICAgICAg KmJ1ZiA9IHByaXYtPmJ1ZmZlcnNbYl07CisKKyAgICAgICAgIGlmIChidWYgJiYgYnVmLT5waXht YXAgPT0gaWUtPnBpeG1hcCkgeworICAgICAgICAgICAgYnVmLT5idXN5ID0gMDsKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICB9CisgICB9 CisgICBmcmVlKGdlKTsKK30KKworc3RhdGljIGludAorZHJpM193YWl0X2Zvcl9tc2MoX19HTFhE UklkcmF3YWJsZSAqcGRyYXcsIGludDY0X3QgdGFyZ2V0X21zYywgaW50NjRfdCBkaXZpc29yLAor ICAgICAgICAgICAgICAgICAgaW50NjRfdCByZW1haW5kZXIsIGludDY0X3QgKnVzdCwgaW50NjRf dCAqbXNjLCBpbnQ2NF90ICpzYmMpCit7CisgICB4Y2JfY29ubmVjdGlvbl90ICpjID0gWEdldFhD QkNvbm5lY3Rpb24ocGRyYXctPnBzYy0+ZHB5KTsKKyAgIHN0cnVjdCBkcmkzX2RyYXdhYmxlICpw cml2ID0gKHN0cnVjdCBkcmkzX2RyYXdhYmxlICopIHBkcmF3OworICAgeGNiX2dlbmVyaWNfZXZl bnRfdCAqZXY7CisgICB4Y2JfcHJlc2VudF9nZW5lcmljX2V2ZW50X3QgKmdlOworCisgICAvKiBB c2sgZm9yIHRoZSBhbiBldmVudCBmb3IgdGhlIHRhcmdldCBNU0MgKi8KKyAgICsrcHJpdi0+cHJl c2VudF9tc2NfcmVxdWVzdF9zZXJpYWw7CisgICB4Y2JfcHJlc2VudF9ub3RpZnlfbXNjKGMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmJhc2UueERyYXdhYmxlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICBwcml2LT5wcmVzZW50X21zY19yZXF1ZXN0X3NlcmlhbCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X21zYywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgZGl2aXNvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluZGVyKTsKKworICAg eGNiX2ZsdXNoKGMpOworCisgICAvKiBXYWl0IGZvciB0aGUgZXZlbnQgKi8KKyAgIGlmIChwcml2 LT5zcGVjaWFsX2V2ZW50KSB7CisgICAgICB3aGlsZSAocHJpdi0+cHJlc2VudF9tc2NfcmVxdWVz dF9zZXJpYWwgIT0gcHJpdi0+cHJlc2VudF9tc2NfZXZlbnRfc2VyaWFsKSB7CisgICAgICAgICBl diA9IHhjYl93YWl0X2Zvcl9zcGVjaWFsX2V2ZW50KGMsIHByaXYtPnNwZWNpYWxfZXZlbnQpOwor ICAgICAgICAgaWYgKCFldikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgZ2UgPSAodm9p ZCAqKSBldjsKKyAgICAgICAgIHByZXNlbnRfaGFuZGxlX3NwZWNpYWxfZXZlbnQocHJpdiwgZ2Up OworICAgICAgfQorICAgfQorCisgICAqdXN0ID0gcHJpdi0+dXN0OworICAgKm1zYyA9IHByaXYt Pm1zYzsKKworICAgKnNiYyA9IHByaXYtPnNiYzsKKworICAgcmV0dXJuIDE7Cit9CisKK3N0YXRp YyBpbnQKK2RyaTNfZHJhd2FibGVfZ2V0X21zYyhzdHJ1Y3QgZ2x4X3NjcmVlbiAqcHNjLCBfX0dM WERSSWRyYXdhYmxlICpwZHJhdywKKyAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90ICp1c3Qs IGludDY0X3QgKm1zYywgaW50NjRfdCAqc2JjKQoreworICAgcmV0dXJuIGRyaTNfd2FpdF9mb3Jf bXNjKHBkcmF3LCAwLCAwLCAwLCB1c3QsIG1zYyxzYmMpOworfQorCitzdGF0aWMgaW50Citkcmkz X3dhaXRfZm9yX3NiYyhfX0dMWERSSWRyYXdhYmxlICpwZHJhdywgaW50NjRfdCB0YXJnZXRfc2Jj LCBpbnQ2NF90ICp1c3QsCisgICAgICAgICAgICAgICAgICBpbnQ2NF90ICptc2MsIGludDY0X3Qg KnNiYykKK3sKKyAgIHN0cnVjdCBkcmkzX2RyYXdhYmxlICpwcml2ID0gKHN0cnVjdCBkcmkzX2Ry YXdhYmxlICopIHBkcmF3OworCisgICB3aGlsZSAocHJpdi0+c2JjIDwgdGFyZ2V0X3NiYykgewor ICAgICAgc2xlZXAoMSk7CisgICB9CisgICByZXR1cm4gZHJpM193YWl0X2Zvcl9tc2MocGRyYXcs IDAsIDAsIDAsIHVzdCwgbXNjLCBzYmMpOworfQorCitzdGF0aWMgX19EUkljb250ZXh0ICoKK2Ry aTNfZ2V0X2N1cnJlbnRfY29udGV4dCh2b2lkKQoreworICAgc3RydWN0IGdseF9jb250ZXh0ICpn YyA9IF9fZ2xYR2V0Q3VycmVudENvbnRleHQoKTsKKyAgIHN0cnVjdCBkcmkzX2NvbnRleHQgKmRy aTNDdHggPSAoc3RydWN0IGRyaTNfY29udGV4dCAqKWdjOworCisgICByZXR1cm4gZHJpM0N0eCA/ IGRyaTNDdHgtPmRyaUNvbnRleHQgOiBOVUxMOworfQorCisvKioKKyAqIGRyaTNUaHJvdHRsZSAt IFJlcXVlc3QgZHJpdmVyIHRocm90dGxpbmcKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhl IERSSTIgdGhyb3R0bGUgZXh0ZW5zaW9uIHRvIGdpdmUgdGhlCisgKiBkcml2ZXIgdGhlIG9wcG9y dHVuaXR5IHRvIHRocm90dGxlIG9uIGZsdXNoIGZyb250LCBjb3B5c3ViYnVmZmVyCisgKiBhbmQg c3dhcGJ1ZmZlcnMuCisgKi8KK3N0YXRpYyB2b2lkCitkcmkzX3Rocm90dGxlKHN0cnVjdCBkcmkz X3NjcmVlbiAqcHNjLAorICAgICAgICAgICAgICBzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqZHJhdywK KyAgICAgICAgICAgICAgZW51bSBfX0RSSTJ0aHJvdHRsZVJlYXNvbiByZWFzb24pCit7CisgICBp ZiAocHNjLT50aHJvdHRsZSkgeworICAgICAgX19EUkljb250ZXh0ICpjdHggPSBkcmkzX2dldF9j dXJyZW50X2NvbnRleHQoKTsKKworICAgICAgcHNjLT50aHJvdHRsZS0+dGhyb3R0bGUoY3R4LCBk cmF3LT5kcmlEcmF3YWJsZSwgcmVhc29uKTsKKyAgIH0KK30KKworLyoqCisgKiBBc2tzIHRoZSBk cml2ZXIgdG8gZmx1c2ggYW55IHF1ZXVlZCB3b3JrIG5lY2Vzc2FyeSBmb3Igc2VyaWFsaXppbmcg d2l0aCB0aGUKKyAqIFggY29tbWFuZCBzdHJlYW0sIGFuZCBvcHRpb25hbGx5IHRoZSBzbGlnaHRs eSBtb3JlIHN0cmljdCByZXF1aXJlbWVudCBvZgorICogZ2xGbHVzaCgpIGVxdWl2YWxlbmNlICh3 aGljaCB3b3VsZCByZXF1aXJlIGZsdXNoaW5nIGV2ZW4gaWYgbm90aGluZyBoYWQKKyAqIGJlZW4g ZHJhd24gdG8gYSB3aW5kb3cgc3lzdGVtIGZyYW1lYnVmZmVyLCBmb3IgZXhhbXBsZSkuCisgKi8K K3N0YXRpYyB2b2lkCitkcmkzX2ZsdXNoKHN0cnVjdCBkcmkzX3NjcmVlbiAqcHNjLAorICAgICAg ICAgICBfX0RSSWNvbnRleHQgKmN0eCwKKyAgICAgICAgICAgc3RydWN0IGRyaTNfZHJhd2FibGUg KmRyYXcsCisgICAgICAgICAgIHVuc2lnbmVkIGZsYWdzLAorICAgICAgICAgICBlbnVtIF9fRFJJ MnRocm90dGxlUmVhc29uIHRocm90dGxlX3JlYXNvbikKK3sKKyAgIGlmIChjdHggJiYgcHNjLT5m ICYmIHBzYy0+Zi0+YmFzZS52ZXJzaW9uID49IDQpIHsKKyAgICAgIHBzYy0+Zi0+Zmx1c2hfd2l0 aF9mbGFncyhjdHgsIGRyYXctPmRyaURyYXdhYmxlLCBmbGFncywgdGhyb3R0bGVfcmVhc29uKTsK KyAgIH0gZWxzZSB7CisgICAgICBpZiAoZmxhZ3MgJiBfX0RSSTJfRkxVU0hfQ09OVEVYVCkKKyAg ICAgICAgIGdsRmx1c2goKTsKKworICAgICAgaWYgKHBzYy0+ZikKKyAgICAgICAgIHBzYy0+Zi0+ Zmx1c2goZHJhdy0+ZHJpRHJhd2FibGUpOworCisgICAgICBkcmkzX3Rocm90dGxlKHBzYywgZHJh dywgdGhyb3R0bGVfcmVhc29uKTsKKyAgIH0KK30KKworc3RhdGljIHhjYl9nY29udGV4dF90Citk cmkzX2RyYXdhYmxlX2djKHN0cnVjdCBkcmkzX2RyYXdhYmxlICpwcml2KQoreworICAgaWYgKCFw cml2LT5nYykgeworICAgICAgdWludDMyX3QgdjsKKyAgICAgIHhjYl9jb25uZWN0aW9uX3QgKmMg PSBYR2V0WENCQ29ubmVjdGlvbihwcml2LT5iYXNlLnBzYy0+ZHB5KTsKKworICAgICAgdiA9IDA7 CisgICAgICB4Y2JfY3JlYXRlX2djKGMsCisgICAgICAgICAgICAgICAgICAgIChwcml2LT5nYyA9 IHhjYl9nZW5lcmF0ZV9pZChjKSksCisgICAgICAgICAgICAgICAgICAgIHByaXYtPmJhc2UueERy YXdhYmxlLAorICAgICAgICAgICAgICAgICAgICBYQ0JfR0NfR1JBUEhJQ1NfRVhQT1NVUkVTLAor ICAgICAgICAgICAgICAgICAgICAmdik7CisgICB9CisgICByZXR1cm4gcHJpdi0+Z2M7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgZHJpM19idWZmZXIgKgorZHJpM19iYWNrX2J1ZmZlcihzdHJ1Y3QgZHJp M19kcmF3YWJsZSAqcHJpdikKK3sKKyAgIHJldHVybiBwcml2LT5idWZmZXJzW0RSSTNfQkFDS19J RChwcml2LT5jdXJfYmFjayldOworfQorCitzdGF0aWMgc3RydWN0IGRyaTNfYnVmZmVyICoKK2Ry aTNfZmFrZV9mcm9udF9idWZmZXIoc3RydWN0IGRyaTNfZHJhd2FibGUgKnByaXYpCit7CisgICBy ZXR1cm4gcHJpdi0+YnVmZmVyc1tEUkkzX0ZST05UX0lEXTsKK30KKworc3RhdGljIHZvaWQKK2Ry aTNfY29weV9hcmVhICh4Y2JfY29ubmVjdGlvbl90ICpjICAvKio8ICovLAorICAgICAgICAgICAg ICAgIHhjYl9kcmF3YWJsZV90ICAgIHNyY19kcmF3YWJsZSAgLyoqPCAqLywKKyAgICAgICAgICAg ICAgICB4Y2JfZHJhd2FibGVfdCAgICBkc3RfZHJhd2FibGUgIC8qKjwgKi8sCisgICAgICAgICAg ICAgICAgeGNiX2djb250ZXh0X3QgICAgZ2MgIC8qKjwgKi8sCisgICAgICAgICAgICAgICAgaW50 MTZfdCAgICAgICAgICAgc3JjX3ggIC8qKjwgKi8sCisgICAgICAgICAgICAgICAgaW50MTZfdCAg ICAgICAgICAgc3JjX3kgIC8qKjwgKi8sCisgICAgICAgICAgICAgICAgaW50MTZfdCAgICAgICAg ICAgZHN0X3ggIC8qKjwgKi8sCisgICAgICAgICAgICAgICAgaW50MTZfdCAgICAgICAgICAgZHN0 X3kgIC8qKjwgKi8sCisgICAgICAgICAgICAgICAgdWludDE2X3QgICAgICAgICAgd2lkdGggIC8q KjwgKi8sCisgICAgICAgICAgICAgICAgdWludDE2X3QgICAgICAgICAgaGVpZ2h0ICAvKio8ICov KQoreworICAgeGNiX3ZvaWRfY29va2llX3QgY29va2llOworCisgICBjb29raWUgPSB4Y2JfY29w eV9hcmVhX2NoZWNrZWQoYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNf ZHJhd2FibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2RyYXdhYmxl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNyY194LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNyY195LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF94LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF95LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGhlaWdodCk7CisgICB4Y2JfZGlzY2FyZF9yZXBseShjLCBjb29raWUuc2VxdWVuY2UpOworfQor CitzdGF0aWMgdm9pZAorX2RyaTNfY29weV9zdWJfYnVmZmVyKF9fR0xYRFJJZHJhd2FibGUgKnBk cmF3LCBpbnQgeCwgaW50IHksCisgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50 IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgZW51bSBfX0RSSTJ0aHJvdHRsZVJlYXNv biByZWFzb24sIEJvb2wgZmx1c2gpCit7CisgICBzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqcHJpdiA9 IChzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqKSBwZHJhdzsKKyAgIHN0cnVjdCBkcmkzX3NjcmVlbiAq cHNjID0gKHN0cnVjdCBkcmkzX3NjcmVlbiAqKSBwZHJhdy0+cHNjOworICAgeGNiX2Nvbm5lY3Rp b25fdCAgICAgKmMgPSBYR2V0WENCQ29ubmVjdGlvbihwcml2LT5iYXNlLnBzYy0+ZHB5KTsKKyAg IF9fRFJJY29udGV4dCAqY3R4ID0gZHJpM19nZXRfY3VycmVudF9jb250ZXh0KCk7CisgICBzdHJ1 Y3QgZHJpM19idWZmZXIgKmJhY2sgPSBkcmkzX2JhY2tfYnVmZmVyKHByaXYpOworCisgICB1bnNp Z25lZCBmbGFnczsKKworICAgLyogQ2hlY2sgd2UgaGF2ZSB0aGUgcmlnaHQgYXR0YWNobWVudHMg Ki8KKyAgIGlmICghcHJpdi0+aGF2ZV9iYWNrIHx8IHByaXYtPmlzX3BpeG1hcCkKKyAgICAgIHJl dHVybjsKKworICAgZmxhZ3MgPSBfX0RSSTJfRkxVU0hfRFJBV0FCTEU7CisgICBpZiAoZmx1c2gp CisgICAgICBmbGFncyB8PSBfX0RSSTJfRkxVU0hfQ09OVEVYVDsKKyAgIGRyaTNfZmx1c2gocHNj LCBjdHgsIHByaXYsIGZsYWdzLCBfX0RSSTJfVEhST1RUTEVfU1dBUEJVRkZFUik7CisKKyAgIHkg PSBwcml2LT5oZWlnaHQgLSB5IC0gaGVpZ2h0OworCisgICBkcmkzX2ZlbmNlX3Jlc2V0KGMsIGJh Y2spOworICAgZHJpM19jb3B5X2FyZWEoYywKKyAgICAgICAgICAgICAgICAgIGRyaTNfYmFja19i dWZmZXIocHJpdiktPnBpeG1hcCwKKyAgICAgICAgICAgICAgICAgIHByaXYtPmJhc2UueERyYXdh YmxlLAorICAgICAgICAgICAgICAgICAgZHJpM19kcmF3YWJsZV9nYyhwcml2KSwKKyAgICAgICAg ICAgICAgICAgIHgsIHksIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgZHJpM19mZW5jZV90cmln Z2VyKGMsIGJhY2spOworICAgLyogUmVmcmVzaCB0aGUgZmFrZSBmcm9udCAoaWYgcHJlc2VudCkg YWZ0ZXIgd2UganVzdCBkYW1hZ2VkIHRoZSByZWFsCisgICAgKiBmcm9udC4KKyAgICAqLworICAg aWYgKHByaXYtPmhhdmVfZmFrZV9mcm9udCkgeworICAgICAgZHJpM19mZW5jZV9yZXNldChjLCBk cmkzX2Zha2VfZnJvbnRfYnVmZmVyKHByaXYpKTsKKyAgICAgIGRyaTNfY29weV9hcmVhKGMsCisg ICAgICAgICAgICAgICAgICAgICBkcmkzX2JhY2tfYnVmZmVyKHByaXYpLT5waXhtYXAsCisgICAg ICAgICAgICAgICAgICAgICBkcmkzX2Zha2VfZnJvbnRfYnVmZmVyKHByaXYpLT5waXhtYXAsCisg ICAgICAgICAgICAgICAgICAgICBkcmkzX2RyYXdhYmxlX2djKHByaXYpLAorICAgICAgICAgICAg ICAgICAgICAgeCwgeSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgICBkcmkzX2ZlbmNlX3Ry aWdnZXIoYywgZHJpM19mYWtlX2Zyb250X2J1ZmZlcihwcml2KSk7CisgICAgICBkcmkzX2ZlbmNl X2F3YWl0KGMsIGRyaTNfZmFrZV9mcm9udF9idWZmZXIocHJpdikpOworICAgfQorICAgZHJpM19m ZW5jZV9hd2FpdChjLCBiYWNrKTsKK30KKworc3RhdGljIHZvaWQKK2RyaTNfY29weV9zdWJfYnVm ZmVyKF9fR0xYRFJJZHJhd2FibGUgKnBkcmF3LCBpbnQgeCwgaW50IHksCisJCSAgaW50IHdpZHRo LCBpbnQgaGVpZ2h0LCBCb29sIGZsdXNoKQoreworICAgX2RyaTNfY29weV9zdWJfYnVmZmVyKHBk cmF3LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fRFJJ Ml9USFJPVFRMRV9DT1BZU1VCQlVGRkVSLCBmbHVzaCk7Cit9CisKKworc3RhdGljIHZvaWQKK2Ry aTNfY29weV9kcmF3YWJsZShzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqcHJpdiwgRHJhd2FibGUgZGVz dCwgRHJhd2FibGUgc3JjKQoreworICAgc3RydWN0IGRyaTNfc2NyZWVuICpwc2MgPSAoc3RydWN0 IGRyaTNfc2NyZWVuICopIHByaXYtPmJhc2UucHNjOworICAgeGNiX2Nvbm5lY3Rpb25fdCAgICAg KmMgPSBYR2V0WENCQ29ubmVjdGlvbihwcml2LT5iYXNlLnBzYy0+ZHB5KTsKKworICAgaWYgKHBz Yy0+ZikKKyAgICAgICgqcHNjLT5mLT5mbHVzaCkgKHByaXYtPmRyaURyYXdhYmxlKTsKKworICAg ZHJpM19jb3B5X2FyZWEoYywKKyAgICAgICAgICAgICAgICAgIHNyYywgZGVzdCwKKyAgICAgICAg ICAgICAgICAgIGRyaTNfZHJhd2FibGVfZ2MocHJpdiksCisgICAgICAgICAgICAgICAgICAwLCAw LCAwLCAwLCBwcml2LT53aWR0aCwgcHJpdi0+aGVpZ2h0KTsKK30KKworc3RhdGljIHZvaWQKK2Ry aTNfd2FpdF94KHN0cnVjdCBnbHhfY29udGV4dCAqZ2MpCit7CisgICBzdHJ1Y3QgZHJpM19kcmF3 YWJsZSAqcHJpdiA9IChzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqKQorICAgICAgR2V0R0xYRFJJRHJh d2FibGUoZ2MtPmN1cnJlbnREcHksIGdjLT5jdXJyZW50RHJhd2FibGUpOworCisgICBpZiAocHJp diA9PSBOVUxMIHx8ICFwcml2LT5oYXZlX2Zha2VfZnJvbnQpCisgICAgICByZXR1cm47CisKKyAg IGRyaTNfY29weV9kcmF3YWJsZShwcml2LCBkcmkzX2Zha2VfZnJvbnRfYnVmZmVyKHByaXYpLT5w aXhtYXAsIHByaXYtPmJhc2UueERyYXdhYmxlKTsKK30KKworc3RhdGljIHZvaWQKK2RyaTNfd2Fp dF9nbChzdHJ1Y3QgZ2x4X2NvbnRleHQgKmdjKQoreworICAgc3RydWN0IGRyaTNfZHJhd2FibGUg KnByaXYgPSAoc3RydWN0IGRyaTNfZHJhd2FibGUgKikKKyAgICAgIEdldEdMWERSSURyYXdhYmxl KGdjLT5jdXJyZW50RHB5LCBnYy0+Y3VycmVudERyYXdhYmxlKTsKKworICAgaWYgKHByaXYgPT0g TlVMTCB8fCAhcHJpdi0+aGF2ZV9mYWtlX2Zyb250KQorICAgICAgcmV0dXJuOworCisgICBkcmkz X2NvcHlfZHJhd2FibGUocHJpdiwgcHJpdi0+YmFzZS54RHJhd2FibGUsIGRyaTNfZmFrZV9mcm9u dF9idWZmZXIocHJpdiktPnBpeG1hcCk7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IHRoZSBkcml2 ZXIgd2hlbiBpdCBuZWVkcyB0byB1cGRhdGUgdGhlIHJlYWwgZnJvbnQgYnVmZmVyIHdpdGggdGhl CisgKiBjb250ZW50cyBvZiBpdHMgZmFrZSBmcm9udCBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lk CitkcmkzX2ZsdXNoX2Zyb250X2J1ZmZlcihfX0RSSWRyYXdhYmxlICpkcmlEcmF3YWJsZSwgdm9p ZCAqbG9hZGVyUHJpdmF0ZSkKK3sKKyAgIHN0cnVjdCBnbHhfY29udGV4dCAqZ2M7CisgICBzdHJ1 Y3QgZHJpM19kcmF3YWJsZSAqcGRyYXcgPSBsb2FkZXJQcml2YXRlOworICAgc3RydWN0IGRyaTNf c2NyZWVuICpwc2M7CisKKyAgIGlmICghcGRyYXcpCisgICAgICByZXR1cm47CisKKyAgIGlmICgh cGRyYXctPmJhc2UucHNjKQorICAgICAgcmV0dXJuOworCisgICBwc2MgPSAoc3RydWN0IGRyaTNf c2NyZWVuICopIHBkcmF3LT5iYXNlLnBzYzsKKworICAgKHZvaWQpIF9fZ2xYSW5pdGlhbGl6ZShw c2MtPmJhc2UuZHB5KTsKKworICAgZ2MgPSBfX2dsWEdldEN1cnJlbnRDb250ZXh0KCk7CisKKyAg IGRyaTNfdGhyb3R0bGUocHNjLCBwZHJhdywgX19EUkkyX1RIUk9UVExFX0ZMVVNIRlJPTlQpOwor CisgICBkcmkzX3dhaXRfZ2woZ2MpOworfQorCitzdGF0aWMgc3RydWN0IGRyaTNfYnVmZmVyICoK K2RyaTNfYWxsb2NfcmVuZGVyX2J1ZmZlcihzdHJ1Y3QgZ2x4X3NjcmVlbiAqZ2x4X3NjcmVlbiwg RHJhd2FibGUgZHJhdywgdW5zaWduZWQgaW50IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0 LCBpbnQgZGVwdGgpCit7CisgICBzdHJ1Y3QgZHJpM19zY3JlZW4gKnBzYyA9IChzdHJ1Y3QgZHJp M19zY3JlZW4gKikgZ2x4X3NjcmVlbjsKKyAgIERpc3BsYXkgKmRweSA9IGdseF9zY3JlZW4tPmRw eTsKKyAgIHN0cnVjdCBkcmkzX2J1ZmZlciAqYnVmZmVyOworICAgeGNiX2Nvbm5lY3Rpb25fdCAq YyA9IFhHZXRYQ0JDb25uZWN0aW9uKGRweSk7CisgICB4Y2JfcGl4bWFwX3QgcGl4bWFwOworICAg eGNiX3N5bmNfZmVuY2VfdCBzeW5jX2ZlbmNlOworICAgaW50MzJfdCAqc2htX2ZlbmNlOworICAg aW50IGJ1ZmZlcl9mZCwgZmVuY2VfZmQ7CisgICBpbnQgc3RyaWRlOworCisgICBmZW5jZV9mZCA9 IHhzaG1mZW5jZV9hbGxvY19zaG0oKTsKKyAgIGlmIChmZW5jZV9mZCA8IDApCisgICAgICByZXR1 cm4gTlVMTDsKKyAgIHNobV9mZW5jZSA9IHhzaG1mZW5jZV9tYXBfc2htKGZlbmNlX2ZkKTsKKyAg IGlmIChzaG1fZmVuY2UgPT0gTlVMTCkKKyAgICAgIGdvdG8gbm9fc2htX2ZlbmNlOworCisgICBi dWZmZXIgPSBjYWxsb2MoMSwgc2l6ZW9mIChzdHJ1Y3QgZHJpM19idWZmZXIpKTsKKyAgIGlmICgh YnVmZmVyKQorICAgICAgZ290byBub19idWZmZXI7CisKKyAgIGJ1ZmZlci0+aW1hZ2UgPSAoKnBz Yy0+aW1hZ2UtPmNyZWF0ZUltYWdlKSAocHNjLT5kcmlTY3JlZW4sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19EUklfSU1BR0VfVVNFX1NIQVJF fF9fRFJJX0lNQUdFX1VTRV9TQ0FOT1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBidWZmZXIpOworCisgICAKKyAgIGlmICghYnVmZmVyLT5pbWFnZSkK KyAgICAgIGdvdG8gbm9faW1hZ2U7CisKKyAgIGlmICghKCpwc2MtPmltYWdlLT5xdWVyeUltYWdl KShidWZmZXItPmltYWdlLCBfX0RSSV9JTUFHRV9BVFRSSUJfU1RSSURFLCAmc3RyaWRlKSkKKyAg ICAgIGdvdG8gbm9fYnVmZmVyX2F0dHJpYjsKKworICAgYnVmZmVyLT5waXRjaCA9IHN0cmlkZTsK KworICAgaWYgKCEoKnBzYy0+aW1hZ2UtPnF1ZXJ5SW1hZ2UpKGJ1ZmZlci0+aW1hZ2UsIF9fRFJJ X0lNQUdFX0FUVFJJQl9GRCwgJmJ1ZmZlcl9mZCkpCisgICAgICBnb3RvIG5vX2J1ZmZlcl9hdHRy aWI7CisKKyAgIHhjYl9kcmkzX3BpeG1hcF9mcm9tX2J1ZmZlcihjLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChwaXhtYXAgPSB4Y2JfZ2VuZXJhdGVfaWQoYykpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRyYXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnVmZmVyLT5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBo ZWlnaHQsIGJ1ZmZlci0+cGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVw dGgsIGJ1ZmZlci0+Y3BwICogOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZm ZXJfZmQpOworCisgICB4Y2JfZHJpM19mZW5jZV9mcm9tX2ZkKGMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIHBpeG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bmNfZmVuY2Ug PSB4Y2JfZ2VuZXJhdGVfaWQoYykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgZmVuY2VfZmQpOworCisgICBidWZmZXItPnBpeG1h cCA9IHBpeG1hcDsKKyAgIGJ1ZmZlci0+c3luY19mZW5jZSA9IHN5bmNfZmVuY2U7CisgICBidWZm ZXItPnNobV9mZW5jZSA9IHNobV9mZW5jZTsKKyAgIGJ1ZmZlci0+d2lkdGggPSB3aWR0aDsKKyAg IGJ1ZmZlci0+aGVpZ2h0ID0gaGVpZ2h0OworCisgICAvKiBNYXJrIHRoZSBidWZmZXIgYXMgaWRs ZSAqLworICAgZHJpM19mZW5jZV9zZXQoYnVmZmVyKTsKKworICAgcmV0dXJuIGJ1ZmZlcjsKKyAg IAorbm9fYnVmZmVyX2F0dHJpYjoKKyAgICgqcHNjLT5pbWFnZS0+ZGVzdHJveUltYWdlKShidWZm ZXItPmltYWdlKTsKK25vX2ltYWdlOgorICAgZnJlZShidWZmZXIpOworbm9fYnVmZmVyOgorICAg eHNobWZlbmNlX3VubWFwX3NobShzaG1fZmVuY2UpOworbm9fc2htX2ZlbmNlOgorICAgY2xvc2Uo ZmVuY2VfZmQpOworICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitkcmkzX2ZyZWVf cmVuZGVyX2J1ZmZlcihzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqcGRyYXcsIHN0cnVjdCBkcmkzX2J1 ZmZlciAqYnVmZmVyKQoreworICAgc3RydWN0IGRyaTNfc2NyZWVuICAgKnBzYyA9IChzdHJ1Y3Qg ZHJpM19zY3JlZW4gKikgcGRyYXctPmJhc2UucHNjOworICAgeGNiX2Nvbm5lY3Rpb25fdCAgICAg KmMgPSBYR2V0WENCQ29ubmVjdGlvbihwZHJhdy0+YmFzZS5wc2MtPmRweSk7CisKKyAgIHhjYl9m cmVlX3BpeG1hcChjLCBidWZmZXItPnBpeG1hcCk7CisgICB4Y2Jfc3luY19kZXN0cm95X2ZlbmNl KGMsIGJ1ZmZlci0+c3luY19mZW5jZSk7CisgICB4c2htZmVuY2VfdW5tYXBfc2htKGJ1ZmZlci0+ c2htX2ZlbmNlKTsKKyAgICgqcHNjLT5pbWFnZS0+ZGVzdHJveUltYWdlKShidWZmZXItPmltYWdl KTsKKyAgIGZyZWUoYnVmZmVyKTsKK30KKworCisKK3N0YXRpYyB2b2lkCitwcmVzZW50X2ZsdXNo X2V2ZW50cyhzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqcHJpdikKK3sKKyAgIHhjYl9jb25uZWN0aW9u X3QgICAgICpjID0gWEdldFhDQkNvbm5lY3Rpb24ocHJpdi0+YmFzZS5wc2MtPmRweSk7CisKKyAg IC8qIENoZWNrIHRvIHNlZSBpZiBhbnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGhhdmUgb2NjdXJy ZWQKKyAgICAqIHNpbmNlIHdlIHdlcmUgbGFzdCBpbnZva2VkCisgICAgKi8KKyAgIGlmIChwcml2 LT5zcGVjaWFsX2V2ZW50KSB7CisgICAgICB4Y2JfZ2VuZXJpY19ldmVudF90ICAgICpldjsKKwor ICAgICAgd2hpbGUgKChldiA9IHhjYl9jaGVja19mb3Jfc3BlY2lhbF9ldmVudChjLCBwcml2LT5z cGVjaWFsX2V2ZW50KSkgIT0gTlVMTCkgeworICAgICAgICAgeGNiX3ByZXNlbnRfZ2VuZXJpY19l dmVudF90ICpnZSA9ICh2b2lkICopIGV2OworICAgICAgICAgcHJlc2VudF9oYW5kbGVfc3BlY2lh bF9ldmVudChwcml2LCBnZSk7CisgICAgICB9CisgICB9Cit9CisKK3N0YXRpYyBpbnQKK2RyaTNf dXBkYXRlX2RyYXdhYmxlKF9fRFJJZHJhd2FibGUgKmRyaURyYXdhYmxlLCB2b2lkICpsb2FkZXJQ cml2YXRlKQoreworICAgc3RydWN0IGRyaTNfZHJhd2FibGUgKnByaXYgPSBsb2FkZXJQcml2YXRl OworICAgeGNiX2Nvbm5lY3Rpb25fdCAgICAgKmMgPSBYR2V0WENCQ29ubmVjdGlvbihwcml2LT5i YXNlLnBzYy0+ZHB5KTsKKworICAgLyogRmlyc3QgdGltZSB0aHJvdWdoLCBnbyBnZXQgdGhlIGN1 cnJlbnQgZHJhd2FibGUgZ2VvbWV0cnkKKyAgICAqLworICAgaWYgKHByaXYtPndpZHRoID09IDAg fHwgcHJpdi0+aGVpZ2h0ID09IDAgfHwgcHJpdi0+ZGVwdGggPT0gMCkgeworICAgICAgeGNiX2dl dF9nZW9tZXRyeV9jb29raWVfdCAgICAgICAgICAgICAgICAgZ2VvbV9jb29raWU7CisgICAgICB4 Y2JfZ2V0X2dlb21ldHJ5X3JlcGx5X3QgICAgICAgICAgICAgICAgICAqZ2VvbV9yZXBseTsKKyAg ICAgIHhjYl92b2lkX2Nvb2tpZV90ICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZTsKKyAg ICAgIHhjYl9nZW5lcmljX2Vycm9yX3QgICAgICAgICAgICAgICAgICAgICAgICplcnJvcjsKKwor ICAgICAgY29va2llID0geGNiX3ByZXNlbnRfc2VsZWN0X2lucHV0X2NoZWNrZWQoYywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcml2LT5laWQgPSB4 Y2JfZ2VuZXJhdGVfaWQoYykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJpdi0+YmFzZS54RHJhd2FibGUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBYQ0JfUFJFU0VOVF9FVkVOVF9NQVNLX0NPTkZJR1VS RV9OT1RJRll8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBYQ0JfUFJFU0VOVF9FVkVOVF9NQVNLX0NPTVBMRVRFX05PVElGWXwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDQl9QUkVTRU5UX0VWRU5UX01BU0tf SURMRV9OT1RJRlkpOworICAgICAgICAgCisgICAgICBpZiAoIXByaXYtPnByZXNlbnRfZXh0ZW5z aW9uKSB7CisgICAgICAgICBwcml2LT5wcmVzZW50X2V4dGVuc2lvbiA9IHhjYl9nZXRfZXh0ZW5z aW9uX2RhdGEoYywgJnhjYl9wcmVzZW50X2lkKTsKKyAgICAgICAgIGlmICghcHJpdi0+cHJlc2Vu dF9leHRlbnNpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICAg IHByaXYtPnNwZWNpYWxfZXZlbnQgPSB4Y2JfcmVnaXN0ZXJfZm9yX3NwZWNpYWxfZXZlbnQoYywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcHJpdi0+cHJlc2VudF9leHRlbnNpb24tPm1ham9yX29wY29kZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+ZWlkLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwcml2LT5zdGFtcCk7CisKKyAgICAgIGdlb21fY29va2llID0geGNiX2dldF9nZW9tZXRyeShj LCBwcml2LT5iYXNlLnhEcmF3YWJsZSk7CisKKyAgICAgIGdlb21fcmVwbHkgPSB4Y2JfZ2V0X2dl b21ldHJ5X3JlcGx5KGMsIGdlb21fY29va2llLCBOVUxMKTsKKworICAgICAgaWYgKCFnZW9tX3Jl cGx5KQorICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICBwcml2LT53aWR0aCA9IGdlb21f cmVwbHktPndpZHRoOworICAgICAgcHJpdi0+aGVpZ2h0ID0gZ2VvbV9yZXBseS0+aGVpZ2h0Owor ICAgICAgcHJpdi0+ZGVwdGggPSBnZW9tX3JlcGx5LT5kZXB0aDsKKyAgICAgIHByaXYtPmlzX3Bp eG1hcCA9IGZhbHNlOworCisgICAgICBmcmVlKGdlb21fcmVwbHkpOworCisgICAgICBlcnJvciA9 IHhjYl9yZXF1ZXN0X2NoZWNrKGMsIGNvb2tpZSk7CisKKyAgICAgIGlmIChlcnJvcikgeworICAg ICAgICAgaWYgKGVycm9yLT5lcnJvcl9jb2RlICE9IEJhZFdpbmRvdykgeworICAgICAgICAgICAg ZnJlZShlcnJvcik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICB9CisgICAg ICAgICBwcml2LT5pc19waXhtYXAgPSB0cnVlOworICAgICAgICAgeGNiX3VucmVnaXN0ZXJfZm9y X3NwZWNpYWxfZXZlbnQoYywgcHJpdi0+c3BlY2lhbF9ldmVudCk7CisgICAgICAgICBwcml2LT5z cGVjaWFsX2V2ZW50ID0gTlVMTDsKKyAgICAgIH0KKyAgIH0KKyAgIHByZXNlbnRfZmx1c2hfZXZl bnRzKHByaXYpOworICAgcmV0dXJuIHRydWU7Cit9CisgICAKK3N0YXRpYyBpbnQKK2ltYWdlX2Zv cm1hdF90b19mb3VyY2MoaW50IGZvcm1hdCkKK3sKKworICAgLyogQ29udmVydCBmcm9tIF9fRFJJ X0lNQUdFX0ZPUk1BVCB0byBfX0RSSV9JTUFHRV9GT1VSQ0MgKHNpZ2gpICovCisgICBzd2l0Y2gg KGZvcm1hdCkgeworICAgY2FzZSBfX0RSSV9JTUFHRV9GT1JNQVRfUkdCNTY1OiByZXR1cm4gX19E UklfSU1BR0VfRk9VUkNDX1JHQjU2NTsKKyAgIGNhc2UgX19EUklfSU1BR0VfRk9STUFUX1hSR0I4 ODg4OiByZXR1cm4gX19EUklfSU1BR0VfRk9VUkNDX1hSR0I4ODg4OworICAgY2FzZSBfX0RSSV9J TUFHRV9GT1JNQVRfQVJHQjg4ODg6IHJldHVybiBfX0RSSV9JTUFHRV9GT1VSQ0NfQVJHQjg4ODg7 CisgICBjYXNlIF9fRFJJX0lNQUdFX0ZPUk1BVF9BQkdSODg4ODogcmV0dXJuIF9fRFJJX0lNQUdF X0ZPVVJDQ19BQkdSODg4ODsKKyAgIGNhc2UgX19EUklfSU1BR0VfRk9STUFUX1hCR1I4ODg4OiBy ZXR1cm4gX19EUklfSU1BR0VfRk9VUkNDX1hCR1I4ODg4OworLy8gICBjYXNlIF9fRFJJX0lNQUdF X0ZPUk1BVF9SODogcmV0dXJuIF9fRFJJX0lNQUdFX0ZPVVJDQ19SODsKKy8vICAgY2FzZSBfX0RS SV9JTUFHRV9GT1JNQVRfR1I4ODogcmV0dXJuIF9fRFJJX0lNQUdFX0ZPVVJDQ19HUjg4OworLy8g ICBjYXNlIF9fRFJJX0lNQUdFX0ZPUk1BVF9OT05FOiByZXR1cm4gX19EUklfSU1BR0VfRk9VUkND X05PTkU7CisvLyAgIGNhc2UgX19EUklfSU1BR0VfRk9STUFUX1hSR0IyMTAxMDEwOiByZXR1cm4g X19EUklfSU1BR0VfRk9VUkNDX1hSR0IyMTAxMDEwOworLy8gICBjYXNlIF9fRFJJX0lNQUdFX0ZP Uk1BVF9BUkdCMjEwMTAxMDogcmV0dXJuIF9fRFJJX0lNQUdFX0ZPVVJDQ19BUkdCMjEwMTAxMDsK KyAgIH0KKyAgIHJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRyaTNfYnVmZmVyICoKK2Ry aTNfZ2V0X3BpeG1hcF9idWZmZXIoX19EUklkcmF3YWJsZSAqZHJpRHJhd2FibGUsCisgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAg ICAgIGVudW0gZHJpM19idWZmZXJfdHlwZSBidWZmZXJfdHlwZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqbG9hZGVyUHJpdmF0ZSkKK3sKKyAgIHN0cnVjdCBkcmkzX2RyYXdhYmxlICAg ICAgICAgICAgICAgICAqcGRyYXcgPSBsb2FkZXJQcml2YXRlOworICAgaW50ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJ1Zl9pZCA9IGJ1ZmZlcl90eXBlID09IGRyaTNfcGl4bWFw X2J1Zl9pZChidWZmZXJfdHlwZSk7CisgICBzdHJ1Y3QgZHJpM19idWZmZXIgICAgICAgICAgICAg ICAgICAgKmJ1ZmZlciA9IHBkcmF3LT5idWZmZXJzW2J1Zl9pZF07CisgICBQaXhtYXAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGl4bWFwOworICAgeGNiX2RyaTNfYnVmZmVyX2Zyb21f cGl4bWFwX2Nvb2tpZV90IGJwX2Nvb2tpZTsKKyAgIHhjYl9kcmkzX2J1ZmZlcl9mcm9tX3BpeG1h cF9yZXBseV90ICAqYnBfcmVwbHk7CisgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKmZkczsKKyAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZm ZXJfZmQ7CisgICBEaXNwbGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRweTsKKyAg IHN0cnVjdCBkcmkzX3NjcmVlbiAgICAgICAgICAgICAgICAgICAqcHNjOworICAgeGNiX2Nvbm5l Y3Rpb25fdCAgICAgICAgICAgICAgICAgICAgICpjOworICAgeGNiX3N5bmNfZmVuY2VfdCAgICAg ICAgICAgICAgICAgICAgIHN5bmNfZmVuY2U7CisgICBpbnQzMl90ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKnNobV9mZW5jZTsKKyAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmZW5jZV9mZDsKKyAgIF9fRFJJaW1hZ2UgICAgICAgICAgICAgICAgICAgICAgICAg ICAqaW1hZ2VfcGxhbmFyOworICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cmlkZSwgb2Zmc2V0OworCisgICBpZiAoYnVmZmVyKQorICAgICAgcmV0dXJuIGJ1ZmZlcjsK KworICAgcGl4bWFwID0gcGRyYXctPmJhc2UueERyYXdhYmxlOworICAgcHNjID0gKHN0cnVjdCBk cmkzX3NjcmVlbiAqKSBwZHJhdy0+YmFzZS5wc2M7CisgICBkcHkgPSBwc2MtPmJhc2UuZHB5Owor ICAgYyA9IFhHZXRYQ0JDb25uZWN0aW9uKGRweSk7CisKKyAgIGJ1ZmZlciA9IGNhbGxvYygxLCBz aXplb2YgKHN0cnVjdCBkcmkzX2J1ZmZlcikpOworICAgaWYgKCFidWZmZXIpCisgICAgICBnb3Rv IG5vX2J1ZmZlcjsKKworICAgZmVuY2VfZmQgPSB4c2htZmVuY2VfYWxsb2Nfc2htKCk7CisgICBp ZiAoZmVuY2VfZmQgPCAwKQorICAgICAgZ290byBub19mZW5jZTsKKyAgIHNobV9mZW5jZSA9IHhz aG1mZW5jZV9tYXBfc2htKGZlbmNlX2ZkKTsKKyAgIGlmIChzaG1fZmVuY2UgPT0gTlVMTCkgewor ICAgICAgY2xvc2UgKGZlbmNlX2ZkKTsKKyAgICAgIGdvdG8gbm9fZmVuY2U7CisgICB9CisKKyAg IHhjYl9kcmkzX2ZlbmNlX2Zyb21fZmQoYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4 bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoc3luY19mZW5jZSA9IHhjYl9nZW5lcmF0 ZV9pZChjKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICBmZW5jZV9mZCk7CisKKyAgIGJwX2Nvb2tpZSA9IHhjYl9kcmkzX2J1ZmZl cl9mcm9tX3BpeG1hcChjLCBwaXhtYXApOworICAgYnBfcmVwbHkgPSB4Y2JfZHJpM19idWZmZXJf ZnJvbV9waXhtYXBfcmVwbHkoYywgYnBfY29va2llLCBOVUxMKTsKKyAgIGlmICghYnBfcmVwbHkp CisgICAgICBnb3RvIG5vX2ltYWdlOworICAgZmRzID0geGNiX2RyaTNfYnVmZmVyX2Zyb21fcGl4 bWFwX3JlcGx5X2ZkcyhjLCBicF9yZXBseSk7CisgICBidWZmZXJfZmQgPSBmZHNbMF07CisKKyAg IHN0cmlkZSA9IGJwX3JlcGx5LT5zdHJpZGU7CisgICBvZmZzZXQgPSAwOworCisgICBpbWFnZV9w bGFuYXIgPSAoKnBzYy0+aW1hZ2UtPmNyZWF0ZUltYWdlRnJvbUZkcykgKHBzYy0+ZHJpU2NyZWVu LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cF9yZXBseS0+d2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJwX3JlcGx5LT5oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX2Zvcm1hdF90b19mb3VyY2MoZm9ybWF0 KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZmRzLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmc3RyaWRlLCAmb2Zmc2V0LCBidWZmZXIpOworICAgY2xvc2UoYnVmZmVyX2ZkKTsKKyAg IGlmICghaW1hZ2VfcGxhbmFyKQorICAgICAgZ290byBub19pbWFnZTsKKworICAgYnVmZmVyLT5p bWFnZSA9ICgqcHNjLT5pbWFnZS0+ZnJvbVBsYW5hcikoaW1hZ2VfcGxhbmFyLCAwLCBidWZmZXIp OworCisgICAoKnBzYy0+aW1hZ2UtPmRlc3Ryb3lJbWFnZSkoaW1hZ2VfcGxhbmFyKTsKKworICAg aWYgKCFidWZmZXItPmltYWdlKQorICAgICAgZ290byBub19pbWFnZTsKKworICAgYnVmZmVyLT5w aXhtYXAgPSBwaXhtYXA7CisgICBidWZmZXItPndpZHRoID0gYnBfcmVwbHktPndpZHRoOworICAg YnVmZmVyLT5oZWlnaHQgPSBicF9yZXBseS0+aGVpZ2h0OworICAgYnVmZmVyLT5idWZmZXJfdHlw ZSA9IGJ1ZmZlcl90eXBlOworICAgYnVmZmVyLT5zaG1fZmVuY2UgPSBzaG1fZmVuY2U7CisgICBi dWZmZXItPnN5bmNfZmVuY2UgPSBzeW5jX2ZlbmNlOworCisgICBwZHJhdy0+YnVmZmVyc1tidWZf aWRdID0gYnVmZmVyOworICAgcmV0dXJuIGJ1ZmZlcjsKKworbm9faW1hZ2U6CisgICB4Y2Jfc3lu Y19kZXN0cm95X2ZlbmNlKGMsIHN5bmNfZmVuY2UpOworICAgeHNobWZlbmNlX3VubWFwX3NobShz aG1fZmVuY2UpOworbm9fZmVuY2U6CisgICBmcmVlKGJ1ZmZlcik7Citub19idWZmZXI6CisgICBy ZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorZHJpM19maW5kX2JhY2soeGNiX2Nvbm5lY3Rp b25fdCAqYywgc3RydWN0IGRyaTNfZHJhd2FibGUgKnByaXYpCit7CisgICBpbnQgIGI7CisgICB4 Y2JfZ2VuZXJpY19ldmVudF90ICpldjsKKyAgIHhjYl9wcmVzZW50X2dlbmVyaWNfZXZlbnRfdCAq Z2U7CisKKyAgIGZvciAoOzspIHsKKworICAgICAgZm9yIChiID0gMDsgYiA8IERSSTNfTUFYX0JB Q0s7IGIrKykgeworICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICBpZCA9IERSSTNfQkFD S19JRChiKTsKKyAgICAgICAgIHN0cnVjdCBkcmkzX2J1ZmZlciAgICAgICAgKmJ1ZmZlciA9IHBy aXYtPmJ1ZmZlcnNbaWRdOworCisgICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgICAgIHJl dHVybiBiOworICAgICAgICAgaWYgKCFidWZmZXItPmJ1c3kpCisgICAgICAgICAgICByZXR1cm4g YjsKKyAgICAgIH0KKyAgICAgIGV2ID0geGNiX3dhaXRfZm9yX3NwZWNpYWxfZXZlbnQoYywgcHJp di0+c3BlY2lhbF9ldmVudCk7CisgICAgICBpZiAoIWV2KQorICAgICAgICAgcmV0dXJuIC0xOwor ICAgICAgZ2UgPSAodm9pZCAqKSBldjsKKyAgICAgIHByZXNlbnRfaGFuZGxlX3NwZWNpYWxfZXZl bnQocHJpdiwgZ2UpOworICAgfSAKK30KKworc3RhdGljIHN0cnVjdCBkcmkzX2J1ZmZlciAqCitk cmkzX2dldF9idWZmZXIoX19EUklkcmF3YWJsZSAqZHJpRHJhd2FibGUsCisgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IGZvcm1hdCwKKyAgICAgICAgICAgICAgICBlbnVtIGRyaTNfYnVmZmVy X3R5cGUgYnVmZmVyX3R5cGUsCisgICAgICAgICAgICAgICAgdm9pZCAqbG9hZGVyUHJpdmF0ZSkK K3sKKyAgIHN0cnVjdCBkcmkzX2RyYXdhYmxlICpwcml2ID0gbG9hZGVyUHJpdmF0ZTsKKyAgIHhj Yl9jb25uZWN0aW9uX3QgICAgICpjID0gWEdldFhDQkNvbm5lY3Rpb24ocHJpdi0+YmFzZS5wc2Mt PmRweSk7CisgICBzdHJ1Y3QgZHJpM19idWZmZXIgICAgICAqYnVmZmVyOworICAgaW50ICAgICAg ICAgICAgICAgICAgYnVmX2lkOworCisgICBpZiAoYnVmZmVyX3R5cGUgPT0gZHJpM19idWZmZXJf YmFjaykgeworICAgICAgaW50IGJhY2sgPSBkcmkzX2ZpbmRfYmFjayhjLCBwcml2KTsKKworICAg ICAgaWYgKGJhY2sgPCAwKQorICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgIHByaXYtPmN1 cl9iYWNrID0gYmFjazsKKyAgICAgIGJ1Zl9pZCA9IERSSTNfQkFDS19JRChwcml2LT5jdXJfYmFj ayk7CisgICB9IGVsc2UgeworICAgICAgYnVmX2lkID0gRFJJM19GUk9OVF9JRDsKKyAgIH0KKwor ICAgYnVmZmVyID0gcHJpdi0+YnVmZmVyc1tidWZfaWRdOworICAgaWYgKCFidWZmZXIgfHwgYnVm ZmVyLT53aWR0aCAhPSBwcml2LT53aWR0aCB8fCBidWZmZXItPmhlaWdodCAhPSBwcml2LT5oZWln aHQpIHsKKyAgICAgIHN0cnVjdCBkcmkzX2J1ZmZlciAgICpuZXdfYnVmZmVyOworCisgICAgICAv KiBBbGxvY2F0ZSB0aGUgbmV3IGJ1ZmZlcnMKKyAgICAgICAqLworICAgICAgbmV3X2J1ZmZlciA9 IGRyaTNfYWxsb2NfcmVuZGVyX2J1ZmZlcihwcml2LT5iYXNlLnBzYywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+YmFzZS54RHJhd2FibGUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgcHJpdi0+d2lk dGgsIHByaXYtPmhlaWdodCwgcHJpdi0+ZGVwdGgpOworICAgICAgaWYgKCFuZXdfYnVmZmVyKQor ICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICBzd2l0Y2ggKGJ1ZmZlcl90eXBlKSB7CisgICAg ICBjYXNlIGRyaTNfYnVmZmVyX2JhY2s6CisgICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAg ICAgICBkcmkzX2ZlbmNlX3Jlc2V0KGMsIG5ld19idWZmZXIpOworICAgICAgICAgICAgZHJpM19m ZW5jZV9hd2FpdChjLCBidWZmZXIpOworICAgICAgICAgICAgZHJpM19jb3B5X2FyZWEoYywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+cGl4bWFwLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgbmV3X2J1ZmZlci0+cGl4bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHJpM19kcmF3YWJsZV9nYyhwcml2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs IDAsIDAsIDAsIHByaXYtPndpZHRoLCBwcml2LT5oZWlnaHQpOworICAgICAgICAgICAgZHJpM19m ZW5jZV90cmlnZ2VyKGMsIG5ld19idWZmZXIpOworICAgICAgICAgICAgZHJpM19mcmVlX3JlbmRl cl9idWZmZXIocHJpdiwgYnVmZmVyKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAg ICAgY2FzZSBkcmkzX2J1ZmZlcl9mcm9udDoKKyAgICAgICAgIGRyaTNfZmVuY2VfcmVzZXQoYywg bmV3X2J1ZmZlcik7CisgICAgICAgICBkcmkzX2NvcHlfYXJlYShjLAorICAgICAgICAgICAgICAg ICAgICAgICAgcHJpdi0+YmFzZS54RHJhd2FibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBu ZXdfYnVmZmVyLT5waXhtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICBkcmkzX2RyYXdhYmxl X2djKHByaXYpLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgcHJpdi0+d2lk dGgsIHByaXYtPmhlaWdodCk7CisgICAgICAgICBkcmkzX2ZlbmNlX3RyaWdnZXIoYywgbmV3X2J1 ZmZlcik7CisgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJ1ZmZlciA9IG5ld19idWZm ZXI7CisgICAgICBidWZmZXItPmJ1ZmZlcl90eXBlID0gYnVmZmVyX3R5cGU7CisgICAgICBwcml2 LT5idWZmZXJzW2J1Zl9pZF0gPSBidWZmZXI7CisgICB9IAorICAgZHJpM19mZW5jZV9hd2FpdChj LCBidWZmZXIpOworCisgICAvKiBSZXR1cm4gdGhlIHJlcXVlc3RlZCBidWZmZXIgKi8KKyAgIHJl dHVybiBidWZmZXI7Cit9CisKK3N0YXRpYyB2b2lkCitkcmkzX2ZyZWVfYnVmZmVycyhfX0RSSWRy YXdhYmxlICpkcmlEcmF3YWJsZSwKKyAgICAgICAgICAgICAgICAgZW51bSBkcmkzX2J1ZmZlcl90 eXBlIGJ1ZmZlcl90eXBlLAorICAgICAgICAgICAgICAgICB2b2lkICpsb2FkZXJQcml2YXRlKQor eworICAgc3RydWN0IGRyaTNfZHJhd2FibGUgKnByaXYgPSBsb2FkZXJQcml2YXRlOworICAgc3Ry dWN0IGRyaTNfYnVmZmVyICAgICAgKmJ1ZmZlcjsKKyAgIGludCAgICAgICAgICAgICAgICAgIGZp cnN0X2lkOworICAgaW50ICAgICAgICAgICAgICAgICAgbl9pZDsKKyAgIGludCAgICAgICAgICAg ICAgICAgIGJ1Zl9pZDsKKyAgIAorICAgc3dpdGNoIChidWZmZXJfdHlwZSkgeworICAgY2FzZSBk cmkzX2J1ZmZlcl9iYWNrOgorICAgICAgZmlyc3RfaWQgPSBEUkkzX0JBQ0tfSUQoMCk7CisgICAg ICBuX2lkID0gRFJJM19NQVhfQkFDSzsKKyAgICAgIGJyZWFrOworICAgY2FzZSBkcmkzX2J1ZmZl cl9mcm9udDoKKyAgICAgIGZpcnN0X2lkID0gRFJJM19GUk9OVF9JRDsKKyAgICAgIG5faWQgPSAx OworICAgfQorCisgICBmb3IgKGJ1Zl9pZCA9IGZpcnN0X2lkOyBidWZfaWQgPCBmaXJzdF9pZCAr IG5faWQ7IGJ1Zl9pZCsrKSB7CisgICAgICBidWZmZXIgPSBwcml2LT5idWZmZXJzW2J1Zl9pZF07 CisgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICBkcmkzX2ZyZWVfcmVuZGVyX2J1ZmZlcihw cml2LCBidWZmZXIpOworICAgICAgICAgcHJpdi0+YnVmZmVyc1tidWZfaWRdID0gTlVMTDsKKyAg ICAgIH0KKyAgIH0KK30KKworc3RhdGljIGludAorZHJpM19nZXRfYnVmZmVycyhfX0RSSWRyYXdh YmxlICpkcmlEcmF3YWJsZSwKKyAgICAgICAgICAgICAgICAgaW50ICp3aWR0aCwgaW50ICpoZWln aHQsCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmb3JtYXQsCisgICAgICAgICAgICAg ICAgIHVpbnQzMl90ICpzdGFtcCwKKyAgICAgICAgICAgICAgICAgdm9pZCAqbG9hZGVyUHJpdmF0 ZSwKKyAgICAgICAgICAgICAgICAgdWludDMyX3QgYnVmZmVyX21hc2ssCisgICAgICAgICAgICAg ICAgIHN0cnVjdCBfX0RSSWltYWdlTGlzdCAqYnVmZmVycykKK3sKKyAgIHN0cnVjdCBkcmkzX2Ry YXdhYmxlICpwcml2ID0gbG9hZGVyUHJpdmF0ZTsKKyAgIHN0cnVjdCBkcmkzX2J1ZmZlciAgICpm cm9udCwgKmJhY2s7CisKKyAgIGJ1ZmZlcnMtPmZyb250ID0gTlVMTDsKKyAgIGJ1ZmZlcnMtPmJh Y2sgPSBOVUxMOworCisgICBmcm9udCA9IE5VTEw7CisgICBiYWNrID0gTlVMTDsKKworICAgaWYg KCFkcmkzX3VwZGF0ZV9kcmF3YWJsZShkcmlEcmF3YWJsZSwgbG9hZGVyUHJpdmF0ZSkpCisgICAg ICByZXR1cm4gZmFsc2U7CisKKyAgIGlmIChwcml2LT5pc19waXhtYXApCisgICAgICBidWZmZXJf bWFzayB8PSBfX0RSSV9JTUFHRV9CVUZGRVJfRlJPTlQ7CisKKyAgIGlmIChidWZmZXJfbWFzayAm IF9fRFJJX0lNQUdFX0JVRkZFUl9GUk9OVCkgeworICAgICAgaWYgKHByaXYtPmlzX3BpeG1hcCkK KyAgICAgICAgIGZyb250ID0gZHJpM19nZXRfcGl4bWFwX2J1ZmZlcihkcmlEcmF3YWJsZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpM19idWZmZXJfZnJvbnQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyUHJpdmF0ZSk7CisgICAgICBl bHNlCisgICAgICAgICBmcm9udCA9IGRyaTNfZ2V0X2J1ZmZlcihkcmlEcmF3YWJsZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRyaTNfYnVmZmVyX2Zyb250LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbG9hZGVyUHJpdmF0ZSk7CisKKyAgICAgIGlmICghZnJvbnQpCisgICAgICAgICBy ZXR1cm4gZmFsc2U7CisgICAgICBwcml2LT5oYXZlX2Zha2VfZnJvbnQgPSAhcHJpdi0+aXNfcGl4 bWFwOworICAgfSBlbHNlIHsKKyAgICAgIGRyaTNfZnJlZV9idWZmZXJzKGRyaURyYXdhYmxlLCBk cmkzX2J1ZmZlcl9mcm9udCwgbG9hZGVyUHJpdmF0ZSk7CisgICAgICBwcml2LT5oYXZlX2Zha2Vf ZnJvbnQgPSAwOworICAgfQorCisgICBpZiAoYnVmZmVyX21hc2sgJiBfX0RSSV9JTUFHRV9CVUZG RVJfQkFDSykgeworICAgICAgYmFjayA9IGRyaTNfZ2V0X2J1ZmZlcihkcmlEcmF3YWJsZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkcmkzX2J1ZmZlcl9iYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs b2FkZXJQcml2YXRlKTsKKyAgICAgIGlmICghYmFjaykKKyAgICAgICAgIHJldHVybiBmYWxzZTsK KyAgICAgIHByaXYtPmhhdmVfYmFjayA9IDE7CisgICB9IGVsc2UgeworICAgICAgZHJpM19mcmVl X2J1ZmZlcnMoZHJpRHJhd2FibGUsIGRyaTNfYnVmZmVyX2JhY2ssIGxvYWRlclByaXZhdGUpOwor ICAgICAgcHJpdi0+aGF2ZV9iYWNrID0gMDsKKyAgIH0KKworICAgaWYgKGZyb250KQorICAgICAg YnVmZmVycy0+ZnJvbnQgPSBmcm9udC0+aW1hZ2U7CisgICAKKyAgIGlmIChiYWNrKQorICAgICAg YnVmZmVycy0+YmFjayA9IGJhY2stPmltYWdlOworCisgICBwcml2LT5zdGFtcCA9IHN0YW1wOwor CisgICAvKiBSZXBvcnQgYmFjayBjdXJyZW50IGdlb21ldHJ5ICovCisgICAqd2lkdGggPSBwcml2 LT53aWR0aDsKKyAgICpoZWlnaHQgPSBwcml2LT5oZWlnaHQ7CisgICByZXR1cm4gdHJ1ZTsKK30K Kworc3RhdGljIGludDY0X3QKK2RyaTNfc3dhcF9idWZmZXJzKF9fR0xYRFJJZHJhd2FibGUgKnBk cmF3LCBpbnQ2NF90IHRhcmdldF9tc2MsIGludDY0X3QgZGl2aXNvciwKKyAgICAgICAgICAgICAg ICAgIGludDY0X3QgcmVtYWluZGVyLCBCb29sIGZsdXNoKQoreworICAgc3RydWN0IGRyaTNfZHJh d2FibGUgKnByaXYgPSAoc3RydWN0IGRyaTNfZHJhd2FibGUgKikgcGRyYXc7CisgICBzdHJ1Y3Qg ZHJpM19zY3JlZW4gKnBzYyA9IChzdHJ1Y3QgZHJpM19zY3JlZW4gKikgcHJpdi0+YmFzZS5wc2M7 CisgICBEaXNwbGF5ICpkcHkgPSBwcml2LT5iYXNlLnBzYy0+ZHB5OworICAgeGNiX2Nvbm5lY3Rp b25fdCAqYyA9IFhHZXRYQ0JDb25uZWN0aW9uKGRweSk7CisgICBpbnQgYnVmX2lkID0gRFJJM19C QUNLX0lEKHByaXYtPmN1cl9iYWNrKTsKKyAgIGludDY0X3QgcmV0ID0gMDsKKworICAgX19EUklj b250ZXh0ICpjdHggPSBkcmkzX2dldF9jdXJyZW50X2NvbnRleHQoKTsKKyAgIHVuc2lnbmVkIGZs YWdzID0gX19EUkkyX0ZMVVNIX0RSQVdBQkxFOworICAgaWYgKGZsdXNoKQorICAgICAgZmxhZ3Mg fD0gX19EUkkyX0ZMVVNIX0NPTlRFWFQ7CisgICBkcmkzX2ZsdXNoKHBzYywgY3R4LCBwcml2LCBm bGFncywgX19EUkkyX1RIUk9UVExFX1NXQVBCVUZGRVIpOworICAgIAorICAgcHJlc2VudF9mbHVz aF9ldmVudHMocHJpdik7CisKKyAgIGlmIChwcml2LT5idWZmZXJzW2J1Zl9pZF0gJiYgIXByaXYt PmlzX3BpeG1hcCkgeworICAgICAgZHJpM19mZW5jZV9yZXNldChjLCBwcml2LT5idWZmZXJzW2J1 Zl9pZF0pOworCisgICAgICAvKiBDb21wdXRlIHdoZW4gd2Ugd2FudCB0aGUgZnJhbWUgc2hvd24g YnkgdGFraW5nIHRoZSBsYXN0IGtub3duIHN1Y2Nlc3NmdWwKKyAgICAgICAqIE1TQyBhbmQgYWRk aW5nIGluIGEgc3dhcCBpbnRlcnZhbCBmb3IgZWFjaCBvdXRzdGFuZGluZyBzd2FwIHJlcXVlc3QK KyAgICAgICAqLworICAgICAgKytwcml2LT5wcmVzZW50X3JlcXVlc3Rfc2VyaWFsOworICAgICAg aWYgKHRhcmdldF9tc2MgPT0gMCkKKyAgICAgICAgIHRhcmdldF9tc2MgPSBwcml2LT5tc2MgKyBw cml2LT5zd2FwX2ludGVydmFsICogKHByaXYtPnByZXNlbnRfcmVxdWVzdF9zZXJpYWwgLSBwcml2 LT5wcmVzZW50X2V2ZW50X3NlcmlhbCk7CisKKyAgICAgIHByaXYtPmJ1ZmZlcnNbYnVmX2lkXS0+ YnVzeSA9IDE7CisgICAgICB4Y2JfcHJlc2VudF9waXhtYXAoYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICBwcml2LT5iYXNlLnhEcmF3YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBw cml2LT5idWZmZXJzW2J1Zl9pZF0tPnBpeG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBw cml2LT5wcmVzZW50X3JlcXVlc3Rfc2VyaWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmFsaWQgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHVwZGF0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogeF9vZmYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHlfb2ZmICovCisgICAgICAg ICAgICAgICAgICAgICAgICAgTm9uZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0YXJnZXRfY3J0YyAqLworICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgcHJpdi0+YnVmZmVyc1tidWZfaWRdLT5zeW5jX2ZlbmNlLAorICAg ICAgICAgICAgICAgICAgICAgICAgIFhDQl9QUkVTRU5UX09QVElPTl9OT05FLAorICAgICAgICAg ICAgICAgICAgICAgICAgIHRhcmdldF9tc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGl2 aXNvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5kZXIsIDAsIE5VTEwpOworICAg ICAgcmV0ID0gKytwcml2LT5zYmM7CisgICAgICBpZiAocHJpdi0+aGF2ZV9mYWtlX2Zyb250KSB7 CisgICAgICAgICBkcmkzX2ZlbmNlX3Jlc2V0KGMsIHByaXYtPmJ1ZmZlcnNbRFJJM19GUk9OVF9J RF0pOworICAgICAgICAgZHJpM19jb3B5X2FyZWEoYywKKyAgICAgICAgICAgICAgICAgICAgICAg IHByaXYtPmJ1ZmZlcnNbYnVmX2lkXS0+cGl4bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAg cHJpdi0+YnVmZmVyc1tEUkkzX0ZST05UX0lEXS0+cGl4bWFwLAorICAgICAgICAgICAgICAgICAg ICAgICAgZHJpM19kcmF3YWJsZV9nYyhwcml2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAs IDAsIDAsIDAsIHByaXYtPndpZHRoLCBwcml2LT5oZWlnaHQpOworICAgICAgICAgZHJpM19mZW5j ZV90cmlnZ2VyKGMsIHByaXYtPmJ1ZmZlcnNbRFJJM19GUk9OVF9JRF0pOworICAgICAgfQorICAg ICAgeGNiX2ZsdXNoKGMpOworICAgICAgaWYgKHByaXYtPnN0YW1wKQorICAgICAgICAgKysoKnBy aXYtPnN0YW1wKTsKKyAgIH0KKworICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorZHJp M19xdWVyeV92ZXJzaW9uKERpc3BsYXkgKmRweSwgaW50ICptYWpvciwgaW50ICptaW5vcikKK3sK KyAgIHhjYl9kcmkzX3F1ZXJ5X3ZlcnNpb25fY29va2llX3QgICAgICBjb29raWU7CisgICB4Y2Jf ZHJpM19xdWVyeV92ZXJzaW9uX3JlcGx5X3QgICAgICAgKnJlcGx5OyAgICAgICAKKyAgIHhjYl9j b25uZWN0aW9uX3QgICAgICAgICAgICAgICAgICAgICAqYyA9IFhHZXRYQ0JDb25uZWN0aW9uKGRw eSk7CisgICB4Y2JfZ2VuZXJpY19lcnJvcl90ICAgICAgICAgICAgICAgICAgKmVycm9yOworCisg ICBjb29raWUgPSB4Y2JfZHJpM19xdWVyeV92ZXJzaW9uKGMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFhDQl9EUkkzX01BSk9SX1ZFUlNJT04sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFhDQl9EUkkzX01JTk9SX1ZFUlNJT04pOworICAgcmVwbHkgPSB4 Y2JfZHJpM19xdWVyeV92ZXJzaW9uX3JlcGx5KGMsIGNvb2tpZSwgJmVycm9yKTsKKyAgIGlmICgh cmVwbHkpIHsKKyAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgZnJlZShlcnJvcik7CisgICAg ICB9CisgICAgICByZXR1cm4gMDsKKyAgIH0KKyAgICptYWpvciA9IHJlcGx5LT5tYWpvcl92ZXJz aW9uOworICAgKm1pbm9yID0gcmVwbHktPm1pbm9yX3ZlcnNpb247CisgICBmcmVlKHJlcGx5KTsK KyAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitwcmVzZW50X3F1ZXJ5X3ZlcnNpb24oRGlz cGxheSAqZHB5LCBpbnQgKm1ham9yLCBpbnQgKm1pbm9yKQoreworICAgeGNiX3ByZXNlbnRfcXVl cnlfdmVyc2lvbl9jb29raWVfdCAgIGNvb2tpZTsKKyAgIHhjYl9wcmVzZW50X3F1ZXJ5X3ZlcnNp b25fcmVwbHlfdCAgICAqcmVwbHk7ICAgICAgIAorICAgeGNiX2Nvbm5lY3Rpb25fdCAgICAgICAg ICAgICAgICAgICAgICpjID0gWEdldFhDQkNvbm5lY3Rpb24oZHB5KTsKKyAgIHhjYl9nZW5lcmlj X2Vycm9yX3QgICAgICAgICAgICAgICAgICAqZXJyb3I7CisKKyAgIGNvb2tpZSA9IHhjYl9wcmVz ZW50X3F1ZXJ5X3ZlcnNpb24oYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg WENCX1BSRVNFTlRfTUFKT1JfVkVSU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgWENCX1BSRVNFTlRfTUlOT1JfVkVSU0lPTik7CisgICByZXBseSA9IHhjYl9wcmVzZW50 X3F1ZXJ5X3ZlcnNpb25fcmVwbHkoYywgY29va2llLCAmZXJyb3IpOworICAgaWYgKCFyZXBseSkg eworICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICBmcmVlKGVycm9yKTsKKyAgICAgIH0KKyAg ICAgIHJldHVybiAwOworICAgfQorICAgKm1ham9yID0gcmVwbHktPm1ham9yX3ZlcnNpb247Cisg ICAqbWlub3IgPSByZXBseS0+bWlub3JfdmVyc2lvbjsKKyAgIGZyZWUocmVwbHkpOworICAgcmV0 dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2RyaTNfb3BlbihEaXNwbGF5ICpkcHksCisgICAgICAg ICAgV2luZG93IHJvb3QsCisgICAgICAgICAgQ0FSRDMyIHByb3ZpZGVyKQoreworICAgeGNiX2Ry aTNfb3Blbl9jb29raWVfdCAgICAgICBjb29raWU7CisgICB4Y2JfZHJpM19vcGVuX3JlcGx5X3Qg ICAgICAgICpyZXBseTsgICAgICAgCisgICB4Y2JfY29ubmVjdGlvbl90ICAgICAgICAgICAgICpj ID0gWEdldFhDQkNvbm5lY3Rpb24oZHB5KTsKKyAgIHhjYl9nZW5lcmljX2Vycm9yX3QgICAgICAg ICAgKmVycm9yOworICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBmZDsKKworICAgY29v a2llID0geGNiX2RyaTNfb3BlbihjLAorICAgICAgICAgICAgICAgICAgICAgICAgICByb290LAor ICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcik7CisKKyAgIHJlcGx5ID0geGNiX2Ry aTNfb3Blbl9yZXBseShjLCBjb29raWUsICZlcnJvcik7CisgICBpZiAoIXJlcGx5KQorICAgICAg cmV0dXJuIC0xOworCisgICBpZiAocmVwbHktPm5mZCAhPSAxKSB7CisgICAgICBmcmVlKHJlcGx5 KTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKworICAgZmQgPSB4Y2JfZHJpM19vcGVuX3JlcGx5 X2ZkcyhjLCByZXBseSlbMF07CisgICBmY250bChmZCwgRl9TRVRGRCwgRkRfQ0xPRVhFQyk7CisK KyAgIHJldHVybiBmZDsKK30KKworCitzdGF0aWMgdm9pZAorZHJpM19kZXN0cm95X3NjcmVlbihz dHJ1Y3QgZ2x4X3NjcmVlbiAqYmFzZSkKK3sKKyAgIHN0cnVjdCBkcmkzX3NjcmVlbiAqcHNjID0g KHN0cnVjdCBkcmkzX3NjcmVlbiAqKSBiYXNlOworCisgICAvKiBGcmVlIHRoZSBkaXJlY3QgcmVu ZGVyaW5nIHBlciBzY3JlZW4gZGF0YSAqLworICAgKCpwc2MtPmNvcmUtPmRlc3Ryb3lTY3JlZW4p IChwc2MtPmRyaVNjcmVlbik7CisgICBkcmlEZXN0cm95Q29uZmlncyhwc2MtPmRyaXZlcl9jb25m aWdzKTsKKyAgIGNsb3NlKHBzYy0+ZmQpOworICAgZnJlZShwc2MpOworfQorCitzdGF0aWMgaW50 CitkcmkzX3NldF9zd2FwX2ludGVydmFsKF9fR0xYRFJJZHJhd2FibGUgKnBkcmF3LCBpbnQgaW50 ZXJ2YWwpCit7CisgICBzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqcHJpdiA9ICAoc3RydWN0IGRyaTNf ZHJhd2FibGUgKikgcGRyYXc7CisgICBHTGludCB2YmxhbmtfbW9kZSA9IERSSV9DT05GX1ZCTEFO S19ERUZfSU5URVJWQUxfMTsKKyAgIHN0cnVjdCBkcmkzX3NjcmVlbiAqcHNjID0gKHN0cnVjdCBk cmkzX3NjcmVlbiAqKSBwcml2LT5iYXNlLnBzYzsKKworICAgaWYgKHBzYy0+Y29uZmlnKQorICAg ICAgcHNjLT5jb25maWctPmNvbmZpZ1F1ZXJ5aShwc2MtPmRyaVNjcmVlbiwKKwkJCQkidmJsYW5r X21vZGUiLCAmdmJsYW5rX21vZGUpOworCisgICBzd2l0Y2ggKHZibGFua19tb2RlKSB7CisgICBj YXNlIERSSV9DT05GX1ZCTEFOS19ORVZFUjoKKyAgICAgIGlmIChpbnRlcnZhbCAhPSAwKQorICAg ICAgICAgcmV0dXJuIEdMWF9CQURfVkFMVUU7CisgICAgICBicmVhazsKKyAgIGNhc2UgRFJJX0NP TkZfVkJMQU5LX0FMV0FZU19TWU5DOgorICAgICAgaWYgKGludGVydmFsIDw9IDApCisJIHJldHVy biBHTFhfQkFEX1ZBTFVFOworICAgICAgYnJlYWs7CisgICBkZWZhdWx0OgorICAgICAgYnJlYWs7 CisgICB9CisKKyAgIHByaXYtPnN3YXBfaW50ZXJ2YWwgPSBpbnRlcnZhbDsKKworICAgcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQKK2RyaTNfZ2V0X3N3YXBfaW50ZXJ2YWwoX19HTFhEUklkcmF3 YWJsZSAqcGRyYXcpCit7CisgICBzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqcHJpdiA9ICAoc3RydWN0 IGRyaTNfZHJhd2FibGUgKikgcGRyYXc7CisKKyAgcmV0dXJuIHByaXYtPnN3YXBfaW50ZXJ2YWw7 Cit9CisKK3N0YXRpYyBjb25zdCBfX0RSSWltYWdlTG9hZGVyRXh0ZW5zaW9uIGltYWdlTG9hZGVy RXh0ZW5zaW9uID0geworICAge19fRFJJX0lNQUdFX0xPQURFUiwgX19EUklfSU1BR0VfTE9BREVS X1ZFUlNJT059LAorICAgLmdldEJ1ZmZlcnMgPSBkcmkzX2dldF9idWZmZXJzLAorICAgLmZsdXNo RnJvbnRCdWZmZXIgPSBkcmkzX2ZsdXNoX2Zyb250X2J1ZmZlciwKK307CisKK3N0YXRpYyB2b2lk CitkcmkzX2JpbmRfdGV4X2ltYWdlKERpc3BsYXkgKiBkcHksCisJCSAgICBHTFhEcmF3YWJsZSBk cmF3YWJsZSwKKwkJICAgIGludCBidWZmZXIsIGNvbnN0IGludCAqYXR0cmliX2xpc3QpCit7Cisg ICBzdHJ1Y3QgZ2x4X2NvbnRleHQgKmdjID0gX19nbFhHZXRDdXJyZW50Q29udGV4dCgpOworICAg c3RydWN0IGRyaTNfY29udGV4dCAqcGNwID0gKHN0cnVjdCBkcmkzX2NvbnRleHQgKikgZ2M7Cisg ICBfX0dMWERSSWRyYXdhYmxlICpiYXNlID0gR2V0R0xYRFJJRHJhd2FibGUoZHB5LCBkcmF3YWJs ZSk7CisgICBzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqcGRyYXcgPSAoc3RydWN0IGRyaTNfZHJhd2Fi bGUgKikgYmFzZTsKKyAgIHN0cnVjdCBkcmkzX3NjcmVlbiAqcHNjOworCisgICBpZiAocGRyYXcg IT0gTlVMTCkgeworICAgICAgcHNjID0gKHN0cnVjdCBkcmkzX3NjcmVlbiAqKSBiYXNlLT5wc2M7 CisKKyAgICAgIGlmIChwc2MtPmYgJiYKKyAgICAgICAgICAgcHNjLT5mLT5iYXNlLnZlcnNpb24g Pj0gMyAmJiBwc2MtPmYtPmludmFsaWRhdGUpCisJIHBzYy0+Zi0+aW52YWxpZGF0ZShwZHJhdy0+ ZHJpRHJhd2FibGUpOworCisgICAgICBYU3luYyhkcHksIGZhbHNlKTsKKyAgICAgIGlmIChwc2Mt PnRleEJ1ZmZlci0+YmFzZS52ZXJzaW9uID49IDIgJiYKKwkgIHBzYy0+dGV4QnVmZmVyLT5zZXRU ZXhCdWZmZXIyICE9IE5VTEwpIHsKKwkgKCpwc2MtPnRleEJ1ZmZlci0+c2V0VGV4QnVmZmVyMikg KHBjcC0+ZHJpQ29udGV4dCwKKwkJCQkJICAgcGRyYXctPmJhc2UudGV4dHVyZVRhcmdldCwKKwkJ CQkJICAgcGRyYXctPmJhc2UudGV4dHVyZUZvcm1hdCwKKwkJCQkJICAgcGRyYXctPmRyaURyYXdh YmxlKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCSAoKnBzYy0+dGV4QnVmZmVyLT5zZXRUZXhC dWZmZXIpIChwY3AtPmRyaUNvbnRleHQsCisJCQkJCSAgcGRyYXctPmJhc2UudGV4dHVyZVRhcmdl dCwKKwkJCQkJICBwZHJhdy0+ZHJpRHJhd2FibGUpOworICAgICAgfQorICAgfQorfQorCitzdGF0 aWMgdm9pZAorZHJpM19yZWxlYXNlX3RleF9pbWFnZShEaXNwbGF5ICogZHB5LCBHTFhEcmF3YWJs ZSBkcmF3YWJsZSwgaW50IGJ1ZmZlcikKK3sKKyNpZiBfX0RSSV9URVhfQlVGRkVSX1ZFUlNJT04g Pj0gMworICAgc3RydWN0IGdseF9jb250ZXh0ICpnYyA9IF9fZ2xYR2V0Q3VycmVudENvbnRleHQo KTsKKyAgIHN0cnVjdCBkcmkzX2NvbnRleHQgKnBjcCA9IChzdHJ1Y3QgZHJpM19jb250ZXh0ICop IGdjOworICAgX19HTFhEUklkcmF3YWJsZSAqYmFzZSA9IEdldEdMWERSSURyYXdhYmxlKGRweSwg ZHJhd2FibGUpOworICAgc3RydWN0IGdseF9kaXNwbGF5ICpkcHlQcml2ID0gX19nbFhJbml0aWFs aXplKGRweSk7CisgICBzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqcGRyYXcgPSAoc3RydWN0IGRyaTNf ZHJhd2FibGUgKikgYmFzZTsKKyAgIHN0cnVjdCBkcmkzX2Rpc3BsYXkgKnBkcCA9CisgICAgICAo c3RydWN0IGRyaTNfZGlzcGxheSAqKSBkcHlQcml2LT5kcmkzRGlzcGxheTsKKyAgIHN0cnVjdCBk cmkzX3NjcmVlbiAqcHNjOworCisgICBpZiAocGRyYXcgIT0gTlVMTCkgeworICAgICAgcHNjID0g KHN0cnVjdCBkcmkzX3NjcmVlbiAqKSBiYXNlLT5wc2M7CisKKyAgICAgIGlmIChwc2MtPnRleEJ1 ZmZlci0+YmFzZS52ZXJzaW9uID49IDMgJiYKKyAgICAgICAgICBwc2MtPnRleEJ1ZmZlci0+cmVs ZWFzZVRleEJ1ZmZlciAhPSBOVUxMKSB7CisgICAgICAgICAoKnBzYy0+dGV4QnVmZmVyLT5yZWxl YXNlVGV4QnVmZmVyKSAocGNwLT5kcmlDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBkcmF3LT5iYXNlLnRleHR1cmVUYXJnZXQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRyYXctPmRyaURyYXdhYmxlKTsKKyAg ICAgIH0KKyAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGdseF9jb250ZXh0 X3Z0YWJsZSBkcmkzX2NvbnRleHRfdnRhYmxlID0geworICAgZHJpM19kZXN0cm95X2NvbnRleHQs CisgICBkcmkzX2JpbmRfY29udGV4dCwKKyAgIGRyaTNfdW5iaW5kX2NvbnRleHQsCisgICBkcmkz X3dhaXRfZ2wsCisgICBkcmkzX3dhaXRfeCwKKyAgIERSSV9nbFhVc2VYRm9udCwKKyAgIGRyaTNf YmluZF90ZXhfaW1hZ2UsCisgICBkcmkzX3JlbGVhc2VfdGV4X2ltYWdlLAorICAgTlVMTCwgLyog Z2V0X3Byb2NfYWRkcmVzcyAqLworfTsKKworc3RhdGljIHZvaWQKK2RyaTNfYmluZF9leHRlbnNp b25zKHN0cnVjdCBkcmkzX3NjcmVlbiAqcHNjLCBzdHJ1Y3QgZ2x4X2Rpc3BsYXkgKiBwcml2LAor ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZHJpdmVyTmFtZSkKK3sKKy8vICAgY29u c3Qgc3RydWN0IGRyaTNfZGlzcGxheSAqY29uc3QgcGRwID0gKHN0cnVjdCBkcmkzX2Rpc3BsYXkg KikgcHJpdi0+ZHJpM0Rpc3BsYXk7CisgICBjb25zdCBfX0RSSWV4dGVuc2lvbiAqKmV4dGVuc2lv bnM7CisgICB1bnNpZ25lZCBtYXNrOworICAgaW50IGk7CisKKyAgIGV4dGVuc2lvbnMgPSBwc2Mt PmNvcmUtPmdldEV4dGVuc2lvbnMocHNjLT5kcmlTY3JlZW4pOworCisgICBfX2dsWEVuYWJsZURp cmVjdEV4dGVuc2lvbigmcHNjLT5iYXNlLCAiR0xYX1NHSV92aWRlb19zeW5jIik7CisgICBfX2ds WEVuYWJsZURpcmVjdEV4dGVuc2lvbigmcHNjLT5iYXNlLCAiR0xYX1NHSV9zd2FwX2NvbnRyb2wi KTsKKyAgIF9fZ2xYRW5hYmxlRGlyZWN0RXh0ZW5zaW9uKCZwc2MtPmJhc2UsICJHTFhfTUVTQV9z d2FwX2NvbnRyb2wiKTsKKyAgIF9fZ2xYRW5hYmxlRGlyZWN0RXh0ZW5zaW9uKCZwc2MtPmJhc2Us ICJHTFhfU0dJX21ha2VfY3VycmVudF9yZWFkIik7CisKKyAgIC8qCisgICAgKiBHTFhfSU5URUxf c3dhcF9ldmVudCBpcyBicm9rZW4gb24gdGhlIHNlcnZlciBzaWRlLCB3aGVyZSBpdCdzCisgICAg KiBjdXJyZW50bHkgdW5jb25kaXRpb25hbGx5IGVuYWJsZWQuIFRoaXMgY29tcGxldGVseSBicmVh a3MKKyAgICAqIHN5c3RlbXMgcnVubmluZyBvbiBkcml2ZXJzIHdoaWNoIGRvbid0IHN1cHBvcnQg dGhhdCBleHRlbnNpb24uCisgICAgKiBUaGVyZSdzIG5vIHdheSB0byB0ZXN0IGZvciBpdHMgcHJl c2VuY2Ugb24gdGhpcyBzaWRlLCBzbyBpbnN0ZWFkCisgICAgKiBvZiBkaXNhYmxpbmcgaXQgdW5j b25kaXRpb25hbGx5LCBqdXN0IGRpc2FibGUgaXQgZm9yIGRyaXZlcnMKKyAgICAqIHdoaWNoIGFy ZSBrbm93biB0byBub3Qgc3VwcG9ydCBpdCwgb3IgZm9yIEREWCBkcml2ZXJzIHN1cHBvcnRpbmcK KyAgICAqIG9ubHkgYW4gb2xkZXIgKHByZS1TY2hlZHVsZVN3YXApIHZlcnNpb24gb2YgRFJJMi4K KyAgICAqCisgICAgKiBUaGlzIGlzIGEgaGFjayB3aGljaCBpcyByZXF1aXJlZCB1bnRpbDoKKyAg ICAqIGh0dHA6Ly9saXN0cy54Lm9yZy9hcmNoaXZlcy94b3JnLWRldmVsLzIwMTMtRmVicnVhcnkv MDM1NDQ5Lmh0bWwKKyAgICAqIGlzIG1lcmdlZCBhbmQgdXBkYXRlZCB4c2VydmVyIG1ha2VzIGl0 J3Mgd2F5IGludG8gZGlzdHJvczoKKyAgICAqLworLy8gICBpZiAocGRwLT5zd2FwQXZhaWxhYmxl ICYmIHN0cmNtcChkcml2ZXJOYW1lLCAidm13Z2Z4IikgIT0gMCkgeworLy8gICAgICBfX2dsWEVu YWJsZURpcmVjdEV4dGVuc2lvbigmcHNjLT5iYXNlLCAiR0xYX0lOVEVMX3N3YXBfZXZlbnQiKTsK Ky8vICAgfQorCisgICBtYXNrID0gcHNjLT5pbWFnZV9kcml2ZXItPmdldEFQSU1hc2socHNjLT5k cmlTY3JlZW4pOworCisgICBfX2dsWEVuYWJsZURpcmVjdEV4dGVuc2lvbigmcHNjLT5iYXNlLCAi R0xYX0FSQl9jcmVhdGVfY29udGV4dCIpOworICAgX19nbFhFbmFibGVEaXJlY3RFeHRlbnNpb24o JnBzYy0+YmFzZSwgIkdMWF9BUkJfY3JlYXRlX2NvbnRleHRfcHJvZmlsZSIpOworCisgICBpZiAo KG1hc2sgJiAoMSA8PCBfX0RSSV9BUElfR0xFUzIpKSAhPSAwKQorICAgICAgX19nbFhFbmFibGVE aXJlY3RFeHRlbnNpb24oJnBzYy0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJHTFhfRVhUX2NyZWF0ZV9jb250ZXh0X2VzMl9wcm9maWxlIik7CisKKyAgIGZvciAoaSA9 IDA7IGV4dGVuc2lvbnNbaV07IGkrKykgeworICAgICAgaWYgKChzdHJjbXAoZXh0ZW5zaW9uc1tp XS0+bmFtZSwgX19EUklfVEVYX0JVRkZFUikgPT0gMCkpIHsKKwkgcHNjLT50ZXhCdWZmZXIgPSAo X19EUkl0ZXhCdWZmZXJFeHRlbnNpb24gKikgZXh0ZW5zaW9uc1tpXTsKKwkgX19nbFhFbmFibGVE aXJlY3RFeHRlbnNpb24oJnBzYy0+YmFzZSwgIkdMWF9FWFRfdGV4dHVyZV9mcm9tX3BpeG1hcCIp OworICAgICAgfQorCisgICAgICBpZiAoKHN0cmNtcChleHRlbnNpb25zW2ldLT5uYW1lLCBfX0RS STJfRkxVU0gpID09IDApKSB7CisJIHBzYy0+ZiA9IChfX0RSSTJmbHVzaEV4dGVuc2lvbiAqKSBl eHRlbnNpb25zW2ldOworCSAvKiBpbnRlcm5hbCBkcml2ZXIgZXh0ZW5zaW9uLCBubyBHTCBleHRl bnNpb24gZXhwb3NlZCAqLworICAgICAgfQorCisgICAgICBpZiAoKHN0cmNtcChleHRlbnNpb25z W2ldLT5uYW1lLCBfX0RSSTJfQ09ORklHX1FVRVJZKSA9PSAwKSkKKwkgcHNjLT5jb25maWcgPSAo X19EUkkyY29uZmlnUXVlcnlFeHRlbnNpb24gKikgZXh0ZW5zaW9uc1tpXTsKKworICAgICAgaWYg KCgoc3RyY21wKGV4dGVuc2lvbnNbaV0tPm5hbWUsIF9fRFJJMl9USFJPVFRMRSkgPT0gMCkpKQor CSBwc2MtPnRocm90dGxlID0gKF9fRFJJMnRocm90dGxlRXh0ZW5zaW9uICopIGV4dGVuc2lvbnNb aV07CisKKyAgICAgIGlmIChzdHJjbXAoZXh0ZW5zaW9uc1tpXS0+bmFtZSwgX19EUkkyX1JPQlVT VE5FU1MpID09IDApCisgICAgICAgICBfX2dsWEVuYWJsZURpcmVjdEV4dGVuc2lvbigmcHNjLT5i YXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdMWF9BUkJfY3JlYXRl X2NvbnRleHRfcm9idXN0bmVzcyIpOworICAgfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGds eF9zY3JlZW5fdnRhYmxlIGRyaTNfc2NyZWVuX3Z0YWJsZSA9IHsKKyAgIGRyaTNfY3JlYXRlX2Nv bnRleHQsCisgICBkcmkzX2NyZWF0ZV9jb250ZXh0X2F0dHJpYnMKK307CisKK3N0YXRpYyBzdHJ1 Y3QgZ2x4X3NjcmVlbiAqCitkcmkzX2NyZWF0ZV9zY3JlZW4oaW50IHNjcmVlbiwgc3RydWN0IGds eF9kaXNwbGF5ICogcHJpdikKK3sKKyAgIGNvbnN0IF9fRFJJY29uZmlnICoqZHJpdmVyX2NvbmZp Z3M7CisgICBjb25zdCBfX0RSSWV4dGVuc2lvbiAqKmV4dGVuc2lvbnM7CisgICBjb25zdCBzdHJ1 Y3QgZHJpM19kaXNwbGF5ICpjb25zdCBwZHAgPSAoc3RydWN0IGRyaTNfZGlzcGxheSAqKQorICAg ICAgcHJpdi0+ZHJpM0Rpc3BsYXk7CisgICBzdHJ1Y3QgZHJpM19zY3JlZW4gKnBzYzsKKyAgIF9f R0xYRFJJc2NyZWVuICpwc3A7CisgICBzdHJ1Y3QgZ2x4X2NvbmZpZyAqY29uZmlncyA9IE5VTEws ICp2aXN1YWxzID0gTlVMTDsKKyAgIGNoYXIgKmRyaXZlck5hbWUsICpkZXZpY2VOYW1lLCAqdG1w OworICAgaW50IGk7CisKKyAgIHBzYyA9IGNhbGxvYygxLCBzaXplb2YgKnBzYyk7CisgICBpZiAo cHNjID09IE5VTEwpCisgICAgICByZXR1cm4gTlVMTDsKKworICAgcHNjLT5mZCA9IC0xOworCisg ICBpZiAoIWdseF9zY3JlZW5faW5pdCgmcHNjLT5iYXNlLCBzY3JlZW4sIHByaXYpKSB7CisgICAg ICBmcmVlKHBzYyk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgIH0KKworICAgcHNjLT5mZCA9IGRy aTNfb3Blbihwcml2LT5kcHksIFJvb3RXaW5kb3cocHJpdi0+ZHB5LCBzY3JlZW4pLCBOb25lKTsK KyAgIGlmIChwc2MtPmZkIDwgMCkgeworICAgICAgZ2x4X3NjcmVlbl9jbGVhbnVwKCZwc2MtPmJh c2UpOworICAgICAgZnJlZShwc2MpOworICAgICAgSW5mb01lc3NhZ2VGKCJzY3JlZW4gJWQgZG9l cyBub3QgYXBwZWFyIHRvIGJlIERSSTMgY2FwYWJsZVxuIiwgc2NyZWVuKTsKKyAgICAgIHJldHVy biBOVUxMOworICAgfQorICAgZGV2aWNlTmFtZSA9IE5VTEw7CisKKyAgIGRyaXZlck5hbWUgPSBk cmkzX2dldF9kcml2ZXJfZm9yX2ZkKHBzYy0+ZmQpOworICAgaWYgKCFkcml2ZXJOYW1lKSB7Cisg ICAgICBFcnJvck1lc3NhZ2VGKCJObyBkcml2ZXIgZm91bmRcbiIpOworICAgICAgZ290byBoYW5k bGVfZXJyb3I7CisgICB9CisKKyAgIHBzYy0+ZHJpdmVyID0gZHJpT3BlbkRyaXZlcihkcml2ZXJO YW1lKTsKKyAgIGlmIChwc2MtPmRyaXZlciA9PSBOVUxMKSB7CisgICAgICBFcnJvck1lc3NhZ2VG KCJkcml2ZXIgcG9pbnRlciBtaXNzaW5nXG4iKTsKKyAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOwor ICAgfQorCisgICBleHRlbnNpb25zID0gZHJpR2V0RHJpdmVyRXh0ZW5zaW9ucyhwc2MtPmRyaXZl ciwgZHJpdmVyTmFtZSk7CisgICBpZiAoZXh0ZW5zaW9ucyA9PSBOVUxMKQorICAgICAgZ290byBo YW5kbGVfZXJyb3I7CisKKyAgIGZvciAoaSA9IDA7IGV4dGVuc2lvbnNbaV07IGkrKykgeworICAg ICAgaWYgKHN0cmNtcChleHRlbnNpb25zW2ldLT5uYW1lLCBfX0RSSV9DT1JFKSA9PSAwKQorCSBw c2MtPmNvcmUgPSAoX19EUkljb3JlRXh0ZW5zaW9uICopIGV4dGVuc2lvbnNbaV07CisgICAgICBp ZiAoc3RyY21wKGV4dGVuc2lvbnNbaV0tPm5hbWUsIF9fRFJJX0lNQUdFX0RSSVZFUikgPT0gMCkK KwkgcHNjLT5pbWFnZV9kcml2ZXIgPSAoX19EUklpbWFnZURyaXZlckV4dGVuc2lvbiAqKSBleHRl bnNpb25zW2ldOworICAgfQorCisKKyAgIGlmIChwc2MtPmNvcmUgPT0gTlVMTCkgeworICAgICAg RXJyb3JNZXNzYWdlRigiY29yZSBkcmkgZHJpdmVyIGV4dGVuc2lvbiBub3QgZm91bmRcbiIpOwor ICAgICAgZ290byBoYW5kbGVfZXJyb3I7CisgICB9CisKKyAgIGlmIChwc2MtPmltYWdlX2RyaXZl ciA9PSBOVUxMKSB7CisgICAgICBFcnJvck1lc3NhZ2VGKCJpbWFnZSBkcml2ZXIgZXh0ZW5zaW9u IG5vdCBmb3VuZFxuIik7CisgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKKyAgIH0KKworICAgcHNj LT5kcmlTY3JlZW4gPQorICAgICAgcHNjLT5pbWFnZV9kcml2ZXItPmNyZWF0ZU5ld1NjcmVlbjIo c2NyZWVuLCBwc2MtPmZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNvbnN0IF9fRFJJZXh0ZW5zaW9uICoqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnBkcC0+bG9hZGVyX2V4dGVuc2lvbnNbMF0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRyaXZlcl9jb25maWdzLCBwc2MpOworCisgICBp ZiAocHNjLT5kcmlTY3JlZW4gPT0gTlVMTCkgeworICAgICAgRXJyb3JNZXNzYWdlRigiZmFpbGVk IHRvIGNyZWF0ZSBkcmkgc2NyZWVuXG4iKTsKKyAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOworICAg fQorCisgICBleHRlbnNpb25zID0gKCpwc2MtPmNvcmUtPmdldEV4dGVuc2lvbnMpKHBzYy0+ZHJp U2NyZWVuKTsKKworICAgZm9yIChpID0gMDsgZXh0ZW5zaW9uc1tpXTsgaSsrKSB7CisgICAgICBp ZiAoc3RyY21wKGV4dGVuc2lvbnNbaV0tPm5hbWUsIF9fRFJJX0lNQUdFKSA9PSAwKQorICAgICAg ICAgcHNjLT5pbWFnZSA9IChfX0RSSWltYWdlRXh0ZW5zaW9uICopIGV4dGVuc2lvbnNbaV07Cisg ICB9CisKKyAgIGlmIChwc2MtPmltYWdlID09IE5VTEwpIHsKKyAgICAgIEVycm9yTWVzc2FnZUYo ImltYWdlIGV4dGVuc2lvbiBub3QgZm91bmRcbiIpOworICAgICAgZ290byBoYW5kbGVfZXJyb3I7 CisgICB9CisKKyAgIGRyaTNfYmluZF9leHRlbnNpb25zKHBzYywgcHJpdiwgZHJpdmVyTmFtZSk7 CisKKyAgIGNvbmZpZ3MgPSBkcmlDb252ZXJ0Q29uZmlncyhwc2MtPmNvcmUsIHBzYy0+YmFzZS5j b25maWdzLCBkcml2ZXJfY29uZmlncyk7CisgICB2aXN1YWxzID0gZHJpQ29udmVydENvbmZpZ3Mo cHNjLT5jb3JlLCBwc2MtPmJhc2UudmlzdWFscywgZHJpdmVyX2NvbmZpZ3MpOworCisgICBpZiAo IWNvbmZpZ3MgfHwgIXZpc3VhbHMpCisgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CisKKyAgIGds eF9jb25maWdfZGVzdHJveV9saXN0KHBzYy0+YmFzZS5jb25maWdzKTsKKyAgIHBzYy0+YmFzZS5j b25maWdzID0gY29uZmlnczsKKyAgIGdseF9jb25maWdfZGVzdHJveV9saXN0KHBzYy0+YmFzZS52 aXN1YWxzKTsKKyAgIHBzYy0+YmFzZS52aXN1YWxzID0gdmlzdWFsczsKKworICAgcHNjLT5kcml2 ZXJfY29uZmlncyA9IGRyaXZlcl9jb25maWdzOworCisgICBwc2MtPmJhc2UudnRhYmxlID0gJmRy aTNfc2NyZWVuX3Z0YWJsZTsKKyAgIHBzcCA9ICZwc2MtPnZ0YWJsZTsKKyAgIHBzYy0+YmFzZS5k cmlTY3JlZW4gPSBwc3A7CisgICBwc3AtPmRlc3Ryb3lTY3JlZW4gPSBkcmkzX2Rlc3Ryb3lfc2Ny ZWVuOworICAgcHNwLT5jcmVhdGVEcmF3YWJsZSA9IGRyaTNfY3JlYXRlX2RyYXdhYmxlOworICAg cHNwLT5zd2FwQnVmZmVycyA9IGRyaTNfc3dhcF9idWZmZXJzOworCisgICBwc3AtPmdldERyYXdh YmxlTVNDID0gZHJpM19kcmF3YWJsZV9nZXRfbXNjOworICAgcHNwLT53YWl0Rm9yTVNDID0gZHJp M193YWl0X2Zvcl9tc2M7CisgICBwc3AtPndhaXRGb3JTQkMgPSBkcmkzX3dhaXRfZm9yX3NiYzsK KyAgIHBzcC0+c2V0U3dhcEludGVydmFsID0gZHJpM19zZXRfc3dhcF9pbnRlcnZhbDsKKyAgIHBz cC0+Z2V0U3dhcEludGVydmFsID0gZHJpM19nZXRfc3dhcF9pbnRlcnZhbDsKKyAgIF9fZ2xYRW5h YmxlRGlyZWN0RXh0ZW5zaW9uKCZwc2MtPmJhc2UsICJHTFhfT01MX3N5bmNfY29udHJvbCIpOwor CisgICBwc3AtPmNvcHlTdWJCdWZmZXIgPSBkcmkzX2NvcHlfc3ViX2J1ZmZlcjsKKyAgIF9fZ2xY RW5hYmxlRGlyZWN0RXh0ZW5zaW9uKCZwc2MtPmJhc2UsICJHTFhfTUVTQV9jb3B5X3N1Yl9idWZm ZXIiKTsKKworICAgZnJlZShkcml2ZXJOYW1lKTsKKyAgIGZyZWUoZGV2aWNlTmFtZSk7CisKKyAg IHRtcCA9IGdldGVudigiTElCR0xfU0hPV19GUFMiKTsKKyAgIHBzYy0+c2hvd19mcHMgPSB0bXAg JiYgc3RyY21wKHRtcCwgIjEiKSA9PSAwOworCisgICByZXR1cm4gJnBzYy0+YmFzZTsKKworaGFu ZGxlX2Vycm9yOgorICAgQ3JpdGljYWxFcnJvck1lc3NhZ2VGKCJmYWlsZWQgdG8gbG9hZCBkcml2 ZXI6ICVzXG4iLCBkcml2ZXJOYW1lKTsKKworICAgaWYgKGNvbmZpZ3MpCisgICAgICAgZ2x4X2Nv bmZpZ19kZXN0cm95X2xpc3QoY29uZmlncyk7CisgICBpZiAodmlzdWFscykKKyAgICAgICBnbHhf Y29uZmlnX2Rlc3Ryb3lfbGlzdCh2aXN1YWxzKTsKKyAgIGlmIChwc2MtPmRyaVNjcmVlbikKKyAg ICAgICBwc2MtPmNvcmUtPmRlc3Ryb3lTY3JlZW4ocHNjLT5kcmlTY3JlZW4pOworICAgcHNjLT5k cmlTY3JlZW4gPSBOVUxMOworICAgaWYgKHBzYy0+ZmQgPj0gMCkKKyAgICAgIGNsb3NlKHBzYy0+ ZmQpOworICAgaWYgKHBzYy0+ZHJpdmVyKQorICAgICAgZGxjbG9zZShwc2MtPmRyaXZlcik7CisK KyAgIGZyZWUoZHJpdmVyTmFtZSk7CisgICBmcmVlKGRldmljZU5hbWUpOworICAgZ2x4X3NjcmVl bl9jbGVhbnVwKCZwc2MtPmJhc2UpOworICAgZnJlZShwc2MpOworCisgICByZXR1cm4gTlVMTDsK K30KKworLyogQ2FsbGVkIGZyb20gX19nbFhGcmVlRGlzcGxheVByaXZhdGUuCisgKi8KK3N0YXRp YyB2b2lkCitkcmkzX2Rlc3Ryb3lfZGlzcGxheShfX0dMWERSSWRpc3BsYXkgKiBkcHkpCit7Cisg ICBmcmVlKGRweSk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSwgaW5pdGlhbGl6ZSBhbmQgcmV0dXJu IGEgX19EUklkaXNwbGF5UHJpdmF0ZSBvYmplY3QuCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIF9f Z2xYSW5pdGlhbGl6ZSgpIHdoZW4gd2UgYXJlIGdpdmVuIGEgbmV3CisgKiBkaXNwbGF5IHBvaW50 ZXIuCisgKi8KK19YX0hJRERFTiBfX0dMWERSSWRpc3BsYXkgKgorZHJpM19jcmVhdGVfZGlzcGxh eShEaXNwbGF5ICogZHB5KQoreworICAgc3RydWN0IGRyaTNfZGlzcGxheSAqcGRwOworICAgaW50 IGk7CisKKyAgIHBkcCA9IG1hbGxvYyhzaXplb2YgKnBkcCk7CisgICBpZiAocGRwID09IE5VTEwp CisgICAgICByZXR1cm4gTlVMTDsKKworICAgaWYgKCFkcmkzX3F1ZXJ5X3ZlcnNpb24oZHB5LCAm cGRwLT5kcmkzTWFqb3IsICZwZHAtPmRyaTNNaW5vcikpCisgICAgICBnb3RvIG5vX2V4dGVuc2lv bjsKKworICAgaWYgKCFwcmVzZW50X3F1ZXJ5X3ZlcnNpb24oZHB5LCAmcGRwLT5wcmVzZW50TWFq b3IsICZwZHAtPnByZXNlbnRNaW5vcikpCisgICAgICBnb3RvIG5vX2V4dGVuc2lvbjsKKworICAg cGRwLT5iYXNlLmRlc3Ryb3lEaXNwbGF5ID0gZHJpM19kZXN0cm95X2Rpc3BsYXk7CisgICBwZHAt PmJhc2UuY3JlYXRlU2NyZWVuID0gZHJpM19jcmVhdGVfc2NyZWVuOworCisgICBpID0gMDsKKwor ICAgcGRwLT5sb2FkZXJfZXh0ZW5zaW9uc1tpKytdID0gJmltYWdlTG9hZGVyRXh0ZW5zaW9uLmJh c2U7CisgICAKKyAgIHBkcC0+bG9hZGVyX2V4dGVuc2lvbnNbaSsrXSA9ICZzeXN0ZW1UaW1lRXh0 ZW5zaW9uLmJhc2U7CisKKyAgIHBkcC0+bG9hZGVyX2V4dGVuc2lvbnNbaSsrXSA9IE5VTEw7CisK KyAgIHJldHVybiAmcGRwLT5iYXNlOworbm9fZXh0ZW5zaW9uOgorICAgZnJlZShwZHApOworICAg cmV0dXJuIE5VTEw7Cit9CisKKyNlbmRpZiAvKiBHTFhfRElSRUNUX1JFTkRFUklORyAqLwpkaWZm IC0tZ2l0IGEvc3JjL2dseC9kcmkzX3ByaXYuaCBiL3NyYy9nbHgvZHJpM19wcml2LmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3MzkxOQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9nbHgvZHJpM19wcml2LmgKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg wqkgMjAxMyBLZWl0aCBQYWNrYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1v ZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBkb2N1 bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwg cHJvdmlkZWQgdGhhdAorICogdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFs bCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFu ZAorICogdGhhdCB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm90IGJlIHVzZWQg aW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlv biBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKKyAqIHdyaXR0ZW4gcHJpb3IgcGVy bWlzc2lvbi4gIFRoZSBjb3B5cmlnaHQgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucwor ICogYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3Nl LiAgSXQgaXMgcHJvdmlkZWQgImFzCisgKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQg d2FycmFudHkuCisgKgorICogVEhFIENPUFlSSUdIVCBIT0xERVJTIERJU0NMQUlNIEFMTCBXQVJS QU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCisgKiBJTkNMVURJTkcgQUxMIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PCisg KiBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgU1BF Q0lBTCwgSU5ESVJFQ1QgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdF UyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAorICogREFUQSBPUiBQUk9G SVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhF UgorICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRQorICogT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisv KiBUaGlzIGZpbGUgd2FzIGRlcml2ZWQgZnJvbSBkcmkyX3ByaXYuaCB3aGljaCBjYXJyaWVzIHRo ZSBmb2xsb3dpbmcKKyAqIGNvcHlyaWdodDoKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBSZWQg SGF0LCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnQtCisgKiB3YXJl IiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0CisgKiBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdo dAorICogbm90aWNlKHMpIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwg Y29waWVzIG9mIHRoZSBTb2Z0LQorICogd2FyZSBhbmQgdGhhdCBib3RoIHRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzIHBlcm1pc3Npb24KKyAqIG5vdGljZSBhcHBlYXIgaW4g c3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgKiBPUiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTC0KKyAqIElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWQorICogUklHSFRTLiBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBIT0xERVJTIElOQ0xVREVEIElOCisgKiBUSElT IE5PVElDRSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1Qg T1IgQ09OU0UtCisgKiBRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVS IFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAorICogREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgorICogVE9SVElP VVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBP UiBQRVJGT1ItCisgKiBNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqIEV4Y2VwdCBhcyBj b250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlciBz aGFsbAorICogbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21v dGUgdGhlIHNhbGUsIHVzZSBvcgorICogb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3 aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBvZgorICogdGhlIGNvcHlyaWdodCBo b2xkZXIuCisgKgorICogQXV0aG9yczoKKyAqICAgS3Jpc3RpYW4gSMO4Z3NiZXJnIChrcmhAcmVk aGF0LmNvbSkKKyAqLworCisjaW5jbHVkZSA8eGNiL3hjYi5oPgorI2luY2x1ZGUgPHhjYi9kcmkz Lmg+CisjaW5jbHVkZSA8eGNiL3ByZXNlbnQuaD4KKyNpbmNsdWRlIDx4Y2Ivc3luYy5oPgorCisv KiBGcm9tIHhtbHBvb2wvb3B0aW9ucy5oLCB1c2VyIGV4cG9zZWQgc28gc2hvdWxkIGJlIHN0YWJs ZSAqLworI2RlZmluZSBEUklfQ09ORl9WQkxBTktfTkVWRVIgMAorI2RlZmluZSBEUklfQ09ORl9W QkxBTktfREVGX0lOVEVSVkFMXzAgMQorI2RlZmluZSBEUklfQ09ORl9WQkxBTktfREVGX0lOVEVS VkFMXzEgMgorI2RlZmluZSBEUklfQ09ORl9WQkxBTktfQUxXQVlTX1NZTkMgMworCitlbnVtIGRy aTNfYnVmZmVyX3R5cGUgeworICAgZHJpM19idWZmZXJfYmFjayA9IDAsCisgICBkcmkzX2J1ZmZl cl9mcm9udCA9IDEKK307CisKK3N0cnVjdCBkcmkzX2J1ZmZlciB7CisgICBfX0RSSWltYWdlICAg KmltYWdlOworICAgdWludDMyX3QgICAgIHBpeG1hcDsKKyAgIHVpbnQzMl90ICAgICBzeW5jX2Zl bmNlOworICAgaW50MzJfdCAgICAgICpzaG1fZmVuY2U7CisgICBHTGJvb2xlYW4gICAgYnVzeTsK KyAgIHZvaWQgICAgICAgICAqZHJpdmVyUHJpdmF0ZTsKKworICAgdWludDMyX3QgICAgIHNpemU7 CisgICB1aW50MzJfdCAgICAgcGl0Y2g7CisgICB1aW50MzJfdCAgICAgY3BwOworICAgdWludDMy X3QgICAgIGZsYWdzOworICAgdWludDMyX3QgICAgIHdpZHRoLCBoZWlnaHQ7CisKKyAgIGVudW0g ZHJpM19idWZmZXJfdHlwZSAgICAgICAgYnVmZmVyX3R5cGU7Cit9OworCitzdHJ1Y3QgZHJpM19k aXNwbGF5Cit7CisgICBfX0dMWERSSWRpc3BsYXkgYmFzZTsKKworICAgY29uc3QgX19EUklleHRl bnNpb24gKmxvYWRlcl9leHRlbnNpb25zWzhdOworCisgICAvKiBEUkkzIGJpdHMgKi8KKyAgIGlu dCBkcmkzTWFqb3I7CisgICBpbnQgZHJpM01pbm9yOworCisgICAvKiBQcmVzZW50IGJpdHMgKi8K KyAgIGludCBoYXNQcmVzZW50OworICAgaW50IHByZXNlbnRNYWpvcjsKKyAgIGludCBwcmVzZW50 TWlub3I7Cit9OworCitzdHJ1Y3QgZHJpM19zY3JlZW4geworICAgc3RydWN0IGdseF9zY3JlZW4g YmFzZTsKKworICAgX19EUklzY3JlZW4gKmRyaVNjcmVlbjsKKyAgIF9fR0xYRFJJc2NyZWVuIHZ0 YWJsZTsKKworICAgY29uc3QgX19EUklpbWFnZUV4dGVuc2lvbiAqaW1hZ2U7CisgICBjb25zdCBf X0RSSWltYWdlRHJpdmVyRXh0ZW5zaW9uICppbWFnZV9kcml2ZXI7CisgICBjb25zdCBfX0RSSWNv cmVFeHRlbnNpb24gKmNvcmU7CisgICBjb25zdCBfX0RSSTJmbHVzaEV4dGVuc2lvbiAqZjsKKyAg IGNvbnN0IF9fRFJJMmNvbmZpZ1F1ZXJ5RXh0ZW5zaW9uICpjb25maWc7CisgICBjb25zdCBfX0RS SXRleEJ1ZmZlckV4dGVuc2lvbiAqdGV4QnVmZmVyOworICAgY29uc3QgX19EUkkydGhyb3R0bGVF eHRlbnNpb24gKnRocm90dGxlOworICAgY29uc3QgX19EUkljb25maWcgKipkcml2ZXJfY29uZmln czsKKworICAgdm9pZCAqZHJpdmVyOworICAgaW50IGZkOworCisgICBCb29sIHNob3dfZnBzOwor fTsKKworc3RydWN0IGRyaTNfY29udGV4dAoreworICAgc3RydWN0IGdseF9jb250ZXh0IGJhc2U7 CisgICBfX0RSSWNvbnRleHQgKmRyaUNvbnRleHQ7Cit9OworCisjZGVmaW5lIERSSTNfTUFYX0JB Q0sgICAyCisjZGVmaW5lIERSSTNfQkFDS19JRChpKSAoaSkKKyNkZWZpbmUgRFJJM19GUk9OVF9J RCAgIChEUkkzX01BWF9CQUNLKQorCitzdGF0aWMgaW5saW5lIGludAorZHJpM19idWZfaWRfbmV4 dChpbnQgYnVmX2lkKQoreworICAgaWYgKGJ1Zl9pZCA9PSBEUkkzX01BWF9CQUNLIC0gMSkKKyAg ICAgIHJldHVybiAwOworICAgcmV0dXJuIGJ1Zl9pZCArIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUg aW50CitkcmkzX2J1Zl9pZF9wcmV2KGludCBidWZfaWQpCit7CisgICBpZiAoYnVmX2lkID09IDAp CisgICAgICByZXR1cm4gRFJJM19NQVhfQkFDSyAtIDE7CisgICByZXR1cm4gYnVmX2lkIC0gMTsK K30KKworc3RhdGljIGlubGluZSBpbnQKK2RyaTNfcGl4bWFwX2J1Zl9pZChlbnVtIGRyaTNfYnVm ZmVyX3R5cGUgYnVmZmVyX3R5cGUpCit7CisgICBpZiAoYnVmZmVyX3R5cGUgPT0gZHJpM19idWZm ZXJfYmFjaykKKyAgICAgIHJldHVybiBEUkkzX0JBQ0tfSUQoMCk7CisgICBlbHNlCisgICAgICBy ZXR1cm4gRFJJM19GUk9OVF9JRDsKK30KKworc3RydWN0IGRyaTNfZHJhd2FibGUKK3sKKyAgIF9f R0xYRFJJZHJhd2FibGUgYmFzZTsKKyAgIF9fRFJJZHJhd2FibGUgKmRyaURyYXdhYmxlOworICAg aW50IHdpZHRoLCBoZWlnaHQ7CisgICBpbnQgc3dhcF9pbnRlcnZhbDsKKyAgIHVpbnQ4X3QgaGF2 ZV9iYWNrOworICAgdWludDhfdCBoYXZlX2Zha2VfZnJvbnQ7CisgICB1aW50OF90IGlzX3BpeG1h cDsKKworICAgdWludDMyX3QgcHJlc2VudF9yZXF1ZXN0X3NlcmlhbDsKKyAgIHVpbnQzMl90IHBy ZXNlbnRfZXZlbnRfc2VyaWFsOworCisgICB1aW50NjRfdCBzYmM7CisKKyAgIHVpbnQ2NF90IHVz dCwgbXNjOworCisgICAvKiBGb3IgV2FpdE1TQyAqLworICAgdWludDMyX3QgICAgIHByZXNlbnRf bXNjX3JlcXVlc3Rfc2VyaWFsOworICAgdWludDMyX3QgICAgIHByZXNlbnRfbXNjX2V2ZW50X3Nl cmlhbDsKKyAgIAorICAgdWludDY0X3QgcHJldmlvdXNfdGltZTsKKyAgIHVuc2lnbmVkIGZyYW1l czsKKworICAgc3RydWN0IGRyaTNfYnVmZmVyICpidWZmZXJzWzEgKyBEUkkzX01BWF9CQUNLXTsK KyAgIGludCBjdXJfYmFjazsKKyAgIGludCBkZXB0aDsKKworICAgdWludDMyX3QgKnN0YW1wOwor CisgICB4Y2JfcHJlc2VudF9ldmVudF90IGVpZDsKKyAgIHhjYl9nY29udGV4dF90IGdjOworICAg Y29uc3QgeGNiX3F1ZXJ5X2V4dGVuc2lvbl9yZXBseV90ICpwcmVzZW50X2V4dGVuc2lvbjsKKyAg IHhjYl9zcGVjaWFsX2V2ZW50X3QgKnNwZWNpYWxfZXZlbnQ7Cit9OworCitjaGFyICoKK2RyaTNf Z2V0X2RyaXZlcl9mb3JfZmQoaW50IGZkKTsKZGlmZiAtLWdpdCBhL3NyYy9nbHgvZ2x4Y2xpZW50 LmggYi9zcmMvZ2x4L2dseGNsaWVudC5oCmluZGV4IDgxYWU3OTIuLmVjMTY4YWEgMTAwNjQ0Ci0t LSBhL3NyYy9nbHgvZ2x4Y2xpZW50LmgKKysrIGIvc3JjL2dseC9nbHhjbGllbnQuaApAQCAtMTUw LDYgKzE1MCw3IEBAIGV4dGVybiBfX0dMWERSSWRpc3BsYXkgKmRyaTJDcmVhdGVEaXNwbGF5KERp c3BsYXkgKiBkcHkpOwogZXh0ZXJuIHZvaWQgZHJpMkludmFsaWRhdGVCdWZmZXJzKERpc3BsYXkg KmRweSwgWElEIGRyYXdhYmxlKTsKIGV4dGVybiB1bnNpZ25lZCBkcmkyR2V0U3dhcEV2ZW50VHlw ZShEaXNwbGF5ICpkcHksIFhJRCBkcmF3YWJsZSk7CiAKK2V4dGVybiBfX0dMWERSSWRpc3BsYXkg KmRyaTNfY3JlYXRlX2Rpc3BsYXkoRGlzcGxheSAqIGRweSk7CiAKIC8qCiAqKiBGdW5jdGlvbnMg dG8gb2J0YWluIGRyaXZlciBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZyb20gYSBkaXJlY3QK QEAgLTU4Miw2ICs1ODMsNyBAQCBzdHJ1Y3QgZ2x4X2Rpc3BsYXkKICAgIF9fR0xYRFJJZGlzcGxh eSAqZHJpc3dEaXNwbGF5OwogICAgX19HTFhEUklkaXNwbGF5ICpkcmlEaXNwbGF5OwogICAgX19H TFhEUklkaXNwbGF5ICpkcmkyRGlzcGxheTsKKyAgIF9fR0xYRFJJZGlzcGxheSAqZHJpM0Rpc3Bs YXk7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL3NyYy9nbHgvZ2x4ZXh0LmMgYi9zcmMvZ2x4 L2dseGV4dC5jCmluZGV4IGJlYTFjY2IuLmM2ZTRkOWYgMTAwNjQ0Ci0tLSBhL3NyYy9nbHgvZ2x4 ZXh0LmMKKysrIGIvc3JjL2dseC9nbHhleHQuYwpAQCAtNzcwLDcgKzc3MCw5IEBAIEFsbG9jQW5k RmV0Y2hTY3JlZW5Db25maWdzKERpc3BsYXkgKiBkcHksIHN0cnVjdCBnbHhfZGlzcGxheSAqIHBy aXYpCiAgICBmb3IgKGkgPSAwOyBpIDwgc2NyZWVuczsgaSsrLCBwc2MrKykgewogICAgICAgcHNj ID0gTlVMTDsKICNpZiBkZWZpbmVkKEdMWF9ESVJFQ1RfUkVOREVSSU5HKSAmJiAhZGVmaW5lZChH TFhfVVNFX0FQUExFR0wpCi0gICAgICBpZiAocHJpdi0+ZHJpMkRpc3BsYXkpCisgICAgICBpZiAo cHJpdi0+ZHJpM0Rpc3BsYXkpCisgICAgICAgICBwc2MgPSAoKnByaXYtPmRyaTNEaXNwbGF5LT5j cmVhdGVTY3JlZW4pIChpLCBwcml2KTsKKyAgICAgIGlmIChwc2MgPT0gTlVMTCAmJiBwcml2LT5k cmkyRGlzcGxheSkKIAkgcHNjID0gKCpwcml2LT5kcmkyRGlzcGxheS0+Y3JlYXRlU2NyZWVuKSAo aSwgcHJpdik7CiAgICAgICBpZiAocHNjID09IE5VTEwgJiYgcHJpdi0+ZHJpRGlzcGxheSkKIAkg cHNjID0gKCpwcml2LT5kcmlEaXNwbGF5LT5jcmVhdGVTY3JlZW4pIChpLCBwcml2KTsKQEAgLTg2 Myw2ICs4NjUsOCBAQCBfX2dsWEluaXRpYWxpemUoRGlzcGxheSAqIGRweSkKICAgICAqKiAoZS5n LiwgdGhvc2UgY2FsbGVkIGluIEFsbG9jQW5kRmV0Y2hTY3JlZW5Db25maWdzKS4KICAgICAqLwog ICAgaWYgKGdseF9kaXJlY3QgJiYgZ2x4X2FjY2VsKSB7CisgICAgICBpZiAoIWdldGVudigiTElC R0xfRFJJM19ESVNBQkxFIikpCisgICAgICAgICBkcHlQcml2LT5kcmkzRGlzcGxheSA9IGRyaTNf Y3JlYXRlX2Rpc3BsYXkoZHB5KTsKICAgICAgIGRweVByaXYtPmRyaTJEaXNwbGF5ID0gZHJpMkNy ZWF0ZURpc3BsYXkoZHB5KTsKICAgICAgIGRweVByaXYtPmRyaURpc3BsYXkgPSBkcmlDcmVhdGVE aXNwbGF5KGRweSk7CiAgICB9Ci0tIAoxLjguNC4yCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaS1kZXZlbAo=