From mboxrd@z Thu Jan 1 00:00:00 1970 From: Olaf Hering Subject: [PATCH v10 4/5] libxl: add support for vscsi Date: Tue, 22 Mar 2016 08:23:35 +0000 Message-ID: <1458635016-20146-5-git-send-email-olaf@aepfle.de> References: <1458635016-20146-1-git-send-email-olaf@aepfle.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1458635016-20146-1-git-send-email-olaf@aepfle.de> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Wei Liu , Olaf Hering , Ian Jackson , Ian Campbell , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org UG9ydCBwdnNjc2kgc3VwcG9ydCBmcm9tIHhlbmQgdG8gbGlieGw6CgogdnNjc2k9WydwZGV2LHZk ZXZ7LG9wdGlvbnN9J10KIHhsIHNjc2ktYXR0YWNoCiB4bCBzY3NpLWRldGFjaAogeGwgc2NzaS1s aXN0CgpTaWduZWQtb2ZmLWJ5OiBPbGFmIEhlcmluZyA8b2xhZkBhZXBmbGUuZGU+CkNjOiBJYW4g SmFja3NvbiA8aWFuLmphY2tzb25AZXUuY2l0cml4LmNvbT4KQ2M6IFN0ZWZhbm8gU3RhYmVsbGlu aSA8c3RlZmFuby5zdGFiZWxsaW5pQGV1LmNpdHJpeC5jb20+CkNjOiBJYW4gQ2FtcGJlbGwgPGlh bi5jYW1wYmVsbEBjaXRyaXguY29tPgpDYzogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4K LS0tCiBkb2NzL21hbi94bC5jZmcucG9kLjUgICAgICAgICAgICAgICAgfCAgIDU2ICsrCiBkb2Nz L21hbi94bC5wb2QuMSAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICsKIHRvb2xzL2xpYnhsL01h a2VmaWxlICAgICAgICAgICAgICAgICB8ICAgIDIgKwogdG9vbHMvbGlieGwvbGlieGwuYyAgICAg ICAgICAgICAgICAgIHwgICAgOSArCiB0b29scy9saWJ4bC9saWJ4bC5oICAgICAgICAgICAgICAg ICAgfCAgIDQyICsrCiB0b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYyAgICAgICAgICAgfCAgIDQx ICstCiB0b29scy9saWJ4bC9saWJ4bF9kZXZpY2UuYyAgICAgICAgICAgfCAgICAyICsKIHRvb2xz L2xpYnhsL2xpYnhsX2ludGVybmFsLmggICAgICAgICB8ICAgIDkgKwogdG9vbHMvbGlieGwvbGli eGxfdHlwZXMuaWRsICAgICAgICAgIHwgICA1NSArKwogdG9vbHMvbGlieGwvbGlieGxfdHlwZXNf aW50ZXJuYWwuaWRsIHwgICAgMSArCiB0b29scy9saWJ4bC9saWJ4bF92c2NzaS5jICAgICAgICAg ICAgfCAxMTg0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRvb2xzL2xpYnhs L2xpYnhsdV92c2NzaS5jICAgICAgICAgICB8ICA2ODQgKysrKysrKysrKysrKysrKysrKysKIHRv b2xzL2xpYnhsL2xpYnhsdXRpbC5oICAgICAgICAgICAgICB8ICAgMTggKwogdG9vbHMvbGlieGwv eGwuaCAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCiB0b29scy9saWJ4bC94bF9jbWRpbXBs LmMgICAgICAgICAgICAgfCAgMjI1ICsrKysrKy0KIHRvb2xzL2xpYnhsL3hsX2NtZHRhYmxlLmMg ICAgICAgICAgICB8ICAgMTUgKwogMTYgZmlsZXMgY2hhbmdlZCwgMjM2MCBpbnNlcnRpb25zKCsp LCA0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvY3MvbWFuL3hsLmNmZy5wb2QuNSBiL2Rv Y3MvbWFuL3hsLmNmZy5wb2QuNQppbmRleCBlYzczOWNjLi5lYjkyOGIxIDEwMDY0NAotLS0gYS9k b2NzL21hbi94bC5jZmcucG9kLjUKKysrIGIvZG9jcy9tYW4veGwuY2ZnLnBvZC41CkBAIC01MTcs NiArNTE3LDYyIEBAIHZhbHVlIGlzIG9wdGlvbmFsIGlmIHRoaXMgaXMgYSBndWVzdCBkb21haW4u CiAKID1iYWNrCiAKKz1pdGVtIEI8dnNjc2k9WyAiVlNDU0lfU1BFQ19TVFJJTkciLCAiVlNDU0lf U1BFQ19TVFJJTkciLCAuLi5dPgorCitTcGVjaWZpZXMgdGhlIFBWU0NTSSBkZXZpY2VzIHRvIGJl IHByb3ZpZGVkIHRvIHRoZSBndWVzdC4gUFZTQ1NJIHBhc3NlcworU0NTSSBkZXZpY2VzIGZyb20g dGhlIGJhY2tlbmQgZG9tYWluIHRvIHRoZSBndWVzdC4KKworRWFjaCBWU0NTSV9TUEVDX1NUUklO RyBjb25zaXN0cyBvZiAicGRldix2ZGV2WyxvcHRpb25zXSIuCisncGRldicgZGVzY3JpYmVzIHRo ZSBwaHlzaWNhbCBkZXZpY2UsIHByZWZlcmFibGUgaW4gYSBwZXJzaXN0ZW50IGZvcm1hdAorc3Vj aCBhcyAvZGV2L2Rpc2svYnktKi8qLgorJ3ZkZXYnIGlzIHRoZSBkb21VIGRldmljZSBpbiB2SE9T VDpDSEFOTkVMOlRBUkdFVDpMVU4gbm90YXRpb24sIGFsbCBpbnRlZ2Vycy4KKydvcHRpb25zJyBs aXN0cyBhZGRpdGlvbmFsIGZsYWdzIHdoaWNoIGEgYmFja2VuZCBtYXkgcmVjb2duaXplLgorCitU aGUgc3VwcG9ydGVkIHZhbHVlcyBmb3IgInBkZXYiIGFuZCAib3B0aW9ucyIgZGVwZW5kcyBvbiB0 aGUgYmFja2VuZCBkcml2ZXIgdXNlZDoKKworPW92ZXIgNAorCis9aXRlbSBCPExpbnV4PgorCis9 b3ZlciA0CisKKz1pdGVtIEM8cGRldj4KKworVGhlIGJhY2tlbmQgZHJpdmVyIGluIHRoZSBwdm9w cyBrZXJuZWwgaXMgcGFydCBvZiB0aGUgTGludXgtSU8gVGFyZ2V0IGZyYW1ld29yaworKExJTyku IEFzIHN1Y2ggdGhlIFNDU0kgZGV2aWNlcyBoYXZlIHRvIGJlIGNvbmZpZ3VyZWQgZmlyc3Qgd2l0 aCB0aGUgdG9vbHMKK3Byb3ZpZGVkIGJ5IHRoaXMgZnJhbWV3b3JrLCBzdWNoIGFzIGEgeGVuLXNj c2liYWNrIGF3YXJlIHRhcmdldGNsaS4gVGhlICJwZGV2IgoraW4gZG9tVS5jZmcgaGFzIHRvIHJl ZmVyIHRvIGEgY29uZmlnIGl0ZW0gaW4gdGhhdCBmcmFtZXdvcmsgaW5zdGVhZCBvZiB0aGUgcmF3 CitkZXZpY2UuIFVzdWFsbHkgdGhpcyBpcyBhIFdXTiBpbiB0aGUgZm9ybSBvZiAibmFhLldXTjpM VU4iLgorCis9aXRlbSBDPG9wdGlvbnM+CisKK05vIG9wdGlvbnMgcmVjb2duaXplZC4KKworPWJh Y2sKKworPWl0ZW0gQjxMaW51eCBiYXNlZCBvbiBjbGFzc2ljIFhlbiBrZXJuZWw+CisKKz1vdmVy IDQKKworPWl0ZW0gQzxwZGV2PgorCitUaGUgZG9tMCBkZXZpY2UgaW4gZWl0aGVyIC9kZXYvc2Nz aWRldiBvciBwSE9TVDpDSEFOTkVMOlRBUkdFVDpMVU4gbm90YXRpb24uCisKK0l0J3MgcmVjb21t ZW5kZWQgdG8gdXNlIHBlcnNpc3RlbnQgbmFtZXMgIi9kZXYvZGlzay9ieS0qLyoiIHRvIHJlZmVy IHRvIGEgInBkZXYiLgorVGhlIHRvb2xzdGFjayB3aWxsIHRyYW5zbGF0ZSB0aGlzIGludGVybmFs bHkgdG8gImg6Yzp0OmwiIG5vdGF0aW9uLCB3aGljaCBpcyBob3cKK3RoZSBiYWNrZW5kIGRyaXZl ciB3aWxsIGFjY2VzcyB0aGUgZGV2aWNlLiBVc2luZyB0aGUgImg6Yzp0OmwiIG5vdGF0aW9uIGZv cgorInBkZXYiIGluIGRvbVUuY2ZnIGlzIGRpc2NvdXJhZ2VkIGJlY2F1c2UgdGhpcyB2YWx1ZSB3 aWxsIGNoYW5nZSBhY3Jvc3MgcmVib290cywKK2RlcGVuZGluZyBvbiB0aGUgZGV0ZWN0aW9uIG9y ZGVyIGluIHRoZSBPUy4KKworPWl0ZW0gQzxvcHRpb25zPgorCitDdXJyZW50bHkgb25seSB0aGUg b3B0aW9uIHZhbHVlICJmZWF0dXJlLWhvc3QiIGlzIHJlY29nbml6ZWQuIFNDU0kgY29tbWFuZAor ZW11bGF0aW9uIGluIGJhY2tlbmQgZHJpdmVyIGlzIGJ5cGFzc2VkIHdoZW4gImZlYXR1cmUtaG9z dCIgaXMgc3BlY2lmaWVkLgorCis9YmFjaworCis9YmFjaworCiA9aXRlbSBCPHZmYj1bICJWRkJf U1BFQ19TVFJJTkciLCAiVkZCX1NQRUNfU1RSSU5HIiwgLi4uXT4KIAogU3BlY2lmaWVzIHRoZSBw YXJhdmlydHVhbCBmcmFtZWJ1ZmZlciBkZXZpY2VzIHdoaWNoIHNob3VsZCBiZSBzdXBwbGllZApk aWZmIC0tZ2l0IGEvZG9jcy9tYW4veGwucG9kLjEgYi9kb2NzL21hbi94bC5wb2QuMQppbmRleCBk YzYyMTNlLi5kMGFmZjViIDEwMDY0NAotLS0gYS9kb2NzL21hbi94bC5wb2QuMQorKysgYi9kb2Nz L21hbi94bC5wb2QuMQpAQCAtMTI5Myw2ICsxMjkzLDI0IEBAIExpc3QgdmlydHVhbCB0cnVzdGVk IHBsYXRmb3JtIG1vZHVsZXMgZm9yIGEgZG9tYWluLgogCiA9YmFjawogCis9aGVhZDIgUFZTQ1NJ IERFVklDRVMKKworPW92ZXIgNAorCis9aXRlbSBCPHNjc2ktYXR0YWNoPiBJPGRvbWFpbi1pZD4g STxwZGV2PiBJPHZkZXY+LEk8W2ZlYXR1cmUtaG9zdF0+CisKK0NyZWF0ZXMgYSBuZXcgdnNjc2kg ZGV2aWNlIGluIHRoZSBkb21haW4gc3BlY2lmaWVkIGJ5IEk8ZG9tYWluLWlkPi4KKworPWl0ZW0g QjxzY3NpLWRldGFjaD4gSTxkb21haW4taWQ+IEk8dmRldj4KKworUmVtb3ZlcyB0aGUgdnNjc2kg ZGV2aWNlIGZyb20gZG9tYWluIHNwZWNpZmllZCBieSBJPGRvbWFpbi1pZD4uCisKKz1pdGVtIEI8 c2NzaS1saXN0PiBJPGRvbWFpbi1pZD4gSTxbZG9tYWluLWlkXSAuLi4+CisKK0xpc3QgdnNjc2kg ZGV2aWNlcyBmb3IgdGhlIGRvbWFpbiBzcGVjaWZpZWQgYnkgSTxkb21haW4taWQ+LgorCis9YmFj aworCiA9aGVhZDEgUENJIFBBU1MtVEhST1VHSAogCiA9b3ZlciA0CmRpZmYgLS1naXQgYS90b29s cy9saWJ4bC9NYWtlZmlsZSBiL3Rvb2xzL2xpYnhsL01ha2VmaWxlCmluZGV4IDhmYTdiODcuLjc4 MmIwZDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL01ha2VmaWxlCisrKyBiL3Rvb2xzL2xpYnhs L01ha2VmaWxlCkBAIC05OSw2ICs5OSw3IEBAIGVuZGlmCiBMSUJYTF9MSUJTICs9IC1seWFqbAog CiBMSUJYTF9PQkpTID0gZmxleGFycmF5Lm8gbGlieGwubyBsaWJ4bF9jcmVhdGUubyBsaWJ4bF9k bS5vIGxpYnhsX3BjaS5vIFwKKwkJCWxpYnhsX3ZzY3NpLm8gXAogCQkJbGlieGxfZG9tLm8gbGli eGxfZXhlYy5vIGxpYnhsX3hzaGVscC5vIGxpYnhsX2RldmljZS5vIFwKIAkJCWxpYnhsX2ludGVy bmFsLm8gbGlieGxfdXRpbHMubyBsaWJ4bF91dWlkLm8gXAogCQkJbGlieGxfanNvbi5vIGxpYnhs X2FvdXRpbHMubyBsaWJ4bF9udW1hLm8gbGlieGxfdm51bWEubyBcCkBAIC0xNDIsNiArMTQzLDcg QEAgQVVUT0lOQ1M9IGxpYnhsdV9jZmdfeS5oIGxpYnhsdV9jZmdfbC5oIF9saWJ4bF9saXN0Lmgg X3BhdGhzLmggXAogQVVUT1NSQ1M9IGxpYnhsdV9jZmdfeS5jIGxpYnhsdV9jZmdfbC5jCiBBVVRP U1JDUyArPSBfbGlieGxfc2F2ZV9tc2dzX2NhbGxvdXQuYyBfbGlieGxfc2F2ZV9tc2dzX2hlbHBl ci5jCiBMSUJYTFVfT0JKUyA9IGxpYnhsdV9jZmdfeS5vIGxpYnhsdV9jZmdfbC5vIGxpYnhsdV9j ZmcubyBcCisJbGlieGx1X3ZzY3NpLm8gXAogCWxpYnhsdV9kaXNrX2wubyBsaWJ4bHVfZGlzay5v IGxpYnhsdV92aWYubyBsaWJ4bHVfcGNpLm8KICQoTElCWExVX09CSlMpOiBDRkxBR1MgKz0gJChD RkxBR1NfbGlieGVuY3RybCkgIyBGb3IgeGVudG9vbGxvZy5oCiAKZGlmZiAtLWdpdCBhL3Rvb2xz L2xpYnhsL2xpYnhsLmMgYi90b29scy9saWJ4bC9saWJ4bC5jCmluZGV4IDM0NzFjNGMuLmNlZjgx ZWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsLmMKKysrIGIvdG9vbHMvbGlieGwvbGli eGwuYwpAQCAtNDE3OSw2ICs0MTc5LDcgQEAgREVGSU5FX0RFVklDRV9SRU1PVkVfQ1VTVE9NKHVz YmN0cmwsIGRlc3Ryb3ksIDEpCiAvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5l ZDoKICAqIGxpYnhsX2RldmljZV9kaXNrX2FkZAogICogbGlieGxfZGV2aWNlX25pY19hZGQKKyAq IGxpYnhsX2RldmljZV92c2NzaWN0cmxfYWRkCiAgKiBsaWJ4bF9kZXZpY2VfdnRwbV9hZGQKICAq IGxpYnhsX2RldmljZV91c2JjdHJsX2FkZAogICogbGlieGxfZGV2aWNlX3VzYmRldl9hZGQKQEAg LTQyMTAsNiArNDIxMSw5IEBAIERFRklORV9ERVZJQ0VfQUREKGRpc2spCiAvKiBuaWMgKi8KIERF RklORV9ERVZJQ0VfQUREKG5pYykKIAorLyogdnNjc2kgKi8KK0RFRklORV9ERVZJQ0VfQUREKHZz Y3NpY3RybCkKKwogLyogdnRwbSAqLwogREVGSU5FX0RFVklDRV9BREQodnRwbSkKIApAQCAtNjc2 MCw2ICs2NzY0LDExIEBAIGludCBsaWJ4bF9yZXRyaWV2ZV9kb21haW5fY29uZmlndXJhdGlvbihs aWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCiAKICAgICBNRVJHRShuaWMsIG5pY3MsIENP TVBBUkVfREVWSUQsIHt9KTsKIAorICAgIE1FUkdFKHZzY3NpY3RybCwgdnNjc2ljdHJscywgQ09N UEFSRV9WU0NTSSwgeworICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybF9kaXNwb3Nl KGRzdCk7CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2NvcHkoQ1RYLCBkc3Qs IHNyYyk7CisgICAgICAgICAgfSk7CisKICAgICBNRVJHRSh2dHBtLCB2dHBtcywgQ09NUEFSRV9E RVZJRCwge30pOwogCiAgICAgTUVSR0UocGNpLCBwY2lkZXZzLCBDT01QQVJFX1BDSSwge30pOwpk aWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGwuaCBiL3Rvb2xzL2xpYnhsL2xpYnhsLmgKaW5k ZXggZjYxYmM0Yi4uNjVjMmM2YiAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGwuaAorKysg Yi90b29scy9saWJ4bC9saWJ4bC5oCkBAIC04NDgsNiArODQ4LDEzIEBAIHZvaWQgbGlieGxfbWFj X2NvcHkobGlieGxfY3R4ICpjdHgsIGxpYnhsX21hYyAqZHN0LCBsaWJ4bF9tYWMgKnNyYyk7CiAj ZGVmaW5lIExJQlhMX0hBVkVfUENJVE9QT0xPR1kgMQogCiAvKgorICogTElCWExfSEFWRV9WU0NT SQorICoKKyAqIElmIHRoaXMgaXMgZGVmaW5lZCwgdGhlIFBWIFNDU0kgZmVhdHVyZSBpcyBzdXBw b3J0ZWQuCisgKi8KKyNkZWZpbmUgTElCWExfSEFWRV9WU0NTSSAxCisKKy8qCiAgKiBMSUJYTF9I QVZFX1NPQ0tFVF9CSVRNQVAKICAqCiAgKiBJZiB0aGlzIGlzIGRlZmluZWQsIHRoZW4gbGlieGxf c29ja2V0X2JpdG1hcF9hbGxvYyBhbmQKQEAgLTE2NDEsNiArMTY0OCw0MSBAQCBpbnQgbGlieGxf ZGV2aWNlX2NoYW5uZWxfZ2V0aW5mbyhsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfY2hhbm5lbCAqY2hh bm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2NoYW5uZWxpbmZv ICpjaGFubmVsaW5mbyk7CiAKKy8qIFZpcnR1YWwgU0NTSSAqLworaW50IGxpYnhsX2RldmljZV92 c2NzaWN0cmxfYWRkKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICp2c2NzaSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29wX2hvdyAqYW9faG93 KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhMX0VYVEVSTkFMX0NBTExFUlNf T05MWTsKK2ludCBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX3JlbW92ZShsaWJ4bF9jdHggKmN0eCwg dWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf ZGV2aWNlX3ZzY3NpY3RybCAqdnNjc2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hvdykKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMSUJYTF9FWFRFUk5BTF9DQUxMRVJTX09OTFk7CitpbnQgbGlieGxfZGV2 aWNlX3ZzY3NpY3RybF9kZXN0cm95KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAq dnNjc2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2Fz eW5jb3BfaG93ICphb19ob3cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJ QlhMX0VYVEVSTkFMX0NBTExFUlNfT05MWTsKKworbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqbGli eGxfZGV2aWNlX3ZzY3NpY3RybF9saXN0KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwg aW50ICpudW0pOworaW50IGxpYnhsX2RldmljZV92c2NzaWN0cmxfZ2V0aW5mbyhsaWJ4bF9jdHgg KmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX2RldmljZV92c2NzaWN0cmwgKnZzY3NpY3RybCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2ICp2c2NzaWRldiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfdnNjc2lpbmZvICp2c2NzaWluZm8pOwor aW50IGxpYnhsX2RldmljZV92c2NzaWRldl9hZGQobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRv bWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2 ICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29w X2hvdyAqYW9faG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCWExfRVhURVJO QUxfQ0FMTEVSU19PTkxZOworLyogUmVtb3ZlIHZzY3NpZGV2IGNvbm5lY3RlZCB0byB2c2NzaWN0 cmwgKi8KK2ludCBsaWJ4bF9kZXZpY2VfdnNjc2lkZXZfcmVtb3ZlKGxpYnhsX2N0eCAqY3R4LCB1 aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rl dmljZV92c2NzaWRldiAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hvdykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExJQlhMX0VYVEVSTkFMX0NBTExFUlNfT05MWTsKK3ZvaWQgbGlieGxfZGV2aWNlX3Zz Y3NpY3RybF9hcHBlbmRfdnNjc2lkZXYobGlieGxfY3R4ICpjdHgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKmN0cmws CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rldmlj ZV92c2NzaWRldiAqZGV2KTsKK3ZvaWQgbGlieGxfZGV2aWNlX3ZzY3NpY3RybF9yZW1vdmVfdnNj c2lkZXYobGlieGxfY3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKmN0cmwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpZHgpOworCiAvKiBWaXJ0 dWFsIFRQTXMgKi8KIGludCBsaWJ4bF9kZXZpY2VfdnRwbV9hZGQobGlieGxfY3R4ICpjdHgsIHVp bnQzMl90IGRvbWlkLCBsaWJ4bF9kZXZpY2VfdnRwbSAqdnRwbSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hvdykKZGlmZiAtLWdpdCBhL3Rv b2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jIGIvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMKaW5k ZXggNjFiNWMwMS4uZDg4YWFkMiAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRl LmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMKQEAgLTczMSw2ICs3MzEsOCBAQCBz dGF0aWMgdm9pZCBkb21jcmVhdGVfYm9vdGxvYWRlcl9kb25lKGxpYnhsX19lZ2MgKmVnYywKIHN0 YXRpYyB2b2lkIGRvbWNyZWF0ZV9sYXVuY2hfZG0obGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fbXVs dGlkZXYgKmFvZGV2cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldCk7 CiAKK3N0YXRpYyB2b2lkIGRvbWNyZWF0ZV9hdHRhY2hfdnNjc2ljdHJscyhsaWJ4bF9fZWdjICpl Z2MsIGxpYnhsX19tdWx0aWRldiAqbXVsdGlkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHJldCk7CiBzdGF0aWMgdm9pZCBkb21jcmVhdGVfYXR0YWNoX3Z0 cG1zKGxpYnhsX19lZ2MgKmVnYywgbGlieGxfX211bHRpZGV2ICptdWx0aWRldiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldCk7CiBzdGF0aWMgdm9pZCBkb21jcmVh dGVfYXR0YWNoX3VzYmN0cmxzKGxpYnhsX19lZ2MgKmVnYywKQEAgLTEzNzIsMTMgKzEzNzQsMTMg QEAgc3RhdGljIHZvaWQgZG9tY3JlYXRlX2Rldm1vZGVsX3N0YXJ0ZWQobGlieGxfX2VnYyAqZWdj LAogICAgIGlmIChkX2NvbmZpZy0+bnVtX25pY3MgPiAwKSB7CiAgICAgICAgIC8qIEF0dGFjaCBu aWNzICovCiAgICAgICAgIGxpYnhsX19tdWx0aWRldl9iZWdpbihhbywgJmRjcy0+bXVsdGlkZXYp OwotICAgICAgICBkY3MtPm11bHRpZGV2LmNhbGxiYWNrID0gZG9tY3JlYXRlX2F0dGFjaF92dHBt czsKKyAgICAgICAgZGNzLT5tdWx0aWRldi5jYWxsYmFjayA9IGRvbWNyZWF0ZV9hdHRhY2hfdnNj c2ljdHJsczsKICAgICAgICAgbGlieGxfX2FkZF9uaWNzKGVnYywgYW8sIGRvbWlkLCBkX2NvbmZp ZywgJmRjcy0+bXVsdGlkZXYpOwogICAgICAgICBsaWJ4bF9fbXVsdGlkZXZfcHJlcGFyZWQoZWdj LCAmZGNzLT5tdWx0aWRldiwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBkb21j cmVhdGVfYXR0YWNoX3Z0cG1zKGVnYywgJmRjcy0+bXVsdGlkZXYsIDApOworICAgIGRvbWNyZWF0 ZV9hdHRhY2hfdnNjc2ljdHJscyhlZ2MsICZkY3MtPm11bHRpZGV2LCAwKTsKICAgICByZXR1cm47 CiAKIGVycm9yX291dDoKQEAgLTEzODYsNyArMTM4OCw3IEBAIGVycm9yX291dDoKICAgICBkb21j cmVhdGVfY29tcGxldGUoZWdjLCBkY3MsIHJldCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRvbWNyZWF0 ZV9hdHRhY2hfdnRwbXMobGlieGxfX2VnYyAqZWdjLAorc3RhdGljIHZvaWQgZG9tY3JlYXRlX2F0 dGFjaF92c2NzaWN0cmxzKGxpYnhsX19lZ2MgKmVnYywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfX211bHRpZGV2ICptdWx0aWRldiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHJldCkKIHsKQEAgLTE0MDEsNiArMTQwMywzOSBAQCBzdGF0 aWMgdm9pZCBkb21jcmVhdGVfYXR0YWNoX3Z0cG1zKGxpYnhsX19lZ2MgKmVnYywKICAgICAgICBn b3RvIGVycm9yX291dDsKICAgIH0KIAorICAgIC8qIFBsdWcgdnNjc2kgZGV2aWNlcyAqLworICAg aWYgKGRfY29uZmlnLT5udW1fdnNjc2ljdHJscyA+IDApIHsKKyAgICAgICAvKiBBdHRhY2ggdnNj c2ljdHJscyAqLworICAgICAgIGxpYnhsX19tdWx0aWRldl9iZWdpbihhbywgJmRjcy0+bXVsdGlk ZXYpOworICAgICAgIGRjcy0+bXVsdGlkZXYuY2FsbGJhY2sgPSBkb21jcmVhdGVfYXR0YWNoX3Z0 cG1zOworICAgICAgIGxpYnhsX19hZGRfdnNjc2ljdHJscyhlZ2MsIGFvLCBkb21pZCwgZF9jb25m aWcsICZkY3MtPm11bHRpZGV2KTsKKyAgICAgICBsaWJ4bF9fbXVsdGlkZXZfcHJlcGFyZWQoZWdj LCAmZGNzLT5tdWx0aWRldiwgMCk7CisgICAgICAgcmV0dXJuOworICAgfQorCisgICBkb21jcmVh dGVfYXR0YWNoX3Z0cG1zKGVnYywgbXVsdGlkZXYsIDApOworICAgcmV0dXJuOworCitlcnJvcl9v dXQ6CisgICBhc3NlcnQocmV0KTsKKyAgIGRvbWNyZWF0ZV9jb21wbGV0ZShlZ2MsIGRjcywgcmV0 KTsKK30KKworc3RhdGljIHZvaWQgZG9tY3JlYXRlX2F0dGFjaF92dHBtcyhsaWJ4bF9fZWdjICpl Z2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19tdWx0aWRldiAq bXVsdGlkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXQpCit7 CisgICBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNzID0gQ09OVEFJTkVSX09GKG11bHRp ZGV2LCAqZGNzLCBtdWx0aWRldik7CisgICBTVEFURV9BT19HQyhkY3MtPmFvKTsKKyAgIGludCBk b21pZCA9IGRjcy0+Z3Vlc3RfZG9taWQ7CisKKyAgIGxpYnhsX2RvbWFpbl9jb25maWcqIGNvbnN0 IGRfY29uZmlnID0gZGNzLT5ndWVzdF9jb25maWc7CisKKyAgIGlmKHJldCkgeworICAgICAgIExP RyhFUlJPUiwgInVuYWJsZSB0byBhZGQgdnNjc2kgZGV2aWNlcyIpOworICAgICAgIGdvdG8gZXJy b3Jfb3V0OworICAgfQorCiAgICAgLyogUGx1ZyB2dHBtIGRldmljZXMgKi8KICAgIGlmIChkX2Nv bmZpZy0+bnVtX3Z0cG1zID4gMCkgewogICAgICAgIC8qIEF0dGFjaCB2dHBtcyAqLwpkaWZmIC0t Z2l0IGEvdG9vbHMvbGlieGwvbGlieGxfZGV2aWNlLmMgYi90b29scy9saWJ4bC9saWJ4bF9kZXZp Y2UuYwppbmRleCA0Y2VkOWI2Li42ZDEyYTVjIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4 bF9kZXZpY2UuYworKysgYi90b29scy9saWJ4bC9saWJ4bF9kZXZpY2UuYwpAQCAtNTQzLDYgKzU0 Myw3IEBAIHZvaWQgbGlieGxfX211bHRpZGV2X3ByZXBhcmVkKGxpYnhsX19lZ2MgKmVnYywKICAq IFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkOgogICogbGlieGxfX2FkZF9kaXNr cwogICogbGlieGxfX2FkZF9uaWNzCisgKiBsaWJ4bF9fYWRkX3ZzY3NpY3RybHMKICAqIGxpYnhs X19hZGRfdnRwbXMKICAqIGxpYnhsX19hZGRfdXNiY3RybHMKICAqIGxpYnhsX19hZGRfdXNicwpA QCAtNTY0LDYgKzU2NSw3IEBAIHZvaWQgbGlieGxfX211bHRpZGV2X3ByZXBhcmVkKGxpYnhsX19l Z2MgKmVnYywKIAogREVGSU5FX0RFVklDRVNfQUREKGRpc2spCiBERUZJTkVfREVWSUNFU19BREQo bmljKQorREVGSU5FX0RFVklDRVNfQUREKHZzY3NpY3RybCkKIERFRklORV9ERVZJQ0VTX0FERCh2 dHBtKQogREVGSU5FX0RFVklDRVNfQUREKHVzYmN0cmwpCiBERUZJTkVfREVWSUNFU19BREQodXNi ZGV2KQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaCBiL3Rvb2xzL2xp YnhsL2xpYnhsX2ludGVybmFsLmgKaW5kZXggMzQ1YTc2NC4uM2RjYWI4MCAxMDA2NDQKLS0tIGEv dG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaAorKysgYi90b29scy9saWJ4bC9saWJ4bF9pbnRl cm5hbC5oCkBAIC0yNTgxLDYgKzI1ODEsMTAgQEAgX2hpZGRlbiB2b2lkIGxpYnhsX19kZXZpY2Vf bmljX2FkZChsaWJ4bF9fZWdjICplZ2MsIHVpbnQzMl90IGRvbWlkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfbmljICpuaWMsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KTsKIAorX2hpZGRl biB2b2lkIGxpYnhsX19kZXZpY2VfdnNjc2ljdHJsX2FkZChsaWJ4bF9fZWdjICplZ2MsIHVpbnQz Ml90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9kZXZpY2VfdnNjc2ljdHJsICp2c2NzaWN0cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KTsKKwogX2hpZGRlbiB2b2lk IGxpYnhsX19kZXZpY2VfdnRwbV9hZGQobGlieGxfX2VnYyAqZWdjLCB1aW50MzJfdCBkb21pZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3Z0cG0gKnZ0 cG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2Ug KmFvZGV2KTsKQEAgLTMzNDYsNiArMzM1MCwxMCBAQCBfaGlkZGVuIHZvaWQgbGlieGxfX2FkZF9u aWNzKGxpYnhsX19lZ2MgKmVnYywgbGlieGxfX2FvICphbywgdWludDMyX3QgZG9taWQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFpbl9jb25maWcgKmRfY29uZmlnLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fbXVsdGlkZXYgKm11bHRpZGV2KTsK IAorX2hpZGRlbiB2b2lkIGxpYnhsX19hZGRfdnNjc2ljdHJscyhsaWJ4bF9fZWdjICplZ2MsIGxp YnhsX19hbyAqYW8sIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9kb21haW5fY29uZmlnICpkX2NvbmZpZywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfX211bHRpZGV2ICptdWx0aWRldik7CisKIF9oaWRkZW4g dm9pZCBsaWJ4bF9fYWRkX3Z0cG1zKGxpYnhsX19lZ2MgKmVnYywgbGlieGxfX2FvICphbywgdWlu dDMyX3QgZG9taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFpbl9j b25maWcgKmRfY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fbXVs dGlkZXYgKm11bHRpZGV2KTsKQEAgLTQwMzIsNiArNDA0MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9p ZCBsaWJ4bF9fdXBkYXRlX2NvbmZpZ192dHBtKGxpYnhsX19nYyAqZ2MsCiAgKiBkZXZpY2VzIGhh dmUgc2FtZSBpZGVudGlmaWVyLiAqLwogI2RlZmluZSBDT01QQVJFX0RFVklEKGEsIGIpICgoYSkt PmRldmlkID09IChiKS0+ZGV2aWQpCiAjZGVmaW5lIENPTVBBUkVfRElTSyhhLCBiKSAoIXN0cmNt cCgoYSktPnZkZXYsIChiKS0+dmRldikpCisjZGVmaW5lIENPTVBBUkVfVlNDU0koYSwgYikgKChh KS0+ZGV2aWQgPT0gKGIpLT5kZXZpZCkKICNkZWZpbmUgQ09NUEFSRV9QQ0koYSwgYikgKChhKS0+ ZnVuYyA9PSAoYiktPmZ1bmMgJiYgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGEp LT5idXMgPT0gKGIpLT5idXMgJiYgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo YSktPmRldiA9PSAoYiktPmRldikKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVz LmlkbCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbAppbmRleCA1OWIxODNjLi5iNjcwOTk3 IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwKKysrIGIvdG9vbHMvbGli eGwvbGlieGxfdHlwZXMuaWRsCkBAIC02NjYsNiArNjY2LDQzIEBAIGxpYnhsX2RldmljZV9jaGFu bmVsID0gU3RydWN0KCJkZXZpY2VfY2hhbm5lbCIsIFsKICAgICAgICAgICAgXSkpLAogXSkKIAor bGlieGxfdnNjc2lfcGRldl90eXBlID0gRW51bWVyYXRpb24oInZzY3NpX3BkZXZfdHlwZSIsIFsK KyAgICAoMCwgIklOVkFMSUQiKSwKKyAgICAoMSwgIkhDVEwiKSwKKyAgICAoMiwgIldXTiIpLAor ICAgIF0pCisKK2xpYnhsX3ZzY3NpX2hjdGwgPSBTdHJ1Y3QoInZzY3NpX2hjdGwiLCBbCisgICAg KCJoc3QiLCB1aW50MzIpLAorICAgICgiY2huIiwgdWludDMyKSwKKyAgICAoInRndCIsIHVpbnQz MiksCisgICAgKCJsdW4iLCB1aW50NjQpLAorICAgIF0pCisKK2xpYnhsX3ZzY3NpX3BkZXYgPSBT dHJ1Y3QoInZzY3NpX3BkZXYiLCBbCisgICAgKCJwX2Rldm5hbWUiLCAgICAgICAgc3RyaW5nKSwK KyAgICAoInUiLCBLZXllZFVuaW9uKE5vbmUsIGxpYnhsX3ZzY3NpX3BkZXZfdHlwZSwgInR5cGUi LAorICAgICAgICBbCisgICAgICAgICAoImludmFsaWQiLCBOb25lKSwKKyAgICAgICAgICgiaGN0 bCIsIFN0cnVjdChOb25lLCBbKCJtIiwgbGlieGxfdnNjc2lfaGN0bCldKSksCisgICAgICAgICAo Ind3biIsIFN0cnVjdChOb25lLCBbKCJtIiwgc3RyaW5nKV0pKSwKKyAgICAgICAgXSkpLAorICAg IF0pCisKK2xpYnhsX2RldmljZV92c2NzaWRldiA9IFN0cnVjdCgiZGV2aWNlX3ZzY3NpZGV2Iiwg WworICAgICgidnNjc2lkZXZfaWQiLCAgICAgIGxpYnhsX2RldmlkKSwKKyAgICAoInBkZXYiLCAg ICAgICAgICAgICBsaWJ4bF92c2NzaV9wZGV2KSwKKyAgICAoInZkZXYiLCAgICAgICAgICAgICBs aWJ4bF92c2NzaV9oY3RsKSwKKyAgICBdKQorCitsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsID0gU3Ry dWN0KCJkZXZpY2VfdnNjc2ljdHJsIiwgWworICAgICgiYmFja2VuZF9kb21pZCIsICAgIGxpYnhs X2RvbWlkKSwKKyAgICAoImRldmlkIiwgICAgICAgICAgICBsaWJ4bF9kZXZpZCksCisgICAgKCJp ZHgiLCAgICAgICAgICAgICAgbGlieGxfZGV2aWQpLAorICAgICgidnNjc2lkZXZzIiwgICAgICAg IEFycmF5KGxpYnhsX2RldmljZV92c2NzaWRldiwgIm51bV92c2NzaWRldnMiKSksCisgICAgKCJz Y3NpX3Jhd19jbWRzIiwgICAgbGlieGxfZGVmYm9vbCksCisgICAgXSkKKwogbGlieGxfZG9tYWlu X2NvbmZpZyA9IFN0cnVjdCgiZG9tYWluX2NvbmZpZyIsIFsKICAgICAoImNfaW5mbyIsIGxpYnhs X2RvbWFpbl9jcmVhdGVfaW5mbyksCiAgICAgKCJiX2luZm8iLCBsaWJ4bF9kb21haW5fYnVpbGRf aW5mbyksCkBAIC02NzcsNiArNzE0LDcgQEAgbGlieGxfZG9tYWluX2NvbmZpZyA9IFN0cnVjdCgi ZG9tYWluX2NvbmZpZyIsIFsKICAgICAoImR0ZGV2cyIsIEFycmF5KGxpYnhsX2RldmljZV9kdGRl diwgIm51bV9kdGRldnMiKSksCiAgICAgKCJ2ZmJzIiwgQXJyYXkobGlieGxfZGV2aWNlX3ZmYiwg Im51bV92ZmJzIikpLAogICAgICgidmticyIsIEFycmF5KGxpYnhsX2RldmljZV92a2IsICJudW1f dmticyIpKSwKKyAgICAoInZzY3NpY3RybHMiLCBBcnJheShsaWJ4bF9kZXZpY2VfdnNjc2ljdHJs LCAibnVtX3ZzY3NpY3RybHMiKSksCiAgICAgKCJ2dHBtcyIsIEFycmF5KGxpYnhsX2RldmljZV92 dHBtLCAibnVtX3Z0cG1zIikpLAogICAgICMgYSBjaGFubmVsIG1hbmlmZXN0cyBhcyBhIGNvbnNv bGUgd2l0aCBhIG5hbWUsCiAgICAgIyBzZWUgZG9jcy9taXNjL2NoYW5uZWxzLnR4dApAQCAtNzE0 LDYgKzc1MiwyMyBAQCBsaWJ4bF9uaWNpbmZvID0gU3RydWN0KCJuaWNpbmZvIiwgWwogICAgICgi cnJlZl9yeCIsIGludGVnZXIpLAogICAgIF0sIGRpcj1ESVJfT1VUKQogCitsaWJ4bF92c2NzaWlu Zm8gPSBTdHJ1Y3QoInZzY3NpaW5mbyIsIFsKKyAgICAoImJhY2tlbmQiLCBzdHJpbmcpLAorICAg ICgiYmFja2VuZF9pZCIsIHVpbnQzMiksCisgICAgKCJmcm9udGVuZCIsIHN0cmluZyksCisgICAg KCJmcm9udGVuZF9pZCIsIHVpbnQzMiksCisgICAgKCJkZXZpZCIsIGxpYnhsX2RldmlkKSwKKyAg ICAoInBkZXYiLCBsaWJ4bF92c2NzaV9wZGV2KSwKKyAgICAoInZkZXYiLCBsaWJ4bF92c2NzaV9o Y3RsKSwKKyAgICAoImlkeCIsIGxpYnhsX2RldmlkKSwKKyAgICAoInZzY3NpZGV2X2lkIiwgbGli eGxfZGV2aWQpLAorICAgICgic2NzaV9yYXdfY21kcyIsIGJvb2wpLAorICAgICgidnNjc2ljdHJs X3N0YXRlIiwgaW50ZWdlciksCisgICAgKCJ2c2NzaWRldl9zdGF0ZSIsIGludGVnZXIpLAorICAg ICgiZXZ0Y2giLCBpbnRlZ2VyKSwKKyAgICAoInJyZWYiLCBpbnRlZ2VyKSwKKyAgICBdLCBkaXI9 RElSX09VVCkKKwogbGlieGxfdnRwbWluZm8gPSBTdHJ1Y3QoInZ0cG1pbmZvIiwgWwogICAgICgi YmFja2VuZCIsIHN0cmluZyksCiAgICAgKCJiYWNrZW5kX2lkIiwgdWludDMyKSwKZGlmZiAtLWdp dCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzX2ludGVybmFsLmlkbCBiL3Rvb2xzL2xpYnhsL2xp YnhsX3R5cGVzX2ludGVybmFsLmlkbAppbmRleCA2OTZmNWY4Li4yZTRhYWUwIDEwMDY0NAotLS0g YS90b29scy9saWJ4bC9saWJ4bF90eXBlc19pbnRlcm5hbC5pZGwKKysrIGIvdG9vbHMvbGlieGwv bGlieGxfdHlwZXNfaW50ZXJuYWwuaWRsCkBAIC0yMyw2ICsyMyw3IEBAIGxpYnhsX19kZXZpY2Vf a2luZCA9IEVudW1lcmF0aW9uKCJkZXZpY2Vfa2luZCIsIFsKICAgICAoNywgIkNPTlNPTEUiKSwK ICAgICAoOCwgIlZUUE0iKSwKICAgICAoOSwgIlZVU0IiKSwKKyAgICAoMTAsICJWU0NTSSIpLAog ICAgIF0pCiAKIGxpYnhsX19jb25zb2xlX2JhY2tlbmQgPSBFbnVtZXJhdGlvbigiY29uc29sZV9i YWNrZW5kIiwgWwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfdnNjc2kuYyBiL3Rvb2xz L2xpYnhsL2xpYnhsX3ZzY3NpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u ZmJjN2E3ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3ZzY3NpLmMKQEAg LTAsMCArMSwxMTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2ICAgICAgU1VTRSBMaW51 eCBHbWJICisgKiBBdXRob3IgT2xhZiBIZXJpbmcgPG9sYWZAYWVwZmxlLmRlPgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IHZlcnNpb24gMi4xIG9ubHkuIHdpdGggdGhlIHNwZWNpYWwKKyAqIGV4Y2VwdGlv biBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIExJQ0VOU0UuCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlICJsaWJ4bF9vc2RlcHMuaCIgLyogbXVzdCBj b21lIGJlZm9yZSBhbnkgb3RoZXIgaGVhZGVycyAqLworI2luY2x1ZGUgImxpYnhsX2ludGVybmFs LmgiCisKK3R5cGVkZWYgc3RydWN0IHZzY3NpZGV2X3JtIHsKKyAgICBsaWJ4bF9kZXZpY2VfdnNj c2ljdHJsICpjdHJsOworICAgIGNoYXIgKmJlX3BhdGg7CisgICAgaW50IGRldl93YWl0OworICAg IGxpYnhsX19kZXZpY2UgZGV2OworfSB2c2NzaWRldl9ybV90OworCit0eXBlZGVmIHZvaWQgKCp2 c2NzaWN0cmxfYWRkKShsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9fYW9fZGV2aWNlICphb2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKnZzY3NpY3RybCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX2RvbWFpbl9jb25maWcgKmRfY29uZmlnKTsKKworI2RlZmluZSBY TFVfV1dOX0xFTiAxNgorCitzdGF0aWMgaW50IHZzY3NpX3BhcnNlX2hjdGwoY2hhciAqc3RyLCBs aWJ4bF92c2NzaV9oY3RsICpoY3RsKQoreworICAgIHVuc2lnbmVkIGludCBoc3QsIGNobiwgdGd0 OworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBsdW47CisKKyAgICBpZiAoc3NjYW5mKHN0ciwgIiV1 OiV1OiV1OiVsbHUiLCAmaHN0LCAmY2huLCAmdGd0LCAmbHVuKSAhPSA0KQorICAgICAgICByZXR1 cm4gRVJST1JfSU5WQUw7CisKKyAgICBoY3RsLT5oc3QgPSBoc3Q7CisgICAgaGN0bC0+Y2huID0g Y2huOworICAgIGhjdGwtPnRndCA9IHRndDsKKyAgICBoY3RsLT5sdW4gPSBsdW47CisgICAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIHZzY3NpX3d3bl92YWxpZChjb25zdCBjaGFyICpwKQor eworICAgIGJvb2wgcmV0ID0gdHJ1ZTsKKyAgICBpbnQgaSA9IDA7CisKKyAgICBmb3IgKGkgPSAw OyBpIDwgWExVX1dXTl9MRU47IGkrKywgcCsrKSB7CisgICAgICAgIGlmICgqcCA+PSAnMCcgJiYg KnAgPD0gJzknKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICgqcCA+PSAnYScg JiYgKnAgPD0gJ2YnKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICgqcCA+PSAn QScgJiYgKnAgPD0gJ0YnKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJldCA9IGZh bHNlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworLyogVHJh bnNsYXRlIHAtZGV2IGJhY2sgaW50byBwZGV2LnR5cGUgKi8KK3N0YXRpYyBib29sIHZzY3NpX3Bh cnNlX3BkZXYobGlieGxfX2djICpnYywgbGlieGxfZGV2aWNlX3ZzY3NpZGV2ICpkZXYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmMsIGNoYXIgKnAsIGNoYXIgKnYpCit7Cisg ICAgbGlieGxfdnNjc2lfaGN0bCBoY3RsOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBsdW47Cisg ICAgY2hhciB3d25bWExVX1dXTl9MRU4gKyAxXTsKKyAgICBib29sIHBhcnNlZF9vayA9IGZhbHNl OworCisgICAgbGlieGxfdnNjc2lfaGN0bF9pbml0KCZoY3RsKTsKKworICAgIGRldi0+cGRldi5w X2Rldm5hbWUgPSBsaWJ4bF9fc3RyZHVwKE5PR0MsIGMpOworCisgICAgaWYgKHN0cm5jbXAocCwg Im5hYS4iLCA0KSA9PSAwKSB7CisgICAgICAgIC8qIFdXTiBhcyB1bmRlcnN0b29kIGJ5IHB2b3Bz ICovCisgICAgICAgIG1lbXNldCh3d24sIDAsIHNpemVvZih3d24pKTsKKyAgICAgICAgaWYgKHNz Y2FuZihwLCAibmFhLiUxNmM6JWxsdSIsIHd3biwgJmx1bikgPT0gMiAmJiB2c2NzaV93d25fdmFs aWQod3duKSkgeworICAgICAgICAgICAgbGlieGxfdnNjc2lfcGRldl9pbml0X3R5cGUoJmRldi0+ cGRldiwgTElCWExfVlNDU0lfUERFVl9UWVBFX1dXTik7CisgICAgICAgICAgICBkZXYtPnBkZXYu dS53d24ubSA9IGxpYnhsX19zdHJkdXAoTk9HQywgcCk7CisgICAgICAgICAgICBwYXJzZWRfb2sg PSB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh2c2NzaV9wYXJzZV9oY3RsKHAsICZo Y3RsKSA9PSAwKSB7CisgICAgICAgIC8qIEVpdGhlciB4ZW5saW51eCwgb3IgcHZvcHMgd2l0aCBw cm9wZXJseSBjb25maWd1cmVkIGFsaWFzIGluIHN5c2ZzICovCisgICAgICAgIGxpYnhsX3ZzY3Np X3BkZXZfaW5pdF90eXBlKCZkZXYtPnBkZXYsIExJQlhMX1ZTQ1NJX1BERVZfVFlQRV9IQ1RMKTsK KyAgICAgICAgbGlieGxfdnNjc2lfaGN0bF9jb3B5KENUWCwgJmRldi0+cGRldi51LmhjdGwubSwg JmhjdGwpOworICAgICAgICBwYXJzZWRfb2sgPSB0cnVlOworICAgIH0KKworICAgIGlmIChwYXJz ZWRfb2sgJiYgdnNjc2lfcGFyc2VfaGN0bCh2LCAmZGV2LT52ZGV2KSAhPSAwKQorICAgICAgICBw YXJzZWRfb2sgPSBmYWxzZTsKKworICAgIGxpYnhsX3ZzY3NpX2hjdGxfZGlzcG9zZSgmaGN0bCk7 CisKKyAgICByZXR1cm4gcGFyc2VkX29rOworfQorCitzdGF0aWMgYm9vbCB2c2NzaV9maWxsX2Rl dihsaWJ4bF9fZ2MgKmdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeHNfdHJhbnNhY3Rp b25fdCB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2c19wYXRo LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2X2RpciwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWRldiAqZGV2KQoreworICAg IGNoYXIgKnBhdGgsICpjLCAqcCwgKnYsICpzOworICAgIHVuc2lnbmVkIGludCBkZXZpZDsKKyAg ICBpbnQgcjsKKworICAgIHIgPSBzc2NhbmYoZGV2X2RpciwgImRldi0ldSIsICZkZXZpZCk7Cisg ICAgaWYgKHIgIT0gMSkgeworICAgICAgICBMT0coRVJST1IsICJleHBlY3RlZCBkZXYtTiwgZ290 ICclcyciLCBkZXZfZGlyKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBkZXYt PnZzY3NpZGV2X2lkID0gZGV2aWQ7CisKKyAgICBwYXRoID0gR0NTUFJJTlRGKCIlcy8lcyIsIGRl dnNfcGF0aCwgZGV2X2Rpcik7CisgICAgYyA9IGxpYnhsX194c19yZWFkKGdjLCB0LCBHQ1NQUklO VEYoIiVzL3AtZGV2bmFtZSIsIHBhdGgpKTsKKyAgICBwID0gbGlieGxfX3hzX3JlYWQoZ2MsIHQs IEdDU1BSSU5URigiJXMvcC1kZXYiLCBwYXRoKSk7CisgICAgdiA9IGxpYnhsX194c19yZWFkKGdj LCB0LCBHQ1NQUklOVEYoIiVzL3YtZGV2IiwgcGF0aCkpOworICAgIHMgPSBsaWJ4bF9feHNfcmVh ZChnYywgdCwgR0NTUFJJTlRGKCIlcy9zdGF0ZSIsIHBhdGgpKTsKKyAgICBMT0coREVCVUcsICIl cy9zdGF0ZSBpcyAlcyIsIHBhdGgsIHMpOworICAgIGlmICghKGMgJiYgcCAmJiB2ICYmIHMpKSB7 CisgICAgICAgIExPRyhFUlJPUiwgInAtZGV2bmFtZSAnJXMnIHAtZGV2ICclcycgdi1kZXYgJyVz JyIsIGMsIHAsIHYpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCF2 c2NzaV9wYXJzZV9wZGV2KGdjLCBkZXYsIGMsIHAsIHYpKSB7CisgICAgICAgIExPRyhFUlJPUiwg ImZhaWxlZCB0byBwYXJzZSAlczogJXMgJXMgJXMgJXMiLCBwYXRoLCBjLCBwLCB2LCBzKTsKKyAg ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0 aWMgYm9vbCB2c2NzaV9maWxsX2N0cmwobGlieGxfX2djICpnYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB4c190cmFuc2FjdGlvbl90IHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqZmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3Zz Y3NpY3RybCAqY3RybCkKK3sKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2lkZXYgZGV2OworICAgIGNo YXIgKnRtcCwgKmJlX3BhdGgsICpkZXZzX3BhdGg7CisgICAgY2hhciAqKmRldl9kaXJzOworICAg IHVuc2lnbmVkIGludCBuZGV2X2RpcnMsIGRldl9kaXI7CisgICAgYm9vbCBvazsKKworICAgIGN0 cmwtPmRldmlkID0gYXRvaShkaXIpOworCisgICAgYmVfcGF0aCA9IGxpYnhsX194c19yZWFkKGdj LCB0LCBHQ1NQUklOVEYoIiVzLyVzL2JhY2tlbmQiLCBmZV9wYXRoLCBkaXIpKTsKKyAgICBpZiAo IWJlX3BhdGgpCisgICAgICAgIGdvdG8gb3V0OworCisgICAgdG1wID0gbGlieGxfX3hzX3JlYWQo Z2MsIHQsIEdDU1BSSU5URigiJXMvJXMvYmFja2VuZC1pZCIsIGZlX3BhdGgsIGRpcikpOworICAg IGlmICghdG1wKQorICAgICAgICBnb3RvIG91dDsKKyAgICBjdHJsLT5iYWNrZW5kX2RvbWlkID0g YXRvaSh0bXApOworCisgICAgdG1wID0gbGlieGxfX3hzX3JlYWQoZ2MsIHQsIEdDU1BSSU5URigi JXMvaWR4IiwgYmVfcGF0aCkpOworICAgIGlmICghdG1wKQorICAgICAgICBnb3RvIG91dDsKKyAg ICBjdHJsLT5pZHggPSBhdG9pKHRtcCk7CisKKyAgICB0bXAgPSBsaWJ4bF9feHNfcmVhZChnYywg dCwgR0NTUFJJTlRGKCIlcy9mZWF0dXJlLWhvc3QiLCBiZV9wYXRoKSk7CisgICAgaWYgKCF0bXAp CisgICAgICAgIGdvdG8gb3V0OworICAgIG9rID0gYXRvaSh0bXApICE9IDA7CisgICAgbGlieGxf ZGVmYm9vbF9zZXQoJmN0cmwtPnNjc2lfcmF3X2NtZHMsIG9rKTsKKworICAgIG9rID0gdHJ1ZTsK KyAgICBkZXZzX3BhdGggPSBHQ1NQUklOVEYoIiVzL3ZzY3NpLWRldnMiLCBiZV9wYXRoKTsKKyAg ICBkZXZfZGlycyA9IGxpYnhsX194c19kaXJlY3RvcnkoZ2MsIHQsIGRldnNfcGF0aCwgJm5kZXZf ZGlycyk7CisgICAgZm9yIChkZXZfZGlyID0gMDsgZGV2X2RpcnMgJiYgZGV2X2RpciA8IG5kZXZf ZGlyczsgZGV2X2RpcisrKSB7CisgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWRldl9pbml0KCZk ZXYpOworICAgICAgICBvayA9IHZzY3NpX2ZpbGxfZGV2KGdjLCB0LCBkZXZzX3BhdGgsIGRldl9k aXJzW2Rldl9kaXJdLCAmZGV2KTsKKyAgICAgICAgaWYgKG9rID09IHRydWUpCisgICAgICAgICAg ICBvayA9IGN0cmwtPmlkeCA9PSBkZXYudmRldi5oc3Q7CisgICAgICAgIGlmIChvayA9PSB0cnVl KQorICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybF9hcHBlbmRfdnNjc2lkZXYoQ1RY LCBjdHJsLCAmZGV2KTsKKyAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2X2Rpc3Bvc2UoJmRl dik7CisgICAgICAgIGlmIChvayA9PSBmYWxzZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K KworICAgIHJldHVybiBvazsKKworb3V0OgorICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZjdHJsLT5z Y3NpX3Jhd19jbWRzLCBmYWxzZSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvKiByZXR1cm4g YW4gYXJyYXkgb2YgdnNjc2ljdHJscyB3aXRoIG51bSBlbGVtZW50cyAqLworc3RhdGljIGludCB2 c2NzaV9jb2xsZWN0X2N0cmxzKGxpYnhsX19nYyAqZ2MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqKmN0cmxzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCAqbnVtKQoreworICAgIHhzX3RyYW5zYWN0aW9uX3QgdCA9IFhCVF9OVUxMOwor ICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgY3RybDsKKyAgICBjaGFyICpmZV9wYXRoOworICAg IGNoYXIgKipkaXJzOworICAgIHVuc2lnbmVkIGludCBuZGlycyA9IDAsIGRpcjsKKyAgICBpbnQg cmM7CisKKyAgICBmZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdnNjc2kiLCBsaWJ4bF9f eHNfZ2V0X2RvbXBhdGgoZ2MsIGRvbWlkKSk7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgICpu dW0gPSAwOworCisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX3N0YXJ0KGdjLCAm dCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgZGlycyA9IGxpYnhsX194 c19kaXJlY3RvcnkoZ2MsIHQsIGZlX3BhdGgsICZuZGlycyk7CisgICAgICAgIC8qIE5vdGhpbmcg dG8gZG8gKi8KKyAgICAgICAgaWYgKCEoZGlycyAmJiBuZGlycykpCisgICAgICAgICAgICBicmVh azsKKworICAgICAgICAvKiBMaXN0IG9mIGN0cmxzIHRvIGJlIHJldHVybmVkIHRvIHRoZSBjYWxs ZXIgKi8KKyAgICAgICAgKmN0cmxzID0gbGlieGxfX21hbGxvYyhOT0dDLCBuZGlycyAqIHNpemVv ZigqKmN0cmxzKSk7CisKKyAgICAgICAgZm9yIChkaXIgPSAwOyBkaXIgPCBuZGlyczsgZGlyKysp IHsKKyAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmxfaW5pdCgqY3RybHMgKyBkaXIp OworCisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2luaXQoJmN0cmwpOworICAg ICAgICAgICAgaWYgKHZzY3NpX2ZpbGxfY3RybChnYywgdCwgZmVfcGF0aCwgZGlyc1tkaXJdLCAm Y3RybCkpIHsKKyAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2NvcHkoQ1RY LCAqY3RybHMgKyAqbnVtLCAmY3RybCk7CisgICAgICAgICAgICAgICAgKCpudW0pKys7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2Rpc3Bvc2UoJmN0 cmwpOworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fY29t bWl0KGdjLCAmdCk7CisgICAgICAgIGlmICghcmMpIGJyZWFrOworCisgICAgICAgIGlmIChyYyA8 IDApIHsKKyAgICAgICAgICAgIGZvciAoZGlyID0gMDsgZGlyIDwgbmRpcnM7IGRpcisrKQorICAg ICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmxfZGlzcG9zZSgqY3RybHMgKyBkaXIp OworICAgICAgICAgICAgZnJlZSgqY3RybHMpOworICAgICAgICAgICAgKmN0cmxzID0gTlVMTDsK KyAgICAgICAgICAgICpudW0gPSAwOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0K KyAgICB9CisKK291dDoKKyAgICBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fYWJvcnQoZ2MsICZ0KTsK KyAgICByZXR1cm4gcmM7Cit9CisKKy8qIFNpbXBsaWZpZWQgdmFyaWFudCBvZiBkZXZpY2VfYWRk cm1fYW9jb21wbGV0ZSAqLworc3RhdGljIHZvaWQgdnNjc2lfYW9kZXZfY29tcGxldGUobGlieGxf X2VnYyAqZWdjLCBsaWJ4bF9fYW9fZGV2aWNlICphb2RldikKK3sKKyAgICBTVEFURV9BT19HQyhh b2Rldi0+YW8pOworICAgIGxpYnhsX19hb19jb21wbGV0ZShlZ2MsIGFvLCBhb2Rldi0+cmMpOwor fQorCitzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfZnJvbV92c2NzaWN0cmwobGlieGxfX2djICpn YywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqdnNjc2ljdHJsLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kZXZpY2UgKmRldmljZSkKK3sKKyAgICBkZXZp Y2UtPmJhY2tlbmRfZGV2aWQgPSB2c2NzaWN0cmwtPmRldmlkOworICAgIGRldmljZS0+YmFja2Vu ZF9kb21pZCA9IHZzY3NpY3RybC0+YmFja2VuZF9kb21pZDsKKyAgICBkZXZpY2UtPmRldmlkICAg ICAgICAgPSB2c2NzaWN0cmwtPmRldmlkOworICAgIGRldmljZS0+ZG9taWQgICAgICAgICA9IGRv bWlkOworICAgIGRldmljZS0+YmFja2VuZF9raW5kICA9IExJQlhMX19ERVZJQ0VfS0lORF9WU0NT STsKKyAgICBkZXZpY2UtPmtpbmQgICAgICAgICAgPSBMSUJYTF9fREVWSUNFX0tJTkRfVlNDU0k7 CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2c2NzaWN0cmxfcmVtb3ZlKGxpYnhs X2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKnZzY3Np Y3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29wX2hv dyAqYW9faG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmb3JjZSkKK3sKKyAg ICBBT19DUkVBVEUoY3R4LCBkb21pZCwgYW9faG93KTsKKyAgICBsaWJ4bF9fZGV2aWNlICpkZXZp Y2U7CisgICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXY7CisgICAgaW50IHJjOworCisgICAgR0NO RVcoZGV2aWNlKTsKKyAgICByYyA9IGxpYnhsX19kZXZpY2VfZnJvbV92c2NzaWN0cmwoZ2MsIGRv bWlkLCB2c2NzaWN0cmwsIGRldmljZSk7CisgICAgaWYgKHJjICE9IDApIGdvdG8gb3V0OworCisg ICAgR0NORVcoYW9kZXYpOworICAgIGxpYnhsX19wcmVwYXJlX2FvX2RldmljZShhbywgYW9kZXYp OworICAgIGFvZGV2LT5hY3Rpb24gPSBMSUJYTF9fREVWSUNFX0FDVElPTl9SRU1PVkU7CisgICAg YW9kZXYtPmRldiA9IGRldmljZTsKKyAgICBhb2Rldi0+Y2FsbGJhY2sgPSB2c2NzaV9hb2Rldl9j b21wbGV0ZTsKKyAgICBhb2Rldi0+Zm9yY2UgPSBmb3JjZTsKKyAgICBsaWJ4bF9faW5pdGlhdGVf ZGV2aWNlX2dlbmVyaWNfcmVtb3ZlKGVnYywgYW9kZXYpOworCitvdXQ6CisgICAgaWYgKHJjKSBy ZXR1cm4gQU9fQ1JFQVRFX0ZBSUwocmMpOworICAgIHJldHVybiBBT19JTlBST0dSRVNTOworfQor CitzdGF0aWMgaW50IHZzY3NpZGV2X2JlX3NldF9ybShsaWJ4bF9fZ2MgKmdjLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2ICp2LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZmxleGFycmF5X3QgKmJhY2spCit7CisgICAgaW50IHJjOwor ICAgIGNoYXIgKmRpcjsKKworICAgIGRpciA9IEdDU1BSSU5URigidnNjc2ktZGV2cy9kZXYtJXUi LCB2LT52c2NzaWRldl9pZCk7CisgICAgcmMgPSBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL3N0YXRlIiwgZGly KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVkIiwgWGVuYnVz U3RhdGVDbG9zaW5nKSk7CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHZzY3NpY3Ry bF9yZWNvbmZpZ3VyZV9ybShsaWJ4bF9fYW9fZGV2aWNlICphb2RldiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0YXRlX3BhdGgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmJlX3dhaXQpCisKK3sKKyAgICBTVEFURV9B T19HQyhhb2Rldi0+YW8pOworICAgIHZzY3NpZGV2X3JtX3QgKnZzY3NpZGV2X3JtID0gQ09OVEFJ TkVSX09GKGFvZGV2LT5kZXYsICp2c2NzaWRldl9ybSwgZGV2KTsKKyAgICBsaWJ4bF9kZXZpY2Vf dnNjc2ljdHJsICpjdHJsID0gdnNjc2lkZXZfcm0tPmN0cmw7CisgICAgY29uc3QgY2hhciAqYmVf cGF0aCA9IHZzY3NpZGV2X3JtLT5iZV9wYXRoOworICAgIGludCByYywgaSwgYmVfc3RhdGU7Cisg ICAgY2hhciAqZGV2X3BhdGgsICpzdGF0ZV92YWw7CisgICAgZmxleGFycmF5X3QgKmJhY2s7Cisg ICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2ICp2OworICAgIHhzX3RyYW5zYWN0aW9uX3QgdCA9IFhC VF9OVUxMOworCisgICAgLyogUHJlYWxsb2Mga2V5K3ZhbHVlOiAxIHRvcGxldmVsICsgMSBwZXIg ZGV2aWNlICovCisgICAgaSA9IDIgKiAoMSArIDEpOworICAgIGJhY2sgPSBmbGV4YXJyYXlfbWFr ZShnYywgaSwgMSk7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHJjID0gbGlieGxfX3hzX3Ry YW5zYWN0aW9uX3N0YXJ0KGdjLCAmdCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAg ICAgICAgc3RhdGVfdmFsID0gbGlieGxfX3hzX3JlYWQoZ2MsIHQsIHN0YXRlX3BhdGgpOworICAg ICAgICBMT0coREVCVUcsICIlcyBpcyAlcyIsIHN0YXRlX3BhdGgsIHN0YXRlX3ZhbCk7CisgICAg ICAgIGlmICghc3RhdGVfdmFsKSB7CisgICAgICAgICAgICByYyA9IEVSUk9SX05PVEZPVU5EOwor ICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICBiZV9zdGF0ZSA9IGF0 b2koc3RhdGVfdmFsKTsKKyAgICAgICAgc3dpdGNoIChiZV9zdGF0ZSkgeworICAgICAgICBjYXNl IFhlbmJ1c1N0YXRlVW5rbm93bjoKKyAgICAgICAgY2FzZSBYZW5idXNTdGF0ZUluaXRpYWxpc2lu ZzoKKyAgICAgICAgY2FzZSBYZW5idXNTdGF0ZUNsb3Npbmc6CisgICAgICAgIGNhc2UgWGVuYnVz U3RhdGVDbG9zZWQ6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvKiBUaGUgYmFja2Vu ZCBpcyBpbiBhIGJhZCBzdGF0ZSAqLworICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAg ICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIGNhc2UgWGVuYnVzU3RhdGVJbml0aWFsaXNlZDoK KyAgICAgICAgY2FzZSBYZW5idXNTdGF0ZVJlY29uZmlndXJpbmc6CisgICAgICAgIGNhc2UgWGVu YnVzU3RhdGVSZWNvbmZpZ3VyZWQ6CisgICAgICAgICAgICAvKiBCYWNrZW5kIGlzIHN0aWxsIGJ1 c3ksIGNhbGxlciBoYXMgdG8gcmV0cnkgKi8KKyAgICAgICAgICAgIHJjID0gRVJST1JfTk9UX1JF QURZOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIGNhc2UgWGVuYnVzU3RhdGVJbml0 V2FpdDoKKyAgICAgICAgICAgIC8qIFRoZSBmcm9udGVuZCBkaWQgbm90IGNvbm5lY3QgeWV0ICov CisgICAgICAgICAgICAqYmVfd2FpdCA9IFhlbmJ1c1N0YXRlSW5pdFdhaXQ7CisgICAgICAgICAg ICB2c2NzaWRldl9ybS0+ZGV2X3dhaXQgPSBYZW5idXNTdGF0ZUNsb3Npbmc7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgY2FzZSBYZW5idXNTdGF0ZUNvbm5lY3RlZDoKKyAgICAgICAgICAg IC8qIFRoZSBiYWNrZW5kIGNhbiBoYW5kbGUgcmVjb25maWd1cmUgKi8KKyAgICAgICAgICAgICpi ZV93YWl0ID0gWGVuYnVzU3RhdGVDb25uZWN0ZWQ7CisgICAgICAgICAgICB2c2NzaWRldl9ybS0+ ZGV2X3dhaXQgPSBYZW5idXNTdGF0ZUNsb3NlZDsKKyAgICAgICAgICAgIGZsZXhhcnJheV9hcHBl bmRfcGFpcihiYWNrLCAic3RhdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdDU1BSSU5URigiJWQiLCBYZW5idXNTdGF0ZVJlY29uZmlndXJpbmcpKTsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogQXBwZW5kIG5ldyB2c2NzaWRldiBvciBz a2lwIGV4aXN0aW5nICAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3RybC0+bnVtX3ZzY3Np ZGV2czsgaSsrKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmIgPSAwOworICAgICAgICAg ICAgdiA9IGN0cmwtPnZzY3NpZGV2cyArIGk7CisgICAgICAgICAgICBkZXZfcGF0aCA9IEdDU1BS SU5URigiJXMvdnNjc2ktZGV2cy9kZXYtJXUiLCBiZV9wYXRoLCB2LT52c2NzaWRldl9pZCk7Cisg ICAgICAgICAgICBpZiAoIWxpYnhsX194c19kaXJlY3RvcnkoZ2MsIFhCVF9OVUxMLCBkZXZfcGF0 aCwgJm5iKSkgeworICAgICAgICAgICAgICAgIC8qIEZJWE1FIFNhbml0eSBjaGVjayAqLworICAg ICAgICAgICAgICAgIExPRyhERUJVRywgIiVzIGRvZXMgbm90IGV4aXN0IGFueW1vcmUiLCBkZXZf cGF0aCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICByYyA9IHZzY3NpZGV2X2JlX3NldF9ybShnYywgdiwgYmFjayk7CisgICAgICAgICAgICBp ZiAocmMpIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgbGlieGxfX3hzX3dyaXRldihn YywgdCwgYmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9feHNfa3ZzX29m X2ZsZXhhcnJheShnYywgYmFjaywgYmFjay0+Y291bnQpKTsKKworICAgICAgICByYyA9IGxpYnhs X194c190cmFuc2FjdGlvbl9jb21taXQoZ2MsICZ0KTsKKyAgICAgICAgaWYgKCFyYykgYnJlYWs7 CisgICAgICAgIGlmIChyYyA8IDApIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0gMDsKKwor b3V0OgorICAgIGxpYnhsX194c190cmFuc2FjdGlvbl9hYm9ydChnYywgJnQpOworICAgIHJldHVy biByYzsKK30KKworc3RhdGljIHZvaWQgdnNjc2ljdHJsX3JlbW92ZV9iZV9kZXYobGlieGxfX2dj ICpnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92 c2NzaWRldiAqdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzX3RyYW5z YWN0aW9uX3QgdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmJlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV2 X3dhaXQpCit7CisgICAgY2hhciAqZGlyLCAqcGF0aCwgKnZhbDsKKworICAgIGRpciA9IEdDU1BS SU5URigiJXMvdnNjc2ktZGV2cy9kZXYtJXUiLCBiZV9wYXRoLCB2LT52c2NzaWRldl9pZCk7Cisg ICAgcGF0aCA9IEdDU1BSSU5URigiJXMvc3RhdGUiLCBkaXIpOworICAgIHZhbCA9IGxpYnhsX194 c19yZWFkKGdjLCB0LCBwYXRoKTsKKyAgICBMT0coREVCVUcsICIlcyBpcyAlcyIsIHBhdGgsIHZh bCk7CisgICAgaWYgKHZhbCAmJiBzdHJjbXAodmFsLCBHQ1NQUklOVEYoIiVkIiwgZGV2X3dhaXQp KSA9PSAwKSB7CisgICAgICAgIHhzX3JtKENUWC0+eHNoLCB0LCBHQ1NQUklOVEYoIiVzL3N0YXRl IiwgZGlyKSk7CisgICAgICAgIHhzX3JtKENUWC0+eHNoLCB0LCBHQ1NQUklOVEYoIiVzL3AtZGV2 bmFtZSIsIGRpcikpOworICAgICAgICB4c19ybShDVFgtPnhzaCwgdCwgR0NTUFJJTlRGKCIlcy9w LWRldiIsIGRpcikpOworICAgICAgICB4c19ybShDVFgtPnhzaCwgdCwgR0NTUFJJTlRGKCIlcy92 LWRldiIsIGRpcikpOworICAgICAgICB4c19ybShDVFgtPnhzaCwgdCwgZGlyKTsKKyAgICB9IGVs c2UgeworICAgICAgICBMT0coRVJST1IsICIlcyBoYXMgJXMsIGV4cGVjdGVkICVkIiwgcGF0aCwg dmFsLCBkZXZfd2FpdCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB2c2NzaWN0cmxfcmVtb3Zl X2JlX2NiKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfX2V2X2RldnN0YXRlICpkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IHJjKQoreworICAgIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2ID0gQ09OVEFJTkVS X09GKGRzLCAqYW9kZXYsIGJhY2tlbmRfZHMpOworICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7 CisgICAgdnNjc2lkZXZfcm1fdCAqdnNjc2lkZXZfcm0gPSBDT05UQUlORVJfT0YoYW9kZXYtPmRl diwgKnZzY3NpZGV2X3JtLCBkZXYpOworICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKmN0cmwg PSB2c2NzaWRldl9ybS0+Y3RybDsKKyAgICB4c190cmFuc2FjdGlvbl90IHQgPSBYQlRfTlVMTDsK KyAgICBpbnQgaTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJh bnNhY3Rpb25fc3RhcnQoZ2MsICZ0KTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgY3RybC0+bnVtX3ZzY3NpZGV2czsgaSsrKQorICAgICAgICAg ICAgdnNjc2ljdHJsX3JlbW92ZV9iZV9kZXYoZ2MsIGN0cmwtPnZzY3NpZGV2cyArIGksIHQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c2NzaWRldl9ybS0+YmVfcGF0aCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzY3NpZGV2X3JtLT5kZXZfd2Fp dCk7CisKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fY29tbWl0KGdjLCAmdCk7 CisgICAgICAgIGlmICghcmMpIGJyZWFrOworICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsK KyAgICB9CisKK291dDoKKyAgICBhb2Rldi0+cmMgPSByYzsKKyAgICBhb2Rldi0+Y2FsbGJhY2so ZWdjLCBhb2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIHZzY3NpZGV2X19yZW1vdmUobGlieGxfX2Vn YyAqZWdjLCBsaWJ4bF9fYW9fZGV2aWNlICphb2RldikKK3sKKyAgICBTVEFURV9BT19HQyhhb2Rl di0+YW8pOworICAgIHZzY3NpZGV2X3JtX3QgKnZzY3NpZGV2X3JtID0gQ09OVEFJTkVSX09GKGFv ZGV2LT5kZXYsICp2c2NzaWRldl9ybSwgZGV2KTsKKyAgICBjaGFyICpzdGF0ZV9wYXRoOworICAg IGludCByYywgYmVfd2FpdDsKKworICAgIHZzY3NpZGV2X3JtLT5iZV9wYXRoID0gbGlieGxfX2Rl dmljZV9iYWNrZW5kX3BhdGgoZ2MsIGFvZGV2LT5kZXYpOworICAgIHN0YXRlX3BhdGggPSBHQ1NQ UklOVEYoIiVzL3N0YXRlIiwgdnNjc2lkZXZfcm0tPmJlX3BhdGgpOworCisgICAgcmMgPSB2c2Nz aWN0cmxfcmVjb25maWd1cmVfcm0oYW9kZXYsIHN0YXRlX3BhdGgsICZiZV93YWl0KTsKKyAgICBp ZiAocmMpIGdvdG8gb3V0OworCisgICAgcmMgPSBsaWJ4bF9fZXZfZGV2c3RhdGVfd2FpdChhbywg JmFvZGV2LT5iYWNrZW5kX2RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnNj c2ljdHJsX3JlbW92ZV9iZV9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 YXRlX3BhdGgsIGJlX3dhaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJY TF9ERVNUUk9ZX1RJTUVPVVQgKiAxMDAwKTsKKyAgICBpZiAocmMpIHsKKyAgICAgICAgTE9HKEVS Uk9SLCAidW5hYmxlIHRvIHdhaXQgZm9yICVzIiwgc3RhdGVfcGF0aCk7CisgICAgICAgIGdvdG8g b3V0OworICAgIH0KKworICAgIHJldHVybjsKKworb3V0OgorICAgIGFvZGV2LT5yYyA9IHJjOwor ICAgIC8qIE5vdGlmeSB0aGF0IHRoaXMgaXMgZG9uZSAqLworICAgIGFvZGV2LT5jYWxsYmFjayhl Z2MsIGFvZGV2KTsKK30KKworc3RhdGljIGludCB2c2NzaWRldl9yZW1vdmUobGlieGxfY3R4ICpj dHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKnZzY3NpY3RybCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cp Cit7CisgICAgQU9fQ1JFQVRFKGN0eCwgZG9taWQsIGFvX2hvdyk7CisgICAgbGlieGxfX2FvX2Rl dmljZSAqYW9kZXY7CisgICAgdnNjc2lkZXZfcm1fdCAqdnNjc2lkZXZfcm07CisgICAgbGlieGxf X2RldmljZSAqZGV2aWNlOworICAgIGludCByYzsKKworICAgIEdDTkVXKGFvZGV2KTsKKworICAg IEdDTkVXKHZzY3NpZGV2X3JtKTsKKyAgICB2c2NzaWRldl9ybS0+Y3RybCA9IHZzY3NpY3RybDsK KyAgICBkZXZpY2UgPSAmdnNjc2lkZXZfcm0tPmRldjsKKworICAgIHJjID0gbGlieGxfX2Rldmlj ZV9mcm9tX3ZzY3NpY3RybChnYywgZG9taWQsIHZzY3NpY3RybCwgZGV2aWNlKTsKKyAgICBpZiAo cmMpIGdvdG8gb3V0OworCisgICAgbGlieGxfX3ByZXBhcmVfYW9fZGV2aWNlKGFvLCBhb2Rldik7 CisgICAgYW9kZXYtPmRldiA9IGRldmljZTsKKyAgICBhb2Rldi0+YWN0aW9uID0gTElCWExfX0RF VklDRV9BQ1RJT05fUkVNT1ZFOworICAgIGFvZGV2LT5jYWxsYmFjayA9IHZzY3NpX2FvZGV2X2Nv bXBsZXRlOworCisgICAgdnNjc2lkZXZfX3JlbW92ZShlZ2MsIGFvZGV2KTsKKworb3V0OgorICAg IGlmIChyYykgQU9fQ1JFQVRFX0ZBSUwocmMpOworICAgIHJldHVybiBBT19JTlBST0dSRVNTOwor fQorCitzdGF0aWMgaW50IHZzY3NpZGV2X2JhY2tlbmRfYWRkKGxpYnhsX19nYyAqZ2MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWRldiAqdiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleGFycmF5X3QgKmJhY2spCit7CisgICAg aW50IHJjOworICAgIGNoYXIgKmRpcjsKKyAgICB1bnNpZ25lZCBpbnQgaHN0LCBjaG4sIHRndDsK KyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbHVuOworCisKKyAgICBkaXIgPSBHQ1NQUklOVEYoInZz Y3NpLWRldnMvZGV2LSV1Iiwgdi0+dnNjc2lkZXZfaWQpOworICAgIHN3aXRjaCAodi0+cGRldi50 eXBlKSB7CisgICAgY2FzZSBMSUJYTF9WU0NTSV9QREVWX1RZUEVfV1dOOgorICAgICAgICBmbGV4 YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD U1BSSU5URigiJXMvcC1kZXYiLCBkaXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg di0+cGRldi51Lnd3bi5tKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMSUJYTF9WU0NTSV9Q REVWX1RZUEVfSENUTDoKKyAgICAgICAgaHN0ID0gdi0+cGRldi51LmhjdGwubS5oc3Q7CisgICAg ICAgIGNobiA9IHYtPnBkZXYudS5oY3RsLm0uY2huOworICAgICAgICB0Z3QgPSB2LT5wZGV2LnUu aGN0bC5tLnRndDsKKyAgICAgICAgbHVuID0gdi0+cGRldi51LmhjdGwubS5sdW47CisgICAgICAg IGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR0NTUFJJTlRGKCIlcy9wLWRldiIsIGRpciksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHQ1NQUklOVEYoIiV1OiV1OiV1OiVsbHUiLCBoc3QsIGNobiwgdGd0LCBsdW4pKTsKKyAg ICAgICAgYnJlYWs7CisgICAgY2FzZSBMSUJYTF9WU0NTSV9QREVWX1RZUEVfSU5WQUxJRDoKKyAg ICAgICAgLyogZmFsbHRocm91Z2ggKi8KKyAgICBkZWZhdWx0OgorICAgICAgICByYyA9IEVSUk9S X0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICBmbGV4YXJyYXlfYXBwZW5kX3Bh aXIoYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9wLWRldm5h bWUiLCBkaXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2LT5wZGV2LnBfZGV2bmFtZSk7 CisgICAgaHN0ID0gdi0+dmRldi5oc3Q7CisgICAgY2huID0gdi0+dmRldi5jaG47CisgICAgdGd0 ID0gdi0+dmRldi50Z3Q7CisgICAgbHVuID0gdi0+dmRldi5sdW47CisgICAgZmxleGFycmF5X2Fw cGVuZF9wYWlyKGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMv di1kZXYiLCBkaXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiV1OiV1 OiV1OiVsbHUiLCBoc3QsIGNobiwgdGd0LCBsdW4pKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kX3Bh aXIoYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9zdGF0ZSIs IGRpciksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJWQiLCBYZW5idXNT dGF0ZUluaXRpYWxpc2luZykpOworICAgIHJjID0gMDsKK291dDoKKyAgICByZXR1cm4gcmM7Cit9 CisKK3N0YXRpYyB2b2lkIHZzY3NpY3RybF9uZXdfYmFja2VuZChsaWJ4bF9fZWdjICplZ2MsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3Ry bCAqdnNjc2ljdHJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rv bWFpbl9jb25maWcgKmRfY29uZmlnKQoreworICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7Cisg ICAgaW50IHJjLCBpOworICAgIGZsZXhhcnJheV90ICpiYWNrOworICAgIGZsZXhhcnJheV90ICpm cm9udDsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2lkZXYgKnY7CisgICAgeHNfdHJhbnNhY3Rpb25f dCB0ID0gWEJUX05VTEw7CisKKyAgICAvKiBQcmVhbGxvYyBrZXkrdmFsdWU6IDQgdG9wbGV2ZWwg KyA0IHBlciBkZXZpY2UgKi8KKyAgICBpID0gMiAqICg0ICsgKDQgKiB2c2NzaWN0cmwtPm51bV92 c2NzaWRldnMpKTsKKyAgICBiYWNrID0gZmxleGFycmF5X21ha2UoZ2MsIGksIDEpOworICAgIGZy b250ID0gZmxleGFycmF5X21ha2UoZ2MsIDIgKiAyLCAxKTsKKworICAgIGZsZXhhcnJheV9hcHBl bmRfcGFpcihiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvbnRlbmQtaWQiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVkIiwgYW9kZXYtPmRldi0+ZG9t aWQpKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgIm9ubGluZSIsICIxIik7Cisg ICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAg ICJzdGF0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJWQiLCBYZW5i dXNTdGF0ZUluaXRpYWxpc2luZykpOworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAibGlieGxfY3RybF9pbmRleCIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJWQiLCB2c2NzaWN0cmwtPmlkeCkpOworICAgIGZs ZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLCAiZmVhdHVyZS1ob3N0IiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfZGVmYm9vbF92YWwodnNjc2ljdHJsLT5zY3NpX3Jhd19jbWRzKSA/ CisgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA6ICIwIik7CisKKyAgICBmbGV4YXJyYXlf YXBwZW5kX3BhaXIoZnJvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrZW5kLWlk IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlZCIsIHZzY3NpY3RybC0+ YmFja2VuZF9kb21pZCkpOworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihmcm9udCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgInN0YXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg R0NTUFJJTlRGKCIlZCIsIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nKSk7CisKKyAgICBmb3IgKGkg PSAwOyBpIDwgdnNjc2ljdHJsLT5udW1fdnNjc2lkZXZzOyBpKyspIHsKKyAgICAgICAgdiA9IHZz Y3NpY3RybC0+dnNjc2lkZXZzICsgaTsKKyAgICAgICAgcmMgPSB2c2NzaWRldl9iYWNrZW5kX2Fk ZChnYywgdiwgYmFjayk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgfQorCisgICAg Zm9yICg7OykgeworICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9zdGFydChnYywg JnQpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIHJjID0gbGlieGxfX2Rl dmljZV9leGlzdHMoZ2MsIHQsIGFvZGV2LT5kZXYpOworICAgICAgICBpZiAocmMgPCAwKSBnb3Rv IG91dDsKKyAgICAgICAgaWYgKHJjID09IDEpIHsgICAgICAgICAgICAgIC8qIGFscmVhZHkgZXhp c3RzIGluIHhlbnN0b3JlICovCisgICAgICAgICAgICBMT0coRVJST1IsICJkZXZpY2UgYWxyZWFk eSBleGlzdHMgaW4geGVuc3RvcmUiKTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfREVWSUNFX0VY SVNUUzsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFv ZGV2LT51cGRhdGVfanNvbikgeworICAgICAgICAgICAgcmMgPSBsaWJ4bF9fc2V0X2RvbWFpbl9j b25maWd1cmF0aW9uKGdjLCBhb2Rldi0+ZGV2LT5kb21pZCwgZF9jb25maWcpOworICAgICAgICAg ICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIGxpYnhsX19kZXZpY2Vf Z2VuZXJpY19hZGQoZ2MsIHQsIGFvZGV2LT5kZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfX3hzX2t2c19vZl9mbGV4YXJyYXkoZ2MsIGJhY2ssCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjay0+ Y291bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19rdnNf b2ZfZmxleGFycmF5KGdjLCBmcm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9udC0+Y291bnQpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgICAgIHJjID0gbGlieGxfX3hzX3Ry YW5zYWN0aW9uX2NvbW1pdChnYywgJnQpOworICAgICAgICBpZiAoIXJjKSBicmVhazsKKyAgICAg ICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7CisgICAgfQorCisgICAgbGlieGxfX3dhaXRfZGV2aWNl X2Nvbm5lY3Rpb24oZWdjLCBhb2Rldik7CisgICAgcmV0dXJuOworCitvdXQ6CisgICAgbGlieGxf X3hzX3RyYW5zYWN0aW9uX2Fib3J0KGdjLCAmdCk7CisgICAgYW9kZXYtPnJjID0gcmM7CisgICAg YW9kZXYtPmNhbGxiYWNrKGVnYywgYW9kZXYpOworfQorCitzdGF0aWMgdm9pZCB2c2NzaWN0cmxf ZG9fcmVjb25maWd1cmVfYWRkX2NiKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2V2X2RldnN0YXRlICpkcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjKQoreworICAgIGxp YnhsX19hb19kZXZpY2UgKmFvZGV2ID0gQ09OVEFJTkVSX09GKGRzLCAqYW9kZXYsIGJhY2tlbmRf ZHMpOworICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7CisgICAgYW9kZXYtPnJjID0gcmM7Cisg ICAgYW9kZXYtPmNhbGxiYWNrKGVnYywgYW9kZXYpOworfQorCitzdGF0aWMgdm9pZCB2c2NzaWN0 cmxfZG9fcmVjb25maWd1cmVfYWRkKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwg KnZzY3NpY3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfZG9tYWluX2NvbmZpZyAqZF9jb25maWcpCit7CisgICAgU1RBVEVfQU9fR0MoYW9kZXYtPmFv KTsKKyAgICBpbnQgcmMsIGksIGJlX3N0YXRlLCBiZV93YWl0OworICAgIGNvbnN0IGNoYXIgKmJl X3BhdGg7CisgICAgY2hhciAqZGV2X3BhdGgsICpzdGF0ZV9wYXRoLCAqc3RhdGVfdmFsOworICAg IGZsZXhhcnJheV90ICpiYWNrOworICAgIGxpYnhsX2RldmljZV92c2NzaWRldiAqdjsKKyAgICB4 c190cmFuc2FjdGlvbl90IHQgPSBYQlRfTlVMTDsKKyAgICBib29sIGRvX3JlY29uZmlndXJlID0g ZmFsc2U7CisKKyAgICAvKiBQcmVhbGxvYyBrZXkrdmFsdWU6IDEgdG9wbGV2ZWwgKyA0IHBlciBk ZXZpY2UgKi8KKyAgICBpID0gMiAqICgxICsgKDQgKiB2c2NzaWN0cmwtPm51bV92c2NzaWRldnMp KTsKKyAgICBiYWNrID0gZmxleGFycmF5X21ha2UoZ2MsIGksIDEpOworCisgICAgYmVfcGF0aCA9 IGxpYnhsX19kZXZpY2VfYmFja2VuZF9wYXRoKGdjLCBhb2Rldi0+ZGV2KTsKKyAgICBzdGF0ZV9w YXRoID0gR0NTUFJJTlRGKCIlcy9zdGF0ZSIsIGJlX3BhdGgpOworCisgICAgZm9yICg7Oykgewor ICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9zdGFydChnYywgJnQpOworICAgICAg ICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIHN0YXRlX3ZhbCA9IGxpYnhsX194c19yZWFk KGdjLCB0LCBzdGF0ZV9wYXRoKTsKKyAgICAgICAgTE9HKERFQlVHLCAiJXMgaXMgJXMiLCBzdGF0 ZV9wYXRoLCBzdGF0ZV92YWwpOworICAgICAgICBpZiAoIXN0YXRlX3ZhbCkgeworICAgICAgICAg ICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKwor ICAgICAgICBiZV9zdGF0ZSA9IGF0b2koc3RhdGVfdmFsKTsKKyAgICAgICAgc3dpdGNoIChiZV9z dGF0ZSkgeworICAgICAgICBjYXNlIFhlbmJ1c1N0YXRlVW5rbm93bjoKKyAgICAgICAgY2FzZSBY ZW5idXNTdGF0ZUluaXRpYWxpc2luZzoKKyAgICAgICAgY2FzZSBYZW5idXNTdGF0ZUNsb3Npbmc6 CisgICAgICAgIGNhc2UgWGVuYnVzU3RhdGVDbG9zZWQ6CisgICAgICAgIGRlZmF1bHQ6CisgICAg ICAgICAgICAvKiBUaGUgYmFja2VuZCBpcyBpbiBhIGJhZCBzdGF0ZSAqLworICAgICAgICAgICAg cmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIGNhc2UgWGVu YnVzU3RhdGVJbml0aWFsaXNlZDoKKyAgICAgICAgY2FzZSBYZW5idXNTdGF0ZVJlY29uZmlndXJp bmc6CisgICAgICAgIGNhc2UgWGVuYnVzU3RhdGVSZWNvbmZpZ3VyZWQ6CisgICAgICAgICAgICAv KiBCYWNrZW5kIGlzIHN0aWxsIGJ1c3ksIGNhbGxlciBoYXMgdG8gcmV0cnkgKi8KKyAgICAgICAg ICAgIHJjID0gRVJST1JfTk9UX1JFQURZOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAg IGNhc2UgWGVuYnVzU3RhdGVJbml0V2FpdDoKKyAgICAgICAgICAgIC8qIFRoZSBmcm9udGVuZCBk aWQgbm90IGNvbm5lY3QgeWV0ICovCisgICAgICAgICAgICBiZV93YWl0ID0gWGVuYnVzU3RhdGVJ bml0V2FpdDsKKyAgICAgICAgICAgIGRvX3JlY29uZmlndXJlID0gZmFsc2U7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgY2FzZSBYZW5idXNTdGF0ZUNvbm5lY3RlZDoKKyAgICAgICAgICAg IC8qIFRoZSBiYWNrZW5kIGNhbiBoYW5kbGUgcmVjb25maWd1cmUgKi8KKyAgICAgICAgICAgIGJl X3dhaXQgPSBYZW5idXNTdGF0ZUNvbm5lY3RlZDsKKyAgICAgICAgICAgIGZsZXhhcnJheV9hcHBl bmRfcGFpcihiYWNrLCAic3RhdGUiLCBHQ1NQUklOVEYoIiVkIiwgWGVuYnVzU3RhdGVSZWNvbmZp Z3VyaW5nKSk7CisgICAgICAgICAgICBkb19yZWNvbmZpZ3VyZSA9IHRydWU7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEFwcGVuZCBuZXcgdnNjc2lkZXYgb3Ig c2tpcCBleGlzdGluZyAgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHZzY3NpY3RybC0+bnVt X3ZzY3NpZGV2czsgaSsrKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmIgPSAwOworICAg ICAgICAgICAgdiA9IHZzY3NpY3RybC0+dnNjc2lkZXZzICsgaTsKKyAgICAgICAgICAgIGRldl9w YXRoID0gR0NTUFJJTlRGKCIlcy92c2NzaS1kZXZzL2Rldi0ldSIsIGJlX3BhdGgsIHYtPnZzY3Np ZGV2X2lkKTsKKyAgICAgICAgICAgIGlmIChsaWJ4bF9feHNfZGlyZWN0b3J5KGdjLCBYQlRfTlVM TCwgZGV2X3BhdGgsICZuYikpIHsKKyAgICAgICAgICAgICAgICAvKiBGSVhNRSBTYW5pdHkgY2hl Y2sgKi8KKyAgICAgICAgICAgICAgICBMT0coREVCVUcsICIlcyBleGlzdHMgYWxyZWFkeSB3aXRo ICV1IGVudHJpZXMiLCBkZXZfcGF0aCwgbmIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmMgPSB2c2NzaWRldl9iYWNrZW5kX2FkZChnYywg diwgYmFjayk7CisgICAgICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAgICAgICB9CisKKyAg ICAgICAgaWYgKGFvZGV2LT51cGRhdGVfanNvbikgeworICAgICAgICAgICAgcmMgPSBsaWJ4bF9f c2V0X2RvbWFpbl9jb25maWd1cmF0aW9uKGdjLCBhb2Rldi0+ZGV2LT5kb21pZCwgZF9jb25maWcp OworICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIGxp YnhsX194c193cml0ZXYoZ2MsIHQsIGJlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfX3hzX2t2c19vZl9mbGV4YXJyYXkoZ2MsIGJhY2ssIGJhY2stPmNvdW50KSk7CisKKyAg ICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fY29tbWl0KGdjLCAmdCk7CisgICAgICAg IGlmICghcmMpIGJyZWFrOworICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsKKyAgICB9CisK KyAgICBpZiAoZG9fcmVjb25maWd1cmUpIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9fZXZfZGV2c3Rh dGVfd2FpdChhbywgJmFvZGV2LT5iYWNrZW5kX2RzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZzY3NpY3RybF9kb19yZWNvbmZpZ3VyZV9hZGRfY2IsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfcGF0aCwgYmVfd2FpdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJYTF9JTklUX1RJTUVPVVQgKiAxMDAwKTsK KyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICB9CisgICAgcmV0dXJuOworCitvdXQ6Cisg ICAgbGlieGxfX3hzX3RyYW5zYWN0aW9uX2Fib3J0KGdjLCAmdCk7CisgICAgYW9kZXYtPnJjID0g cmM7CisgICAgYW9kZXYtPmNhbGxiYWNrKGVnYywgYW9kZXYpOworfQorCitzdGF0aWMgaW50IHZz Y3NpY3RybF9uZXh0X3ZzY3NpZGV2X2lkKGxpYnhsX19nYyAqZ2MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxpYnhsX3BhdGgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmlkICp2c2NzaWRldl9pZCkKK3sK KyAgICBjb25zdCBjaGFyICp2YWw7CisgICAgeHNfdHJhbnNhY3Rpb25fdCB0ID0gWEJUX05VTEw7 CisgICAgdW5zaWduZWQgaW50IGlkOworICAgIGludCByYzsKKworICAgIGZvciAoOzspIHsKKyAg ICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fc3RhcnQoZ2MsICZ0KTsKKyAgICAgICAg aWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICB2YWwgPSBsaWJ4bF9feHNfcmVhZChnYywgdCwg bGlieGxfcGF0aCk7CisgICAgICAgIGlkID0gdmFsID8gc3RydG91bCh2YWwsIE5VTEwsIDEwKSA6 IDA7CisKKyAgICAgICAgTE9HKERFQlVHLCAiJXMgPSAlcyB2c2NzaWRldl9pZCAldSIsIGxpYnhs X3BhdGgsIHZhbCwgaWQpOworCisgICAgICAgIHZhbCA9IEdDU1BSSU5URigiJXUiLCBpZCArIDEp OworICAgICAgICByYyA9IGxpYnhsX194c193cml0ZV9jaGVja2VkKGdjLCB0LCBsaWJ4bF9wYXRo LCB2YWwpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIHJjID0gbGlieGxf X3hzX3RyYW5zYWN0aW9uX2NvbW1pdChnYywgJnQpOworICAgICAgICBpZiAoIXJjKSBicmVhazsK KyAgICAgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7CisgICAgfQorCisgICAgKnZzY3NpZGV2X2lk ID0gaWQ7CisgICAgcmMgPSAwOworCitvdXQ6CisgICAgbGlieGxfX3hzX3RyYW5zYWN0aW9uX2Fi b3J0KGdjLCAmdCk7CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHZzY3NpY3RybF9h c3NpZ25fdnNjc2lkZXZfaWRzKGxpYnhsX19nYyAqZ2MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICp2c2NzaWN0cmwpCit7 CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2ICpkZXY7CisgICAgbGlieGxfZGV2aWQgdnNjc2lk ZXZfaWQ7CisgICAgY29uc3QgY2hhciAqbGlieGxfcGF0aDsKKyAgICBpbnQgcmMsIGk7CisKKyAg ICBsaWJ4bF9wYXRoID0gR0NTUFJJTlRGKCIlcy92c2NzaS8ldS9uZXh0X3ZzY3NpZGV2X2lkIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19saWJ4bF9wYXRoKGdjLCBkb21p ZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2c2NzaWN0cmwtPmRldmlkKTsKKyAgICBm b3IgKGkgPSAwOyBpIDwgdnNjc2ljdHJsLT5udW1fdnNjc2lkZXZzOyBpKyspIHsKKyAgICAgICAg ZGV2ID0gJnZzY3NpY3RybC0+dnNjc2lkZXZzW2ldOworICAgICAgICBpZiAoZGV2LT52c2NzaWRl dl9pZCA+PSAwKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJjID0gdnNjc2ljdHJs X25leHRfdnNjc2lkZXZfaWQoZ2MsIGxpYnhsX3BhdGgsICZ2c2NzaWRldl9pZCk7CisgICAgICAg IGlmIChyYykgeworICAgICAgICAgICAgTE9HKEVSUk9SLCAiZmFpbGVkIHRvIGFzc2lnbiB2c2Nz aWRldl9pZCB0byAlcyBmb3IgJXMiLAorICAgICAgICAgICAgICAgIGxpYnhsX3BhdGgsIGRldi0+ cGRldi5wX2Rldm5hbWUpOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAg ICAgZGV2LT52c2NzaWRldl9pZCA9IHZzY3NpZGV2X2lkOworICAgIH0KKworICAgIHJjID0gMDsK K291dDoKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHZzY3NpY3RybF91cGRhdGVf anNvbihsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfX2FvX2RldmljZSAqYW9kZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqdnNjc2ljdHJsLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZzY3NpY3RybF9hZGQgZm4pCit7CisgICAgU1RBVEVfQU9fR0MoYW9k ZXYtPmFvKTsKKyAgICBpbnQgcmM7CisgICAgdWludDMyX3QgZG9taWQgPSBhb2Rldi0+ZGV2LT5k b21pZDsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsIHZzY3NpY3RybF9zYXZlZDsKKyAgICBs aWJ4bF9kb21haW5fY29uZmlnIGRfY29uZmlnOworICAgIGxpYnhsX19kb21haW5fdXNlcmRhdGFf bG9jayAqbG9jayA9IE5VTEw7CisKKyAgICBsaWJ4bF9kb21haW5fY29uZmlnX2luaXQoJmRfY29u ZmlnKTsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2luaXQoJnZzY3NpY3RybF9zYXZlZCk7 CisKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2NvcHkoQ1RYLCAmdnNjc2ljdHJsX3NhdmVk LCB2c2NzaWN0cmwpOworCisgICAgcmMgPSB2c2NzaWN0cmxfYXNzaWduX3ZzY3NpZGV2X2lkcyhn YywgZG9taWQsICZ2c2NzaWN0cmxfc2F2ZWQpOworICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAg ICBpZiAoYW9kZXYtPnVwZGF0ZV9qc29uKSB7CisgICAgICAgIGxvY2sgPSBsaWJ4bF9fbG9ja19k b21haW5fdXNlcmRhdGEoZ2MsIGRvbWlkKTsKKyAgICAgICAgaWYgKCFsb2NrKSB7CisgICAgICAg ICAgICByYyA9IEVSUk9SX0xPQ0tfRkFJTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAg ICB9CisKKyAgICAgICAgcmMgPSBsaWJ4bF9fZ2V0X2RvbWFpbl9jb25maWd1cmF0aW9uKGdjLCBk b21pZCwgJmRfY29uZmlnKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICAv KiBSZXBsYWNlIG9yIGFwcGVuZCB0aGUgY29weSB0byB0aGUgZG9tYWluIGNvbmZpZyAqLworICAg ICAgICBERVZJQ0VfQUREKHZzY3NpY3RybCwgdnNjc2ljdHJscywgZG9taWQsICZ2c2NzaWN0cmxf c2F2ZWQsIENPTVBBUkVfVlNDU0ksICZkX2NvbmZpZyk7CisgICAgfQorCisgICAgZm4oZWdjLCBh b2RldiwgJnZzY3NpY3RybF9zYXZlZCwgJmRfY29uZmlnKTsKKworb3V0OgorICAgIGlmIChsb2Nr KSBsaWJ4bF9fdW5sb2NrX2RvbWFpbl91c2VyZGF0YShsb2NrKTsKKyAgICBsaWJ4bF9kZXZpY2Vf dnNjc2ljdHJsX2Rpc3Bvc2UoJnZzY3NpY3RybF9zYXZlZCk7CisgICAgbGlieGxfZG9tYWluX2Nv bmZpZ19kaXNwb3NlKCZkX2NvbmZpZyk7CisgICAgaWYgKHJjKSB7CisgICAgICAgIGFvZGV2LT5y YyA9IHJjOworICAgICAgICBhb2Rldi0+Y2FsbGJhY2soZWdjLCBhb2Rldik7CisgICAgfQorfQor CitzdGF0aWMgdm9pZCB2c2NzaWN0cmxfX3JlY29uZmlndXJlX2FkZChsaWJ4bF9fZWdjICplZ2Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2Nz aWN0cmwgKnZzY3NpY3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KQoreworICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7 CisgICAgbGlieGxfX2RldmljZSAqZGV2aWNlOworICAgIHZzY3NpY3RybF9hZGQgZm47CisgICAg aW50IHJjOworCisgICAgR0NORVcoZGV2aWNlKTsKKyAgICByYyA9IGxpYnhsX19kZXZpY2VfZnJv bV92c2NzaWN0cmwoZ2MsIGRvbWlkLCB2c2NzaWN0cmwsIGRldmljZSk7CisgICAgaWYgKHJjKSBn b3RvIG91dDsKKyAgICBhb2Rldi0+ZGV2ID0gZGV2aWNlOworCisgICAgZm4gPSB2c2NzaWN0cmxf ZG9fcmVjb25maWd1cmVfYWRkOworICAgIHZzY3NpY3RybF91cGRhdGVfanNvbihlZ2MsIGFvZGV2 LCB2c2NzaWN0cmwsIGZuKTsKKyAgICByZXR1cm47CisKK291dDoKKyAgICBhb2Rldi0+cmMgPSBy YzsKKyAgICBhb2Rldi0+Y2FsbGJhY2soZWdjLCBhb2Rldik7Cit9CisKK3N0YXRpYyBpbnQgdnNj c2ljdHJsX3JlY29uZmlndXJlX2FkZChsaWJ4bF9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICp2c2NzaWN0cmwsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cg KmFvX2hvdykKK3sKKyAgICBBT19DUkVBVEUoY3R4LCBkb21pZCwgYW9faG93KTsKKyAgICBsaWJ4 bF9fYW9fZGV2aWNlICphb2RldjsKKworICAgIEdDTkVXKGFvZGV2KTsKKyAgICBsaWJ4bF9fcHJl cGFyZV9hb19kZXZpY2UoYW8sIGFvZGV2KTsKKyAgICBhb2Rldi0+YWN0aW9uID0gTElCWExfX0RF VklDRV9BQ1RJT05fQUREOworICAgIGFvZGV2LT5jYWxsYmFjayA9IHZzY3NpX2FvZGV2X2NvbXBs ZXRlOworICAgIGFvZGV2LT51cGRhdGVfanNvbiA9IHRydWU7CisgICAgdnNjc2ljdHJsX19yZWNv bmZpZ3VyZV9hZGQoZWdjLCBkb21pZCwgdnNjc2ljdHJsLCBhb2Rldik7CisKKyAgICByZXR1cm4g QU9fSU5QUk9HUkVTUzsKK30KKwordm9pZCBsaWJ4bF9fZGV2aWNlX3ZzY3NpY3RybF9hZGQobGli eGxfX2VnYyAqZWdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKnZzY3NpY3RybCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KQoreworICAgIFNUQVRF X0FPX0dDKGFvZGV2LT5hbyk7CisgICAgbGlieGxfX2RldmljZSAqZGV2aWNlOworICAgIHZzY3Np Y3RybF9hZGQgZm47CisgICAgaW50IHJjOworCisgICAgaWYgKHZzY3NpY3RybC0+ZGV2aWQgPT0g LTEpIHsKKyAgICAgICAgaWYgKCh2c2NzaWN0cmwtPmRldmlkID0gbGlieGxfX2RldmljZV9uZXh0 aWQoZ2MsIGRvbWlkLCAidnNjc2kiKSkgPCAwKSB7CisgICAgICAgICAgICByYyA9IEVSUk9SX0ZB SUw7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdDTkVX KGRldmljZSk7CisgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX2Zyb21fdnNjc2ljdHJsKGdjLCBkb21p ZCwgdnNjc2ljdHJsLCBkZXZpY2UpOworICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgYW9kZXYt PmRldiA9IGRldmljZTsKKworICAgIGZuID0gdnNjc2ljdHJsX25ld19iYWNrZW5kOworICAgIHZz Y3NpY3RybF91cGRhdGVfanNvbihlZ2MsIGFvZGV2LCB2c2NzaWN0cmwsIGZuKTsKKyAgICByZXR1 cm47CisKK291dDoKKyAgICBhb2Rldi0+cmMgPSByYzsKKyAgICBhb2Rldi0+Y2FsbGJhY2soZWdj LCBhb2Rldik7Cit9CisKK2ludCBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX3JlbW92ZShsaWJ4bF9j dHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqdnNjc2ljdHJsLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCit7CisgICAg cmV0dXJuIHZzY3NpY3RybF9yZW1vdmUoY3R4LCBkb21pZCwgdnNjc2ljdHJsLCBhb19ob3csIDAp OworfQorCitpbnQgbGlieGxfZGV2aWNlX3ZzY3NpY3RybF9kZXN0cm95KGxpYnhsX2N0eCAqY3R4 LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfZGV2aWNlX3ZzY3NpY3RybCAqdnNjc2ljdHJsLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29wX2hvdyAqYW9faG93KQoreworICAgIHJldHVy biB2c2NzaWN0cmxfcmVtb3ZlKGN0eCwgZG9taWQsIHZzY3NpY3RybCwgYW9faG93LCAxKTsKK30K KworbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqbGlieGxfZGV2aWNlX3ZzY3NpY3RybF9saXN0KGxp YnhsX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCAqbnVtKQoreworICAgIEdDX0lOSVQoY3R4KTsKKyAg ICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICpjdHJscyA9IE5VTEw7CisgICAgaW50IHJjLCBudW1f Y3RybHMgPSAwOworCisgICAgKm51bSA9IDA7CisKKyAgICByYyA9IHZzY3NpX2NvbGxlY3RfY3Ry bHMoZ2MsIGRvbWlkLCAmY3RybHMsICZudW1fY3RybHMpOworICAgIGlmIChyYyA9PSAwKQorICAg ICAgICAqbnVtID0gbnVtX2N0cmxzOworCisgICAgR0NfRlJFRTsKKyAgICByZXR1cm4gY3RybHM7 Cit9CisKK2ludCBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2dldGluZm8obGlieGxfY3R4ICpjdHgs IHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9kZXZpY2VfdnNjc2ljdHJsICp2c2NzaWN0cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWRldiAqdnNjc2lkZXYsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3ZzY3NpaW5mbyAqdnNjc2lpbmZvKQoreworICAg IEdDX0lOSVQoY3R4KTsKKyAgICBjaGFyICpkb21wYXRoLCAqdnNjc2lwYXRoOworICAgIGNoYXIg KnZhbDsKKyAgICBpbnQgcmMgPSBFUlJPUl9GQUlMOworCisgICAgbGlieGxfdnNjc2lpbmZvX2lu aXQodnNjc2lpbmZvKTsKKyAgICBkb21wYXRoID0gbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBk b21pZCk7CisgICAgdnNjc2lpbmZvLT5kZXZpZCA9IHZzY3NpY3RybC0+ZGV2aWQ7CisgICAgdnNj c2lpbmZvLT52c2NzaWRldl9pZCA9IHZzY3NpZGV2LT52c2NzaWRldl9pZDsKKyAgICBsaWJ4bF92 c2NzaV9wZGV2X2NvcHkoY3R4LCAmdnNjc2lpbmZvLT5wZGV2LCAmdnNjc2lkZXYtPnBkZXYpOwor ICAgIGxpYnhsX3ZzY3NpX2hjdGxfY29weShjdHgsICZ2c2NzaWluZm8tPnZkZXYsICZ2c2NzaWRl di0+dmRldik7CisKKyAgICB2c2NzaXBhdGggPSBHQ1NQUklOVEYoIiVzL2RldmljZS92c2NzaS8l ZCIsIGRvbXBhdGgsIHZzY3NpaW5mby0+ZGV2aWQpOworICAgIHZzY3NpaW5mby0+YmFja2VuZCA9 IHhzX3JlYWQoY3R4LT54c2gsIFhCVF9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR0NTUFJJTlRGKCIlcy9iYWNrZW5kIiwgdnNjc2lwYXRoKSwgTlVMTCk7CisgICAgaWYg KCF2c2NzaWluZm8tPmJhY2tlbmQpCisgICAgICAgIGdvdG8gb3V0OworICAgIGlmKCFsaWJ4bF9f eHNfcmVhZChnYywgWEJUX05VTEwsIHZzY3NpaW5mby0+YmFja2VuZCkpCisgICAgICAgIGdvdG8g b3V0OworCisgICAgdmFsID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLCBHQ1NQUklOVEYo IiVzL2JhY2tlbmQtaWQiLCB2c2NzaXBhdGgpKTsKKyAgICB2c2NzaWluZm8tPmJhY2tlbmRfaWQg PSB2YWwgPyBzdHJ0b3VsKHZhbCwgTlVMTCwgMTApIDogLTE7CisKKyAgICB2YWwgPSBsaWJ4bF9f eHNfcmVhZChnYywgWEJUX05VTEwsIEdDU1BSSU5URigiJXMvc3RhdGUiLCB2c2NzaXBhdGgpKTsK KyAgICB2c2NzaWluZm8tPnZzY3NpY3RybF9zdGF0ZSA9IHZhbCA/IHN0cnRvdWwodmFsLCBOVUxM LCAxMCkgOiAtMTsKKworICAgIHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgR0NT UFJJTlRGKCIlcy9pZHgiLCB2c2NzaXBhdGgpKTsKKyAgICB2c2NzaWluZm8tPmlkeCA9IHZhbCA/ IHN0cnRvdWwodmFsLCBOVUxMLCAxMCkgOiAtMTsKKworICAgIHZhbCA9IGxpYnhsX194c19yZWFk KGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIlcy9ldmVudC1jaGFubmVsIiwgdnNjc2lwYXRoKSk7 CisgICAgdnNjc2lpbmZvLT5ldnRjaCA9IHZhbCA/IHN0cnRvdWwodmFsLCBOVUxMLCAxMCkgOiAt MTsKKworICAgIHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIl cy9yaW5nLXJlZiIsIHZzY3NpcGF0aCkpOworICAgIHZzY3NpaW5mby0+cnJlZiA9IHZhbCA/IHN0 cnRvdWwodmFsLCBOVUxMLCAxMCkgOiAtMTsKKworICAgIHZzY3NpaW5mby0+ZnJvbnRlbmQgPSB4 c19yZWFkKGN0eC0+eHNoLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHQ1NQUklOVEYoIiVzL2Zyb250ZW5kIiwgdnNjc2lpbmZvLT5iYWNrZW5kKSwgTlVMTCk7 CisKKyAgICB2YWwgPSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05VTEwsCisgICAgICAgICAgICAg ICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9mcm9udGVuZC1pZCIsIHZzY3NpaW5mby0+YmFja2Vu ZCkpOworICAgIHZzY3NpaW5mby0+ZnJvbnRlbmRfaWQgPSB2YWwgPyBzdHJ0b3VsKHZhbCwgTlVM TCwgMTApIDogLTE7CisKKyAgICB2YWwgPSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05VTEwsCisg ICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy92c2NzaS1kZXZzL2Rldi0ldS9z dGF0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdnNjc2lpbmZvLT5iYWNrZW5kLCB2c2Nz aWRldi0+dnNjc2lkZXZfaWQpKTsKKyAgICB2c2NzaWluZm8tPnZzY3NpZGV2X3N0YXRlID0gdmFs ID8gc3RydG91bCh2YWwsIE5VTEwsIDEwKSA6IC0xOworCisgICAgcmMgPSAwOworb3V0OgorICAg IEdDX0ZSRUU7CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgbGlieGxfZGV2aWNlX3ZzY3NpZGV2 X2FkZChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2lkZXYgKnZzY3NpZGV2LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hvdykKK3sKKyAg ICBHQ19JTklUKGN0eCk7CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqdmMsICpjdHJscyA9 IE5VTEw7CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2ICp2ZDsKKyAgICBpbnQgYywgZCwgcmMs IG51bV9jdHJscyA9IDA7CisgICAgaW50IGR1cGxpY2F0ZSA9IDA7CisKKyAgICByYyA9IHZzY3Np X2NvbGxlY3RfY3RybHMoZ2MsIGRvbWlkLCAmY3RybHMsICZudW1fY3RybHMpOworICAgIGlmIChy YyAhPSAwKSBnb3RvIG91dDsKKworCisgICAgZm9yIChjID0gMDsgYyA8IG51bV9jdHJsczsgKytj KSB7CisgICAgICAgIHZjID0gY3RybHMgKyBjOworICAgICAgICBpZiAodmMtPmlkeCAhPSB2c2Nz aWRldi0+dmRldi5oc3QpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmb3IgKGQg PSAwOyBkIDwgdmMtPm51bV92c2NzaWRldnM7IGQrKykgeworICAgICAgICAgICAgdmQgPSB2Yy0+ dnNjc2lkZXZzICsgZDsKKyAgICAgICAgICAgIGlmICh2ZC0+dmRldi5oc3QgPT0gdnNjc2lkZXYt PnZkZXYuaHN0ICYmCisgICAgICAgICAgICAgICAgdmQtPnZkZXYuY2huID09IHZzY3NpZGV2LT52 ZGV2LmNobiAmJgorICAgICAgICAgICAgICAgIHZkLT52ZGV2LnRndCA9PSB2c2NzaWRldi0+dmRl di50Z3QgJiYKKyAgICAgICAgICAgICAgICB2ZC0+dmRldi5sdW4gPT0gdnNjc2lkZXYtPnZkZXYu bHVuKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGx1biA9IHZkLT52ZGV2 Lmx1bjsKKyAgICAgICAgICAgICAgICBMT0coRVJST1IsICJ2ZGV2ICcldToldToldTolbGx1JyBp cyBhbHJlYWR5IHVzZWQuXG4iLAorICAgICAgICAgICAgICAgICAgICB2ZC0+dmRldi5oc3QsIHZk LT52ZGV2LmNobiwgdmQtPnZkZXYudGd0LCBsdW4pOworICAgICAgICAgICAgICAgIHJjID0gRVJS T1JfREVWSUNFX0VYSVNUUzsKKyAgICAgICAgICAgICAgICBkdXBsaWNhdGUgPSAxOworICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg KCFkdXBsaWNhdGUpIHsKKyAgICAgICAgICAgIC8qIEFwcGVuZCB2c2NzaWRldiB0byB0aGlzIHZz Y3NpY3RybCwgdHJpZ2dlciByZWNvbmZpZ3VyZSAqLworICAgICAgICAgICAgbGlieGxfZGV2aWNl X3ZzY3NpY3RybF9hcHBlbmRfdnNjc2lkZXYoY3R4LCB2YywgdnNjc2lkZXYpOworICAgICAgICAg ICAgcmMgPSB2c2NzaWN0cmxfcmVjb25maWd1cmVfYWRkKGN0eCwgZG9taWQsIHZjLCBhb19ob3cp OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGZvciAoYyA9IDA7IGMg PCBudW1fY3RybHM7ICsrYykKKyAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybF9kaXNwb3Nl KGN0cmxzICsgYyk7CisgICAgZnJlZShjdHJscyk7CisKK291dDoKKyAgICBHQ19GUkVFOworICAg IHJldHVybiByYzsKK30KKworaW50IGxpYnhsX2RldmljZV92c2NzaWRldl9yZW1vdmUobGlieGxf Y3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2ICp2c2NzaWRldiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCit7CisgICAgR0Nf SU5JVChjdHgpOworICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKnZjLCAqY3RybHMgPSBOVUxM OworICAgIGxpYnhsX2RldmljZV92c2NzaWRldiAqdmQ7CisgICAgaW50IGMsIGQsIHJjLCBudW1f Y3RybHMgPSAwOworICAgIGludCBmb3VuZCA9IDAsIGlkeDsKKyAgICBpbnQgaGVhZCwgdGFpbCwg aTsKKworICAgIHJjID0gdnNjc2lfY29sbGVjdF9jdHJscyhnYywgZG9taWQsICZjdHJscywgJm51 bV9jdHJscyk7CisgICAgaWYgKHJjICE9IDApIGdvdG8gb3V0OworCisKKyAgICBmb3IgKGMgPSAw OyBjIDwgbnVtX2N0cmxzOyArK2MpIHsKKyAgICAgICAgdmMgPSBjdHJscyArIGM7CisKKyAgICAg ICAgZm9yIChkID0gMDsgZCA8IHZjLT5udW1fdnNjc2lkZXZzOyBkKyspIHsKKyAgICAgICAgICAg IHZkID0gdmMtPnZzY3NpZGV2cyArIGQ7CisgICAgICAgICAgICBpZiAodmQtPnZkZXYuaHN0ID09 IHZzY3NpZGV2LT52ZGV2LmhzdCAmJgorICAgICAgICAgICAgICAgIHZkLT52ZGV2LmNobiA9PSB2 c2NzaWRldi0+dmRldi5jaG4gJiYKKyAgICAgICAgICAgICAgICB2ZC0+dmRldi50Z3QgPT0gdnNj c2lkZXYtPnZkZXYudGd0ICYmCisgICAgICAgICAgICAgICAgdmQtPnZkZXYubHVuID09IHZzY3Np ZGV2LT52ZGV2Lmx1bikgeworICAgICAgICAgICAgICAgIGZvdW5kID0gMTsKKyAgICAgICAgICAg ICAgICBpZHggPSBkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg ICAgICB9CisKKyAgICAgICAgaWYgKGZvdW5kKSB7CisgICAgICAgICAgICBpZiAodmMtPm51bV92 c2NzaWRldnMgPiAxKSB7CisgICAgICAgICAgICAgICAgLyogUHJlcGFyZSB2c2NzaWN0cmwsIGxl YXZlIG9ubHkgZGVzaXJlZCB2c2NzaWRldiAqLworICAgICAgICAgICAgICAgIGhlYWQgPSBpZHg7 CisgICAgICAgICAgICAgICAgdGFpbCA9IHZjLT5udW1fdnNjc2lkZXZzIC0gaWR4IC0gMTsKKyAg ICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaGVhZDsgaSsrKQorICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX3JlbW92ZV92c2NzaWRldihjdHgsIHZjLCAwKTsK KyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGFpbDsgaSsrKQorICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX3JlbW92ZV92c2NzaWRldihjdHgsIHZjLCAx KTsKKworICAgICAgICAgICAgICAgIC8qIFJlbW92ZSBzaW5nbGUgdnNjc2lkZXYgY29ubmVjdGVk IHRvIHRoaXMgdnNjc2ljdHJsICovCisgICAgICAgICAgICAgICAgcmMgPSB2c2NzaWRldl9yZW1v dmUoY3R4LCBkb21pZCwgdmMsIGFvX2hvdyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgIC8qIFdpcGUgZW50aXJlIHZzY3NpY3RybCAqLzsKKyAgICAgICAgICAgICAgICBy YyA9IHZzY3NpY3RybF9yZW1vdmUoY3R4LCBkb21pZCwgdmMsIGFvX2hvdywgMCk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo YyA9IDA7IGMgPCBudW1fY3RybHM7ICsrYykKKyAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3Ry bF9kaXNwb3NlKGN0cmxzICsgYyk7CisgICAgZnJlZShjdHJscyk7CisKKyAgICBpZiAoIWZvdW5k KQorICAgICAgICByYyA9IEVSUk9SX05PVEZPVU5EOworCitvdXQ6CisgICAgR0NfRlJFRTsKKyAg ICByZXR1cm4gcmM7Cit9CisKK3ZvaWQgbGlieGxfZGV2aWNlX3ZzY3NpY3RybF9hcHBlbmRfdnNj c2lkZXYobGlieGxfY3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKmN0cmwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWRldiAqZGV2KQor eworICAgIEdDX0lOSVQoY3R4KTsKKyAgICBjdHJsLT52c2NzaWRldnMgPSBsaWJ4bF9fcmVhbGxv YyhOT0dDLCBjdHJsLT52c2NzaWRldnMsIHNpemVvZigqZGV2KSAqIChjdHJsLT5udW1fdnNjc2lk ZXZzICsgMSkpOworICAgIGxpYnhsX2RldmljZV92c2NzaWRldl9pbml0KGN0cmwtPnZzY3NpZGV2 cyArIGN0cmwtPm51bV92c2NzaWRldnMpOworICAgIGxpYnhsX2RldmljZV92c2NzaWRldl9jb3B5 KENUWCwgY3RybC0+dnNjc2lkZXZzICsgY3RybC0+bnVtX3ZzY3NpZGV2cywgZGV2KTsKKyAgICBj dHJsLT5udW1fdnNjc2lkZXZzKys7CisgICAgR0NfRlJFRTsKK30KKwordm9pZCBsaWJ4bF9kZXZp Y2VfdnNjc2ljdHJsX3JlbW92ZV92c2NzaWRldihsaWJ4bF9jdHggKmN0eCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAq Y3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IGlkeCkKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAgaWYgKGlkeCA+PSBjdHJsLT5u dW1fdnNjc2lkZXZzKQorICAgICAgICByZXR1cm47CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2 X2Rpc3Bvc2UoJmN0cmwtPnZzY3NpZGV2c1tpZHhdKTsKKyAgICBpZiAoY3RybC0+bnVtX3ZzY3Np ZGV2cyA+IGlkeCArIDEpCisgICAgICAgIG1lbW1vdmUoJmN0cmwtPnZzY3NpZGV2c1tpZHhdLAor ICAgICAgICAgICAgICAgICZjdHJsLT52c2NzaWRldnNbaWR4ICsgMV0sCisgICAgICAgICAgICAg ICAgKGN0cmwtPm51bV92c2NzaWRldnMgLSBpZHggLSAxKSAqIHNpemVvZigqY3RybC0+dnNjc2lk ZXZzKSk7CisgICAgY3RybC0+dnNjc2lkZXZzID0gbGlieGxfX3JlYWxsb2MoTk9HQywgY3RybC0+ dnNjc2lkZXZzLCBzaXplb2YoKmN0cmwtPnZzY3NpZGV2cykgKiAoY3RybC0+bnVtX3ZzY3NpZGV2 cyAtIDEpKTsKKyAgICBjdHJsLT5udW1fdnNjc2lkZXZzLS07CisgICAgR0NfRlJFRTsKK30KKwor LyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0 CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvdG9v bHMvbGlieGwvbGlieGx1X3ZzY3NpLmMgYi90b29scy9saWJ4bC9saWJ4bHVfdnNjc2kuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmM3OGI0Ci0tLSAvZGV2L251bGwKKysr IGIvdG9vbHMvbGlieGwvbGlieGx1X3ZzY3NpLmMKQEAgLTAsMCArMSw2ODQgQEAKKy8qCisgKiBs aWJ4bHVfdnNjc2kuYyAtIHhsIGNvbmZpZ3VyYXRpb24gZmlsZSBwYXJzaW5nOiBzZXR1cCBhbmQg aGVscGVyIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNiAgICAgIFNVU0UgTGlu dXggR21iSAorICogQXV0aG9yIE9sYWYgSGVyaW5nIDxvbGFmQGFlcGZsZS5kZT4KKyAqIEF1dGhv ciBPbmTFmWVqIEhvbGXEjWVrIDxhYWFubnpAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IHZlcnNpb24gMi4xIG9ubHkuIHdpdGggdGhlIHNwZWNpYWwKKyAqIGV4Y2VwdGlvbiBvbiBsaW5r aW5nIGRlc2NyaWJlZCBpbiBmaWxlIExJQ0VOU0UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKi8KKyNpbmNsdWRlICJsaWJ4bF9vc2RlcHMuaCIgLyogbXVzdCBjb21lIGJlZm9y ZSBhbnkgb3RoZXIgaGVhZGVycyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGN0 eXBlLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNs dWRlIDxmY250bC5oPgorI2luY2x1ZGUgImxpYnhsdV9pbnRlcm5hbC5oIgorCisjaWZkZWYgX19s aW51eF9fCisjZGVmaW5lIExPRyhfYywgX3gsIF9hLi4uKSBcCisgICAgICAgIGlmKChfYykgJiYg KF9jKS0+cmVwb3J0KSBmcHJpbnRmKChfYyktPnJlcG9ydCwgIiVzKCV1KTogIiBfeCAiXG4iLCBf X2Z1bmNfXywgX19MSU5FX18sICMjX2EpCisKKyNkZWZpbmUgWExVX1NZU0ZTX1RBUkdFVF9QVlND U0kgIi9zeXMva2VybmVsL2NvbmZpZy90YXJnZXQveGVuLXB2c2NzaSIKKyNkZWZpbmUgWExVX1dX Tl9MRU4gMTYKK3N0cnVjdCB4bHVfX3ZzY3NpX3RhcmdldCB7CisgICAgWExVX0NvbmZpZyAqY2Zn OworICAgIGxpYnhsX3ZzY3NpX2hjdGwgKnBkZXZfaGN0bDsKKyAgICBsaWJ4bF92c2NzaV9wZGV2 ICpwZGV2OworICAgIGNoYXIgcGF0aFtQQVRIX01BWF07CisgICAgY2hhciB1ZGV2X3BhdGhbUEFU SF9NQVhdOworICAgIGNoYXIgd3duW1hMVV9XV05fTEVOICsgMV07CisgICAgdW5zaWduZWQgbG9u ZyBsb25nIGx1bjsKK307CisKK3N0YXRpYyBpbnQgeGx1X192c2NzaV9wYXJzZV9oY3RsKGNoYXIg KnN0ciwgbGlieGxfdnNjc2lfaGN0bCAqaGN0bCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaHN0LCBj aG4sIHRndDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbHVuOworCisgICAgaWYgKHNzY2FuZihz dHIsICIldToldToldTolbGx1IiwgJmhzdCwgJmNobiwgJnRndCwgJmx1bikgIT0gNCkKKyAgICAg ICAgcmV0dXJuIEVSUk9SX0lOVkFMOworCisgICAgaGN0bC0+aHN0ID0gaHN0OworICAgIGhjdGwt PmNobiA9IGNobjsKKyAgICBoY3RsLT50Z3QgPSB0Z3Q7CisgICAgaGN0bC0+bHVuID0gbHVuOwor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgY2hhciAqeGx1X192c2NzaV90cmltX3N0cmluZyhj aGFyICpzKQoreworICAgIHNpemVfdCBsZW47CisKKyAgICB3aGlsZSAoaXNzcGFjZSgqcykpCisg ICAgICAgIHMrKzsKKyAgICBsZW4gPSBzdHJsZW4ocyk7CisgICAgd2hpbGUgKGxlbi0tID4gMSAm JiBpc3NwYWNlKHNbbGVuXSkpCisgICAgICAgIHNbbGVuXSA9ICdcMCc7CisgICAgcmV0dXJuIHM7 Cit9CisKKworc3RhdGljIGludCB4bHVfX3ZzY3NpX3BhcnNlX2RldihYTFVfQ29uZmlnICpjZmcs IGNoYXIgKnBkZXYsIGxpYnhsX3ZzY3NpX2hjdGwgKmhjdGwpCit7CisgICAgc3RydWN0IHN0YXQg ZGVudHJ5OworICAgIGNoYXIgKnN5c2ZzID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICp0eXBlOwor ICAgIGludCByYywgZm91bmQgPSAwOworICAgIERJUiAqZGlycDsKKyAgICBzdHJ1Y3QgZGlyZW50 ICpkZTsKKworICAgIC8qIHN0YXQgcGRldiB0byBnZXQgZGV2aWNlJ3Mgc3lzZnMgZW50cnkgKi8K KyAgICBpZiAoc3RhdCAocGRldiwgJmRlbnRyeSkgPCAwKSB7CisgICAgICAgIExPRyhjZmcsICIl cywgZGV2aWNlIG5vZGUgbm90IGZvdW5kIiwgcGRldik7CisgICAgICAgIHJjID0gRVJST1JfSU5W QUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmIChTX0lTQkxLIChkZW50cnku c3RfbW9kZSkpIHsKKyAgICAgICAgdHlwZSA9ICJibG9jayI7CisgICAgfSBlbHNlIGlmIChTX0lT Q0hSIChkZW50cnkuc3RfbW9kZSkpIHsKKyAgICAgICAgdHlwZSA9ICJjaGFyIjsKKyAgICB9IGVs c2UgeworICAgICAgICBMT0coY2ZnLCAiJXMsIGRldmljZSBub2RlIG5vdCBhIGJsb2NrIG9yIGNo YXIgZGV2aWNlIiwgcGRldik7CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdv dG8gb3V0OworICAgIH0KKworICAgIC8qIC9zeXMvZGV2L3R5cGUvbWFqb3I6bWlub3Igc3ltbGlu ayBhZGRlZCBpbiAyLjYuMjcgKi8KKyAgICBpZiAoYXNwcmludGYoJnN5c2ZzLCAiL3N5cy9kZXYv JXMvJXU6JXUvZGV2aWNlL3Njc2lfZGV2aWNlIiwgdHlwZSwKKyAgICAgICAgICAgICAgICAgbWFq b3IoZGVudHJ5LnN0X3JkZXYpLCBtaW5vcihkZW50cnkuc3RfcmRldikpIDwgMCkgeworICAgICAg ICBzeXNmcyA9IE5VTEw7CisgICAgICAgIHJjID0gRVJST1JfTk9NRU07CisgICAgICAgIGdvdG8g b3V0OworICAgIH0KKworICAgIGRpcnAgPSBvcGVuZGlyKHN5c2ZzKTsKKyAgICBpZiAoIWRpcnAp IHsKKyAgICAgICAgTE9HKGNmZywgIiVzLCBubyBtYWpvcjptaW5vciBsaW5rIGluIHN5c2ZzIiwg cGRldik7CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdvdG8gb3V0OworICAg IH0KKworICAgIHdoaWxlICgoZGUgPSByZWFkZGlyKGRpcnApKSkgeworICAgICAgICBpZiAoIXN0 cmNtcChkZS0+ZF9uYW1lLCAiLiIpIHx8ICFzdHJjbXAoZGUtPmRfbmFtZSwgIi4uIikpCisgICAg ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoeGx1X192c2NzaV9wYXJzZV9oY3RsKGRl LT5kX25hbWUsIGhjdGwpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm91bmQg PSAxOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2xvc2VkaXIoZGlycCk7CisKKyAgICBp ZiAoIWZvdW5kKSB7CisgICAgICAgIExPRyhjZmcsICIlcywgbm8gaDpjOnQ6bCBsaW5rIGluIHN5 c2ZzIiwgcGRldik7CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdvdG8gb3V0 OworICAgIH0KKworICAgIHJjID0gMDsKK291dDoKKyAgICBmcmVlKHN5c2ZzKTsKKyAgICByZXR1 cm4gcmM7Cit9CisKK3N0YXRpYyBib29sIHhsdV9fdnNjc2lfd3duX3ZhbGlkKGNvbnN0IGNoYXIg KnApCit7CisgICAgYm9vbCByZXQgPSB0cnVlOworICAgIGludCBpID0gMDsKKworICAgIGZvciAo aSA9IDA7IGkgPCBYTFVfV1dOX0xFTjsgaSsrLCBwKyspIHsKKyAgICAgICAgaWYgKCpwID49ICcw JyAmJiAqcCA8PSAnOScpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCpwID49 ICdhJyAmJiAqcCA8PSAnZicpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCpw ID49ICdBJyAmJiAqcCA8PSAnRicpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcmV0 ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitz dGF0aWMgYm9vbCB4bHVfX3ZzY3NpX2NvbXBhcmVfaGN0bChsaWJ4bF92c2NzaV9oY3RsICphLCBs aWJ4bF92c2NzaV9oY3RsICpiKQoreworICAgIGlmIChhLT5oc3QgPT0gYi0+aHN0ICYmCisgICAg ICAgIGEtPmNobiA9PSBiLT5jaG4gJiYKKyAgICAgICAgYS0+dGd0ID09IGItPnRndCAmJgorICAg ICAgICBhLT5sdW4gPT0gYi0+bHVuKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g ZmFsc2U7Cit9CisKKy8qIEZpbmFsbHkgYXQKKyAqIC9zeXMva2VybmVsL2NvbmZpZy90YXJnZXQv eGVuLXB2c2NzaS9uYWEuPHd3bj4vdHBndF8xL2x1bi9sdW5fMC88WD4vdWRldl9wYXRoCisgKi8K K3N0YXRpYyBib29sIHhsdV9fdnNjc2lfY29tcGFyZV91ZGV2KHN0cnVjdCB4bHVfX3ZzY3NpX3Rh cmdldCAqdGd0KQoreworICAgIGJvb2wgcmV0OworICAgIGludCBmZDsKKyAgICBzc2l6ZV90IHJl YWRfc3o7CisgICAgbGlieGxfdnNjc2lfaGN0bCB1ZGV2X2hjdGw7CisKKyAgICBsaWJ4bF92c2Nz aV9oY3RsX2luaXQoJnVkZXZfaGN0bCk7CisKKyAgICBmZCA9IG9wZW4odGd0LT5wYXRoLCBPX1JE T05MWSk7CisgICAgaWYgKGZkIDwgMCl7CisgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICBn b3RvIG91dDsKKyAgICB9CisgICAgcmVhZF9zeiA9IHJlYWQoZmQsICZ0Z3QtPnVkZXZfcGF0aCwg c2l6ZW9mKHRndC0+dWRldl9wYXRoKSAtIDEpOworICAgIGNsb3NlKGZkKTsKKworICAgIGlmIChy ZWFkX3N6IDw9IDAgfHwgcmVhZF9zeiA+IHNpemVvZih0Z3QtPnVkZXZfcGF0aCkgLSAxKSB7Cisg ICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAgdGd0LT51 ZGV2X3BhdGhbcmVhZF9zel0gPSAnXDAnOworICAgIHJlYWRfc3otLTsKKyAgICBpZiAodGd0LT51 ZGV2X3BhdGhbcmVhZF9zel0gPT0gJ1xuJykKKyAgICAgICAgdGd0LT51ZGV2X3BhdGhbcmVhZF9z el0gPSAnXDAnOworCisgICAgaWYgKHhsdV9fdnNjc2lfcGFyc2VfZGV2KHRndC0+Y2ZnLCB0Z3Qt PnVkZXZfcGF0aCwgJnVkZXZfaGN0bCkpIHsKKyAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgICAg IGdvdG8gb3V0OworICAgIH0KKyAgICByZXQgPSB4bHVfX3ZzY3NpX2NvbXBhcmVfaGN0bCh0Z3Qt PnBkZXZfaGN0bCwgJnVkZXZfaGN0bCk7CisKK291dDoKKyAgICBsaWJ4bF92c2NzaV9oY3RsX2Rp c3Bvc2UoJnVkZXZfaGN0bCk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyogL3N5cy9rZXJuZWwv Y29uZmlnL3RhcmdldC94ZW4tcHZzY3NpL25hYS48d3duPi90cGd0XzEvbHVuL2x1bl8wLzxYPi91 ZGV2X3BhdGggKi8KK3N0YXRpYyBib29sIHhsdV9fdnNjc2lfd2Fsa19kaXJfbHVuKHN0cnVjdCB4 bHVfX3ZzY3NpX3RhcmdldCAqdGd0KQoreworICAgIGJvb2wgZm91bmQ7CisgICAgRElSICpkaXJw OworICAgIHN0cnVjdCBkaXJlbnQgKmRlOworICAgIHNpemVfdCBwYXRoX2xlbiA9IHN0cmxlbih0 Z3QtPnBhdGgpOworICAgIGNoYXIgKnN1YmRpciA9ICZ0Z3QtPnBhdGhbcGF0aF9sZW5dOworCisg ICAgZGlycCA9IG9wZW5kaXIodGd0LT5wYXRoKTsKKyAgICBpZiAoIWRpcnApCisgICAgICAgIHJl dHVybiBmYWxzZTsKKworICAgIGZvdW5kID0gZmFsc2U7CisgICAgd2hpbGUgKChkZSA9IHJlYWRk aXIoZGlycCkpKSB7CisgICAgICAgIGlmICghc3RyY21wKGRlLT5kX25hbWUsICIuIikgfHwgIXN0 cmNtcChkZS0+ZF9uYW1lLCAiLi4iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg IHNucHJpbnRmKHN1YmRpciwgc2l6ZW9mKHRndC0+cGF0aCkgLSBwYXRoX2xlbiwgIi8lcy91ZGV2 X3BhdGgiLCBkZS0+ZF9uYW1lKTsKKworICAgICAgICBmb3VuZCA9IHhsdV9fdnNjc2lfY29tcGFy ZV91ZGV2KHRndCk7CisgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgIGJyZWFrOworCisg ICAgICAgICpzdWJkaXIgPSAnXDAnOworICAgIH0KKyAgICBjbG9zZWRpcihkaXJwKTsKKyAgICBy ZXR1cm4gZm91bmQ7Cit9CisKKy8qIC9zeXMva2VybmVsL2NvbmZpZy90YXJnZXQveGVuLXB2c2Nz aS9uYWEuPHd3bj4vdHBndF8xL2x1bi9sdW5fMCAqLworc3RhdGljIGJvb2wgeGx1X192c2NzaV93 YWxrX2Rpcl9sdW5zKHN0cnVjdCB4bHVfX3ZzY3NpX3RhcmdldCAqdGd0KQoreworICAgIGJvb2wg Zm91bmQ7CisgICAgRElSICpkaXJwOworICAgIHN0cnVjdCBkaXJlbnQgKmRlOworICAgIHNpemVf dCBwYXRoX2xlbiA9IHN0cmxlbih0Z3QtPnBhdGgpOworICAgIGNoYXIgKnN1YmRpciA9ICZ0Z3Qt PnBhdGhbcGF0aF9sZW5dOworCisgICAgZGlycCA9IG9wZW5kaXIodGd0LT5wYXRoKTsKKyAgICBp ZiAoIWRpcnApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvdW5kID0gZmFsc2U7Cisg ICAgd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlycCkpKSB7CisgICAgICAgIGlmICghc3RyY21wKGRl LT5kX25hbWUsICIuIikgfHwgIXN0cmNtcChkZS0+ZF9uYW1lLCAiLi4iKSkKKyAgICAgICAgICAg IGNvbnRpbnVlOworCisgICAgICAgIGlmIChzc2NhbmYoZGUtPmRfbmFtZSwgImx1bl8lbGx1Iiwg JnRndC0+bHVuKSAhPSAxKQorICAgICAgICAgICAgY29udGludWU7CisKKworICAgICAgICBzbnBy aW50ZihzdWJkaXIsIHNpemVvZih0Z3QtPnBhdGgpIC0gcGF0aF9sZW4sICIvJXMiLCBkZS0+ZF9u YW1lKTsKKworICAgICAgICBmb3VuZCA9IHhsdV9fdnNjc2lfd2Fsa19kaXJfbHVuKHRndCk7Cisg ICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICpzdWJkaXIg PSAnXDAnOworICAgIH0KKyAgICBjbG9zZWRpcihkaXJwKTsKKyAgICByZXR1cm4gZm91bmQ7Cit9 CisKKy8qIC9zeXMva2VybmVsL2NvbmZpZy90YXJnZXQveGVuLXB2c2NzaS9uYWEuPHd3bj4vdHBn dF8xICovCitzdGF0aWMgYm9vbCB4bHVfX3ZzY3NpX3dhbGtfZGlyX25hYShzdHJ1Y3QgeGx1X192 c2NzaV90YXJnZXQgKnRndCkKK3sKKyAgICBib29sIGZvdW5kOworICAgIERJUiAqZGlycDsKKyAg ICBzdHJ1Y3QgZGlyZW50ICpkZTsKKyAgICBzaXplX3QgcGF0aF9sZW4gPSBzdHJsZW4odGd0LT5w YXRoKTsKKyAgICBjaGFyICpzdWJkaXIgPSAmdGd0LT5wYXRoW3BhdGhfbGVuXTsKKyAgICB1bnNp Z25lZCBpbnQgdHBndDsKKworICAgIGRpcnAgPSBvcGVuZGlyKHRndC0+cGF0aCk7CisgICAgaWYg KCFkaXJwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3VuZCA9IGZhbHNlOworICAg IHdoaWxlICgoZGUgPSByZWFkZGlyKGRpcnApKSkgeworICAgICAgICBpZiAoIXN0cmNtcChkZS0+ ZF9uYW1lLCAiLiIpIHx8ICFzdHJjbXAoZGUtPmRfbmFtZSwgIi4uIikpCisgICAgICAgICAgICBj b250aW51ZTsKKworICAgICAgICBpZiAoc3NjYW5mKGRlLT5kX25hbWUsICJ0cGd0XyV1IiwgJnRw Z3QpICE9IDEpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzbnByaW50ZihzdWJk aXIsIHNpemVvZih0Z3QtPnBhdGgpIC0gcGF0aF9sZW4sICIvJXMvbHVuIiwgZGUtPmRfbmFtZSk7 CisKKyAgICAgICAgZm91bmQgPSB4bHVfX3ZzY3NpX3dhbGtfZGlyX2x1bnModGd0KTsKKyAgICAg ICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgKnN1YmRpciA9ICdc MCc7CisgICAgfQorICAgIGNsb3NlZGlyKGRpcnApOworICAgIHJldHVybiBmb3VuZDsKK30KKwor LyogL3N5cy9rZXJuZWwvY29uZmlnL3RhcmdldC94ZW4tcHZzY3NpL25hYS48d3duPiAqLworc3Rh dGljIGJvb2wgeGx1X192c2NzaV9maW5kX3RhcmdldF93d24oc3RydWN0IHhsdV9fdnNjc2lfdGFy Z2V0ICp0Z3QpCit7CisgICAgYm9vbCBmb3VuZDsKKyAgICBESVIgKmRpcnA7CisgICAgc3RydWN0 IGRpcmVudCAqZGU7CisgICAgc2l6ZV90IHBhdGhfbGVuID0gc3RybGVuKHRndC0+cGF0aCk7Cisg ICAgY2hhciAqc3ViZGlyID0gJnRndC0+cGF0aFtwYXRoX2xlbl07CisKKyAgICBkaXJwID0gb3Bl bmRpcih0Z3QtPnBhdGgpOworICAgIGlmICghZGlycCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor CisgICAgZm91bmQgPSBmYWxzZTsKKyAgICB3aGlsZSAoKGRlID0gcmVhZGRpcihkaXJwKSkpIHsK KyAgICAgICAgaWYgKCFzdHJjbXAoZGUtPmRfbmFtZSwgIi4iKSB8fCAhc3RyY21wKGRlLT5kX25h bWUsICIuLiIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHNzY2FuZihk ZS0+ZF9uYW1lLCAibmFhLiUxNmMiLCB0Z3QtPnd3bikgIT0gMSkKKyAgICAgICAgICAgIGNvbnRp bnVlOworICAgICAgICBpZiAoIXhsdV9fdnNjc2lfd3duX3ZhbGlkKHRndC0+d3duKSkKKyAgICAg ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHNucHJpbnRmKHN1YmRpciwgc2l6ZW9mKHRndC0+ cGF0aCkgLSBwYXRoX2xlbiwgIi8lcyIsIGRlLT5kX25hbWUpOworCisgICAgICAgIGZvdW5kID0g eGx1X192c2NzaV93YWxrX2Rpcl9uYWEodGd0KTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAg ICAgICAgYnJlYWs7CisKKyAgICAgICAgKnN1YmRpciA9ICdcMCc7CisgICAgfQorICAgIGNsb3Nl ZGlyKGRpcnApOworICAgIHJldHVybiBmb3VuZDsKK30KKworLyoKKyAqIENvbnZlcnQgcGRldiBm cm9tIGNvbmZpZyBzdHJpbmcgaW50byBwZGV2IHByb3BlcnR5IGZvciBiYWNrZW5kLAorICogd2hp Y2ggaXMgZWl0aGVyIGg6Yzp0OmwgZm9yIHhlbmxpbnV4IG9yIG5hYS53d246bHVuIGZvciBwdm9w cworICovCitzdGF0aWMgaW50IHhsdV9fdnNjc2lfZGV2X3RvX3BkZXYoWExVX0NvbmZpZyAqY2Zn LCBsaWJ4bF9jdHggKmN0eCwgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX3ZzY3NpX2hjdGwgKnBkZXZfaGN0bCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF92c2NzaV9wZGV2ICpwZGV2KQoreworICAgIGludCByYyA9IEVS Uk9SX0lOVkFMOworICAgIHN0cnVjdCB4bHVfX3ZzY3NpX3RhcmdldCAqdGd0OworICAgIHN0YXRp YyBjb25zdCBjaGFyIHhlbl9wdnNjc2lbXSA9IFhMVV9TWVNGU19UQVJHRVRfUFZTQ1NJOworCisg ICAgLyogRmlyc3QgZ2V0IGhjdGwgcmVwcmVzZW50YXRpb24gb2YgY29uZmlnIGl0ZW0gKi8KKyAg ICBpZiAoeGx1X192c2NzaV9wYXJzZV9kZXYoY2ZnLCBzdHIsIHBkZXZfaGN0bCkpCisgICAgICAg IGdvdG8gb3V0OworCisgICAgLyogQ2hlY2sgaWYgYSBTQ1NJIHRhcmdldCBpdGVtIGV4aXN0cyBm b3IgdGhlIGNvbmZpZyBpdGVtICovCisgICAgaWYgKGFjY2Vzcyh4ZW5fcHZzY3NpLCBGX09LKSA9 PSAwKSB7CisgICAgICAgIHRndCA9IGNhbGxvYygxLCBzaXplb2YoKnRndCkpOworICAgICAgICBp ZiAoIXRndCkgeworICAgICAgICAgICAgcmMgPSBFUlJPUl9OT01FTTsKKyAgICAgICAgICAgIGdv dG8gb3V0OworICAgICAgICB9CisgICAgICAgIHRndC0+Y2ZnID0gY2ZnOworICAgICAgICB0Z3Qt PnBkZXZfaGN0bCA9IHBkZXZfaGN0bDsKKyAgICAgICAgdGd0LT5wZGV2ID0gcGRldjsKKyAgICAg ICAgc25wcmludGYodGd0LT5wYXRoLCBzaXplb2YodGd0LT5wYXRoKSwgIiVzIiwgeGVuX3B2c2Nz aSk7CisgICAgICAgIGlmICh4bHVfX3ZzY3NpX2ZpbmRfdGFyZ2V0X3d3bih0Z3QpID09IHRydWUp IHsKKyAgICAgICAgICAgIExPRyhjZmcsICInJXMnIG1hcHMgdG8gJyVzKCVzKSciLCBzdHIsIHRn dC0+cGF0aCwgdGd0LT51ZGV2X3BhdGgpOworICAgICAgICAgICAgbGlieGxfdnNjc2lfcGRldl9p bml0X3R5cGUocGRldiwgTElCWExfVlNDU0lfUERFVl9UWVBFX1dXTik7CisgICAgICAgICAgICBp ZiAoYXNwcmludGYoJnBkZXYtPnUud3duLm0sICJuYWEuJXM6JWxsdSIsIHRndC0+d3duLCB0Z3Qt Pmx1bikgPCAwKSB7CisgICAgICAgICAgICAgICAgcmMgPSBFUlJPUl9OT01FTTsKKyAgICAgICAg ICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmcmVl KHRndCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogQXNzdW1lIHhlbmxpbnV4IGJhY2tlbmQg Ki8KKyAgICAgICAgbGlieGxfdnNjc2lfcGRldl9pbml0X3R5cGUocGRldiwgTElCWExfVlNDU0lf UERFVl9UWVBFX0hDVEwpOworICAgICAgICBsaWJ4bF92c2NzaV9oY3RsX2NvcHkoY3R4LCAmcGRl di0+dS5oY3RsLm0sIHBkZXZfaGN0bCk7CisgICAgfQorICAgIHJjID0gMDsKKworb3V0OgorICAg IHJldHVybiByYzsKK30KKworLyogV1dOIGFzIHVuZGVyc3Rvb2QgYnkgcHZvcHMgKi8KK3N0YXRp YyBpbnQgeGx1X192c2NzaV93d25fdG9fcGRldihYTFVfQ29uZmlnICpjZmcsIGNoYXIgKnN0ciwg bGlieGxfdnNjc2lfcGRldiAqcGRldikKK3sKKyAgICBpbnQgcmMgPSBFUlJPUl9JTlZBTDsKKyAg ICB1bnNpZ25lZCBsb25nIGxvbmcgbHVuOworICAgIGNoYXIgd3duW1hMVV9XV05fTEVOICsgMV07 CisKKyAgICBtZW1zZXQod3duLCAwLCBzaXplb2Yod3duKSk7CisgICAgaWYgKHNzY2FuZihzdHIs ICJuYWEuJTE2YzolbGx1Iiwgd3duLCAmbHVuKSA9PSAyICYmIHhsdV9fdnNjc2lfd3duX3ZhbGlk KHd3bikpIHsKKyAgICAgICAgbGlieGxfdnNjc2lfcGRldl9pbml0X3R5cGUocGRldiwgTElCWExf VlNDU0lfUERFVl9UWVBFX1dXTik7CisgICAgICAgIHBkZXYtPnUud3duLm0gPSBzdHJkdXAoc3Ry KTsKKyAgICAgICAgcmMgPSBwZGV2LT51Lnd3bi5tID8gMCA6IEVSUk9SX05PTUVNOworICAgIH0K KyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgeGx1X192c2NzaV9wYXJzZV9wZGV2KFhM VV9Db25maWcgKmNmZywgbGlieGxfY3R4ICpjdHgsIGNoYXIgKnN0ciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX3ZzY3NpX3BkZXYgKnBkZXYpCit7CisgICAgaW50IHJj ID0gRVJST1JfSU5WQUw7CisgICAgbGlieGxfdnNjc2lfaGN0bCBwZGV2X2hjdGw7CisKKyAgICBs aWJ4bF92c2NzaV9oY3RsX2luaXQoJnBkZXZfaGN0bCk7CisgICAgaWYgKHN0cm5jbXAoc3RyLCAi L2Rldi8iLCA1KSA9PSAwKSB7CisgICAgICAgIHJjID0geGx1X192c2NzaV9kZXZfdG9fcGRldihj ZmcsIGN0eCwgc3RyLCAmcGRldl9oY3RsLCBwZGV2KTsKKyAgICB9IGVsc2UgaWYgKHN0cm5jbXAo c3RyLCAibmFhLiIsIDQpID09IDApIHsKKyAgICAgICAgcmMgPSB4bHVfX3ZzY3NpX3d3bl90b19w ZGV2KGNmZywgc3RyLCBwZGV2KTsKKyAgICB9IGVsc2UgaWYgKHhsdV9fdnNjc2lfcGFyc2VfaGN0 bChzdHIsICZwZGV2X2hjdGwpID09IDApIHsKKyAgICAgICAgLyogRWl0aGVyIHhlbmxpbnV4LCBv ciBwdm9wcyB3aXRoIHByb3Blcmx5IGNvbmZpZ3VyZWQgYWxpYXMgaW4gc3lzZnMgKi8KKyAgICAg ICAgbGlieGxfdnNjc2lfcGRldl9pbml0X3R5cGUocGRldiwgTElCWExfVlNDU0lfUERFVl9UWVBF X0hDVEwpOworICAgICAgICBsaWJ4bF92c2NzaV9oY3RsX2NvcHkoY3R4LCAmcGRldi0+dS5oY3Rs Lm0sICZwZGV2X2hjdGwpOworICAgICAgICByYyA9IDA7CisgICAgfQorCisgICAgaWYgKHJjID09 IDApIHsKKyAgICAgICAgICAgIHBkZXYtPnBfZGV2bmFtZSA9IHN0cmR1cChzdHIpOworICAgICAg ICAgICAgaWYgKCFwZGV2LT5wX2Rldm5hbWUpCisgICAgICAgICAgICAgICAgcmMgPSBFUlJPUl9O T01FTTsKKyAgICB9CisKKyAgICBsaWJ4bF92c2NzaV9oY3RsX2Rpc3Bvc2UoJnBkZXZfaGN0bCk7 CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgeGx1X3ZzY3NpX3BhcnNlKFhMVV9Db25maWcgKmNm ZywgbGlieGxfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAg bGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqbmV3X2N0cmwsCisgICAgICAgICAgICAgICAgICAgIGxp YnhsX2RldmljZV92c2NzaWRldiAqbmV3X2RldikKK3sKKyAgICBpbnQgcmM7CisgICAgY2hhciAq dG1wLCAqcGRldiwgKnZkZXYsICpmaG9zdDsKKworICAgIHRtcCA9IHN0cmR1cChzdHIpOworICAg IGlmICghdG1wKSB7CisgICAgICAgIHJjID0gRVJST1JfTk9NRU07CisgICAgICAgIGdvdG8gb3V0 OworICAgIH0KKworICAgIHBkZXYgPSBzdHJ0b2sodG1wLCAiLCIpOworICAgIHZkZXYgPSBzdHJ0 b2soTlVMTCwgIiwiKTsKKyAgICBmaG9zdCA9IHN0cnRvayhOVUxMLCAiLCIpOworICAgIGlmICgh KHBkZXYgJiYgdmRldikpIHsKKyAgICAgICAgTE9HKGNmZywgImludmFsaWQgZGV2c3BlYzogJyVz J1xuIiwgc3RyKTsKKyAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAgICAgZ290byBvdXQ7 CisgICAgfQorCisgICAgcGRldiA9IHhsdV9fdnNjc2lfdHJpbV9zdHJpbmcocGRldik7CisgICAg dmRldiA9IHhsdV9fdnNjc2lfdHJpbV9zdHJpbmcodmRldik7CisKKyAgICByYyA9IHhsdV9fdnNj c2lfcGFyc2VfcGRldihjZmcsIGN0eCwgcGRldiwgJm5ld19kZXYtPnBkZXYpOworICAgIGlmIChy YykgeworICAgICAgICBMT0coY2ZnLCAiZmFpbGVkIHRvIHBhcnNlICVzLCByYyA9PSAlZCIsIHBk ZXYsIHJjKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgaWYgKHhsdV9fdnNjc2lf cGFyc2VfaGN0bCh2ZGV2LCAmbmV3X2Rldi0+dmRldikpIHsKKyAgICAgICAgTE9HKGNmZywgImlu dmFsaWQgJyVzJywgZXhwZWN0aW5nIGhzdDpjaG46dGd0Omx1biIsIHZkZXYpOworICAgICAgICBy YyA9IEVSUk9SX0lOVkFMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBuZXdfY3Ry bC0+aWR4ID0gbmV3X2Rldi0+dmRldi5oc3Q7CisKKyAgICBpZiAoZmhvc3QpIHsKKyAgICAgICAg Zmhvc3QgPSB4bHVfX3ZzY3NpX3RyaW1fc3RyaW5nKGZob3N0KTsKKyAgICAgICAgaWYgKHN0cmNt cChmaG9zdCwgImZlYXR1cmUtaG9zdCIpID09IDApIHsKKyAgICAgICAgICAgIGxpYnhsX2RlZmJv b2xfc2V0KCZuZXdfY3RybC0+c2NzaV9yYXdfY21kcywgdHJ1ZSk7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBMT0coY2ZnLCAiaW52YWxpZCBvcHRpb24gJyVzJywgZXhwZWN0aW5nICVz IiwgZmhvc3QsICJmZWF0dXJlLWhvc3QiKTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7 CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBs aWJ4bF9kZWZib29sX3NldCgmbmV3X2N0cmwtPnNjc2lfcmF3X2NtZHMsIGZhbHNlKTsKKyAgICBy YyA9IDA7CisKK291dDoKKyAgICBmcmVlKHRtcCk7CisgICAgcmV0dXJuIHJjOworfQorCitpbnQg eGx1X3ZzY3NpX2dldF9jdHJsKFhMVV9Db25maWcgKmNmZywgbGlieGxfY3R4ICpjdHgsIHVpbnQz Ml90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIsCisgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKmN0cmwsCisgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWRldiAqZGV2LAorICAgICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICoqZXhpc3RpbmcpCit7CisgICAgbGli eGxfZGV2aWNlX3ZzY3NpY3RybCAqdnNjc2ljdHJscyA9IE5VTEwsICp0bXA7CisgICAgaW50IHJj LCBmb3VuZF9jdHJsID0gLTEsIGk7CisgICAgaW50IG51bV9jdHJsczsKKworCisgICAgcmMgPSB4 bHVfdnNjc2lfcGFyc2UoY2ZnLCBjdHgsIHN0ciwgY3RybCwgZGV2KTsKKyAgICBpZiAocmMpCisg ICAgICAgIGdvdG8gb3V0OworCisgICAgLyogTG9vayBmb3IgZXhpc3RpbmcgdnNjc2ljdHJsIGZv ciBnaXZlbiBkb21haW4gKi8KKyAgICB2c2NzaWN0cmxzID0gbGlieGxfZGV2aWNlX3ZzY3NpY3Ry bF9saXN0KGN0eCwgZG9taWQsICZudW1fY3RybHMpOworICAgIGlmICh2c2NzaWN0cmxzKSB7Cisg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY3RybHM7ICsraSkgeworICAgICAgICAgICAgaWYg KHZzY3NpY3RybHNbaV0uaWR4ID09IGRldi0+dmRldi5oc3QpIHsKKyAgICAgICAgICAgICAgICBm b3VuZF9jdHJsID0gaTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH0KKworICAgIGlmIChmb3VuZF9jdHJsID09IC0xKSB7CisgICAgICAgICpl eGlzdGluZyA9IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdG1wID0gdnNjc2ljdHJscyAr IGZvdW5kX2N0cmw7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlIHZkZXYgYWRkcmVzcyBpcyBh bHJlYWR5IHRha2VuICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0bXAtPm51bV92c2NzaWRl dnM7ICsraSkgeworICAgICAgICAgICAgaWYgKHRtcC0+dnNjc2lkZXZzW2ldLnZkZXYuY2huID09 IGRldi0+dmRldi5jaG4gJiYKKyAgICAgICAgICAgICAgICB0bXAtPnZzY3NpZGV2c1tpXS52ZGV2 LnRndCA9PSBkZXYtPnZkZXYudGd0ICYmCisgICAgICAgICAgICAgICAgdG1wLT52c2NzaWRldnNb aV0udmRldi5sdW4gPT0gZGV2LT52ZGV2Lmx1bikgeworICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgbG9uZyBsdW4gPSBkZXYtPnZkZXYubHVuOworICAgICAgICAgICAgICAgIExPRyhjZmcs ICJ2ZGV2ICcldToldToldTolbGx1JyBpcyBhbHJlYWR5IHVzZWQuXG4iLAorICAgICAgICAgICAg ICAgICAgICBkZXYtPnZkZXYuaHN0LCBkZXYtPnZkZXYuY2huLCBkZXYtPnZkZXYudGd0LCBsdW4p OworICAgICAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgICAgICAgICAgZ290 byBvdXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobGlieGxfZGVm Ym9vbF92YWwoY3RybC0+c2NzaV9yYXdfY21kcykgIT0KKyAgICAgICAgICAgIGxpYnhsX2RlZmJv b2xfdmFsKHRtcC0+c2NzaV9yYXdfY21kcykpIHsKKyAgICAgICAgICAgIExPRyhjZmcsICJkaWZm ZXJlbnQgZmVhdHVyZS1ob3N0IHNldHRpbmc6ICIKKyAgICAgICAgICAgICAgICAgICAgICAiZXhp c3RpbmcgY3RybCBoYXMgaXQgJXMsIG5ldyBjdHJsIGhhcyBpdCAlc1xuIiwKKyAgICAgICAgICAg ICAgICBsaWJ4bF9kZWZib29sX3ZhbChjdHJsLT5zY3NpX3Jhd19jbWRzKSA/ICJzZXQiIDogInVu c2V0IiwKKyAgICAgICAgICAgICAgICBsaWJ4bF9kZWZib29sX3ZhbCh0bXAtPnNjc2lfcmF3X2Nt ZHMpID8gInNldCIgOiAidW5zZXQiKTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7Cisg ICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIGxpYnhsX2RldmljZV92 c2NzaWN0cmxfY29weShjdHgsICpleGlzdGluZywgdG1wKTsKKyAgICB9CisKKyAgICByYyA9IDA7 CisKK291dDoKKyAgICBpZiAodnNjc2ljdHJscykgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg bnVtX2N0cmxzOyArK2kpCisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2Rpc3Bv c2UodnNjc2ljdHJscyArIGkpOworICAgICAgICBmcmVlKHZzY3NpY3RybHMpOworICAgIH0KKyAg ICByZXR1cm4gcmM7Cit9CisKK2ludCB4bHVfdnNjc2lfZGV0YWNoKFhMVV9Db25maWcgKmNmZywg bGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLCBjaGFyICpzdHIpCit7CisgICAgbGlieGxf ZGV2aWNlX3ZzY3NpZGV2IGRldiA9IHsgfTsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsIGN0 cmwgPSB7IH07CisgICAgaW50IHJjOworICAgIGNoYXIgKnRtcCA9IE5VTEw7CisKKyAgICBsaWJ4 bF9kZXZpY2VfdnNjc2ljdHJsX2luaXQoJmN0cmwpOworICAgIGxpYnhsX2RldmljZV92c2NzaWRl dl9pbml0KCZkZXYpOworCisgICAgLyogQ3JlYXRlIGEgZHVtbXkgY2ZnICovCisgICAgaWYgKGFz cHJpbnRmKCZ0bXAsICIwOjA6MDowLCVzIiwgc3RyKSA8IDApIHsKKyAgICAgICAgTE9HKGNmZywg ImFzcHJpbnRmIGZhaWxlZCB3aGlsZSByZW1vdmluZyAlcyBmcm9tIGRvbWlkICV1Iiwgc3RyLCBk b21pZCk7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAg fQorCisgICAgcmMgPSB4bHVfdnNjc2lfcGFyc2UoY2ZnLCBjdHgsIHRtcCwgJmN0cmwsICZkZXYp OworICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICByYyA9IGxpYnhsX2RldmljZV92c2NzaWRl dl9yZW1vdmUoY3R4LCBkb21pZCwgJmRldiwgTlVMTCk7CisgICAgc3dpdGNoIChyYykgeworICAg IGNhc2UgRVJST1JfTk9URk9VTkQ6CisgICAgICAgIExPRyhjZmcsICJkZXRhY2ggZmFpbGVkOiAl cyBkb2VzIG5vdCBleGlzdCBpbiBkb21pZCAldSIsIHN0ciwgZG9taWQpOworICAgICAgICBicmVh azsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKK291dDoKKyAgICBmcmVl KHRtcCk7CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2X2Rpc3Bvc2UoJmRldik7CisgICAgbGli eGxfZGV2aWNlX3ZzY3NpY3RybF9kaXNwb3NlKCZjdHJsKTsKKyAgICByZXR1cm4gcmM7Cit9CisK K2ludCB4bHVfdnNjc2lfY29uZmlnX2FkZChYTFVfQ29uZmlnICpjZmcsCisgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfY3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbnVtX3ZzY3NpcywK KyAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICoqdnNjc2lz KQoreworICAgIGludCByYywgaTsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2lkZXYgZGV2ID0geyB9 OworICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKnRtcF9jdHJsLCBjdHJsID0geyB9OworICAg IGJvb2wgY3RybF9mb3VuZCA9IGZhbHNlOworCisgICAgLyoKKyAgICAgKiAjMTogcGFyc2UgdGhl IGRldnNwZWMgYW5kIHBsYWNlIGl0IGluIHRlbXBvcmFyeSBjdHJsK2RldiBwYXJ0CisgICAgICog IzI6IGZpbmQgZXhpc3RpbmcgdnNjc2ljdHJsIHdpdGggbnVtYmVyIHZkZXYuaHN0CisgICAgICog ICAgIGlmIGZvdW5kLCBhcHBlbmQgdGhlIHZzY3NpZGV2IHRvIHRoaXMgdnNjc2ljdHJsCisgICAg ICogIzM6IG90aGVyd2lzZSwgY3JlYXRlIG5ldyB2c2NzaWN0cmwgYW5kIGFwcGVuZCB2c2NzaWRl dgorICAgICAqIE5vdGU6IHZkZXYuaHN0IGRvZXMgbm90IHJlcHJlc2VudCB0aGUgaW5kZXggbmFt ZWQgIm51bV92c2NzaXMiLAorICAgICAqICAgICAgIGl0IGlzIGEgcHJpdmF0ZSBpbmRleCB1c2Vk IGp1c3QgaW4gdGhlIGNvbmZpZyBmaWxlCisgICAgICovCisgICAgbGlieGxfZGV2aWNlX3ZzY3Np Y3RybF9pbml0KCZjdHJsKTsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2lkZXZfaW5pdCgmZGV2KTsK KworICAgIHJjID0geGx1X3ZzY3NpX3BhcnNlKGNmZywgY3R4LCBzdHIsICZjdHJsLCAmZGV2KTsK KyAgICBpZiAocmMpCisgICAgICAgIGdvdG8gb3V0OworCisgICAgaWYgKCpudW1fdnNjc2lzKSB7 CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAqbnVtX3ZzY3NpczsgaSsrKSB7CisgICAgICAgICAg ICB0bXBfY3RybCA9ICp2c2NzaXMgKyBpOworICAgICAgICAgICAgaWYgKHRtcF9jdHJsLT5pZHgg PT0gZGV2LnZkZXYuaHN0KSB7CisgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3Ry bF9hcHBlbmRfdnNjc2lkZXYoY3R4LCB0bXBfY3RybCwgJmRldik7CisgICAgICAgICAgICAgICAg Y3RybF9mb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWN0cmxfZm91bmQgfHwgISpudW1fdnNjc2lz KSB7CisgICAgICAgIHRtcF9jdHJsID0gcmVhbGxvYygqdnNjc2lzLCBzaXplb2YoY3RybCkgKiAo Km51bV92c2NzaXMgKyAxKSk7CisgICAgICAgIGlmICghdG1wX2N0cmwpIHsKKyAgICAgICAgICAg IExPRyhjZmcsICJyZWFsbG9jICMlZCBmYWlsZWQiLCAqbnVtX3ZzY3NpcyArIDEpOworICAgICAg ICAgICAgcmMgPSBFUlJPUl9OT01FTTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9 CisgICAgICAgICp2c2NzaXMgPSB0bXBfY3RybDsKKyAgICAgICAgdG1wX2N0cmwgPSAqdnNjc2lz ICsgKm51bV92c2NzaXM7CisgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmxfaW5pdCh0bXBf Y3RybCk7CisKKyAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybF9jb3B5KGN0eCwgdG1wX2N0 cmwsICZjdHJsKTsKKworICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2FwcGVuZF92c2Nz aWRldihjdHgsIHRtcF9jdHJsLCAmZGV2KTsKKworICAgICAgICAoKm51bV92c2NzaXMpKys7Cisg ICAgfQorCisgICAgcmMgPSAwOworb3V0OgorICAgIGxpYnhsX2RldmljZV92c2NzaWRldl9kaXNw b3NlKCZkZXYpOworICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmxfZGlzcG9zZSgmY3RybCk7Cisg ICAgcmV0dXJuIHJjOworfQorI2Vsc2UgLyogISBfX2xpbnV4X18gKi8KK2ludCB4bHVfdnNjc2lf Z2V0X2N0cmwoWExVX0NvbmZpZyAqY2ZnLCBsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQs CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciwKKyAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqY3RybCwKKyAgICAgICAgICAgICAgICAg ICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2ICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX2RldmljZV92c2NzaWN0cmwgKipleGlzdGluZykKK3sKKyAgICByZXR1cm4gRVJST1Jf SU5WQUw7Cit9CisKK2ludCB4bHVfdnNjc2lfcGFyc2UoWExVX0NvbmZpZyAqY2ZnLAorICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICpu ZXdfY3RybCwKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2ICpuZXdf ZGV2KQoreworICAgIHJldHVybiBFUlJPUl9JTlZBTDsKK30KKworaW50IHhsdV92c2NzaV9kZXRh Y2goWExVX0NvbmZpZyAqY2ZnLAorICAgICAgICAgICAgICAgICAgICAgbGlieGxfY3R4ICpjdHgs CisgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKnN0cikKK3sKKyAgICByZXR1cm4gRVJST1JfSU5WQUw7Cit9CisKK2ludCB4bHVf dnNjc2lfY29uZmlnX2FkZChYTFVfQ29uZmlnICpjZmcsCisgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfY3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq c3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbnVtX3ZzY3NpcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICoqdnNjc2lzKQoreworICAg IHJldHVybiBFUlJPUl9JTlZBTDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwv bGlieGx1dGlsLmggYi90b29scy9saWJ4bC9saWJ4bHV0aWwuaAppbmRleCBlODFiNjQ0Li44Zjhl NDMxIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bHV0aWwuaAorKysgYi90b29scy9saWJ4 bC9saWJ4bHV0aWwuaApAQCAtMTE4LDYgKzExOCwyNCBAQCBpbnQgeGx1X3JkbV9wYXJzZShYTFVf Q29uZmlnICpjZmcsIGxpYnhsX3JkbV9yZXNlcnZlICpyZG0sIGNvbnN0IGNoYXIgKnN0cik7CiBp bnQgeGx1X3ZpZl9wYXJzZV9yYXRlKFhMVV9Db25maWcgKmNmZywgY29uc3QgY2hhciAqcmF0ZSwK ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX25pYyAqbmljKTsKIAorLyogRmls bCBjdHJsL2RldiB3aXRoIGRldmljZSBkZXNjcmliZWQgaW4gc3RyIChwZGV2LHZkZXZbLG9wdGlv bnNdKSAqLworaW50IHhsdV92c2NzaV9nZXRfY3RybChYTFVfQ29uZmlnICpjZmcsIGxpYnhsX2N0 eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICpj dHJsLAorICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2lkZXYgKmRldiwK KyAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqKmV4aXN0aW5n KTsKKy8qIFBhcnNlIGNvbmZpZyBzdHJpbmcgYW5kIGZpbGwgcHJvdmlkZWQgdnNjc2kgY3RybCBh bmQgdnNjc2kgZGV2aWNlICovCitpbnQgeGx1X3ZzY3NpX3BhcnNlKFhMVV9Db25maWcgKmNmZywg bGlieGxfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgbGli eGxfZGV2aWNlX3ZzY3NpY3RybCAqbmV3X2N0cmwsCisgICAgICAgICAgICAgICAgICAgIGxpYnhs X2RldmljZV92c2NzaWRldiAqbmV3X2Rldik7CisvKiBEZXRhY2ggdnNjc2kgZGV2aWNlIGRlc2Ny aWJlZCBpbiBjb25maWcgc3RyaW5nIChwZGV2LHZkZXZbLG9wdGlvbnNdKSAqLworaW50IHhsdV92 c2NzaV9kZXRhY2goWExVX0NvbmZpZyAqY2ZnLCBsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9t aWQsIGNoYXIgKnN0cik7CisvKiBBZGQgdnNjc2kgZGV2aWNlIGRlc2NyaWJlZCBpbiBjb25maWcg c3RyaW5nIChwZGV2LHZkZXZbLG9wdGlvbnNdKSB0byBkX2NvbmZpZyAqLworaW50IHhsdV92c2Nz aV9jb25maWdfYWRkKFhMVV9Db25maWcgKmNmZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBs aWJ4bF9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIs CisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpudW1fdnNjc2lzLAorICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKip2c2NzaXMpOwogI2VuZGlmIC8q IExJQlhMVVRJTF9IICovCiAKIC8qCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC94bC5oIGIvdG9v bHMvbGlieGwveGwuaAppbmRleCAzMDk2MjdhLi43MTNhZWQ2IDEwMDY0NAotLS0gYS90b29scy9s aWJ4bC94bC5oCisrKyBiL3Rvb2xzL2xpYnhsL3hsLmgKQEAgLTg5LDYgKzg5LDkgQEAgaW50IG1h aW5fY2hhbm5lbGxpc3QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKIGludCBtYWluX2Jsb2NrYXR0 YWNoKGludCBhcmdjLCBjaGFyICoqYXJndik7CiBpbnQgbWFpbl9ibG9ja2xpc3QoaW50IGFyZ2Ms IGNoYXIgKiphcmd2KTsKIGludCBtYWluX2Jsb2NrZGV0YWNoKGludCBhcmdjLCBjaGFyICoqYXJn dik7CitpbnQgbWFpbl92c2NzaWF0dGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworaW50IG1h aW5fdnNjc2lsaXN0KGludCBhcmdjLCBjaGFyICoqYXJndik7CitpbnQgbWFpbl92c2NzaWRldGFj aChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwogaW50IG1haW5fdnRwbWF0dGFjaChpbnQgYXJnYywg Y2hhciAqKmFyZ3YpOwogaW50IG1haW5fdnRwbWxpc3QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsK IGludCBtYWluX3Z0cG1kZXRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKZGlmZiAtLWdpdCBh L3Rvb2xzL2xpYnhsL3hsX2NtZGltcGwuYyBiL3Rvb2xzL2xpYnhsL3hsX2NtZGltcGwuYwppbmRl eCBhMzYxMGZjLi5hY2Y3OTViIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC94bF9jbWRpbXBsLmMK KysrIGIvdG9vbHMvbGlieGwveGxfY21kaW1wbC5jCkBAIC0xMzIxLDcgKzEzMjEsNyBAQCBzdGF0 aWMgdm9pZCBwYXJzZV9jb25maWdfZGF0YShjb25zdCBjaGFyICpjb25maWdfc291cmNlLAogICAg IGxvbmcgbCwgdmNwdXMgPSAwOwogICAgIFhMVV9Db25maWcgKmNvbmZpZzsKICAgICBYTFVfQ29u ZmlnTGlzdCAqY3B1cywgKnZiZHMsICpuaWNzLCAqcGNpcywgKmN2ZmJzLCAqY3B1aWRzLCAqdnRw bXMsCi0gICAgICAgICAgICAgICAgICAgKnVzYmN0cmxzLCAqdXNiZGV2czsKKyAgICAgICAgICAg ICAgICAgICAqdXNiY3RybHMsICp1c2JkZXZzLCAqdnNjc2ljdHJsczsKICAgICBYTFVfQ29uZmln TGlzdCAqY2hhbm5lbHMsICppb3BvcnRzLCAqaXJxcywgKmlvbWVtLCAqdmlyaWRpYW4sICpkdGRl dnM7CiAgICAgaW50IG51bV9pb3BvcnRzLCBudW1faXJxcywgbnVtX2lvbWVtLCBudW1fY3B1cywg bnVtX3ZpcmlkaWFuOwogICAgIGludCBwY2lfcG93ZXJfbWdtdCA9IDA7CkBAIC0xODUxLDYgKzE4 NTEsMTcgQEAgc3RhdGljIHZvaWQgcGFyc2VfY29uZmlnX2RhdGEoY29uc3QgY2hhciAqY29uZmln X3NvdXJjZSwKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmICgheGx1X2NmZ19nZXRfbGlzdChj b25maWcsICJ2c2NzaSIsICZ2c2NzaWN0cmxzLCAwLCAwKSkgeworICAgICAgICBpbnQgbnVtX3Zz Y3NpX2l0ZW1zID0gMDsKKyAgICAgICAgZF9jb25maWctPm51bV92c2NzaWN0cmxzID0gMDsKKyAg ICAgICAgZF9jb25maWctPnZzY3NpY3RybHMgPSBOVUxMOworICAgICAgICB3aGlsZSAoKGJ1ZiA9 IHhsdV9jZmdfZ2V0X2xpc3RpdGVtICh2c2NzaWN0cmxzLCBudW1fdnNjc2lfaXRlbXMpKSAhPSBO VUxMKSB7CisgICAgICAgICAgICBpZiAoeGx1X3ZzY3NpX2NvbmZpZ19hZGQoY29uZmlnLCBjdHgs IGJ1ZiwgJmRfY29uZmlnLT5udW1fdnNjc2ljdHJscywgJmRfY29uZmlnLT52c2NzaWN0cmxzKSkK KyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgbnVtX3ZzY3NpX2l0ZW1zKys7 CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoIXhsdV9jZmdfZ2V0X2xpc3QoY29uZmlnLCAi dnRwbSIsICZ2dHBtcywgMCwgMCkpIHsKICAgICAgICAgZF9jb25maWctPm51bV92dHBtcyA9IDA7 CiAgICAgICAgIGRfY29uZmlnLT52dHBtcyA9IE5VTEw7CkBAIC03MDU4LDYgKzcwNjksMjE4IEBA IGludCBtYWluX2Jsb2NrZGV0YWNoKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICByZXR1cm4g cmM7CiB9CiAKK2ludCBtYWluX3ZzY3NpYXR0YWNoKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sK KyAgICB1aW50MzJfdCBkb21pZDsKKyAgICBpbnQgb3B0LCByYzsKKyAgICBYTFVfQ29uZmlnICpj b25maWcgPSBOVUxMOworICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgY3RybCwgKmV4aXN0aW5n ID0gTlVMTDsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2lkZXYgZGV2OworICAgIGNoYXIgKnN0ciA9 IE5VTEwsICpmZWF0X2J1ZiA9IE5VTEw7CisgICAgY2hhciAqanNvbjsKKworICAgIFNXSVRDSF9G T1JFQUNIX09QVChvcHQsICIiLCBOVUxMLCAic2NzaS1hdHRhY2giLCAxKSB7CisgICAgICAgIC8q IE5vIG9wdGlvbnMgKi8KKyAgICB9CisKKyAgICBpZiAoYXJnYyA8IDQgfHwgYXJnYyA+IDUpIHsK KyAgICAgICAgaGVscCgic2NzaS1hdHRhY2giKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQor CisgICAgaWYgKGxpYnhsX2RvbWFpbl9xdWFsaWZpZXJfdG9fZG9taWQoY3R4LCBhcmd2W29wdGlu ZF0sICZkb21pZCkgPCAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgaXMgYW4gaW52 YWxpZCBkb21haW4gaWRlbnRpZmllclxuIiwgYXJndltvcHRpbmRdKTsKKyAgICAgICAgcmV0dXJu IDE7CisgICAgfQorCisgICAgb3B0aW5kKys7CisKKyAgICBpZiAoYXJnYyA9PSA1KSB7CisgICAg ICAgIGlmIChhc3ByaW50ZigmZmVhdF9idWYsICIsJXMiLCBhcmd2WzRdKSA8IDApIHsKKyAgICAg ICAgICAgIHBlcnJvcigiYXNwcmludGYiKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAg ICB9CisgICAgfQorCisgICAgaWYgKGFzcHJpbnRmKCZzdHIsICIlcywlcyVzIiwgYXJndlsyXSwg YXJndlszXSwgZmVhdF9idWYgPzogIiIpIDwgMCkgeworICAgICAgICBwZXJyb3IoImFzcHJpbnRm Iik7CisgICAgICAgIHJjID0gMTsKKyAgICAgICAgZ290byBvdXQ7OworICAgIH0KKworICAgIGV4 aXN0aW5nID0geG1hbGxvYyhzaXplb2YoKmV4aXN0aW5nKSk7CisgICAgbGlieGxfZGV2aWNlX3Zz Y3NpY3RybF9pbml0KGV4aXN0aW5nKTsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2luaXQo JmN0cmwpOworICAgIGxpYnhsX2RldmljZV92c2NzaWRldl9pbml0KCZkZXYpOworCisgICAgY29u ZmlnID0geGx1X2NmZ19pbml0KHN0ZGVyciwgImNvbW1hbmQgbGluZSIpOworICAgIGlmICghY29u ZmlnKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGFsbG9jYXRlIGZvciBj b25maWd1cmF0aW9uXG4iKTsKKyAgICAgICAgcmMgPSAxOworICAgICAgICBnb3RvIG91dDsKKyAg ICB9CisKKyAgICAvKiBQYXJzZSBjb25maWcgc3RyaW5nIGFuZCBzdG9yZSByZXN1bHQgKi8KKyAg ICByYyA9IHhsdV92c2NzaV9nZXRfY3RybChjb25maWcsIGN0eCwgZG9taWQsIHN0ciwgJmN0cmws ICZkZXYsICZleGlzdGluZyk7CisgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgZ290byBvdXQ7CisK KyAgICBpZiAoZHJ5cnVuX29ubHkpIHsKKyAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybF9h cHBlbmRfdnNjc2lkZXYoY3R4LCBleGlzdGluZyA/IDogJmN0cmwsICZkZXYpOworICAgICAgICBq c29uID0gbGlieGxfZGV2aWNlX3ZzY3NpY3RybF90b19qc29uKGN0eCwgZXhpc3RpbmcgPyA6ICZj dHJsKTsKKyAgICAgICAgcHJpbnRmKCJ2c2NzaTogJXNcbiIsIGpzb24pOworICAgICAgICBmcmVl KGpzb24pOworICAgICAgICBpZiAoZmVycm9yKHN0ZG91dCkgfHwgZmZsdXNoKHN0ZG91dCkpIHsg cGVycm9yKCJzdGRvdXQiKTsgZXhpdCgtMSk7IH0KKyAgICAgICAgcmMgPSAwOworICAgICAgICBn b3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBGaW5hbGx5IGFkZCB0aGUgZGV2aWNlICovCisgICAg aWYgKGV4aXN0aW5nKSB7CisgICAgICAgIGlmIChsaWJ4bF9kZXZpY2VfdnNjc2lkZXZfYWRkKGN0 eCwgZG9taWQsICZkZXYsIE5VTEwpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxp YnhsX2RldmljZV92c2NzaWRldl9hZGQgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIHJjID0gMTsK KyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg bGlieGxfZGV2aWNlX3ZzY3NpY3RybF9hcHBlbmRfdnNjc2lkZXYoY3R4LCAmY3RybCwgJmRldik7 CisgICAgICAgIGlmIChsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2FkZChjdHgsIGRvbWlkLCAmY3Ry bCwgTlVMTCkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfZGV2aWNlX3Zz Y3NpY3RybF9hZGQgZmFpbGVkLlxuIik7CisgICAgICAgICAgICByYyA9IDE7CisgICAgICAgICAg ICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJjID0gMDsKK291dDoKKyAgICBp ZiAoY29uZmlnKQorICAgICAgICB4bHVfY2ZnX2Rlc3Ryb3koY29uZmlnKTsKKyAgICBsaWJ4bF9k ZXZpY2VfdnNjc2ljdHJsX2Rpc3Bvc2UoZXhpc3RpbmcpOworICAgIGxpYnhsX2RldmljZV92c2Nz aWN0cmxfZGlzcG9zZSgmY3RybCk7CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2X2Rpc3Bvc2Uo JmRldik7CisgICAgZnJlZShleGlzdGluZyk7CisgICAgZnJlZShzdHIpOworICAgIGZyZWUoZmVh dF9idWYpOworICAgIHJldHVybiByYzsKK30KKworaW50IG1haW5fdnNjc2lsaXN0KGludCBhcmdj LCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgb3B0OworICAgIHVpbnQzMl90IGRvbWlkOworICAg IGxpYnhsX2RldmljZV92c2NzaWN0cmwgKnZzY3NpY3RybHM7CisgICAgbGlieGxfdnNjc2lpbmZv IHZzY3NpaW5mbzsKKyAgICBpbnQgbnVtX2N0cmxzLCBoLCBkOworCisgICAgU1dJVENIX0ZPUkVB Q0hfT1BUKG9wdCwgIiIsIE5VTEwsICJzY3NpLWxpc3QiLCAxKSB7CisgICAgICAgIC8qIE5vIG9w dGlvbnMgKi8KKyAgICB9CisgICAgaWYgKGFyZ2MgPCAyKSB7CisgICAgICAgIGhlbHAoInNjc2kt bGlzdCIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiAgICAgIElkeCAgQkUg IHN0YXRlIGN0cmwgcF9oc3Qgdl9oc3Qgc3RhdGUgKi8KKyAgICBwcmludGYoIiUtM3MgJS0zcyAl LTVzICUtNXMgJS0xMHMgJS0xMHMgJS01c1xuIiwKKyAgICAgICAgICAgIklkeCIsICJCRSIsICJz dGF0ZSIsICJjdHJsIiwgInBoeS1oY3RsIiwgInZpci1oY3RsIiwgImRldnN0YXRlIik7CisgICAg Zm9yIChhcmd2ICs9IG9wdGluZCwgYXJnYyAtPSBvcHRpbmQ7IGFyZ2MgPiAwOyAtLWFyZ2MsICsr YXJndikgeworICAgICAgICBpZiAobGlieGxfZG9tYWluX3F1YWxpZmllcl90b19kb21pZChjdHgs ICphcmd2LCAmZG9taWQpIDwgMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBp cyBhbiBpbnZhbGlkIGRvbWFpbiBpZGVudGlmaWVyXG4iLCAqYXJndik7CisgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgfQorICAgICAgICB2c2NzaWN0cmxzID0gbGlieGxfZGV2aWNlX3Zz Y3NpY3RybF9saXN0KGN0eCwgZG9taWQsICZudW1fY3RybHMpOworICAgICAgICBpZiAoIXZzY3Np Y3RybHMpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmb3IgKGggPSAwOyBoIDwg bnVtX2N0cmxzOyArK2gpIHsKKyAgICAgICAgICAgIGZvciAoZCA9IDA7IGQgPCB2c2NzaWN0cmxz W2hdLm51bV92c2NzaWRldnM7IGQrKykgeworICAgICAgICAgICAgICAgIGlmICghbGlieGxfZGV2 aWNlX3ZzY3NpY3RybF9nZXRpbmZvKGN0eCwgZG9taWQsICZ2c2NzaWN0cmxzW2hdLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZzY3NpY3RybHNbaF0u dnNjc2lkZXZzW2RdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnZzY3NpaW5mbykpIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBwZGV2WzY0XSwg dmRldls2NF07CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBsdW47Cisg ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodnNjc2lpbmZvLnBkZXYudHlwZSkgeworICAgICAg ICAgICAgICAgICAgICBjYXNlIExJQlhMX1ZTQ1NJX1BERVZfVFlQRV9IQ1RMOgorICAgICAgICAg ICAgICAgICAgICAgICAgbHVuID0gdnNjc2lpbmZvLnBkZXYudS5oY3RsLm0ubHVuOworICAgICAg ICAgICAgICAgICAgICAgICAgc25wcmludGYocGRldiwgc2l6ZW9mKHBkZXYpLCAiJXU6JXU6JXU6 JWxsdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c2NzaWluZm8ucGRldi51 LmhjdGwubS5oc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c2NzaWluZm8u cGRldi51LmhjdGwubS5jaG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c2Nz aWluZm8ucGRldi51LmhjdGwubS50Z3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgIGNhc2UgTElCWExfVlNDU0lfUERFVl9UWVBFX1dXTjoKKyAgICAgICAgICAgICAgICAgICAg ICAgIHNucHJpbnRmKHBkZXYsIHNpemVvZihwZGV2KSwgIiVzIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZzY3NpaW5mby5wZGV2LnUud3duLm0pOworICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg ICAgICAgICAgICAgICBwZGV2WzBdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGx1biA9IHZz Y3NpaW5mby52ZGV2Lmx1bjsKKyAgICAgICAgICAgICAgICAgICAgc25wcmludGYodmRldiwgc2l6 ZW9mKHZkZXYpLCAiJXU6JXU6JXU6JWxsdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZzY3NpaW5mby52ZGV2LmhzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnNjc2lp bmZvLnZkZXYuY2huLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c2NzaWluZm8udmRl di50Z3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx1bik7CisgICAgICAgICAgICAg ICAgICAgIC8qICAgICAgSWR4ICBCRSAgc3RhdGUgU3RhICovCisgICAgICAgICAgICAgICAgICAg IHByaW50ZigiJS0zZCAlLTNkICUtNWQgJS01ZCAlLTEwcyAlLTEwcyAlZFxuIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZzY3NpaW5mby5kZXZpZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZzY3NpaW5mby5iYWNrZW5kX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg dnNjc2lpbmZvLnZzY3NpY3RybF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZz Y3NpaW5mby5iYWNrZW5kX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRldiwgdmRl diwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzY3NpaW5mby52c2NzaWRldl9zdGF0ZSk7 CisKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGlieGxfdnNjc2lpbmZvX2Rp c3Bvc2UoJnZzY3NpaW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaWJ4bF9kZXZp Y2VfdnNjc2ljdHJsX2Rpc3Bvc2UoJnZzY3NpY3RybHNbaF0pOworICAgICAgICB9CisgICAgICAg IGZyZWUodnNjc2ljdHJscyk7CisKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IG1h aW5fdnNjc2lkZXRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCBvcHQ7Cisg ICAgY2hhciAqZG9tID0gYXJndlsxXSwgKnN0ciA9IGFyZ3ZbMl07CisgICAgdWludDMyX3QgZG9t aWQ7CisgICAgWExVX0NvbmZpZyAqY29uZmlnID0gTlVMTDsKKyAgICBpbnQgcmMgPSAwOworCisg ICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJzY3NpLWRldGFjaCIsIDEpIHsK KyAgICAgICAgLyogTm8gb3B0aW9ucyAqLworICAgIH0KKworICAgIGlmIChhcmdjIDwgMykgewor ICAgICAgICBoZWxwKCJzY3NpLWRldGFjaCIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisK KyAgICBpZiAobGlieGxfZG9tYWluX3F1YWxpZmllcl90b19kb21pZChjdHgsIGRvbSwgJmRvbWlk KSA8IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBpcyBhbiBpbnZhbGlkIGRvbWFp biBpZGVudGlmaWVyXG4iLCBkb20pOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBj b25maWcgPSB4bHVfY2ZnX2luaXQoc3RkZXJyLCAiY29tbWFuZCBsaW5lIik7CisgICAgaWYgKCFj b25maWcpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUgZm9y IGNvbmZpZ3VyYXRpb25cbiIpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICByYyA9 IHhsdV92c2NzaV9kZXRhY2goY29uZmlnLCBjdHgsIGRvbWlkLCBzdHIpOworICAgIGlmIChyYykK KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJzY3NpLWRldGFjaCAlcyAlcyBmYWlsZWQ6ICVkXG4i LCBkb20sIHN0ciwgcmMpOworCitvdXQ6CisgICAgaWYgKGNvbmZpZykKKyAgICAgICAgeGx1X2Nm Z19kZXN0cm95KGNvbmZpZyk7CisgICAgcmV0dXJuICEhcmM7Cit9CisKIGludCBtYWluX3Z0cG1h dHRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogICAgIGludCBvcHQ7CmRpZmYgLS1naXQg YS90b29scy9saWJ4bC94bF9jbWR0YWJsZS5jIGIvdG9vbHMvbGlieGwveGxfY21kdGFibGUuYwpp bmRleCBiMTRiODgxLi45M2MyMTMwIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC94bF9jbWR0YWJs ZS5jCisrKyBiL3Rvb2xzL2xpYnhsL3hsX2NtZHRhYmxlLmMKQEAgLTM1MSw2ICszNTEsMjEgQEAg c3RydWN0IGNtZF9zcGVjIGNtZF90YWJsZVtdID0gewogICAgICAgIkRlc3Ryb3kgYSBkb21haW4n cyB2aXJ0dWFsIGJsb2NrIGRldmljZSIsCiAgICAgICAiPERvbWFpbj4gPERldklkPiIsCiAgICAg fSwKKyAgICB7ICJzY3NpLWF0dGFjaCIsCisgICAgICAmbWFpbl92c2NzaWF0dGFjaCwgMSwgMSwK KyAgICAgICJBdHRhY2ggYSBkb20wIFNDU0kgZGV2aWNlIHRvIGEgZG9tYWluLiIsCisgICAgICAi PERvbWFpbj4gPFBoeXNEZXZpY2U+IDxWaXJ0RGV2aWNlPiIsCisgICAgfSwKKyAgICB7ICJzY3Np LWxpc3QiLAorICAgICAgJm1haW5fdnNjc2lsaXN0LCAwLCAwLAorICAgICAgIkxpc3QgYWxsIGRv bTAgU0NTSSBkZXZpY2VzIGN1cnJlbnRseSBhdHRhY2hlZCB0byBhIGRvbWFpbi4iLAorICAgICAg IjxEb21haW4ocyk+IiwKKyAgICB9LAorICAgIHsgInNjc2ktZGV0YWNoIiwKKyAgICAgICZtYWlu X3ZzY3NpZGV0YWNoLCAwLCAxLAorICAgICAgIkRldGFjaCBhIHNwZWNpZmllZCBTQ1NJIGRldmlj ZSBmcm9tIGEgZG9tYWluLiIsCisgICAgICAiPERvbWFpbj4gPFZpcnREZXZpY2U+IiwKKyAgICB9 LAogICAgIHsgInZ0cG0tYXR0YWNoIiwKICAgICAgICZtYWluX3Z0cG1hdHRhY2gsIDEsIDEsCiAg ICAgICAiQ3JlYXRlIGEgbmV3IHZpcnR1YWwgVFBNIGRldmljZSIsCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhl bi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=