From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MBRtW-00008Y-RL for qemu-devel@nongnu.org; Tue, 02 Jun 2009 07:11:03 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MBRtQ-00006Y-VJ for qemu-devel@nongnu.org; Tue, 02 Jun 2009 07:11:01 -0400 Received: from [199.232.76.173] (port=38934 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MBRtO-00006L-QH for qemu-devel@nongnu.org; Tue, 02 Jun 2009 07:10:55 -0400 Received: from mail-qy0-f123.google.com ([209.85.221.123]:51867) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MBRtN-0000bZ-Jl for qemu-devel@nongnu.org; Tue, 02 Jun 2009 07:10:54 -0400 Received: by qyk29 with SMTP id 29so9377474qyk.4 for ; Tue, 02 Jun 2009 04:10:52 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: References: <6D22281B668644418902B6130F779008@FSCPC> Date: Tue, 2 Jun 2009 21:10:52 +1000 Message-ID: From: Matthew Iselin Content-Type: multipart/mixed; boundary=0016e64763e08aad31046b5b988b Subject: [Qemu-devel] PATCH: Add 3C90X emulation List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "qemu-devel@nongnu.org" --0016e64763e08aad31046b5b988b Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sebastian wrote: > The patch unfortunatelly no longer applies. Can you please rebase on top of > git master > and resend? Hi, The attached patch now applies to the latest git master. Thanks, Matthew --0016e64763e08aad31046b5b988b Content-Type: text/x-patch; charset=US-ASCII; name="3c90x.patch" Content-Disposition: attachment; filename="3c90x.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fvgicgiu0 ZGlmZiAtLWdpdCBhL01ha2VmaWxlLnRhcmdldCBiL01ha2VmaWxlLnRhcmdldAppbmRleCA4MmFk YTVhLi5kNDMzNTVjIDEwMDY0NAotLS0gYS9NYWtlZmlsZS50YXJnZXQKKysrIGIvTWFrZWZpbGUu dGFyZ2V0CkBAIC01ODAsNiArNTgwLDcgQEAgT0JKUyArPSBlZXBybzEwMC5vCiBPQkpTICs9IG5l MjAwMC5vCiBPQkpTICs9IHBjbmV0Lm8KIE9CSlMgKz0gcnRsODEzOS5vCitPQkpTICs9IDNjOTB4 Lm8KIE9CSlMgKz0gZTEwMDAubwogCiBpZmVxICgkKFRBUkdFVF9CQVNFX0FSQ0gpLCBpMzg2KQpk aWZmIC0tZ2l0IGEvaHcvM2M5MHguYyBiL2h3LzNjOTB4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMjMyZjcxOQotLS0gL2Rldi9udWxsCisrKyBiL2h3LzNjOTB4LmMKQEAg LTAsMCArMSwyNDA1IEBACisvKioKKyAqIFFFTVUgM0M5MFggRW11bGF0aW9uCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDA5IE1hdHRoZXcgSXNlbGluIChRRU1VIFZFUlNJT04pCisgKiBDb3B5cmln aHQgKEMpIDIwMDQgSm9obiBLZWxsZXkgKHBlYXJwY0BrZWxsZXkuY2EpIChQRUFSUEMgVkVSU0lP TikKKyAqIENvcHlyaWdodCAoQykgMjAwMyBTdGVmYW4gV2V5ZXJncmFmIChQRUFSUEMgVkVSU0lP TikKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAor ICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJl IGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP UgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBU SEUgU09GVFdBUkUuCisKKyAqIE1vZGlmaWNhdGlvbnM6CisgKiAgKG5vbmUpCisgKi8KKworLyoq CisgKiBUT0RPOgorICogIC0gU3RpbGwgYSBsb3Qgb2YgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbmFs aXR5CisgKiAgLSBPbi1jaGlwIFRDUCBjaGVja3N1bSBlbXVsYXRpb24KKyAqICAtIHNhdmV2bSBm dW5jdGlvbnMKKyAqIFRFU1RFRCBPTjoKKyAqICAtIERhbW4gU21hbGwgTGludXggKDQuNC4xMCkK KyAqICAtIFVidW50dSAoOC4xMCwgNS4xMCkKKyAqICAtIFBlZGlncmVlCisgKi8KKworI2luY2x1 ZGUgImh3LmgiCisjaW5jbHVkZSAicGNpLmgiCisjaW5jbHVkZSAicWVtdS10aW1lci5oIgorI2lu Y2x1ZGUgIm5ldC5oIgorCisvLyBTaG91bGQgd2UgaW5zcGVjdCBpbmNvbWluZyBmcmFtZXMgYW5k IHByaW50IGV4dHJhIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB0aGVtPworLy8jZGVmaW5l IERFQlVHXzNDOTBYX0FOQUxZU0VfRlJBTUVTICAgICAgICAgIDAKKworI2lmZGVmIERFQlVHXzND OTBYX0FOQUxZU0VfRlJBTUVTCisjZGVmaW5lIF9fRkFWT1JfQlNECisjaW5jbHVkZSA8bmV0aW5l dC9pcC5oPgorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC91ZHAu aD4KKyNlbmRpZgorCisjZGVmaW5lIFBBQ0tFRCAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkp OworI2RlZmluZSBBTElHTkVEICAgICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKSk7CisjZGVmaW5l IFBBQ0tFRDggICAgIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKyNkZWZpbmUgUEFDS0VE MTYgICAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKTsKKyNkZWZpbmUgUEFDS0VEMzIgICAg X19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKTsKKworLyogZGVidWcgM0M5MFggY2FyZCAqLwor Ly8gI2RlZmluZSBERUJVR18zQzkwWCAxCisKKy8qIGRlZmluZSB0aGlzIHRvIG91dHB1dCBUWCBh bmQgUlggZXZlbnRzICovCisvLyAjZGVmaW5lIERFQlVHXzNDOTBYX0FVWCAxCisKKyNkZWZpbmUg UENJX0ZSRVFVRU5DWSAzMzAwMDAwMEwKKworLyogQ2FsY3VsYXRlIENSQ3MgcHJvcGVybHkgb24g VHggcGFja2V0cyAqLworI2RlZmluZSBBM0M5MFhfQ0FMQ1VMQVRFX1RYQ1JDIDEKKworI2lmIGRl ZmluZWQoQTNDOTB4X0NBTENVTEFURV9SWENSQykKKy8qIEZvciBjcmMzMiAqLworI2luY2x1ZGUg PHpsaWIuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoREVCVUdfM0M5MFgpCisjICBkZWZpbmUg REVCVUdfUFJJTlQoeCkgZG8geyBwcmludGYoeCkgOyB9IHdoaWxlICgwKQorIyAgZGVmaW5lIERF QlVHX1BSSU5UX0ZPUk1BVCh4KSBkbyB7IHByaW50ZiB4ICA7IH0gd2hpbGUgKDApCisjZWxzZQor IyAgZGVmaW5lIERFQlVHX1BSSU5UKHgpCisjICBkZWZpbmUgREVCVUdfUFJJTlRfRk9STUFUKHgp CisjZW5kaWYKKworI2lmIGRlZmluZWQgKERFQlVHXzNDOTBYX0FVWCkKKyMgIGRlZmluZSBBVVhf REVCVUdfUFJJTlQoeCkgZG8geyBwcmludGYoeCkgOyB9IHdoaWxlICgwKQorIyAgZGVmaW5lIEFV WF9ERUJVR19QUklOVF9GT1JNQVQoeCkgZG8geyBwcmludGYgeCAgOyB9IHdoaWxlICgwKQorI2Vs c2UKKyMgIGRlZmluZSBBVVhfREVCVUdfUFJJTlQoeCkgREVCVUdfUFJJTlQoeCkKKyMgIGRlZmlu ZSBBVVhfREVCVUdfUFJJTlRfRk9STUFUKHgpIERFQlVHX1BSSU5UX0ZPUk1BVCh4KQorI2VuZGlm CisKKyNkZWZpbmUgTUFYX1BBQ0tFVF9TSVpFIDE2Mzg0CisKK2VudW0gQ29tbWFuZAoreworICAg IENtZFRvdGFsUmVzZXQgPSAwPDwxMSwKKyAgICBDbWRTZWxlY3RXaW5kb3cgPSAxPDwxMSwKKyAg ICBDbWRFbmFibGVEQyA9IDI8PDExLCAgICAgICAgICAgICAgICAvLyBDbWRTdGFydENvYXgKKyAg ICBDbWRSeERpc2FibGUgPSAzPDwxMSwKKyAgICBDbWRSeEVuYWJsZSA9IDQ8PDExLAorICAgIENt ZFJ4UmVzZXQgPSA1PDwxMSwKKyAgICBDbWRTdGFsbCA9IDY8PDExLAorICAgIENtZFR4RG9uZSA9 IDc8PDExLAorICAgIENtZFJ4RGlzY2FyZCA9IDg8PDExLAorICAgIENtZFR4RW5hYmxlID0gOTw8 MTEsCisgICAgQ21kVHhEaXNhYmxlID0gMTA8PDExLAorICAgIENtZFR4UmVzZXQgPSAxMTw8MTEs CisgICAgQ21kUmVxSW50ciA9IDEyPDwxMSwgICAgICAgICAgICAgICAgLy8gQ21kRmFrZUludHIK KyAgICBDbWRBY2tJbnRyID0gMTM8PDExLAorICAgIENtZFNldEludHJFbmIgPSAxNDw8MTEsCisg ICAgQ21kU2V0SW5kaWNhdGlvbkVuYWJsZSA9IDE1PDwxMSwgICAgLy8gQ21kU2V0U3RhdHVzRW5i CisgICAgQ21kU2V0UnhGaWx0ZXIgPSAxNjw8MTEsCisgICAgQ21kU2V0UnhFYXJseVRocmVzaCA9 IDE3PDwxMSwKKyAgICBDbWRTZXRUeFRocmVzaG9sZCA9IDE4PDwxMSwgICAgICAgICAvLyBha2Eg VHhBZ2FpbiA/CisgICAgQ21kU2V0VHhTdGFydFRocmVzaCA9IDE5PDwxMSwgICAgICAgLy8gc2V0 IFR4U3RhcnRUcmVzaAorICAgIC8vICBDbWRTdGFydERNQVVwID0gMjA8PDExLAorICAgIC8vICBD bWRTdGFydERNQURvd24gPSAoMjA8PDExKSsxLAorICAgIENtZFN0YXRzRW5hYmxlID0gMjE8PDEx LAorICAgIENtZFN0YXRzRGlzYWJsZSA9IDIyPDwxMSwKKyAgICBDbWREaXNhYmxlREMgPSAyMzw8 MTEsICAgICAgICAgICAgICAvLyBDbWRTdG9wQ29heAorICAgIENtZFNldFR4UmVjbGFpbVRocmVz aCA9IDI0PDwxMSwKKyAgICBDbWRTZXRIYXNoRmlsdGVyQml0ID0gMjU8PDExCit9OworCisvKgor ICogIEludFN0YXR1c0JpdHMKKyAqLworZW51bSBJbnRTdGF0dXNCaXRzCit7CisgICAgSVNfaW50 ZXJydXB0TGF0Y2ggPSAxPDwwLAorICAgIElTX2hvc3RFcnJvciA9ICAgICAgMTw8MSwKKyAgICBJ U190eENvbXBsZXRlID0gICAgIDE8PDIsCisgICAgLyogYml0IDMgaXMgdW5zcGVjaWZpZWQgKi8K KyAgICBJU19yeENvbXBsZXRlID0gICAgIDE8PDQsCisgICAgSVNfcnhFYXJseSA9ICAgICAgICAx PDw1LAorICAgIElTX2ludFJlcXVlc3RlZCA9ICAgMTw8NiwKKyAgICBJU191cGRhdGVTdGF0cyA9 ICAgIDE8PDcsCisgICAgSVNfbGlua0V2ZW50ID0gICAgICAxPDw4LAorICAgIElTX2RuQ29tcGxl dGUgPSAgICAgMTw8OSwKKyAgICBJU191cENvbXBsZXRlID0gICAgIDE8PDEwLAorICAgIElTX2Nt ZEluUHJvZ3Jlc3MgPSAgMTw8MTEsCisgICAgLyogYml0IDEyIGlzIHVuc3BlY2lmaWVkICovCisg ICAgLyogWzE1OjEzXSBpcyBjdXJyZW50bHkgc2VsZWN0ZWQgd2luZG93ICovCit9OworCisvKgor ICogIERtYUN0cmxCaXRzIChbMV0gcC45NikKKyAqLworZW51bSBEbWFDdHJsQml0cworeworICAg IC8qIGJpdCAwIHVuc3BlY2lmaWVkICovCisgICAgRENfZG5DbXBsUmVxID0gICAgICAgICAgMTw8 MSwKKyAgICBEQ19kblN0YWxsZWQgPSAgICAgICAgICAxPDwyLAorICAgIERDX3VwQ29tcGxldGUg PSAgICAgICAgIDE8PDMsICAgLy8gRklYTUU6IHNhbWUgYXMgaW4gSW50U3RhdHVzLCBidXQgYWx3 YXlzIHZpc2libGUKKyAgICBEQ19kbkNvbXBsZXRlID0gICAgICAgICAxPDw0LCAgIC8vIHNhbWUg YXMgYWJvdmUgXl5eCisgICAgRENfdXBSeEVhcmx5RW5hYmxlID0gICAgMTw8NSwKKyAgICBEQ19h cm1Db3VudGRvd24gPSAgICAgICAxPDw2LAorICAgIERDX2RuSW5Qcm9nID0gICAgICAgICAgIDE8 PDcsCisgICAgRENfY291bnRlclNwZWVkID0gICAgICAgMTw8OCwKKyAgICBEQ19jb3VudGRvd25N b2RlID0gICAgICAxPDw5LAorICAgIC8qIGJpdHMgMTAtMTUgdW5zcGVjaWZpZWQgKi8KKyAgICBE Q191cEFsdFNlcURpc2FibGUgPSAgICAxPDwxNiwKKyAgICBEQ19kbkFsdFNlcURpc2FibGUgPSAg ICAxPDwxNywKKyAgICBEQ19kZWZlYXRNV0kgPSAgICAgICAgICAxPDwyMCwKKyAgICBEQ19kZWZl YXRNUkwgPSAgICAgICAgICAxPDwyMSwKKyAgICBEQ191cE92ZXJEaXNjRW5hYmxlID0gICAxPDwy MiwKKyAgICBEQ190YXJnZXRBYm9ydCA9ICAgICAgICAxPDwzMCwKKyAgICBEQ19tYXN0ZXJBYm9y dCA9ICAgICAgICAxPDwzMQorfTsKKworLyoKKyAqICBNSUkgUmVnaXN0ZXJzCisgKiAgVE9ETzog SW1wbGVtZW50IE1JSSBwcm9wZXJseQorICovCisvKmVudW0gTUlJQ29udHJvbEJpdHMgeworICAg IE1JSUNfY29sbGlzaW9uID0gICAgICAgIDE8PDcsCisgICAgTUlJQ19mdWxsRHVwbGV4ID0gICAg ICAgMTw8OCwKKyAgICBNSUlDX3Jlc3RhcnROZWdvdGUgPSAgICAxPDw5LAorICAgIE1JSUNfY29s bGlzaW9uID0gICAgICAgIDE8PDcsCisgICAgcmVzdCBtaXNzaW5nCit9OyovCisKK3N0cnVjdCBN SUlSZWdpc3RlcnMKK3sKKyAgICB1aW50MTZfdCBjb250cm9sOworICAgIHVpbnQxNl90IHN0YXR1 czsKKyAgICB1aW50MTZfdCBpZDA7CisgICAgdWludDE2X3QgaWQxOworICAgIHVpbnQxNl90IGFk dmVydDsKKyAgICB1aW50MTZfdCBsaW5rUGFydG5lcjsKKyAgICB1aW50MTZfdCBleHBhbnNpb247 CisgICAgdWludDE2X3QgbmV4dFBhZ2U7Cit9IFBBQ0tFRDsKK3R5cGVkZWYgc3RydWN0IE1JSVJl Z2lzdGVycyBNSUlSZWdpc3RlcnM7CisKKy8qCisgKiAgUmVnaXN0ZXJzCisgKi8KK3VuaW9uIFJl Z1dpbmRvdworeworICAgIHVpbnQ4X3QgYlsxNl07CisgICAgdWludDE2X3QgdTE2WzhdOworfSBQ QUNLRUQ7Cit0eXBlZGVmIHVuaW9uIFJlZ1dpbmRvdyBSZWdXaW5kb3c7CisKK3N0cnVjdCBSZWdp c3RlcnMKK3sKKyAgICAvLyAweDEwIHVpbnQ4X3RzIG1pc3NpbmcgKGN1cnJlbnQgd2luZG93KQor ICAgIHVpbnQzMl90ICAgIHIwOworICAgIHVpbnQzMl90ICAgIHIxOworICAgIHVpbnQ4X3QgICAg IFR4UGt0SWQ7CisgICAgdWludDhfdCAgICAgcjI7CisgICAgdWludDhfdCAgICAgVGltZXI7Cisg ICAgdWludDhfdCAgICAgVHhTdGF0dXM7CisgICAgdWludDE2X3QgICAgcjM7CisgICAgdWludDE2 X3QgICAgX19kb250VXNlTWU7Ly8gIHJlYWxseTogdWludDE2X3QgSW50U3RhdHVzQXV0bzsKKyAg ICB1aW50MzJfdCAgICBEbWFDdHJsOyAgICAvLyAgWzFdIHAuOTUgKGRuKSwgcC4xMDAgKHVwKQor ICAgIHVpbnQzMl90ICAgIERuTGlzdFB0cjsgIC8vICBbMV0gcC45OAorICAgIHVpbnQxNl90ICAg IHI0OworICAgIHVpbnQ4X3QgICAgIERuQnVyc3RUaHJlc2g7ICAvLyBbMV0gcC45NworICAgIHVp bnQ4X3QgICAgIHI1OworICAgIHVpbnQ4X3QgICAgIERuUHJpb3JpdHlUaHJlc2g7CisgICAgdWlu dDhfdCAgICAgRG5Qb2xsOyAgICAgLy8gWzFdIHAuMTAwCisgICAgdWludDE2X3QgICAgcjY7Cisg ICAgdWludDMyX3QgICAgVXBQa3RTdGF0dXM7CisgICAgdWludDE2X3QgICAgRnJlZVRpbWVyOwor ICAgIHVpbnQxNl90ICAgIENvdW50ZG93bjsKKyAgICB1aW50MzJfdCAgICBVcExpc3RQdHI7ICAv LyBbMV0gcC4xMTUKKyAgICB1aW50OF90ICAgICBVcFByaW9yaXR5VGhyZXNoOworICAgIHVpbnQ4 X3QgICAgIFVwUG9sbDsKKyAgICB1aW50OF90ICAgICBVcEJ1cnN0VGhyZXNoOworICAgIHVpbnQ4 X3QgICAgIHI3OworICAgIHVpbnQzMl90ICAgIFJlYWxUaW1lQ291bnQ7CisgICAgdWludDhfdCAg ICAgQ29uZmlnQWRkcmVzczsKKyAgICB1aW50OF90ICAgICByODsKKyAgICB1aW50OF90ICAgICBy OTsKKyAgICB1aW50OF90ICAgICByMTA7CisgICAgdWludDhfdCAgICAgQ29uZmlnRGF0YTsKKyAg ICB1aW50OF90ICAgICByMTE7CisgICAgdWludDhfdCAgICAgcjEyOworICAgIHVpbnQ4X3QgICAg IHIxMzsKKyAgICB1aW50MzJfdCAgICByMTRbOV07CisgICAgdWludDMyX3QgICAgRGVidWdEYXRh OworICAgIHVpbnQxNl90ICAgIERlYnVnQ29udHJvbDsKKyAgICB1aW50MTZfdCAgICByMTU7Cisg ICAgdWludDE2X3QgICAgRG5NYXhCdXJzdDsKKyAgICB1aW50MTZfdCAgICBVcE1heEJ1cnN0Owor ICAgIHVpbnQxNl90ICAgIFBvd2VyTWdtdEN0cmw7CisgICAgdWludDE2X3QgICAgcjE2OworfSBQ QUNLRUQ7Cit0eXBlZGVmIHN0cnVjdCBSZWdpc3RlcnMgUmVnaXN0ZXJzOworCisjZGVmaW5lIFJB X0lOViAwCisKK3N0YXRpYyB1aW50OF90IGdSZWdBY2Nlc3NbMHg3MF0gPQoreworICAgIC8qIDB4 MTAgKi8KKyAgICBSQV9JTlYsIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsCisgICAgLyogMHgxNCAq LworICAgIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwKKyAgICAvKiAweDE4ICovCisg ICAgMSwgICAgICAgICAgICAgIC8qIFR4UGt0SWQgKi8KKyAgICBSQV9JTlYsCisgICAgMSwgICAg ICAgICAgICAgIC8qIFRpbWVyICovCisgICAgMSwgICAgICAgICAgICAgIC8qIFR4U3RhdHVzICov CisgICAgLyogMHgxYyAqLworICAgIFJBX0lOViwgUkFfSU5WLAorICAgIFJBX0lOViwgUkFfSU5W LCAgICAgICAgICAgICAvKiBJbnRTdGF0dXNBdXRvICovCisgICAgLyogMHgyMCAqLworICAgIDQs IFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsICAvKiBEbWFDdHJsICovCisgICAgLyogMHgyNCAqLwor ICAgIDQsIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsICAvKiBEbkxpc3RQdHIgKi8KKyAgICAvKiAw eDI4ICovCisgICAgUkFfSU5WLCBSQV9JTlYsCisgICAgMSwgICAgICAgICAgICAgIC8qIERuQnVy c3RUaHJlc2ggKi8KKyAgICBSQV9JTlYsCisgICAgLyogMHgyYyAqLworICAgIDEsICAgICAgICAg ICAgICAvKiBEblByaW9yaXR5VGhyZXNoICovCisgICAgMSwgICAgICAgICAgICAgIC8qIERuUG9s bCAqLworICAgIFJBX0lOViwKKyAgICAxLAorICAgIC8qIDB4MzAgKi8KKyAgICA0LCBSQV9JTlYs IFJBX0lOViwgUkFfSU5WLCAgLyogVXBQa3RTdGF0dXMgKi8KKyAgICAvKiAweDM0ICovCisgICAg MiwgUkFfSU5WLCAgICAgICAgICAvKiBGcmVlVGltZXIgKi8KKyAgICAyLCBSQV9JTlYsICAgICAg ICAgIC8qIENvdW50ZG93biAqLworICAgIC8qIDB4MzggKi8KKyAgICA0LCBSQV9JTlYsIFJBX0lO ViwgUkFfSU5WLCAgLyogVXBMaXN0UHRyICovCisgICAgLyogMHgzYyAqLworICAgIDEsICAgICAg ICAgICAgICAvKiBVcFByaW9yaXR5VGhyZXNoICovCisgICAgMSwgICAgICAgICAgICAgIC8qIFVw UG9sbCAqLworICAgIDEsICAgICAgICAgICAgICAvKiBVcEJ1cnN0VGhyZXNoICovCisgICAgUkFf SU5WLAorICAgIC8qIDB4NDAgKi8KKyAgICA0LCBSQV9JTlYsIFJBX0lOViwgUkFfSU5WLCAgLyog UmVhbFRpbWVDb3VudCAqLworICAgIC8qIDB4NDQgKi8KKyAgICAxLCAgICAgICAgICAgICAgLyog Q29uZmlnQWRkcmVzcyAqLworICAgIFJBX0lOViwKKyAgICBSQV9JTlYsCisgICAgUkFfSU5WLAor ICAgIC8qIDB4NDggKi8KKyAgICAxLCAgICAgICAgICAgICAgLyogQ29uZmlnRGF0YSAqLworICAg IFJBX0lOViwKKyAgICBSQV9JTlYsCisgICAgUkFfSU5WLAorICAgIC8qIDB4NGMgKi8KKyAgICBS QV9JTlYsIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsCisgICAgLyogMHg1MCAqLworICAgIFJBX0lO ViwgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwKKyAgICBSQV9JTlYsIFJBX0lOViwgUkFfSU5WLCBS QV9JTlYsCisgICAgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwgUkFfSU5WLAorICAgIFJBX0lOViwg UkFfSU5WLCBSQV9JTlYsIFJBX0lOViwKKyAgICBSQV9JTlYsIFJBX0lOViwgUkFfSU5WLCBSQV9J TlYsCisgICAgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwgUkFfSU5WLAorICAgIFJBX0lOViwgUkFf SU5WLCBSQV9JTlYsIFJBX0lOViwKKyAgICBSQV9JTlYsIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYs CisgICAgLyogMHg3MCAqLworICAgIDQsIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsICAvKiBEZWJ1 Z0RhdGEgKi8KKyAgICAvKiAweDc0ICovCisgICAgMiwgUkFfSU5WLCAgICAgICAgICAvKiBEZWJ1 Z0NvbnRyb2wgKi8KKyAgICBSQV9JTlYsIFJBX0lOViwKKyAgICAvKiAweDc4ICovCisgICAgMiwg UkFfSU5WLCAgICAgICAgICAvKiBEbk1heEJ1cnN0ICovCisgICAgMiwgUkFfSU5WLCAgICAgICAg ICAvKiBVcE1heEJ1cnN0ICovCisgICAgLyogMHg3YyAqLworICAgIDIsIFJBX0lOViwgICAgICAg ICAgLyogUG93ZXJNZ210Q3RybCAqLworICAgIFJBX0lOViwgUkFfSU5WCit9OworCisvKgorICog IFdpbmRvdyAwCisgKi8KK3N0cnVjdCBSZWdXaW5kb3cwCit7CisgICAgdWludDMyX3QgICAgcjA7 CisgICAgdWludDMyX3QgICAgQmlvc1JvbUFkZHI7CisgICAgdWludDhfdCAgICAgQmlvc1JvbURh dGE7CisgICAgdWludDhfdCAgICAgcjE7CisgICAgdWludDE2X3QgICAgRWVwcm9tQ29tbWFuZDsK KyAgICB1aW50MTZfdCAgICBFZXByb21EYXRhOworICAgIHVpbnQxNl90ICAgIFhYWDsgICAgICAg IC8vIEludFN0YXR1cy9Db21tYW5kUmVnaXN0ZXIKK30gUEFDS0VEOwordHlwZWRlZiBzdHJ1Y3Qg UmVnV2luZG93MCBSZWdXaW5kb3cwOworCitlbnVtIFcwX09mZnNldHMKK3sKKyAgICBXMF9FRVBS T01DbWQgPSAweGEsCisgICAgVzBfRUVQUk9NRGF0YSA9IDB4YworfTsKKworZW51bSBXMF9FRVBS T01PcGNvZGUKK3sKKyAgICBFRU9QX1N1YkNtZCA9IDA8PDYsCisgICAgRUVPUF9Xcml0ZVJlZyA9 IDE8PDYsCisgICAgRUVPUF9SZWFkUmVnID0gMjw8NiwKKyAgICBFRU9QX0VyYXNlUmVnID0gMzw8 NgorfTsKKworZW51bSBXMF9FRVBST01TdWJDbWQKK3sKKyAgICBFRVNDX1dyaXRlRGlzYWJsZSA9 IDA8PDQsCisgICAgRUVTQ19Xcml0ZUFsbCA9IDE8PDQsCisgICAgRUVTQ19FcmFzZUFsbCA9IDI8 PDQsCisgICAgRUVTQ19Xcml0ZUVuYWJsZSA9IDM8PDQKK307CisKKy8qCisgKiAgV2luZG93IDIK KyAqLworc3RydWN0IFJlZ1dpbmRvdzIKK3sKKyAgICB1aW50MTZfdCAgICBTdGF0aW9uQWRkcmVz c1s2XTsKKyAgICB1aW50MTZfdCAgICBTdGF0aW9uTWFza1s2XTsKKyAgICB1aW50MTZfdCAgICBS ZXNldE9wdGlvbnM7CisgICAgdWludDE2X3QgICAgWFhYOyAgICAgICAgLy8gSW50U3RhdHVzL0Nv bW1hbmRSZWdpc3RlcgorfSBQQUNLRUQ7Cit0eXBlZGVmIHN0cnVjdCBSZWdXaW5kb3cyIFJlZ1dp bmRvdzI7CisKKy8qCisgKiAgV2luZG93IDMKKyAqLworc3RydWN0IFJlZ1dpbmRvdzMKK3sKKyAg ICB1aW50MzJfdCAgICBJbnRlcm5hbENvbmZpZzsgLy8gWzFdIHAuNTgsNzYKKyAgICB1aW50MTZf dCAgICBNYXhQa3RTaXplOworICAgIHVpbnQxNl90ICAgIE1hY0NvbnRyb2w7ICAgICAvLyBbMV0g cC4xNzkKKyAgICB1aW50MTZfdCAgICBNZWRpYU9wdGlvbnM7ICAgLy8gWzFdIHAuNzggKEVFKSwg cC4xODEKKyAgICB1aW50MTZfdCAgICBSeEZyZWU7CisgICAgdWludDE2X3QgICAgVHhGcmVlOyAg ICAgICAgIC8vIFsxXSBwLjEwMQorICAgIHVpbnQxNl90ICAgIFhYWDsgICAgICAgICAgICAvLyBJ bnRTdGF0dXMvQ29tbWFuZFJlZ2lzdGVyCit9IFBBQ0tFRDsKK3R5cGVkZWYgc3RydWN0IFJlZ1dp bmRvdzMgUmVnV2luZG93MzsKKworLyoKKyAqICBXaW5kb3cgNAorICovCitlbnVtIFc0X1BoeXNN Z210Qml0cworeworICAgIFBNX21nbXRDbGsgID0gMTw8MCwKKyAgICBQTV9tZ210RGF0YSA9IDE8 PDEsCisgICAgUE1fbWdtdERpciAgPSAxPDwyCit9OworCitzdHJ1Y3QgUmVnV2luZG93NAorewor ICAgIHVpbnQxNl90ICAgIHIwOyAgICAgICAgICAgICAvKiBvZmZzZXQgMHgwICovCisgICAgdWlu dDE2X3QgICAgcjE7ICAgICAgICAgICAgIC8qIG9mZnNldCAweDIgKi8KKyAgICB1aW50MTZfdCAg ICBGaWZvRGlhZ25vc3RpYzsgLyogb2Zmc2V0IDB4NCAqLworICAgIHVpbnQxNl90ICAgIE5ldERp YWdub3N0aWM7ICAvLyBbMV0gcC4xODQgLyogb2Zmc2V0IDB4NiAqLworICAgIHVpbnQxNl90ICAg IFBoeXNNZ210OyAgICAgICAvLyBbMV0gcC4xODYgLyogb2Zmc2V0IDB4OCAqLworICAgIHVpbnQx Nl90ICAgIE1lZGlhU3RhdHVzOyAgICAvLyBbMV0gcC4xODIgLyogb2Zmc2V0IDB4YSAqLworICAg IHVpbnQ4X3QgICAgIEJhZFNTRDsKKyAgICB1aW50OF90ICAgICBVcHBlcnVpbnQ4c09LOworICAg IHVpbnQxNl90ICAgIFhYWDsgICAgICAgICAgICAvLyBJbnRTdGF0dXMvQ29tbWFuZFJlZ2lzdGVy Cit9IFBBQ0tFRDsKK3R5cGVkZWYgc3RydWN0IFJlZ1dpbmRvdzQgUmVnV2luZG93NDsKKworLyoK KyAqICBXaW5kb3cgNQorICovCitlbnVtIFJ4RmlsdGVyQml0cyAgIC8vIFsxXSBwLjExMgorewor ICAgIFJYRklMVF9yZWNlaXZlSW5kaXZpZHVhbCA9IDEsCisgICAgUlhGSUxUX3JlY2VpdmVNdWx0 aWNhc3QgPSAyLAorICAgIFJYRklMVF9yZWNlaXZlQnJvYWRjYXN0ID0gNCwKKyAgICBSWEZJTFRf cmVjZWl2ZUFsbEZyYW1lcyA9IDgsCisgICAgUlhGSUxUX3JlY2VpdmVNdWx0aWNhc3RIYXNoID0g MTYKK307CisKK3N0cnVjdCBSZWdXaW5kb3c1Cit7CisgICAgdWludDE2X3QgICAgVHhTdGFydFRo cmVzaDsKKyAgICB1aW50MTZfdCAgICByMDsKKyAgICB1aW50MTZfdCAgICByMTsKKyAgICB1aW50 MTZfdCAgICBSeEVhcmx5VGhyZXNoOworICAgIHVpbnQ4X3QgICAgIFJ4RmlsdGVyOyAgICAgICAg ICAgLy8gWzFdIHAuMTEyCisgICAgdWludDhfdCAgICAgVHhSZWNsYWltVGhyZXNoOworICAgIHVp bnQxNl90ICAgIEludGVycnVwdEVuYWJsZTsgICAgLy8gWzFdIHAuMTIwCisgICAgdWludDE2X3Qg ICAgSW5kaWNhdGlvbkVuYWJsZTsgICAvLyBbMV0gcC4xMjAKKyAgICB1aW50MTZfdCAgICBYWFg7 ICAgICAgICAgICAgICAgIC8vIEludFN0YXR1cy9Db21tYW5kUmVnaXN0ZXIKK30gUEFDS0VEOwor dHlwZWRlZiBzdHJ1Y3QgUmVnV2luZG93NSBSZWdXaW5kb3c1OworCisvKgorICogIFdpbmRvdyA2 CisgKi8KK3N0cnVjdCBSZWdXaW5kb3c2Cit7CisgICAgdWludDhfdCAgICAgQ2Fycmllckxvc3Q7 CisgICAgdWludDhfdCAgICAgU3FlRXJyb3JzOworICAgIHVpbnQ4X3QgICAgIE11bHRpcGxlQ29s bGlzaW9uczsKKyAgICB1aW50OF90ICAgICBTaW5nbGVDb2xsaXNpb25zOworICAgIHVpbnQ4X3Qg ICAgIExhdGVDb2xsaXNpb25zOworICAgIHVpbnQ4X3QgICAgIFJ4T3ZlcnJ1bnM7CisgICAgdWlu dDhfdCAgICAgRnJhbWVzWG1pdHRlZE9rOworICAgIHVpbnQ4X3QgICAgIEZyYW1lc1JjdmRPazsK KyAgICB1aW50OF90ICAgICBGcmFtZXNEZWZlcnJlZDsKKyAgICB1aW50OF90ICAgICBVcHBlckZy YW1lc09rOworICAgIHVpbnQxNl90ICAgIEJ5dGVzUmN2ZE9rOworICAgIHVpbnQxNl90ICAgIEJ5 dGVzWG1pdHRlZE9rOworICAgIHVpbnQxNl90ICAgIFhYWDsgICAgICAgICAgICAgICAgLy8gSW50 U3RhdHVzL0NvbW1hbmRSZWdpc3RlcgorfSBQQUNLRUQ7Cit0eXBlZGVmIHN0cnVjdCBSZWdXaW5k b3c2IFJlZ1dpbmRvdzY7CisKKy8qCisgKiAgRUVQUk9NCisgKi8KK2VudW0gRUVQUk9NRmllbGQK K3sKKyAgICBFRVBST01fTm9kZUFkZHJlc3MwID0gICAgICAgMHgwMCwKKyAgICBFRVBST01fTm9k ZUFkZHJlc3MxID0gICAgICAgMHgwMSwKKyAgICBFRVBST01fTm9kZUFkZHJlc3MyID0gICAgICAg MHgwMiwKKyAgICBFRVBST01fRGV2aWNlSUQgPSAgICAgICAgICAgMHgwMywKKyAgICBFRVBST01f TWFuaWZhY3R1cmVySUQgPSAgICAgMHgwNywKKyAgICBFRVBST01fUENJUGFyYW0gPSAgICAgICAg ICAgMHgwOCwKKyAgICBFRVBST01fUm9tSW5mbyA9ICAgICAgICAgICAgMHgwOSwKKyAgICBFRVBS T01fT0VNTm9kZUFkZHJlc3MwID0gICAgMHgwYSwKKyAgICBFRVBST01fT0VNTm9kZUFkZHJlc3Mx ID0gICAgMHgwYiwKKyAgICBFRVBST01fT0VNTm9kZUFkZHJlc3MyID0gICAgMHgwYywKKyAgICBF RVBST01fU29mdHdhcmVJbmZvID0gICAgICAgMHgwZCwKKyAgICBFRVBST01fQ29tcFdvcmQgPSAg ICAgICAgICAgMHgwZSwKKyAgICBFRVBST01fU29mdHdhcmVJbmZvMiA9ICAgICAgMHgwZiwKKyAg ICBFRVBST01fQ2FwcyA9ICAgICAgICAgICAgICAgMHgxMCwKKyAgICBFRVBST01fSW50ZXJuYWxD b25maWcwID0gICAgMHgxMiwKKyAgICBFRVBST01fSW50ZXJuYWxDb25maWcxID0gICAgMHgxMywK KyAgICBFRVBST01fU3Vic3lzdGVtVmVuZG9ySUQgPSAgMHgxNywKKyAgICBFRVBST01fU3Vic3lz dGVtSUQgPSAgICAgICAgMHgxOCwKKyAgICBFRVBST01fTWVkaWFPcHRpb25zID0gICAgICAgMHgx OSwKKyAgICBFRVBST01fU21iQWRkcmVzcyA9ICAgICAgICAgMHgxYiwKKyAgICBFRVBST01fUENJ UGFyYW0yID0gICAgICAgICAgMHgxYywKKyAgICBFRVBST01fUENJUGFyYW0zID0gICAgICAgICAg MHgxZCwKKyAgICBFRVBST01fQ2hlY2tzdW0gPSAgICAgICAgICAgMHgyMAorfTsKKworLyoKKyAq ICBVcC9Eb3dubG9hZGluZworICovCisKKy8vIG11c3QgYmUgb24gOC11aW50OF90IHBoeXNpY2Fs IGFkZHJlc3MgYm91bmRhcnkKK3N0cnVjdCBEUEQwCit7CisgICAgdWludDMyX3QgICAgRG5OZXh0 UHRyOworICAgIHVpbnQzMl90ICAgIEZyYW1lU3RhcnRIZWFkZXI7CisgICAgLyogIERQREZyYWdE ZXNjIEZyYWdzW25dICovCit9IFBBQ0tFRDg7Cit0eXBlZGVmIHN0cnVjdCBEUEQwIERQRDA7CisK K2VudW0gRnJhbWVTdGFydEhlYWRlckJpdHMKK3sKKyAgICBGU0hfcm5kdXBCbmRyeSA9ICAgICAg ICAzPDwwLAorICAgIEZTSF9wa3RJZCA9ICAgICAgICAgICAgIDE1PDwyLAorICAgIC8qIDEyOjEw IHVuc3BlY2lmaWVkICovCisgICAgRlNIX2NyY0FwcGVuZERpc2FibGUgPSAgMTw8MTMsCisgICAg RlNIX3R4SW5kaWNhdGUgPSAgICAgICAgMTw8MTUsCisgICAgRlNIX2RuQ29tcGxldGUgPSAgICAg ICAgMTw8MTYsCisgICAgRlNIX3JlQXJtRGlzYWJsZSA9ICAgICAgMTw8MjMsCisgICAgRlNIX2xh c3RLYXAgPSAgICAgICAgICAgMTw8MjQsCisgICAgRlNIX2FkZElwQ2hlY2tzdW0gPSAgICAgMTw8 MjUsIC8qKiBUT0RPOiB3cml0ZSBzdXBwb3J0IGZvciB0aGVzZSAqLworICAgIEZTSF9hZGRUY3BD aGVja3N1bSA9ICAgIDE8PDI2LAorICAgIEZTSF9hZGRVZHBDaGVja3N1bSA9ICAgIDE8PDI3LAor ICAgIEZTSF9ybmR1cERlZmVhdCA9ICAgICAgIDE8PDI4LAorICAgIEZTSF9kcGRFbXB0eSA9ICAg ICAgICAgIDE8PDI5LAorICAgIC8qIDMwIHVuc3BlY2lmaWVkICovCisgICAgRlNIX2RuSW5kaWNh dGUgPSAgICAgICAgMTw8MzEKK307CisKKy8vIG11c3QgYmUgb24gMTYtdWludDhfdCBwaHlzaWNh bCBhZGRyZXNzIGJvdW5kYXJ5CitzdHJ1Y3QgRFBEMQoreworICAgIHVpbnQzMl90ICAgIERuTmV4 dFB0cjsKKyAgICB1aW50MzJfdCAgICBTY2hlZHVsZVRpbWU7CisgICAgdWludDMyX3QgICAgRnJh bWVTdGFydEhlYWRlcjsKKyAgICB1aW50MzJfdCAgICByZXM7CisgICAgLyogIERQREZyYWdEZXNj IEZyYWdzW25dICovCit9IFBBQ0tFRDE2OwordHlwZWRlZiBzdHJ1Y3QgRFBEMSBEUEQxOworCitz dHJ1Y3QgRFBERnJhZ0Rlc2MKK3sKKyAgICB1aW50MzJfdCAgICBEbkZyYWdBZGRyOworICAgIHVp bnQzMl90ICAgIERuRnJhZ0xlbjsgIC8vIFsxMjowXSBmcmFnTGVuLCBbMzFdIGxhc3RGcmFnCit9 IFBBQ0tFRDsKK3R5cGVkZWYgc3RydWN0IERQREZyYWdEZXNjIERQREZyYWdEZXNjOworCisvLyBt dXN0IGJlIG9uIDgtdWludDhfdCBwaHlzaWNhbCBhZGRyZXNzIGJvdW5kYXJ5CitzdHJ1Y3QgVVBE Cit7CisgICAgdWludDMyX3QgICAgVXBOZXh0UHRyOworICAgIHVpbnQzMl90ICAgIFVwUGt0U3Rh dHVzOworICAgIC8qICBVUERGcmFnRGVzYyBGcmFnc1tuXSAqLworfSBQQUNLRUQ4OwordHlwZWRl ZiBzdHJ1Y3QgVVBEIFVQRDsKKworc3RydWN0IFVQREZyYWdEZXNjCit7CisgICAgdWludDMyX3Qg ICAgVXBGcmFnQWRkcjsKKyAgICB1aW50MzJfdCAgICBVcEZyYWdMZW47ICAvLyBbMTI6MF0gZnJh Z0xlbiwgWzMxXSBsYXN0RnJhZworfSBQQUNLRUQ7Cit0eXBlZGVmIHN0cnVjdCBVUERGcmFnRGVz YyBVUERGcmFnRGVzYzsKKworI2RlZmluZSBNQVhfRFBEX0ZSQUdTICAgNjMKKyNkZWZpbmUgTUFY X1VQRF9GUkFHUyAgIDYzCisjZGVmaW5lIE1BWF9VUERfU0laRSAgICAoc2l6ZW9mKFVQRCkgKyBz aXplb2YoVVBERnJhZ0Rlc2MpKk1BWF9VUERfRlJBR1MpIC8vIDUxMgorCitlbnVtIFVwUGt0U3Rh dHVzQml0cworeworICAgIFVQU191cFBrdExlbiA9IDB4MWZmZiwKKyAgICAvKiAxMyB1bnNwZWNp ZmllZCAqLworICAgIFVQU191cEVycm9yID0gMTw8MTQsCisgICAgVVBTX3VwQ29tcGxldGUgPSAx PDwxNSwKKyAgICBVUFNfdXBPdmVycnVuID0gMTw8MTYsCisgICAgVVBTX3J1bnRGcmFtZSA9IDE8 PDE3LAorICAgIFVQU19hbGlnbm1lbnRFcnJvciA9IDE8PDE4LAorICAgIFVQU19jcmNFcnJvciA9 IDE8PDE5LAorICAgIFVQU19vdmVyc2l6ZWRGcmFtZSA9IDE8PDIwLAorICAgIC8qIDIyOjIxIHVu c3BlY2lmaWVkICovCisgICAgVVBTX2RyaWJibGVCaXRzID0gMTw8MjMsCisgICAgVVBTX3VwT3Zl cmZsb3cgPSAxPDwyNCwKKyAgICBVUFNfaXBDaGVja3N1bUVycm9yID0gMTw8MjUsCisgICAgVVBT X3RjcENoZWNrc3VtRXJyb3IgPSAxPDwyNiwKKyAgICBVUFNfdWRwQ2hlY2tzdW1FcnJvciA9IDE8 PDI3LAorICAgIFVQRF9pbXBsaWVkQnVmZmVyRW5hYmxlID0gMTw8MjgsCisgICAgVVBTX2lwQ2hl Y2tzdW1DaGVja2VkID0gMTw8MjksCisgICAgVVBTX3RjcENoZWNrc3VtQ2hlY2tlZCA9IDE8PDMw LAorICAgIFVQU191ZHBDaGVja3N1bUNoZWNrZWQgPSAxPDwzMQorfTsKKworLy8gSUVFRSA4MDIu MyBNQUMsIEV0aGVybmV0LUlJCitzdHJ1Y3QgRXRoRnJhbWVJSQoreworICAgIHVpbnQ4X3QgZGVz dE1BQ1s2XTsKKyAgICB1aW50OF90IHNyY01BQ1s2XTsKKyAgICB1aW50OF90IHR5cGVbMl07Cit9 IFBBQ0tFRDsKK3R5cGVkZWYgc3RydWN0IEV0aEZyYW1lSUkgRXRoRnJhbWVJSTsKKworc3RydWN0 IEEzQzkwWFN0YXRlCit7CisKKyAgICB1aW50MTZfdCAgICBtRUVQUk9NWzB4NDBdOworICAgIGNo YXIgICAgICAgIG1FRVBST01Xcml0YWJsZTsKKyAgICBSZWdpc3RlcnMgICBtUmVnaXN0ZXJzOwor ICAgIFJlZ1dpbmRvdyAgIG1XaW5kb3dzWzhdOworICAgIHVpbnQxNl90ICAgIG1JbnRTdGF0dXM7 CisgICAgY2hhciAgICAgICAgbVJ4RW5hYmxlZDsKKyAgICBjaGFyICAgICAgICBtVHhFbmFibGVk OworICAgIGNoYXIgICAgICAgIG1VcFN0YWxsZWQ7CisgICAgY2hhciAgICAgICAgbURuU3RhbGxl ZDsKKyAgICB1aW50OF90ICAgICBtUnhQYWNrZXRbTUFYX1BBQ0tFVF9TSVpFXTsKKyAgICB1aW50 MzJfdCAgICBtUnhQYWNrZXRTaXplOworICAgIHVpbnQxNl90ICAgIG1NSUlSZWdzWzhdOworICAg IHVpbnQzMl90ICAgIG1NSUlSZWFkV29yZDsKKyAgICB1aW50NjRfdCAgICBtTUlJV3JpdGVXb3Jk OworICAgIHVpbnQzMl90ICAgIG1NSUlXcml0dGVuQml0czsKKyAgICB1aW50MTZfdCAgICBtTGFz dEhpQ2xrUGh5c01nbXQ7CisgICAgdWludDhfdCAgICAgbU1BQ1s2XTsKKworCisgICAgUENJRGV2 aWNlICAgKnBjaV9kZXY7CisgICAgaW50ICAgICAgICAgYTNjOTB4X21taW9faW9fYWRkcjsKKwor ICAgIFZMQU5DbGllbnRTdGF0ZSAqdmM7CisKK307Cit0eXBlZGVmIHN0cnVjdCBBM0M5MFhTdGF0 ZSBBM0M5MFhTdGF0ZTsKKworc3RhdGljIHZvaWQgYTNjOTB4X3Jlc2V0KEEzQzkwWFN0YXRlICpz KTsKKworc3RhdGljIHZvaWQgc2V0Q1IodWludDE2X3QgY3IsIHZvaWQgKm9wYXF1ZSk7CisKK3N0 YXRpYyB1aW50MzJfdCByZWFkUmVnV2luZG93KEEzQzkwWFN0YXRlICpzLCB1aW50MzJfdCB3aW5k b3csIHVpbnQzMl90IHBvcnQsIHVpbnQzMl90IGRhdGEsIHVpbnQzMl90IHNpemUpOworc3RhdGlj IHZvaWQgd3JpdGVSZWdXaW5kb3coQTNDOTBYU3RhdGUgKnMsIHVpbnQzMl90IHdpbmRvdywgdWlu dDMyX3QgcG9ydCwgdWludDMyX3QgZGF0YSwgdWludDMyX3Qgc2l6ZSk7CisKK3N0YXRpYyB2b2lk IGNoZWNrRG5Xb3JrKHZvaWQgKm9wYXF1ZSk7CitzdGF0aWMgdm9pZCBjaGVja1VwV29yayh2b2lk ICpvcGFxdWUpOworCitzdGF0aWMgdm9pZCB0eERQRDAodm9pZCAqb3BhcXVlLCBEUEQwICpkcGQp Oworc3RhdGljIHZvaWQgcnhVUEQodm9pZCAqb3BhcXVlLCBVUEQgKnVwZCk7CisKK3N0YXRpYyB2 b2lkIGluZGljYXRlKHVpbnQzMl90IGluZGljYXRpb25zLCB2b2lkICpvcGFxdWUpOworc3RhdGlj IHZvaWQgYWNrbm93bGVkZ2UodWludDMyX3QgaW5kaWNhdGlvbnMsIHZvaWQgKm9wYXF1ZSk7Citz dGF0aWMgdm9pZCBtYXliZVJhaXNlSW50cih2b2lkICpvcGFxdWUpOworCitzdGF0aWMgY2hhciBw YXNzZXNSeEZpbHRlcih1aW50OF90ICpwYnVmLCB1aW50MzJfdCBwc2l6ZSwgdm9pZCAqb3BhcXVl KTsKKworc3RhdGljIHZvaWQgaGFuZGxlX3J4KHZvaWQgKm9wYXF1ZSwgY29uc3QgdWludDhfdCAq YnVmLCBpbnQgc2l6ZSk7CisKK3N0YXRpYyB2b2lkIGEzYzkweF9jbGVhbnVwKFZMQU5DbGllbnRT dGF0ZSAqdmMpOworCitzdGF0aWMgaW50IGNvbXBhcmVNQUNzKHVpbnQ4X3QgYVs2XSwgdWludDhf dCBiWzZdKTsKKworLyoKKyAqICBtaXNjCisgKi8KK3N0YXRpYyBpbnQgY29tcGFyZU1BQ3ModWlu dDhfdCBhWzZdLCB1aW50OF90IGJbNl0pCit7CisgICAgdWludDMyX3QgaTsKKyAgICBmb3IgKGkg PSAwOyBpIDwgNjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkgcmV0dXJu IGFbaV0gLSBiW2ldOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYTNj OTB4X3Jlc2V0KEEzQzkwWFN0YXRlICpzKQoreworICAgIC8qIEZJWE1FOiByZXNldHRpbmcgY2Fu IGJlIGRvbmUgbW9yZSBmaW5lLWdyYWluZWQgKHNlZSBUb3RhbFJlc2V0IGNtZCkuCisgICAgICog ICAgICAgIHRoaXMgaXMgcmVzZXQgQUxMIHJlZ3MuCisgICAgICovCisgICAgaWYgKHNpemVvZihS ZWdpc3RlcnMpICE9IDB4NzApCisgICAgeworICAgICAgICBERUJVR19QUklOVCgic2l6ZW9mIFJl Z2lzdGVycyAhPSAweDcwXG4iKTsKKyAgICB9CisKKyAgICBSZWdXaW5kb3czICp3MyA9IChSZWdX aW5kb3czKikgJihzLT5tV2luZG93c1szXSk7CisgICAgUmVnV2luZG93NCAqdzQgPSAoUmVnV2lu ZG93NCopICYocy0+bVdpbmRvd3NbNF0pOworICAgIFJlZ1dpbmRvdzUgKnc1ID0gKFJlZ1dpbmRv dzUqKSAmKHMtPm1XaW5kb3dzWzVdKTsKKworICAgIC8vIGludGVybmFscworICAgIHMtPm1FRVBS T01Xcml0YWJsZSA9IDA7CisgICAgbWVtc2V0KCYocy0+bVdpbmRvd3MpLCAwLCBzaXplb2Ygcy0+ bVdpbmRvd3MpOworICAgIG1lbXNldCgmKHMtPm1SZWdpc3RlcnMpLCAwLCBzaXplb2Ygcy0+bVJl Z2lzdGVycyk7CisgICAgcy0+bUludFN0YXR1cyA9IDA7CisgICAgcy0+bVJ4RW5hYmxlZCA9IDA7 CisgICAgcy0+bVR4RW5hYmxlZCA9IDA7CisgICAgcy0+bVVwU3RhbGxlZCA9IDA7CisgICAgcy0+ bURuU3RhbGxlZCA9IDA7CisgICAgdzMtPk1heFBrdFNpemUgPSAxNTE0IC8qIEZJWE1FOiBzaG91 bGQgZGVwZW5kIG9uIHNpemVvZiBtUnhQYWNrZXQqLzsKKyAgICB3My0+UnhGcmVlID0gMTYqMTAy NDsKKyAgICB3My0+VHhGcmVlID0gMTYqMTAyNDsKKyAgICBzLT5tUnhQYWNrZXRTaXplID0gMDsK KyAgICB3NS0+VHhTdGFydFRocmVzaCA9IDgxODg7CisgICAgbWVtc2V0KHMtPm1FRVBST00sIDAs IHNpemVvZiBzLT5tRUVQUk9NKTsKKyAgICBzLT5tRUVQUk9NW0VFUFJPTV9Ob2RlQWRkcmVzczBd ID0gICAgICAgKHMtPm1NQUNbMF08PDgpIHwgcy0+bU1BQ1sxXTsKKyAgICBzLT5tRUVQUk9NW0VF UFJPTV9Ob2RlQWRkcmVzczFdID0gICAgICAgKHMtPm1NQUNbMl08PDgpIHwgcy0+bU1BQ1szXTsK KyAgICBzLT5tRUVQUk9NW0VFUFJPTV9Ob2RlQWRkcmVzczJdID0gICAgICAgKHMtPm1NQUNbNF08 PDgpIHwgcy0+bU1BQ1s1XTsKKyAgICBzLT5tRUVQUk9NW0VFUFJPTV9EZXZpY2VJRF0gPSAgICAg ICAgICAgMHg5MjAwOworICAgIHMtPm1FRVBST01bRUVQUk9NX01hbmlmYWN0dXJlcklEXSA9ICAg ICAweDZkNTA7CisgICAgcy0+bUVFUFJPTVtFRVBST01fUENJUGFyYW1dID0gICAgICAgICAgIDB4 Mjk0MDsKKyAgICBzLT5tRUVQUk9NW0VFUFJPTV9Sb21JbmZvXSA9ICAgICAgICAgICAgMDsgIC8v IG5vIFJPTQorICAgIHMtPm1FRVBST01bRUVQUk9NX09FTU5vZGVBZGRyZXNzMF0gPSAgICBzLT5t RUVQUk9NW0VFUFJPTV9Ob2RlQWRkcmVzczBdOworICAgIHMtPm1FRVBST01bRUVQUk9NX09FTU5v ZGVBZGRyZXNzMV0gPSAgICBzLT5tRUVQUk9NW0VFUFJPTV9Ob2RlQWRkcmVzczFdOworICAgIHMt Pm1FRVBST01bRUVQUk9NX09FTU5vZGVBZGRyZXNzMl0gPSAgICBzLT5tRUVQUk9NW0VFUFJPTV9O b2RlQWRkcmVzczJdOworICAgIHMtPm1FRVBST01bRUVQUk9NX1NvZnR3YXJlSW5mb10gPSAgICAg ICAweDQwMTA7CisgICAgcy0+bUVFUFJPTVtFRVBST01fQ29tcFdvcmRdID0gICAgICAgICAgIDA7 CisgICAgcy0+bUVFUFJPTVtFRVBST01fU29mdHdhcmVJbmZvMl0gPSAgICAgIDB4MDBhYTsKKyAg ICBzLT5tRUVQUk9NW0VFUFJPTV9DYXBzXSA9ICAgICAgICAgICAgICAgMHg3MmEyOworICAgIHMt Pm1FRVBST01bRUVQUk9NX0ludGVybmFsQ29uZmlnMF0gPSAgICAwOworICAgIHMtPm1FRVBST01b RUVQUk9NX0ludGVybmFsQ29uZmlnMV0gPSAgICAweDAwNTA7IC8vIGRlZmF1bHQgaXMgMHgwMTgw CisgICAgcy0+bUVFUFJPTVtFRVBST01fU3Vic3lzdGVtVmVuZG9ySURdID0gIDB4MTBiNzsKKyAg ICBzLT5tRUVQUk9NW0VFUFJPTV9TdWJzeXN0ZW1JRF0gPSAgICAgICAgMHg5MjAwOworICAgIHMt Pm1FRVBST01bRUVQUk9NX01lZGlhT3B0aW9uc10gPSAgICAgICAweDAwMGE7CisgICAgcy0+bUVF UFJPTVtFRVBST01fU21iQWRkcmVzc10gPSAgICAgICAgIDB4NjMwMDsKKyAgICBzLT5tRUVQUk9N W0VFUFJPTV9QQ0lQYXJhbTJdID0gICAgICAgICAgMHhmZmI3OworICAgIHMtPm1FRVBST01bRUVQ Uk9NX1BDSVBhcmFtM10gPSAgICAgICAgICAweGI3Yjc7CisgICAgcy0+bUVFUFJPTVtFRVBST01f Q2hlY2tzdW1dID0gICAgICAgICAgIDA7CisKKyAgICAvLyBNSUkKKyAgICBtZW1zZXQocy0+bU1J SVJlZ3MsIDAsIHNpemVvZiBzLT5tTUlJUmVncyk7CisgICAgTUlJUmVnaXN0ZXJzICptaWlyZWdz ID0gKE1JSVJlZ2lzdGVycyopIHMtPm1NSUlSZWdzOworICAgIG1paXJlZ3MtPnN0YXR1cyA9ICgx PDwxNCkgfCAoMTw8MTMpIHwgKDE8PDEyKSB8ICgxPDwxMSkgfCAoMTw8NSkgfCAoMTw8MykgfCAo MTw8MikgfCAxOworICAgIG1paXJlZ3MtPmxpbmtQYXJ0bmVyID0gKDE8PDE0KSB8ICgxPDw3KSB8 IDE7CisgICAgbWlpcmVncy0+YWR2ZXJ0ID0gKDE8PDE0KSB8ICgxIDw8IDEwKSB8ICgxPDw3KSB8 IDE7CisgICAgcy0+bU1JSVJlYWRXb3JkID0gMDsKKyAgICBzLT5tTUlJV3JpdGVXb3JkID0gMDsK KyAgICBzLT5tTUlJV3JpdHRlbkJpdHMgPSAwOworICAgIHMtPm1MYXN0SGlDbGtQaHlzTWdtdCA9 IDA7CisKKyAgICAvLyBSZWdpc3RlciBmb2xsb3ctdXBzCisgICAgdzMtPk1lZGlhT3B0aW9ucyA9 IHMtPm1FRVBST01bRUVQUk9NX01lZGlhT3B0aW9uc107CisgICAgdzMtPkludGVybmFsQ29uZmln ID0gcy0+bUVFUFJPTVtFRVBST01fSW50ZXJuYWxDb25maWcwXSB8CisgICAgICAgICAgICAgICAg ICAgICAgICAgKHMtPm1FRVBST01bRUVQUk9NX0ludGVybmFsQ29uZmlnMV0gPDwgMTYpOworCisg ICAgLy8gQSB2YWxpZCBsaW5rIGlzIGVzdGFibGlzaGVkIG9uIHRoZSBOSUMKKyAgICB3NC0+TWVk aWFTdGF0dXMgPSAoMSA8PCAxMSkgfCAweDgwMDA7CisKKyAgICAvLyBBbmQgY2xlYW4gb3V0IHRo ZSBSWCBidWZmZXIKKyAgICBtZW1zZXQocy0+bVJ4UGFja2V0LCAweGFiLCBNQVhfUEFDS0VUX1NJ WkUpOworfQorCitzdGF0aWMgdWludDMyX3QgcmVhZFJlZ1dpbmRvdyhBM0M5MFhTdGF0ZSAqcywg dWludDMyX3Qgd2luZG93LCB1aW50MzJfdCBwb3J0LCB1aW50MzJfdCBkYXRhLCB1aW50MzJfdCBz aXplKQoreworICAgIERFQlVHX1BSSU5UKCJyZWFkUmVnV2luZG93XG4iKTsKKyAgICBzd2l0Y2gg KHdpbmRvdykKKyAgICB7CisgICAgICAgIC8qIHdpbmRvdyAwICovCisgICAgY2FzZSAwOgorICAg IHsKKyAgICAgICAgUmVnV2luZG93MCAqdzAgPSAoUmVnV2luZG93MCopICZzLT5tV2luZG93c1sw XTsKKyAgICAgICAgc3dpdGNoIChwb3J0KQorICAgICAgICB7CisgICAgICAgIGNhc2UgVzBfRUVQ Uk9NQ21kOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2l6ZSAhPSAyKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJXQVJOOiBFZXByb21Db21tYW5kLCBz aXplICE9IDJcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgcmV0dXJuIHcwLT5FZXByb21Db21tYW5kOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXMF9FRVBST01EYXRhOgorICAgICAgICB7CisgICAg ICAgICAgICBpZiAoc2l6ZSAhPSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERF QlVHX1BSSU5UKCJXQVJOOiBFZXByb21EYXRhLCBzaXplICE9IDJcbiIpOworICAgICAgICAgICAg ICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHcwLT5FZXBy b21EYXRhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoK KyAgICAgICAgICAgIERFQlVHX1BSSU5UKCJXQVJOOiByZWFkaW5nIGhlcmUgdW5pbXBsXG4iKTsK KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg ICAgICAgYnJlYWs7CisgICAgfQorICAgIC8qIHdpbmRvdyAxICovCisgICAgY2FzZSAxOgorICAg IHsKKyAgICAgICAgZGF0YSA9IDA7CisgICAgICAgIG1lbWNweSgmZGF0YSwgJnMtPm1XaW5kb3dz WzFdLmJbcG9ydF0sIHNpemUpOworICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgYnJlYWs7 CisgICAgfQorICAgIC8qIHdpbmRvdyAyICovCisgICAgY2FzZSAyOgorICAgIHsKKyAgICAgICAg ZGF0YSA9IDA7CisgICAgICAgIG1lbWNweSgmZGF0YSwgJnMtPm1XaW5kb3dzWzJdLmJbcG9ydF0s IHNpemUpOworICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg IC8qIHdpbmRvdyAzICovCisgICAgY2FzZSAzOgorICAgIHsKKyAgICAgICAgZGF0YSA9IDA7Cisg ICAgICAgIG1lbWNweSgmZGF0YSwgJnMtPm1XaW5kb3dzWzNdLmJbcG9ydF0sIHNpemUpOworICAg ICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8qIHdpbmRvdyA0 ICovCisgICAgY2FzZSA0OgorICAgIHsKKyAgICAgICAgREVCVUdfUFJJTlQoIlJlYWQgZnJvbSB3 aW5kb3cgNFxuIik7CisgICAgICAgIFJlZ1dpbmRvdzQgKnc0ID0gKFJlZ1dpbmRvdzQqKSAmcy0+ bVdpbmRvd3NbNF07CisgICAgICAgIGRhdGEgPSAwOworICAgICAgICBzd2l0Y2ggKHBvcnQpCisg ICAgICAgIHsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICB7CisgICAgICAgICAgICAvLyBNSUkt aW50ZXJmYWNlCisgICAgICAgICAgICBpZiAoc2l6ZSAhPSAyKQorICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJhbGlnbm1lbnQuNC44LnJlYWRcbiIpOworICAgICAg ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hhciBtZ210 RGF0YSA9IChzLT5tTUlJUmVhZFdvcmQgJiAweDgwMDAwMDAwKSA/IDEgOiAwOworICAgICAgICAg ICAgaWYgKG1nbXREYXRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGEgPSB3 NC0+UGh5c01nbXQgfCBQTV9tZ210RGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhID0gdzQtPlBoeXNNZ210ICYg KH5QTV9tZ210RGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgfQorICAgICAgICBjYXNlIDB4YzoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNpemUg IT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiYWxpZ25t ZW50LjQuYy5yZWFkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIC8vIHJlYWRpbmcgY2xlYXJzCisgICAgICAgICAgICB3NC0+QmFkU1NE ID0gMDsKKyAgICAgICAgICAgIG1lbWNweSgmZGF0YSwgJnMtPm1XaW5kb3dzWzRdLmJbcG9ydF0s IHNpemUpOworICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbWVtY3B5KCZkYXRhLCAmKHMt Pm1XaW5kb3dzWzRdLmJbcG9ydF0pLCBzaXplKTsKKyAgICAgICAgICAgIHJldHVybiBkYXRhOwor ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvKiBXaW5kb3cgNSAqLworICAg IGNhc2UgNToKKyAgICB7CisgICAgICAgIGRhdGEgPSAwOworICAgICAgICBtZW1jcHkoJmRhdGEs ICZzLT5tV2luZG93c1s1XS5iW3BvcnRdLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIGRhdGE7Cisg ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvKiBXaW5kb3cgNiAqLworICAgIGNhc2UgNjoKKyAg ICB7CisgICAgICAgIFJlZ1dpbmRvdzYgKnc2ID0gKFJlZ1dpbmRvdzYqKSAmcy0+bVdpbmRvd3Nb Nl07CisgICAgICAgIC8vIHJlYWRpbmcgY2xlYXJzCisgICAgICAgIGlmICgocG9ydCA9PSAweGEp ICYmIChzaXplID09IDIpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGSVhNRTogQnl0ZXNS Y3ZkT2sgcmVhbGx5IGlzIDIwIGJpdHMgIQorICAgICAgICAgICAgLy8gd2hlbiByZWFkaW5nIGhl cmUsIHdyaXRlIHVwcGVyIDQgYml0cworICAgICAgICAgICAgLy8gaW4gdzQuVXBwZXJCeXRlc09r WzM6MF0uIG5vIGNsZWFyaW5nLgorICAgICAgICAgICAgdzYtPkJ5dGVzUmN2ZE9rID0gMDsKKyAg ICAgICAgfQorICAgICAgICBlbHNlIGlmICgocG9ydCA9PSAweGMpICYmIChzaXplID09IDIpKQor ICAgICAgICB7CisgICAgICAgICAgICAvLyBGSVhNRTogQnl0ZXNYbWl0dGVkT2sgcmVhbGx5IGlz IDIwIGJpdHMgIQorICAgICAgICAgICAgLy8gd2hlbiByZWFkaW5nIGhlcmUsIHdyaXRlIHVwcGVy IDQgYml0cworICAgICAgICAgICAgLy8gaW4gdzQuVXBwZXJCeXRlc09rWzc6NF0uIG5vIGNsZWFy aW5nLgorICAgICAgICAgICAgdzYtPkJ5dGVzWG1pdHRlZE9rID0gMDsKKyAgICAgICAgfQorICAg ICAgICBlbHNlIGlmICgocG9ydCA9PSAwKSAmJiAoc2l6ZSA9PSAxKSkKKyAgICAgICAgeworICAg ICAgICAgICAgdzYtPkNhcnJpZXJMb3N0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm ICgocG9ydCA9PSA4KSAmJiAoc2l6ZSA9PSAxKSkKKyAgICAgICAgeworICAgICAgICAgICAgdzYt PkZyYW1lc0RlZmVycmVkID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgocG9ydCA9 PSA3KSAmJiAoc2l6ZSA9PSAxKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRklYTUU6IEZy YW1lc1JjdmRPayByZWFsbHkgaXMgMTAgYml0cyAhCisgICAgICAgICAgICAvLyB3aGVuIHJlYWRp bmcgaGVyZSwgd3JpdGUgdXBwZXIgMiBiaXRzCisgICAgICAgICAgICAvLyBpbiB3Ni5VcHBlckZy YW1lc09rWzE6MF0uIG5vIGNsZWFyaW5nLgorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChw b3J0ID09IDYpICYmIChzaXplID09IDEpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGSVhN RTogRnJhbWVzWG1pdHRlZE9rIHJlYWxseSBpcyAxMCBiaXRzICEKKyAgICAgICAgICAgIC8vIHdo ZW4gcmVhZGluZyBoZXJlLCB3cml0ZSB1cHBlciAyIGJpdHMKKyAgICAgICAgICAgIC8vIGluIHc2 LlVwcGVyRnJhbWVzT2tbNTo0XS4gbm8gY2xlYXJpbmcuCisgICAgICAgIH0KKyAgICAgICAgZWxz ZSBpZiAoKHBvcnQgPT0gNCkgJiYgKHNpemUgPT0gMSkpCisgICAgICAgIHsKKyAgICAgICAgICAg IHc2LT5MYXRlQ29sbGlzaW9ucyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKHBv cnQgPT0gMikgJiYgKHNpemUgPT0gMSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHc2LT5NdWx0 aXBsZUNvbGxpc2lvbnMgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChwb3J0ID09 IDUpICYmIChzaXplID09IDEpKQorICAgICAgICB7CisgICAgICAgICAgICB3Ni0+UnhPdmVycnVu cyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKHBvcnQgPT0gMykgJiYgKHNpemUg PT0gMSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHc2LT5TaW5nbGVDb2xsaXNpb25zID0gMDsK KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgocG9ydCA9PSAxKSAmJiAoc2l6ZSA9PSAxKSkK KyAgICAgICAgeworICAgICAgICAgICAgdzYtPlNxZUVycm9ycyA9IDA7CisgICAgICAgIH0KKyAg ICAgICAgZGF0YSA9IDA7CisgICAgICAgIG1lbWNweSgmZGF0YSwgJnMtPm1XaW5kb3dzWzZdLmJb cG9ydF0sIHNpemUpOworICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgYnJlYWs7CisgICAg fQorICAgIC8qIFdpbmRvdyA3ICovCisgICAgY2FzZSA3OgorICAgIHsKKyAgICAgICAgZGF0YSA9 IDA7CisgICAgICAgIG1lbWNweSgmZGF0YSwgJnMtPm1XaW5kb3dzWzddLmJbcG9ydF0sIHNpemUp OworICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1 bHQ6CisgICAgICAgIERFQlVHX1BSSU5UKCJyZWFkaW5nIGhlcmUgdW5pbXBsLlxuIik7CisgICAg fQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlUmVnV2luZG93KEEzQzkw WFN0YXRlICpzLCB1aW50MzJfdCB3aW5kb3csIHVpbnQzMl90IHBvcnQsIHVpbnQzMl90IGRhdGEs IHVpbnQzMl90IHNpemUpCit7CisgICAgREVCVUdfUFJJTlQoIndyaXRlUmVnV2luZG93XG4iKTsK KyAgICBzd2l0Y2ggKHdpbmRvdykKKyAgICB7CisgICAgICAgIC8qIFdpbmRvdyAwICovCisgICAg Y2FzZSAwOgorICAgIHsKKyAgICAgICAgUmVnV2luZG93MCAqdzAgPSAoUmVnV2luZG93MCopICZz LT5tV2luZG93c1swXTsKKyAgICAgICAgc3dpdGNoIChwb3J0KQorICAgICAgICB7CisgICAgICAg IGNhc2UgVzBfRUVQUk9NQ21kOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2l6ZSAhPSAy KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJFZXByb21Db21t YW5kLCBzaXplICE9IDJcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHcwLT5FZXByb21Db21tYW5kID0gZGF0YSAmIDB4ZmY3ZjsgIC8vIGNs ZWFyIGVlcHJvbUJ1c3kKKyAgICAgICAgICAgIHVpbnQzMl90IGVlcHJvbV9hZGRyID0gICgoZGF0 YSA+PiAyKSAmIDB4ZmZjMCkgfCAoZGF0YSAmIDB4M2YpOworICAgICAgICAgICAgc3dpdGNoIChk YXRhICYgMHhjMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgRUVPUF9TdWJDbWQ6 CisgICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhICYgMHgzMCkKKyAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgY2FzZSBFRVNDX1dyaXRlRGlzYWJsZToKKyAgICAgICAgICAgICAg ICAgICAgREVCVUdfUFJJTlQoIkVFU0NfV3JpdGVEaXNhYmxlXG4iKTsKKyAgICAgICAgICAgICAg ICAgICAgcy0+bUVFUFJPTVdyaXRhYmxlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgY2FzZSBFRVNDX1dyaXRlQWxsOgorICAgICAgICAgICAgICAgICAg ICAvLyBGSVhNRTogdGhpcyBuZWVkcyBmaXhpbmcgOikKKyAgICAgICAgICAgICAgICAgICAgREVC VUdfUFJJTlQoIldyaXRlQWxsIG5vdCBpbXBsLlxuIik7CisgICAgICAgICAgICAgICAgICAgIG1l bXNldChzLT5tRUVQUk9NLCAweGZmLCBzaXplb2Ygcy0+bUVFUFJPTSk7CisgICAgICAgICAgICAg ICAgICAgIHMtPm1FRVBST01Xcml0YWJsZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgIGNhc2UgRUVTQ19FcmFzZUFsbDoKKyAgICAgICAgICAgICAgICAg ICAgREVCVUdfUFJJTlQoIkVyYXNlQWxsIG5vdCBpbXBsLlxuIik7CisgICAgICAgICAgICAgICAg ICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICAgICAgICAgICAgICBtZW1zZXQocy0+bUVF UFJPTSwgMCwgc2l6ZW9mIHMtPm1FRVBST00pOworICAgICAgICAgICAgICAgICAgICBzLT5tRUVQ Uk9NV3JpdGFibGUgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICBjYXNlIEVFU0NfV3JpdGVFbmFibGU6CisgICAgICAgICAgICAgICAgICAgIERFQlVHX1BS SU5UKCJFRVNDX1dyaXRlRW5hYmxlXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcy0+bUVFUFJP TVdyaXRhYmxlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQoImltcG9zc2libGVc biIpOworICAgICAgICAgICAgICAgICAgICAvLyBTSU5HTEVTVEVQKCIiKTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVFT1BfV3Jp dGVSZWc6CisgICAgICAgICAgICAgICAgaWYgKHMtPm1FRVBST01Xcml0YWJsZSkKKyAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlZXByb21fYWRkcioyIDwgc2l6ZW9m IHMtPm1FRVBST00pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIC8vIGRpc2FibGVkCisgICAgICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiRUVP UF9Xcml0ZVJlZ1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTSU5HTEVTVEVQKCIi KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPm1FRVBST01bZWVwcm9tX2FkZHJdID0gdzAt PkVlcHJvbURhdGE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBERUJV R19QUklOVCgiRkFJTEVEKG91dCBvZiBib3VuZHMpOiBFRU9QX1dyaXRlUmVnXG4iKTsKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzLT5tRUVQUk9NV3JpdGFibGUg PSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiRkFJTEVEKG5vdCB3cml0 YWJsZSk6IEVFT1BfV3JpdGVSZWdcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRUVPUF9SZWFkUmVnOgorICAgICAgICAgICAg ICAgIGlmIChlZXByb21fYWRkcioyIDwgc2l6ZW9mIHMtPm1FRVBST00pCisgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICB3MC0+RWVwcm9tRGF0YSA9IHMtPm1FRVBST01bZWVw cm9tX2FkZHJdOworICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiRUVPUF9SZWFkUmVn XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQoIkZBSUxFRChvdXQgb2Yg Ym91bmRzKTogRUVPUF9SZWFkUmVnXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVFT1BfRXJhc2VSZWc6CisgICAgICAgICAg ICAgICAgaWYgKHMtPm1FRVBST01Xcml0YWJsZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICAgIGlmIChlZXByb21fYWRkcioyIDwgc2l6ZW9mIHMtPm1FRVBST00pCisgICAg ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGVkCisg ICAgICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiRUVPUF9FcmFzZVJlZ1xuIik7Cisg ICAgICAgICAgICAgICAgICAgICAgICAvLyBTSU5HTEVTVEVQKCIiKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHMtPm1FRVBST01bZWVwcm9tX2FkZHJdID0gMDsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJGQUlMRUQob3V0IG9mIGJvdW5kcyk6 IEVFT1BfRXJhc2VSZWdcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU0lOR0xFU1RF UCgiIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcy0+bUVF UFJPTVdyaXRhYmxlID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQoIkZB SUxFRChub3Qgd3JpdGFibGUpOiBFRU9QX0VyYXNlUmVnXG4iKTsKKyAgICAgICAgICAgICAgICAg ICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBERUJVR19QUklO VCgiaW1wb3NzaWJsZVxuIik7CisgICAgICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl IFcwX0VFUFJPTURhdGE6CisgICAgICAgICAgICBpZiAoc2l6ZSAhPSAyKQorICAgICAgICAgICAg eworICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJFZXByb21EYXRhLCBzaXplICE9IDJcbiIp OworICAgICAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgdzAtPkVlcHJvbURhdGEgPSBkYXRhOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERUJVR19QUklOVCgid3JpdGluZyBoZXJlIHVuaW1w bC4wXG4iKTsKKyAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8qIFdpbmRvdyAyICov CisgICAgY2FzZSAyOgorICAgIHsKKyAgICAgICAgaWYgKHBvcnQrc2l6ZTw9MHhjKQorICAgICAg ICB7CisgICAgICAgICAgICBERUJVR19QUklOVCgiU3RhdGlvbkFkZHJlc3Mgb3IgU3RhdGlvbk1h c2tcbiIpOworICAgICAgICAgICAgLyogU3RhdGlvbkFkZHJlc3Mgb3IgU3RhdGlvbk1hc2sgKi8K KyAgICAgICAgICAgIG1lbWNweSgmcy0+bVdpbmRvd3NbMl0uYltwb3J0XSwgJmRhdGEsIHNpemUp OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgREVCVUdf UFJJTlQoIndyaXRpbmcgaGVyZSB1bmltcGwuMlxuIik7CisgICAgICAgICAgICAvLyBTSU5HTEVT VEVQKCIiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgLyogV2luZG93 IDMgKi8KKyAgICBjYXNlIDM6CisgICAgeworICAgICAgICBSZWdXaW5kb3czICp3MyA9IChSZWdX aW5kb3czKikgJnMtPm1XaW5kb3dzWzNdOworICAgICAgICBzd2l0Y2ggKHBvcnQpCisgICAgICAg IHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgaWYgKHNpemUgIT0gNCkKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiYWxpZ25tZW50LjMuMFxuIik7Cisg ICAgICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBERUJVR19QUklOVCgiSW50ZXJuYWxDb25maWdcbiIpOworICAgICAgICAgICAgdzMtPklu dGVybmFsQ29uZmlnID0gZGF0YTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6 CisgICAgICAgICAgICBpZiAoc2l6ZSAhPSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgIERFQlVHX1BSSU5UKCJhbGlnbm1lbnQuMy40XG4iKTsKKyAgICAgICAgICAgICAgICAvLyBT SU5HTEVTVEVQKCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERFQlVHX1BSSU5UKCJF UlI6IE1heFBrdFNpemVcbiIpOworICAgICAgICAgICAgdzMtPk1heFBrdFNpemUgPSBkYXRhOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgIGlmIChzaXpl ICE9IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQoImFsaWdu bWVudC4zLjZcbiIpOworICAgICAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgREVCVUdfUFJJTlQoIk1hY0NvbnRyb2xcbiIpOworICAgICAg ICAgICAgaWYgKGRhdGEgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBERUJV R19QUklOVCgic2V0dGluZyBNYWNDb250cm9sICE9IDBcbiIpOworICAgICAgICAgICAgICAgIC8v IFNJTkdMRVNURVAoIiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdzMtPk1hY0NvbnRy b2wgPSBkYXRhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAg ICAgIGlmIChzaXplICE9IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREVCVUdf UFJJTlQoImFsaWdubWVudC4zLjhcbiIpOworICAgICAgICAgICAgICAgIC8vIFNJTkdMRVNURVAo IiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgREVCVUdfUFJJTlQoIk1lZGlhT3B0aW9u c1xuIik7CisgICAgICAgICAgICB3My0+TWVkaWFPcHRpb25zID0gZGF0YTsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAgaWYgKHNpemUgIT0gMikKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiYWxpZ25tZW50LjMuMTBc biIpOworICAgICAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgREVCVUdfUFJJTlQoIlJ4RnJlZVxuIik7CisgICAgICAgICAgICAvLyBTSU5H TEVTVEVQKCIiKTsKKyAgICAgICAgICAgIHczLT5SeEZyZWUgPSBkYXRhOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIGNhc2UgMTI6CisgICAgICAgICAgICBpZiAoc2l6ZSAhPSAyKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJhbGlnbm1lbnQuMy4xMlxu Iik7CisgICAgICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBERUJVR19QUklOVCgiVHhGcmVlXG4iKTsKKyAgICAgICAgICAgIC8vIFNJTkdM RVNURVAoIiIpOworICAgICAgICAgICAgdzMtPlR4RnJlZSA9IGRhdGE7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERFQlVHX1BSSU5UKCJ3cml0aW5n IGhlcmUgdW5pbXBsLjNcbiIpOworICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAg ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8qIFdpbmRvdyA0ICovCisgICAgY2Fz ZSA0OgorICAgIHsKKyAgICAgICAgUmVnV2luZG93NCAqdzQgPSAoUmVnV2luZG93NCopICZzLT5t V2luZG93c1s0XTsKKyAgICAgICAgc3dpdGNoIChwb3J0KQorICAgICAgICB7CisgICAgICAgIGNh c2UgNjoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNpemUgIT0gMikKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiYWxpZ25tZW50LjQuNlxuIik7CisgICAg ICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICB1aW50MzJfdCBtYXNrID0gMHhmMzQxOworICAgICAgICAgICAgREVCVUdfUFJJTlQoIk5ldERp YWdub3N0aWMiKTsKKyAgICAgICAgICAgIHc0LT5OZXREaWFnbm9zdGljICY9IH5tYXNrOworICAg ICAgICAgICAgdzQtPk5ldERpYWdub3N0aWMgfD0gZGF0YSAmIG1hc2s7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDg6CisgICAgICAgIHsKKyAgICAgICAgICAg IC8vIE1JSS1pbnRlcmZhY2UKKyAgICAgICAgICAgIGlmIChzaXplICE9IDIpCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQoImFsaWdubWVudC40LjhcbiIpOworICAg ICAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgY2hhciBoaUNsayA9ICghKCh3NC0+UGh5c01nbXQgJiBQTV9tZ210Q2xrKSAmJiAoZGF0YSAm IFBNX21nbXRDbGspKSkgPyAxIDogMDsKKyAgICAgICAgICAgIGlmIChoaUNsaykKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAvLyBaIG1lYW5zIGxvIGVkZ2Ugb2YgbWdtdERpcgorICAg ICAgICAgICAgICAgIGNoYXIgWiA9ICgocy0+bUxhc3RIaUNsa1BoeXNNZ210ICYgUE1fbWdtdERp cikgJiYgIShkYXRhICYgUE1fbWdtdERpcikpID8gMSA6IDA7CisgICAgICAgICAgICAgICAgaWYg KFopCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0 aGUgNSBmcmFtZXMgaGF2ZSBiZWVuIHNlbnQKKyAgICAgICAgICAgICAgICAgICAgaWYgKCgocy0+ bU1JSVdyaXRlV29yZCA+PiAocy0+bU1JSVdyaXR0ZW5CaXRzLTMyLTIpKSAmIDB4M2ZmZmZmZmZm VUxMKSA9PSAweDNmZmZmZmZmZFVMTCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgICAgICAgdWludDMyX3Qgb3Bjb2RlID0gKHMtPm1NSUlXcml0ZVdvcmQgPj4gKHMt Pm1NSUlXcml0dGVuQml0cy0zMi0yLTIpKSAmIDM7CisgICAgICAgICAgICAgICAgICAgICAgICB1 aW50MzJfdCBQSFlhZGRyID0gKHMtPm1NSUlXcml0ZVdvcmQgPj4gKHMtPm1NSUlXcml0dGVuQml0 cy0zMi0yLTItNSkpICYgMHgxZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFJF R2FkZHIgPSAocy0+bU1JSVdyaXRlV29yZCA+PiAocy0+bU1JSVdyaXR0ZW5CaXRzLTMyLTItMi01 LTUpKSAmIDB4MWY7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFBIWWFkZHIgPT0gMHgx OCAvKiBoYXJkY29kZWQgYWRkcmVzcyBbMV0gcC4xOTYgKi8pCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICYmIChSRUdhZGRyIDwgMHgxMCkpCisgICAgICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug MToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIE9wY29kZSBXcml0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBERUJVR19QUklOVCgiT3Bjb2RlIFdyaXRlXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHMtPm1NSUlXcml0dGVuQml0cyA9PSA2NCkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDMyX3QgdmFsdWUgPSBzLT5tTUlJV3JpdGVXb3JkICYgMHhmZmZmOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcy0+bU1JSVJlZ3NbUkVHYWRkcl0gPSB2YWx1ZTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJCdXQgaW52YWxpZCB3cml0ZSBj b3VudFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcy0+bU1JSVdyaXRlV29yZCA9IDA7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGNvZGUgUmVh ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiT3Bjb2RlIFJl YWRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocy0+bU1JSVdyaXR0 ZW5CaXRzID09IDMyKzIrMis1KzUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1zYiBnZXRzIHNlbnQgZmly c3QgYW5kIGlzIHplcm8gdG8gaW5kaWNhdGVkIHN1Y2Nlc3MKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIHRoZSByZWdpc3RlciB0byBiZSBzZW50IGZvbGxvd3MgbXNiIHRv IGxzYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+bU1JSVJlYWRXb3Jk ID0gcy0+bU1JSVJlZ3NbUkVHYWRkcl0gPDwgMTU7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBERUJVR19QUklOVCgiQnV0IGludmFsaWQgd3JpdGUgY291bnRcbiIpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHMtPm1NSUlXcml0ZVdvcmQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXJy b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQoIkludmFsaWQg b3Bjb2RlXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+bU1JSVJlYWRX b3JkID0gMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3IK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiSW52YWxpZCBQSFkgb3Ig UkVHXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5tTUlJUmVhZFdvcmQgPSAw eGZmZmZmZmZmOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgIHMtPm1NSUlXcml0dGVuQml0cyA9IDA7CisgICAgICAg ICAgICAgICAgICAgIHc0LT5QaHlzTWdtdCA9IGRhdGE7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEgJiBQTV9tZ210RGlyKQorICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgY2hh ciBtZ210RGF0YSA9IChkYXRhICYgUE1fbWdtdERhdGEpID8gMSA6IDA7CisgICAgICAgICAgICAg ICAgICAgIHc0LT5QaHlzTWdtdCA9IGRhdGE7CisgICAgICAgICAgICAgICAgICAgIHMtPm1NSUlX cml0ZVdvcmQgPDw9IDE7CisgICAgICAgICAgICAgICAgICAgIHMtPm1NSUlXcml0ZVdvcmQgfD0g bWdtdERhdGEgPyAxIDogMDsKKyAgICAgICAgICAgICAgICAgICAgcy0+bU1JSVdyaXR0ZW5CaXRz Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWQKKyAgICAgICAgICAgICAgICAgICAg Y2hhciBtZ210RGF0YSA9IChzLT5tTUlJUmVhZFdvcmQgJiAweDgwMDAwMDAwKSA/IDEgOiAwOwor ICAgICAgICAgICAgICAgICAgICB3NC0+UGh5c01nbXQgPSBkYXRhOworICAgICAgICAgICAgICAg ICAgICBpZiAobWdtdERhdGEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHc0LT5QaHlzTWdtdCA9IHc0LT5QaHlzTWdtdCB8IFBNX21nbXREYXRhOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdzQtPlBoeXNNZ210ID0gdzQtPlBo eXNNZ210ICYgKH5QTV9tZ210RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgcy0+bU1JSVJlYWRXb3JkIDw8PSAxOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBzLT5tTGFzdEhpQ2xrUGh5c01nbXQgPSB3NC0+UGh5c01nbXQ7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgdzQtPlBoeXNNZ210ID0gZGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICB9CisgICAgICAgIGNhc2UgMTA6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlm IChzaXplICE9IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQo ImFsaWdubWVudC40LjEwXG4iKTsKKyAgICAgICAgICAgICAgICAvLyBTSU5HTEVTVEVQKCIiKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVpbnQzMl90IG1hc2sgPSAweDEwY2M7CisgICAg ICAgICAgICBERUJVR19QUklOVCgiTWVkaWFTdGF0dXNcbiIpOworICAgICAgICAgICAgdzQtPk1l ZGlhU3RhdHVzICY9IH5tYXNrOworICAgICAgICAgICAgdzQtPk1lZGlhU3RhdHVzIHw9IGRhdGEg JiBtYXNrOworICAgICAgICAgICAgdzQtPk1lZGlhU3RhdHVzIHw9IDB4ODAwMDsgIC8vIGF1aURp c2FibGUgYWx3YXlzIG9uCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBk ZWZhdWx0OgorICAgICAgICAgICAgREVCVUdfUFJJTlQoImdlbmVyaWMgdG8gd2luZG93IDRcbiIp OworICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAgICAgICAgICBtZW1jcHkoJnMt Pm1XaW5kb3dzWzRdLmJbcG9ydF0sICZkYXRhLCBzaXplKTsKKyAgICAgICAgfQorICAgICAgICBi cmVhazsKKyAgICB9CisgICAgLyoqLworICAgIGRlZmF1bHQ6CisgICAgICAgIERFQlVHX1BSSU5U KCJ3cml0aW5nIGhlcmUgdW5pbXBsLlxuIik7CisgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOwor ICAgIH0KK30KKworc3RhdGljIHZvaWQgc2V0Q1IodWludDE2X3QgY3IsIHZvaWQgKm9wYXF1ZSkK K3sKKyAgICBBM0M5MFhTdGF0ZSAqcyA9IG9wYXF1ZTsKKworICAgIERFQlVHX1BSSU5UKCJzZXRD UlxuIik7CisgICAgc3dpdGNoIChjciAmICgzMTw8MTEpKQorICAgIHsKKyAgICBjYXNlIENtZFRv dGFsUmVzZXQ6CisgICAgICAgIC8vIEZJWE1FOiBjYXJlIGFib3V0IHBhcmFtcworICAgICAgICBE RUJVR19QUklOVCgiVG90YWxSZXNldFxuIik7CisgICAgICAgIGEzYzkweF9yZXNldChvcGFxdWUp OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENtZFNlbGVjdFdpbmRvdzoKKyAgICB7CisgICAg ICAgIERFQlVHX1BSSU5UKCJTZWxlY3RXaW5kb3dcbiIpOworICAgICAgICBzLT5tSW50U3RhdHVz ICY9IDB4MWZmZjsKKyAgICAgICAgcy0+bUludFN0YXR1cyB8PSAoY3IgJiA3KTw8MTM7CisgICAg ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENtZFR4UmVzZXQ6CisgICAgICAgIERFQlVHX1BS SU5UKCJUeFJlc2V0XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDbWRSeFJlc2V0Ogor ICAgICAgICBERUJVR19QUklOVCgiUnhSZXNldFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgQ21kU2V0SW5kaWNhdGlvbkVuYWJsZToKKyAgICB7CisgICAgICAgIFJlZ1dpbmRvdzUgKnc1 ID0gKFJlZ1dpbmRvdzUqKSAmcy0+bVdpbmRvd3NbNV07CisgICAgICAgIERFQlVHX1BSSU5UKCJT ZXRJbmRpY2F0aW9uRW5hYmxlXG4iKTsKKyAgICAgICAgdzUtPkluZGljYXRpb25FbmFibGUgPSBj ciAmIDB4N2ZlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDbWRTZXRJbnRyRW5i OgorICAgIHsKKyAgICAgICAgUmVnV2luZG93NSAqdzUgPSAoUmVnV2luZG93NSopICZzLT5tV2lu ZG93c1s1XTsKKyAgICAgICAgREVCVUdfUFJJTlQoIlNldEludHJFbmFiXG4iKTsKKyAgICAgICAg dzUtPkludGVycnVwdEVuYWJsZSA9IGNyICYgMHg3ZmU7CisgICAgICAgIGJyZWFrOworICAgIH0K KyAgICBjYXNlIENtZFN0YXRzRW5hYmxlOgorICAgICAgICAvKiBpbXBsZW1lbnQgbWUgKi8KKyAg ICAgICAgREVCVUdfUFJJTlQoIlN0YXRzRW5hYmxlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBDbWRTdGF0c0Rpc2FibGU6CisgICAgICAgIC8qIGltcGxlbWVudCBtZSAqLworICAgICAg ICBERUJVR19QUklOVCgiU3RhdHNEaXNhYmxlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBDbWRFbmFibGVEQzoKKyAgICAgICAgLyogaW1wbGVtZW50IG1lICovCisgICAgICAgIERFQlVH X1BSSU5UKCJFbmFibGVEQ1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ21kRGlzYWJs ZURDOgorICAgICAgICAvKiBpbXBsZW1lbnQgbWUgKi8KKyAgICAgICAgREVCVUdfUFJJTlQoIkRp c2FibGVEQ1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ21kU3RhbGw6CisgICAgewor ICAgICAgICAvKiBGSVhNRTogdGhyZWFkaW5nICovCisgICAgICAgIHN3aXRjaCAoY3IgJiAzKQor ICAgICAgICB7CisgICAgICAgIGNhc2UgMDogLyogVXBTdGFsbCAqLworICAgICAgICBjYXNlIDE6 IC8qIFVwVW5zdGFsbCAqLworICAgICAgICB7CisgICAgICAgICAgICBERUJVR19QUklOVCgiU3Rh bGxcbiIpOworICAgICAgICAgICAgY2hhciBzdGFsbCA9ICghKGNyICYgMSkpID8gMSA6IDA7Cisg ICAgICAgICAgICBzLT5tVXBTdGFsbGVkID0gc3RhbGw7CisgICAgICAgICAgICBjaGVja1VwV29y ayhvcGFxdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSAy OiAvKiBEblN0YWxsICovCisgICAgICAgIGNhc2UgMzogLyogRG5VbnN0YWxsICovCisgICAgICAg IHsKKyAgICAgICAgICAgIERFQlVHX1BSSU5UKCJTdGFsbFxuIik7CisgICAgICAgICAgICBjaGFy IHN0YWxsID0gKCEoY3IgJiAxKSkgPyAxIDogMDsKKyAgICAgICAgICAgIHMtPm1EblN0YWxsZWQg PSBzdGFsbDsKKyAgICAgICAgICAgIHMtPm1SZWdpc3RlcnMuRG1hQ3RybCAmPSB+RENfZG5TdGFs bGVkOworICAgICAgICAgICAgaWYgKHN0YWxsKSBzLT5tUmVnaXN0ZXJzLkRtYUN0cmwgfD0gRENf ZG5TdGFsbGVkOworICAgICAgICAgICAgY2hlY2tEbldvcmsob3BhcXVlKTsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg IGNhc2UgQ21kU2V0UnhGaWx0ZXI6CisgICAgeworICAgICAgICBERUJVR19QUklOVCgiU2V0UnhG aWx0ZXJcbiIpOworICAgICAgICBSZWdXaW5kb3c1ICp3NSA9IChSZWdXaW5kb3c1KikgJnMtPm1X aW5kb3dzWzVdOworICAgICAgICB3NS0+UnhGaWx0ZXIgPSBjciAmIDMxOworICAgICAgICBicmVh azsKKyAgICB9CisgICAgY2FzZSBDbWRTZXRUeFJlY2xhaW1UaHJlc2g6CisgICAgeworICAgICAg ICBERUJVR19QUklOVCgiU2V0VHhSZWNsYWltSGFzaFxuIik7CisgICAgICAgIFJlZ1dpbmRvdzUg Knc1ID0gKFJlZ1dpbmRvdzUqKSAmcy0+bVdpbmRvd3NbNV07CisgICAgICAgIHc1LT5UeFJlY2xh aW1UaHJlc2ggPSBjciAmIDI1NTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ21k U2V0VHhTdGFydFRocmVzaDoKKyAgICB7CisgICAgICAgIERFQlVHX1BSSU5UKCJTZXRUeFN0YXJ0 VHJlc2hcbiIpOworICAgICAgICBSZWdXaW5kb3c1ICp3NSA9IChSZWdXaW5kb3c1KikgJnMtPm1X aW5kb3dzWzVdOworICAgICAgICB3NS0+VHhTdGFydFRocmVzaCA9IChjciAmIDB4N2ZmKSA8PCAy OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDbWRTZXRIYXNoRmlsdGVyQml0Ogor ICAgIHsKKyAgICAgICAgLyoqIFRPRE86IGltcGxlbWVudCAqLworICAgICAgICAvLyBjaGFyIHZh bHVlID0gKGNyICYgMHg0MDApID8gMSA6IDA7CisgICAgICAgIC8vIHVpbnQzMl90IHdoaWNoID0g Y3IgJiAweDNmOworICAgICAgICBERUJVR19QUklOVCgiU2V0SGFzaEZpbHRlckJpdFxuIik7Cisg ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENtZFNldFJ4RWFybHlUaHJlc2g6CisgICAg eworICAgICAgICBERUJVR19QUklOVCgiU2V0VHhTdGFydFRyZXNoXG4iKTsKKyAgICAgICAgUmVn V2luZG93NSAqdzUgPSAoUmVnV2luZG93NSopICZzLT5tV2luZG93c1s1XTsKKyAgICAgICAgdzUt PlJ4RWFybHlUaHJlc2ggPSAoY3IgJiAweDdmZikgPDwgMjsKKyAgICAgICAgYnJlYWs7CisgICAg fQorICAgIGNhc2UgQ21kUnhFbmFibGU6CisgICAgeworICAgICAgICBERUJVR19QUklOVCgiUnhF bmFibGVcbiIpOworICAgICAgICBzLT5tUnhFbmFibGVkID0gMTsKKyAgICAgICAgYnJlYWs7Cisg ICAgfQorICAgIGNhc2UgQ21kUnhEaXNhYmxlOgorICAgIHsKKyAgICAgICAgREVCVUdfUFJJTlQo IlJ4RGlzYWJsZVxuIik7CisgICAgICAgIHMtPm1SeEVuYWJsZWQgPSAwOworICAgICAgICBicmVh azsKKyAgICB9CisgICAgY2FzZSBDbWRUeEVuYWJsZToKKyAgICB7CisgICAgICAgIERFQlVHX1BS SU5UKCJUeEVuYWJsZVxuIik7CisgICAgICAgIHMtPm1UeEVuYWJsZWQgPSAxOworICAgICAgICBi cmVhazsKKyAgICB9CisgICAgY2FzZSBDbWRUeERpc2FibGU6CisgICAgeworICAgICAgICBERUJV R19QUklOVCgiVHhEaXNhYmxlXG4iKTsKKyAgICAgICAgcy0+bVR4RW5hYmxlZCA9IDA7CisgICAg ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENtZEFja0ludHI6CisgICAgeworICAgICAgICAv KgorICAgICAgICAweDEgICAgIGludGVycnVwdExhdGNoQWNrCisgICAgICAgIDB4MiAgICAgbGlu a0V2ZW50QWNrCisgICAgICAgIDB4MjAgICAgcnhFYXJseUFjaworICAgICAgICAweDQwICAgIGlu dFJlcXVlc3RlZEFjaworICAgICAgICAweDIwMCAgIGRuQ29tcGxldGVBY2sKKyAgICAgICAgMHg0 MDAgICB1cENvbXBsZXRlQWNrCisKKyAgICAgICAgMHg1CisgICAgICAgICovCisgICAgICAgIERF QlVHX1BSSU5UKCJBY2tJbnRyXG4iKTsKKyAgICAgICAgLy8gYWNrL2NsZWFyIGNvcnJlc3BvbmRp bmcgYml0cyBpbiBJbnRTdGF0dXMKKyAgICAgICAgdWludDMyX3QgSVNhY2sgPSAwOworICAgICAg ICBpZiAoY3IgJiAweDAxKSBJU2FjayB8PSBJU19pbnRlcnJ1cHRMYXRjaDsKKyAgICAgICAgaWYg KGNyICYgMHgwMikgSVNhY2sgfD0gSVNfbGlua0V2ZW50OworICAgICAgICBpZiAoY3IgJiAweDIw KSBJU2FjayB8PSBJU19yeEVhcmx5OworICAgICAgICBpZiAoY3IgJiAweDQwKSBJU2FjayB8PSBJ U19pbnRSZXF1ZXN0ZWQ7CisgICAgICAgIGlmIChjciAmIDB4MjAwKSBJU2FjayB8PSBJU19kbkNv bXBsZXRlOworICAgICAgICBpZiAoY3IgJiAweDQwMCkgSVNhY2sgfD0gSVNfdXBDb21wbGV0ZTsK KyAgICAgICAgYWNrbm93bGVkZ2UoSVNhY2ssIG9wYXF1ZSk7CisgICAgICAgIGJyZWFrOworICAg IH0KKyAgICAvKiAgY2FzZSBDbWRSZXFJbnRyOiB7CisgICAgICAgICAgICBSZWdXaW5kb3c1ICZ3 NSA9IChSZWdXaW5kb3c1JiltV2luZG93c1s1XTsKKyAgICAgICAgICAgIC8vIHNldCBpbnRSZXF1 ZXN0ZWQgaW4gSW50U3RhdHVzCisgICAgICAgICAgICBtSW50U3RhdHVzIHw9IElTX2ludFJlcXVl c3RlZDsKKworICAgICAgICAgICAgLy8gRklYTUU6IGdlbmVyYXRlIEludGVycnVwdCAoaWYgZW5h YmxlZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Ki8KKworICAgIC8qCisgICAgICAg IGNhc2UgQ21kVHhEb25lOgorICAgICAgICBjYXNlIENtZFJ4RGlzY2FyZDoKKyAgICAgICAgY2Fz ZSBDbWRTZXRUeFRocmVzaG9sZDoKKyAgICAqLworICAgIGRlZmF1bHQ6CisgICAgICAgIERFQlVH X1BSSU5UKCJjb21tYW5kIG5vdCBpbXBsZW1lbnRlZFxuIik7CisgICAgfQorfQorCitzdGF0aWMg dm9pZCB0eERQRDAodm9pZCAqb3BhcXVlLCBEUEQwICpkcGQpCit7CisgICAgQTNDOTBYU3RhdGUg KnMgPSBvcGFxdWU7CisKKyAgICBERUJVR19QUklOVCgidHhEUEQwXG4iKTsKKworICAgIC8vIEZJ WE1FOiBjcmVhdGVIb3N0U3RydWN0KCkKKyAgICB1aW50MzJfdCBmc2ggPSBkcGQtPkZyYW1lU3Rh cnRIZWFkZXI7CisgICAgREVCVUdfUFJJTlRfRk9STUFUKCgiZnNoID0gJTA4eFxuIiwgZnNoKSk7 CisgICAgaWYgKGZzaCAmIEZTSF9kcGRFbXB0eSkKKyAgICB7CisgICAgICAgIC8vIG1vZGlmeSBG cmFtZVN0YXJ0SGVhZGVyIGluIERQRCAoISkKKyAgICAgICAgZHBkLT5GcmFtZVN0YXJ0SGVhZGVy IHw9IEZTSF9kbkNvbXBsZXRlOworICAgICAgICAvLyBzZXQgbmV4dCBEbkxpc3RQdHIKKyAgICAg ICAgcy0+bVJlZ2lzdGVycy5Ebkxpc3RQdHIgPSBkcGQtPkRuTmV4dFB0cjsKKyAgICAgICAgREVC VUdfUFJJTlQoImRwZCBlbXB0eVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRFBE RnJhZ0Rlc2MgKmZyYWdzID0gKERQREZyYWdEZXNjKikoZHBkKzEpOworICAgIHVpbnQ4X3QgcGJ1 ZltNQVhfUEFDS0VUX1NJWkVdOworICAgIHVpbnQ4X3QgKnAgPSBwYnVmOworCisgICAgLy8gc29t ZSBwYWNrZXQgZHJpdmVycyBuZWVkIHBhZGRpbmcKKyAgICAvLyB1aW50IGZyYW1lUHJlZml4ID0g bUV0aFR1bi0+Z2V0V3JpdGVGcmFtZVByZWZpeCgpOworICAgIC8vIG1lbXNldChwLCAwLCBmcmFt ZVByZWZpeCk7CisgICAgLy8gcCArPSBmcmFtZVByZWZpeDsKKworICAgIERFQlVHX1BSSU5UX0ZP Uk1BVCgoIkRQRDogTmV4dFB0ciA9ICV4LCBGU0ggPSAleCwgRnJhZ0FkZHIgPSAleCwgRnJhZ0xl biA9ICV4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgZHBkLT5Ebk5leHRQdHIsIGRwZC0+ RnJhbWVTdGFydEhlYWRlciwgZnJhZ3MtPkRuRnJhZ0FkZHIsIGZyYWdzLT5EbkZyYWdMZW4pKTsK KworICAgIC8vCisgICAgdWludDMyX3QgaSA9IDA7CisgICAgLy8gYXNzZW1ibGUgcGFja2V0IGZy b20gZnJhZ21lbnRzICh1cCB0byBNQVhfRFBEX0ZSQUdTIGZyYWdtZW50cykKKyAgICB3aGlsZSAo aSA8IE1BWF9EUERfRlJBR1MpCisgICAgeworICAgICAgICB1aW50MzJfdCBhZGRyID0gZnJhZ3Mt PkRuRnJhZ0FkZHI7CisgICAgICAgIHVpbnQzMl90IGxlbiA9IGZyYWdzLT5EbkZyYWdMZW4gJiAw eDFmZmY7CisgICAgICAgIGlmIChwLXBidWYrbGVuID49IHNpemVvZiBwYnVmKQorICAgICAgICB7 CisgICAgICAgICAgICBERUJVR19QUklOVCgicGFja2V0IHRvbyBiaWchXG4iKTsKKyAgICAgICAg ICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg ICAgICAgIERFQlVHX1BSSU5UKCJkbWFfcmVhZFxuIik7CisKKyAgICAgICAgaWYgKGxlbiA9PSAw IHx8IGFkZHIgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgREVCVUdfUFJJTlQoIk5vIGRh dGEhIEJhaWwhXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg IGNwdV9waHlzaWNhbF9tZW1vcnlfcmVhZChhZGRyLCBwLCBsZW4pOworCisgICAgICAgIERFQlVH X1BSSU5UX0ZPUk1BVCgoIiAtIERuQWRkciA9ICV4LCBEbkZyYWdMZW4gPSAleFxuIiwgZnJhZ3Mt PkRuRnJhZ0FkZHIsIGZyYWdzLT5EbkZyYWdMZW4pKTsKKworICAgICAgICBwICs9IGxlbjsKKyAg ICAgICAgLy8gbGFzdCBmcmFnbWVudCA/CisgICAgICAgIGlmIChmcmFncy0+RG5GcmFnTGVuICYg MHg4MDAwMDAwMCkgYnJlYWs7CisgICAgICAgIGZyYWdzKys7CisgICAgICAgIGkrKzsKKyAgICB9 CisgICAgdWludDMyX3QgcHNpemUgPSBwLXBidWY7CisgICAgaWYgKCEoZnNoICYgRlNIX3JuZHVw RGVmZWF0KSkKKyAgICB7CisgICAgICAgIC8vIHJvdW5kIHBhY2tldCBsZW5ndGgKKyAgICAgICAg c3dpdGNoIChmc2ggJiBGU0hfcm5kdXBCbmRyeSkKKyAgICAgICAgeworICAgICAgICBjYXNlIDA6 CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIDQgYnl0ZXMKKyAgICAgICAgICAgIHVpbnQzMl90 IGdhcCA9ICgocHNpemUrMykgJiB+MykgLXBzaXplOworICAgICAgICAgICAgbWVtc2V0KHBidWYr cHNpemUsIDAsIGdhcCk7CisgICAgICAgICAgICBwc2l6ZSArPSBnYXA7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDI6CisgICAgICAgIHsKKyAgICAgICAgICAg IC8vIDIgYnl0ZXMKKyAgICAgICAgICAgIHVpbnQzMl90IGdhcCA9ICgocHNpemUrMSkgJiB+MSkg LXBzaXplOworICAgICAgICAgICAgbWVtc2V0KHBidWYrcHNpemUsIDAsIGdhcCk7CisgICAgICAg ICAgICBwc2l6ZSArPSBnYXA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg ICB9CisgICAgfQorICAgIC8vRlNIX3JlQXJtRGlzYWJsZSA9ICAgIDE8PDIzLAorICAgIC8vRlNI X2xhc3RLYXAgPSAgICAgICAgIDE8PDI0LAorICAgIC8vRlNIX2FkZElwQ2hlY2tzdW0gPSAgIDE8 PDI1LAorICAgIC8vRlNIX2FkZFRjcENoZWNrc3VtID0gIDE8PDI2LAorICAgIC8vRlNIX2FkZFVk cENoZWNrc3VtID0gIDE8PDI3LAorICAgIGlmIChmc2ggJiAoMHgxZiA8PCAyMykpCisgICAgewor ICAgICAgICBERUJVR19QUklOVCgidW5zdXBwb3J0ZWQgZmxhZ3MgaW4gZnNoXG4iKTsKKyAgICB9 CisKKyAgICBpZiAocHNpemU8NjApCisgICAgeworICAgICAgICAvLyBwYWQgcGFja2V0IHRvIGF0 IGxlYXN0IDYwIGJ5dGVzICgrNCBieXRlcyBjcmMgPSA2NCBieXRlcykKKyAgICAgICAgbWVtc2V0 KHBidWYrcHNpemUsIDAsICg2MC1wc2l6ZSkpOworICAgICAgICBwc2l6ZSA9IDYwOworICAgIH0K KyAgICAvLyBhcHBlbmQgY3JjCisgICAgaWYgKCEoZnNoICYgRlNIX2NyY0FwcGVuZERpc2FibGUp KQorICAgIHsKKyNpZmRlZiBBM0M5MHhfQ0FMQ1VMQVRFX1RYQ1JDCisgICAgICAgIHVpbnQzMl90 IGNyYyA9IGNyYzMyKDAsIHBidWYsIHBzaXplKTsKKyNlbHNlCisgICAgICAgIHVpbnQzMl90IGNy YyA9IDA7CisjZW5kaWYKKyAgICAgICAgcGJ1Zltwc2l6ZSswXSA9IGNyYzsKKyAgICAgICAgcGJ1 Zltwc2l6ZSsxXSA9IGNyYz4+ODsKKyAgICAgICAgcGJ1Zltwc2l6ZSsyXSA9IGNyYz4+MTY7Cisg ICAgICAgIHBidWZbcHNpemUrM10gPSBjcmM+PjI0OworICAgICAgICBwc2l6ZSArPSA0OworICAg ICAgICBERUJVR19QUklOVCgiY3JjIGNvbXBsZXRlXG4iKTsKKyAgICB9CisKKyAgICBBVVhfREVC VUdfUFJJTlQoIjNDOTBYOiBQYWNrZXQgc2VudFxuIik7CisKKyAgICBxZW11X3NlbmRfcGFja2V0 KHMtPnZjLCBwYnVmLCBwc2l6ZSk7CisKKyAgICAvLyBpbmRpY2F0aW9ucworICAgIHMtPm1SZWdp c3RlcnMuRG1hQ3RybCB8PSBEQ19kbkNvbXBsZXRlOworICAgIHVpbnQ4X3QgdHhTdGF0dXMgPSAw OworICAgIHVpbnQzMl90IGluZHMgPSAwOworICAgIGlmIChmc2ggJiBGU0hfZG5JbmRpY2F0ZSkg aW5kcyB8PSBJU19kbkNvbXBsZXRlOworICAgIGlmIChmc2ggJiBGU0hfdHhJbmRpY2F0ZSkKKyAg ICB7CisgICAgICAgIGluZHMgfD0gSVNfdHhDb21wbGV0ZTsKKyAgICAgICAgdHhTdGF0dXMgfD0g KDEgPDwgNik7CisgICAgfQorCisgICAgLy8gdHJhbnNtaXQgY29tcGxldGUKKyAgICB0eFN0YXR1 cyB8PSAoMSA8PCA3KTsKKworICAgIGluZGljYXRlKGluZHMsIG9wYXF1ZSk7CisgICAgLy8gbW9k aWZ5IEZyYW1lU3RhcnRIZWFkZXIgaW4gRFBEICghKQorICAgIGRwZC0+RnJhbWVTdGFydEhlYWRl ciB8PSBGU0hfZG5Db21wbGV0ZTsKKyAgICAvLyBzZXQgbmV4dCBEbkxpc3RQdHIsIFR4UGt0SWQK KyAgICBzLT5tUmVnaXN0ZXJzLkRuTGlzdFB0ciA9IGRwZC0+RG5OZXh0UHRyOworICAgIHVpbnQz Ml90IHBrdElkID0gKGZzaCAmIEZTSF9wa3RJZCkgPj4gMjsKKyAgICBzLT5tUmVnaXN0ZXJzLlR4 UGt0SWQgPSBwa3RJZDsKKyAgICBzLT5tUmVnaXN0ZXJzLlR4U3RhdHVzID0gdHhTdGF0dXM7Cisg ICAgLy8gbWF5YmUgZ2VuZXJhdGUgaW50ZXJydXB0CisgICAgbWF5YmVSYWlzZUludHIob3BhcXVl KTsKK30KKworc3RhdGljIGNoYXIgcGFzc2VzUnhGaWx0ZXIodWludDhfdCAqcGJ1ZiwgdWludDMy X3QgcHNpemUsIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBBM0M5MFhTdGF0ZSAqcyA9IG9wYXF1ZTsK KworICAgIEV0aEZyYW1lSUkgKmYgPSAoRXRoRnJhbWVJSSopIHBidWY7CisgICAgUmVnV2luZG93 NSAqdzUgPSAoUmVnV2luZG93NSopICZzLT5tV2luZG93c1s1XTsKKyAgICBpZiAodzUtPlJ4Rmls dGVyICYgUlhGSUxUX3JlY2VpdmVBbGxGcmFtZXMpIHJldHVybiAxOworICAgIC8vIEZJWE1FOiBN dWx0aWNhc3QgaGFzaGluZyBub3QgaW1wbGVtZW50ZWQKKyAgICBpZiAodzUtPlJ4RmlsdGVyICYg UlhGSUxUX3JlY2VpdmVNdWx0aWNhc3RIYXNoKSByZXR1cm4gMTsKKyAgICAvLyBGSVhNRTogTXVs dGljYXN0aW5nIG5vdCB1bmRlcnN0b29kCisgICAgaWYgKHc1LT5SeEZpbHRlciAmIFJYRklMVF9y ZWNlaXZlTXVsdGljYXN0KSByZXR1cm4gMTsKKyAgICBpZiAodzUtPlJ4RmlsdGVyICYgUlhGSUxU X3JlY2VpdmVCcm9hZGNhc3QpCisgICAgeworICAgICAgICB1aW50OF90IGJyb2FkY2FzdE1BQ1s2 XSA9IHsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZn07CisgICAgICAgIGlmIChjb21wYXJl TUFDcyhmLT5kZXN0TUFDLCBicm9hZGNhc3RNQUMpID09IDApIHJldHVybiAxOworICAgIH0KKyAg ICBpZiAodzUtPlJ4RmlsdGVyICYgUlhGSUxUX3JlY2VpdmVJbmRpdmlkdWFsKQorICAgIHsKKyAg ICAgICAgdWludDhfdCBkZXN0TUFDWzZdOworICAgICAgICB1aW50OF90IHRoaXNNQUNbNl07Cisg ICAgICAgIFJlZ1dpbmRvdzIgKncyID0gKFJlZ1dpbmRvdzIqKSAmcy0+bVdpbmRvd3NbMl07Cisg ICAgICAgIHVpbnQzMl90IGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisgICAg ICAgIHsKKyAgICAgICAgICAgIGRlc3RNQUNbaV0gPSBmLT5kZXN0TUFDW2ldICYgfncyLT5TdGF0 aW9uTWFza1tpXTsKKyAgICAgICAgICAgIHRoaXNNQUNbaV0gPSB3Mi0+U3RhdGlvbkFkZHJlc3Nb aV0gJiB+dzItPlN0YXRpb25NYXNrW2ldOworICAgICAgICB9CisgICAgICAgIHJldHVybiAoY29t cGFyZU1BQ3MoZGVzdE1BQywgdGhpc01BQykgPT0gMCkgPyAxIDogMDsKKyAgICB9CisgICAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJ4VVBEKHZvaWQgKm9wYXF1ZSwgVVBEICp1cGQpCit7 CisgICAgQTNDOTBYU3RhdGUgKnMgPSBvcGFxdWU7CisKKyAgICAvLyBGSVhNRTogdGhyZWFkaW5n IHRvIGNhcmUgYWJvdXQgKG1SZWdpc3RlcnMuRG1hQ3RybCAmIERDX3VwQWx0U2VxRGlzYWJsZSkK KyAgICBERUJVR19QUklOVCgicnhVUEQoKVxuIik7CisKKyAgICBjaGFyIGVycm9yID0gMDsKKwor ICAgIGlmICh1cGQtPlVwUGt0U3RhdHVzICYgVVBTX3VwQ29tcGxldGUpCisgICAgeworICAgICAg ICAvLyBJT18zQzkwWF9XQVJOKCJVUEQgYWxyZWFkeSB1cENvbXBsZXRlIVxuIik7CisKKyAgICAg ICAgLy8gdGhlIHRvcCBvZiB0aGUgcmluZyBidWZmZXIgaXMgYWxyZWFkeSB1c2VkLAorICAgICAg ICAvLyBzdGFsbCB0aGUgdXBsb2FkIGFuZCB0aHJvdyBhd2F5IHRoZSBwYWNrZXQuCisgICAgICAg IC8vIHRoZSByaW5nIGJ1ZmZlcnMgYXJlIGZpbGxlZC4KKworICAgICAgICBzLT5tVXBTdGFsbGVk ID0gMTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVpbnQzMl90IHVwUGt0U3RhdHVz ID0gMDsKKworICAgIGlmIChzLT5tUmVnaXN0ZXJzLlVwUG9sbCkKKyAgICB7CisgICAgICAgIERF QlVHX1BSSU5UKCJVcFBvbGwgdW5zdXBwb3J0ZWRcbiIpOworICAgICAgICAvLyBTSU5HTEVTVEVQ KCIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBGSVhNRToKKy8vICBpZiAobVJl Z2lzdGVycy5EbWFDdHJsICYgRENfdXBSeEVhcmx5RW5hYmxlKQorLy8gICAgICBJT18zQzkwWF9F UlIoIkRDX3VwUnhFYXJseUVuYWJsZSB1bnN1cHBvcnRlZFxuIik7CisKKyAgICBpZiAoKHMtPm1S eFBhY2tldFNpemUgPiAweDFmZmYpIHx8IChzLT5tUnhQYWNrZXRTaXplID4gc2l6ZW9mIHMtPm1S eFBhY2tldCkpCisgICAgeworICAgICAgICBERUJVR19QUklOVCgib3ZlcnNpemVkIGZyYW1lXG4i KTsKKyAgICAgICAgdXBkLT5VcFBrdFN0YXR1cyA9IFVQU191cEVycm9yIHwgVVBTX292ZXJzaXpl ZEZyYW1lOworICAgICAgICBlcnJvciA9IDE7CisgICAgfQorCisgICAgaWYgKHMtPm1SeFBhY2tl dFNpemUgPCA2MCkKKyAgICB7CisgICAgICAgIC8vIHBhZCBwYWNrZXQgdG8gYXQgbGVhc3QgNjAg Ynl0ZXMgKCs0IGJ5dGVzIGNyYyA9IDY0IGJ5dGVzKQorICAgICAgICBtZW1zZXQocy0+bVJ4UGFj a2V0K3MtPm1SeFBhY2tldFNpemUsIDAsICg2MC1zLT5tUnhQYWNrZXRTaXplKSk7CisgICAgICAg IHMtPm1SeFBhY2tldFNpemUgPSA2MDsKKyAgICB9CisKKyAgICAvKiAgUmVnV2luZG93NSAmdzUg PSAoUmVnV2luZG93NSYpbVdpbmRvd3NbNV07CisgICAgICAgIGlmICgobVJ4UGFja2V0U2l6ZSA8 IDYwKSAmJiAodzUuUnhFYXJseVRocmVzaCA+PSA2MCkpIHsKKyAgICAgICAgICAgIElPXzNDOTBY X1RSQUNFKCJydW50IGZyYW1lXG4iKTsKKyAgICAgICAgICAgIHVwUGt0U3RhdHVzIHw9IFVQU191 cEVycm9yIHwgVVBTX3J1bnRGcmFtZTsKKyAgICAgICAgICAgIHVwZC0+VXBQa3RTdGF0dXMgPSB1 cFBrdFN0YXR1czsKKyAgICAgICAgICAgIGVycm9yID0gdHJ1ZTsKKyAgICAgICAgfSovCisgICAg aWYgKHVwZC0+VXBQa3RTdGF0dXMgJiBVUERfaW1wbGllZEJ1ZmZlckVuYWJsZSkKKyAgICB7Cisg ICAgICAgIERFQlVHX1BSSU5UKCJVUERfaW1wbGllZEJ1ZmZlckVuYWJsZSB1bnN1cHBvcnRlZFxu Iik7CisgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICByZXR1cm47CisgICAgfQor ICAgIFVQREZyYWdEZXNjICpmcmFncyA9IChVUERGcmFnRGVzYyopKHVwZCsxKTsKKworICAgIHVp bnQ4X3QgKnAgPSBzLT5tUnhQYWNrZXQ7CisgICAgdWludDMyX3QgaSA9IDA7CisgICAgd2hpbGUg KCFlcnJvciAmJiBpIDwgTUFYX1VQRF9GUkFHUykgICAgIC8vICh1cCB0byBNQVhfVVBEX0ZSQUdT IGZyYWdtZW50cykKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGFkZHIgPSBmcmFncy0+VXBGcmFn QWRkcjsKKyAgICAgICAgdWludDMyX3QgbGVuID0gZnJhZ3MtPlVwRnJhZ0xlbiAmIDB4MWZmZjsK KyAgICAgICAgaWYgKHAtcy0+bVJ4UGFja2V0K2xlbiA+IHNpemVvZiBzLT5tUnhQYWNrZXQpCisg ICAgICAgIHsKKyAgICAgICAgICAgIHVwUGt0U3RhdHVzIHw9IFVQU191cEVycm9yIHwgVVBTX3Vw T3ZlcmZsb3c7CisgICAgICAgICAgICB1cGQtPlVwUGt0U3RhdHVzID0gdXBQa3RTdGF0dXM7Cisg ICAgICAgICAgICBERUJVR19QUklOVCgiVVBEIG92ZXJmbG93IVxuIik7CisgICAgICAgICAgICAv LyBTSU5HTEVTVEVQKCIiKTsKKyAgICAgICAgICAgIGVycm9yID0gMTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisKKyAgICAgICAgY3B1X3BoeXNpY2FsX21lbW9yeV93cml0ZShhZGRy LCBwLCBsZW4pOworCisgICAgICAgIHAgKz0gbGVuOworICAgICAgICAvLyBsYXN0IGZyYWdtZW50 ID8KKyAgICAgICAgaWYgKGZyYWdzLT5VcEZyYWdMZW4gJiAweDgwMDAwMDAwKSBicmVhazsKKyAg ICAgICAgZnJhZ3MrKzsKKyAgICAgICAgaSsrOworICAgIH0KKworICAgIGlmICghZXJyb3IpCisg ICAgeworICAgICAgICBERUJVR19QUklOVCgic3VjY2Vzc2Z1bGx5IHVwbG9hZGVkIHBhY2tldFxu Iik7CisgICAgfQorICAgIHVwUGt0U3RhdHVzIHw9IHMtPm1SeFBhY2tldFNpemUgJiAweDFmZmY7 CisgICAgdXBQa3RTdGF0dXMgfD0gVVBTX3VwQ29tcGxldGU7CisgICAgdXBkLT5VcFBrdFN0YXR1 cyA9IHVwUGt0U3RhdHVzOworCisgICAgcy0+bVJ4UGFja2V0U2l6ZSA9IDA7CisKKyAgICAvKiBU aGUgY2xpZW50IE9TIGlzIHdhaXRpbmcgZm9yIGEgY2hhbmdlIGluIHN0YXR1cywgYnV0IHdvbid0 IHNlZSBpdAorICAgICAqIHVudGlsIHdlIGRtYSBvdXIgbG9jYWwgY29weSB1cGQtPlVwUGt0U3Rh dHVzIGJhY2sgdG8gdGhlIGNsaWVudCBhZGRyZXNzIHNwYWNlCisgICAgICovCisgICAgY3B1X3Bo eXNpY2FsX21lbW9yeV93cml0ZShzLT5tUmVnaXN0ZXJzLlVwTGlzdFB0ciArIDQsIChjb25zdCB1 aW50OF90KikgJih1cGQtPlVwUGt0U3RhdHVzKSwgc2l6ZW9mKHVwZC0+VXBQa3RTdGF0dXMpKTsK KworICAgIHMtPm1SZWdpc3RlcnMuVXBMaXN0UHRyID0gdXBkLT5VcE5leHRQdHI7CisKKyAgICAv LyBJbmRpY2F0aW9ucworICAgIHMtPm1SZWdpc3RlcnMuRG1hQ3RybCB8PSBEQ191cENvbXBsZXRl OworICAgIGluZGljYXRlKElTX3VwQ29tcGxldGUsIG9wYXF1ZSk7CisgICAgbWF5YmVSYWlzZUlu dHIob3BhcXVlKTsKK30KKworc3RhdGljIHZvaWQgaW5kaWNhdGUodWludDMyX3QgaW5kaWNhdGlv bnMsIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBBM0M5MFhTdGF0ZSAqcyA9IG9wYXF1ZTsKKworICAg IFJlZ1dpbmRvdzUgKnc1ID0gKFJlZ1dpbmRvdzUqKSAmcy0+bVdpbmRvd3NbNV07CisgICAgaWYg KCh3NS0+SW5kaWNhdGlvbkVuYWJsZSAmIGluZGljYXRpb25zKSAhPSBpbmRpY2F0aW9ucykKKyAg ICB7CisgICAgICAgIERFQlVHX1BSSU5UKCJzb21lIG1hc2tlZFxuIik7CisgICAgfQorICAgIHMt Pm1JbnRTdGF0dXMgfD0gdzUtPkluZGljYXRpb25FbmFibGUgJiBpbmRpY2F0aW9uczsKKyAgICBp ZiAoaW5kaWNhdGlvbnMgJiBJU191cENvbXBsZXRlKQorICAgIHsKKyAgICAgICAgcy0+bVJlZ2lz dGVycy5EbWFDdHJsIHw9IERDX3VwQ29tcGxldGU7CisgICAgfQorICAgIGlmIChpbmRpY2F0aW9u cyAmIElTX2RuQ29tcGxldGUpCisgICAgeworICAgICAgICBzLT5tUmVnaXN0ZXJzLkRtYUN0cmwg fD0gRENfZG5Db21wbGV0ZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFja25vd2xlZGdlKHVp bnQzMl90IGluZGljYXRpb25zLCB2b2lkICpvcGFxdWUpCit7CisgICAgQTNDOTBYU3RhdGUgKnMg PSBvcGFxdWU7CisKKyAgICBERUJVR19QUklOVF9GT1JNQVQoKCJpbnRTdGF0dXMgd2FzICV4IFtp bmRpY2F0aW9ucz0leF1cbiIsIHMtPm1JbnRTdGF0dXMsIGluZGljYXRpb25zKSk7CisgICAgcy0+ bUludFN0YXR1cyAmPSB+aW5kaWNhdGlvbnM7CisgICAgREVCVUdfUFJJTlRfRk9STUFUKCgiaW50 U3RhdHVzIGlzIG5vdyAleFxuIiwgcy0+bUludFN0YXR1cykpOworICAgIGlmIChpbmRpY2F0aW9u cyAmIElTX3VwQ29tcGxldGUpCisgICAgeworICAgICAgICBzLT5tUmVnaXN0ZXJzLkRtYUN0cmwg Jj0gfkRDX3VwQ29tcGxldGU7CisgICAgfQorICAgIGlmIChpbmRpY2F0aW9ucyAmIElTX2RuQ29t cGxldGUpCisgICAgeworICAgICAgICBzLT5tUmVnaXN0ZXJzLkRtYUN0cmwgJj0gfkRDX2RuQ29t cGxldGU7CisgICAgfQorCisgICAgLy8gbG93ZXIgdGhlIGlycSBsaW5lIG5vdyB0aGF0IHRoZSBJ UlEgaXMgYWNrJ2QKKyAgICBxZW11X3NldF9pcnEocy0+cGNpX2Rldi0+aXJxWzBdLCAwKTsKK30K Kworc3RhdGljIHZvaWQgbWF5YmVSYWlzZUludHIodm9pZCAqb3BhcXVlKQoreworICAgIEEzQzkw WFN0YXRlICpzID0gb3BhcXVlOworICAgIFJlZ1dpbmRvdzUgKnc1ID0gKFJlZ1dpbmRvdzUqKSAm cy0+bVdpbmRvd3NbNV07CisKKyAgICBERUJVR19QUklOVCgibWF5YmVSYWlzZUludHJcbiIpOwor ICAgIERFQlVHX1BSSU5UX0ZPUk1BVCgoIkluZEVuYWJsZSA9ICV4LCBJbnRFbmFibGUgPSAleCwg SW50U3RhdHVzID0gJXhcbiIsIHc1LT5JbmRpY2F0aW9uRW5hYmxlLCB3NS0+SW50ZXJydXB0RW5h YmxlLCBzLT5tSW50U3RhdHVzKSk7CisKKyAgICBpZiAodzUtPkluZGljYXRpb25FbmFibGUgJiB3 NS0+SW50ZXJydXB0RW5hYmxlICYgcy0+bUludFN0YXR1cykKKyAgICB7CisgICAgICAgIHMtPm1J bnRTdGF0dXMgfD0gSVNfaW50ZXJydXB0TGF0Y2g7CisKKyAgICAgICAgREVCVUdfUFJJTlQoIkdl bmVyYXRpbmcgaW50ZXJydXB0IVxuIik7CisKKyAgICAgICAgLy8gcmFpc2UgdGhlIElSUSBsaW5l CisgICAgICAgIHFlbXVfc2V0X2lycShzLT5wY2lfZGV2LT5pcnFbMF0sIDEpOworICAgIH0KKyAg ICBlbHNlCisgICAgeworICAgICAgICAvLyBsb3dlciB0aGUgSVJRIGxpbmUKKyAgICAgICAgcWVt dV9zZXRfaXJxKHMtPnBjaV9kZXYtPmlycVswXSwgMCk7CisgICAgfQorfQorCitzdGF0aWMgdm9p ZCBjaGVja0RuV29yayh2b2lkICpvcGFxdWUpCit7CisgICAgQTNDOTBYU3RhdGUgKnMgPSBvcGFx dWU7CisKKyAgICB3aGlsZSAoIXMtPm1EblN0YWxsZWQgJiYgKHMtPm1SZWdpc3RlcnMuRG5MaXN0 UHRyICE9IDApKQorICAgIHsKKyAgICAgICAgdWludDhfdCBkcGRbNTEyXTsKKworICAgICAgICBj cHVfcGh5c2ljYWxfbWVtb3J5X3JlYWQocy0+bVJlZ2lzdGVycy5Ebkxpc3RQdHIsIGRwZCwgc2l6 ZW9mIGRwZCk7CisKKyAgICAgICAgdWludDhfdCB0eXBlID0gZHBkWzddID4+IDY7CisgICAgICAg IHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIDA6CisgICAgICAgIGNhc2Ug MjoKKyAgICAgICAgeworICAgICAgICAgICAgRFBEMCAqcCA9IChEUEQwKikgZHBkOworICAgICAg ICAgICAgREVCVUdfUFJJTlQoIkdvdCBhIHR5cGUgMCBEUEQhXG4iKTsKKyAgICAgICAgICAgIHR4 RFBEMChvcGFxdWUsIHApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg Y2FzZSAxOgorICAgICAgICB7CisgICAgICAgICAgICBERUJVR19QUklOVCgiR290IGEgdHlwZSAx IERQRCEgTm90IGltcGxlbWVudGVkIVxuIik7CisgICAgICAgICAgICBzLT5tUmVnaXN0ZXJzLkRu TGlzdFB0ciA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZh dWx0OgorICAgICAgICAgICAgREVCVUdfUFJJTlQoIlVuc3VwcG9ydGVkIHBhY2tldCB0eXBlXG4i KTsKKyAgICAgICAgICAgIHMtPm1SZWdpc3RlcnMuRG5MaXN0UHRyID0gMDsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICB9OworCisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGlj IHZvaWQgY2hlY2tVcFdvcmsodm9pZCAqb3BhcXVlKQoreworICAgIEEzQzkwWFN0YXRlICpzID0g b3BhcXVlOworCisgICAgaWYgKHMtPm1SeEVuYWJsZWQgJiYgIXMtPm1VcFN0YWxsZWQgJiYgcy0+ bVJ4UGFja2V0U2l6ZSAmJiAocy0+bVJlZ2lzdGVycy5VcExpc3RQdHIgIT0gMCkpCisgICAgewor ICAgICAgICB1aW50OF90IHVwZFtNQVhfVVBEX1NJWkVdOworCisgICAgICAgIGNwdV9waHlzaWNh bF9tZW1vcnlfcmVhZChzLT5tUmVnaXN0ZXJzLlVwTGlzdFB0ciwgdXBkLCBzaXplb2YgdXBkKTsK KyAgICAgICAgVVBEICpwID0gKFVQRCopIHVwZDsKKyAgICAgICAgcnhVUEQob3BhcXVlLCBwKTsK KworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBERUJVR19QUklOVCgiTm90IHVwbG9h ZGluZ1xuIik7CisgICAgICAgIERFQlVHX1BSSU5UX0ZPUk1BVCgoInJ4RW5hYmxlZCA9ICV4LCB1 cFN0YWxsZWQgPSAleCwgUlggUGFja2V0IHNpemUgPSAleCwgVXAgbGlzdCBwdHIgPSAleFxuIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5tUnhFbmFibGVkLCBzLT5tVXBTdGFsbGVk LCBzLT5tUnhQYWNrZXRTaXplLCBzLT5tUmVnaXN0ZXJzLlVwTGlzdFB0cikpOworICAgIH0KK30K Kworc3RhdGljIHZvaWQgaGFuZGxlX3J4KHZvaWQgKm9wYXF1ZSwgY29uc3QgdWludDhfdCAqYnVm LCBpbnQgc2l6ZSkKK3sKKyAgICBBM0M5MFhTdGF0ZSAqcyA9IG9wYXF1ZTsKKworICAgIERFQlVH X1BSSU5UX0ZPUk1BVCgoIjNjOTB4OiBoYW5kbGVfcnggKCVkIGJ5dGVzKVxuIiwgc2l6ZSkpOwor ICAgIGlmIChzLT5tUnhQYWNrZXRTaXplKQorICAgIHsKKyAgICAgICAgREVCVUdfUFJJTlQoIk9s ZCBwYWNrZXQgbm90IHlldCB1cGxvYWRlZCFcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgewor ICAgICAgICBzLT5tUnhQYWNrZXRTaXplID0gc2l6ZTsKKyAgICAgICAgbWVtY3B5KHMtPm1SeFBh Y2tldCwgYnVmLCBzaXplKTsKKyAgICAgICAgaWYgKHMtPm1SeEVuYWJsZWQgJiYgKHMtPm1SeFBh Y2tldFNpemUgPiBzaXplb2YoRXRoRnJhbWVJSSkpKQorICAgICAgICB7CisgICAgICAgICAgICBp bmRpY2F0ZShJU19yeENvbXBsZXRlLCBvcGFxdWUpOworICAgICAgICAgICAgbWF5YmVSYWlzZUlu dHIob3BhcXVlKTsKKyAgICAgICAgICAgIGFja25vd2xlZGdlKElTX3J4Q29tcGxldGUsIG9wYXF1 ZSk7CisgICAgICAgICAgICBpZiAoIXBhc3Nlc1J4RmlsdGVyKHMtPm1SeFBhY2tldCwgcy0+bVJ4 UGFja2V0U2l6ZSwgb3BhcXVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBERUJV R19QUklOVF9GT1JNQVQoKCJSZWNlaXZlZCAlZCBieXRlcywgYnV0IHRoZXkgZG9uJ3QgcGFzcyB0 aGUgZmlsdGVyIVxuIiwgcy0+bVJ4UGFja2V0U2l6ZSkpOworICAgICAgICAgICAgICAgIHMtPm1S eFBhY2tldFNpemUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIC8vIGFuZCBub3csIHdlIGRvIHNvbWUgZXh0cmEgZGVi dWdnaW5nIG91dHB1dC4uLgorI2lmZGVmIERFQlVHXzNDOTBYX0FOQUxZU0VfRlJBTUVTCisgICAg ICAgICAgICAgICAgRXRoRnJhbWVJSSAqZXRoRnJhbWUgPSAoRXRoRnJhbWVJSSopIHMtPm1SeFBh Y2tldDsKKyAgICAgICAgICAgICAgICBBVVhfREVCVUdfUFJJTlRfRk9STUFUKCgiSW5jb21pbmcg cGFja2V0IGluZm9ybWF0aW9uIFslZCBieXRlc106XG4iLCBzLT5tUnhQYWNrZXRTaXplKSk7Cisg ICAgICAgICAgICAgICAgaWYgKGV0aEZyYW1lLT50eXBlWzBdID09IDgpCisgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoZXRoRnJhbWUtPnR5cGVbMV0gPT0gMHgwNikK KyAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9ERUJVR19QUklOVCgiQVJQXG4iKTsKKyAgICAg ICAgICAgICAgICAgICAgZWxzZSBpZiAoZXRoRnJhbWUtPnR5cGVbMV0gPT0gMCkKKyAgICAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlwICppcEhlYWRl ciA9IChzdHJ1Y3QgaXAqKSAocy0+bVJ4UGFja2V0ICsgc2l6ZW9mKEV0aEZyYW1lSUkpKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChpcEhlYWRlci0+aXBfcCA9PSAweDExKQorICAgICAg ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1 ZHBoZHIgKnVkcEhlYWRlciA9IChzdHJ1Y3QgdWRwaGRyKikgKHMtPm1SeFBhY2tldCArIHNpemVv ZihFdGhGcmFtZUlJKSArIChpcEhlYWRlci0+aXBfaGwgKiA0KSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQVVYX0RFQlVHX1BSSU5UX0ZPUk1BVCgoIlVEUDogc3JjPSVkIGRlc3Q9JWRc biIsIG50b2hzKHVkcEhlYWRlci0+dWhfc3BvcnQpLCBudG9ocyh1ZHBIZWFkZXItPnVoX2Rwb3J0 KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAoaXBIZWFkZXItPmlwX3AgPT0gMHgwNikKKyAgICAgICAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGNwaGRyICp0Y3BIZWFkZXIg PSAoc3RydWN0IHRjcGhkciopIChzLT5tUnhQYWNrZXQgKyBzaXplb2YoRXRoRnJhbWVJSSkgKyAo aXBIZWFkZXItPmlwX2hsICogNCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9E RUJVR19QUklOVF9GT1JNQVQoKCJUQ1A6IHNyYz0lZCBkZXN0PSVkICIsIG50b2hzKHRjcEhlYWRl ci0+dGhfc3BvcnQpLCBudG9ocyh0Y3BIZWFkZXItPnRoX2Rwb3J0KSkpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFVWF9ERUJVR19QUklOVCgiZmxhZ3MgPSIpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmICh0Y3BIZWFkZXItPnRoX2ZsYWdzICYgVEhfRklOKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfREVCVUdfUFJJTlQoIiBGSU4iKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGNwSGVhZGVyLT50aF9mbGFncyAmIFRIX1NZTikK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0RFQlVHX1BSSU5UKCIgU1lOIik7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRjcEhlYWRlci0+dGhfZmxhZ3MgJiBU SF9SU1QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9ERUJVR19QUklOVCgi IFJTVCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0Y3BIZWFkZXItPnRoX2Zs YWdzICYgVEhfUFVTSCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0RFQlVH X1BSSU5UKCIgUFNIIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRjcEhlYWRl ci0+dGhfZmxhZ3MgJiBUSF9BQ0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFV WF9ERUJVR19QUklOVCgiIEFDSyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0 Y3BIZWFkZXItPnRoX2ZsYWdzICYgVEhfVVJHKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBVVhfREVCVUdfUFJJTlQoIiBVUkciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBVVhfREVCVUdfUFJJTlRfRk9STUFUKCgiIHNlcT0lZCBhY2s9JWQiLCBudG9obCh0Y3BIZWFk ZXItPnRoX3NlcSksIG50b2hsKHRjcEhlYWRlci0+dGhfYWNrKSkpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFVWF9ERUJVR19QUklOVCgiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFVWF9ERUJVR19QUklOVCgiKGNhbid0 IGluc3BlY3QpXG4iKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UX0ZPUk1B VCgoIlJlY2VpdmVkICVkIGJ5dGVzIVxuIiwgcy0+bVJ4UGFja2V0U2l6ZSkpOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgREVC VUdfUFJJTlRfRk9STUFUKCgiT29wcyAtIFJ4RW5hYmxlZCA9ICV4LCBwYWNrZXRTaXplID0gJWQg W2V0aD0lZF1cbiIsIHMtPm1SeEVuYWJsZWQsIHMtPm1SeFBhY2tldFNpemUsIHNpemVvZihFdGhG cmFtZUlJKSkpOworICAgICAgICAgICAgcy0+bVJ4UGFja2V0U2l6ZSA9IDA7CisgICAgICAgIH0K KyAgICB9CisgICAgY2hlY2tVcFdvcmsob3BhcXVlKTsKK30KKworc3RhdGljIGludCBhM2M5MHhf Y2FuX3JlY2VpdmUodm9pZCAqb3BhcXVlKQoreworICAgIEEzQzkwWFN0YXRlICpzID0gb3BhcXVl OworICAgIGlmIChzLT5tUnhFbmFibGVkKQorICAgIHsKKyAgICAgICAgaWYgKHMtPm1SeFBhY2tl dFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYWxyZWFkeSBhIHBh Y2tldCB0aGVyZSwgdHJ5IGFuZCB1cGxvYWQgaXQgYWdhaW4KKyAgICAgICAgICAgIERFQlVHX1BS SU5UKCJPbGQgcGFja2V0IG5vdCB5ZXQgdXBsb2FkZWQhXG4iKTsKKyAgICAgICAgICAgIGNoZWNr VXBXb3JrKG9wYXF1ZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAg ICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBy ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYTNjOTB4X3JlY2VpdmUodm9pZCAqb3BhcXVlLCBj b25zdCB1aW50OF90ICpidWYsIGludCBzaXplKQoreworICAgIEFVWF9ERUJVR19QUklOVCgiM0M5 MFg6IFBhY2tldCByZWNlaXZlZFxuIik7CisgICAgaGFuZGxlX3J4KG9wYXF1ZSwgYnVmLCBzaXpl KTsKK30KKworc3RhdGljIHVpbnQzMl90IGEzYzkweF9pb19yZWFkeCh2b2lkICpvcGFxdWUsIHVp bnQ4X3QgcG9ydCwgaW50IHNpemUpCit7CisgICAgQTNDOTBYU3RhdGUgKnMgPSBvcGFxdWU7Cisg ICAgdWludDMyX3QgZGF0YSA9IDA7CisKKyAgICBpZiAocG9ydCA9PSAweGUpCisgICAgeworICAg ICAgICAvLyBJbnRTdGF0dXMgKG5vIG1hdHRlciB3aGljaCB3aW5kb3cpCisgICAgICAgIGlmIChz aXplICE9IDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIERFQlVHX1BSSU5UKCJ1bmFsaWduZWQg cmVhZCBmcm9tIEludFN0YXR1c1xuIik7CisgICAgICAgIH0KKyAgICAgICAgREVCVUdfUFJJTlQo InJlYWQgSW50U3RhdHVzXG4iKTsKKyAgICAgICAgcmV0dXJuIHMtPm1JbnRTdGF0dXM7CisgICAg fQorICAgIGVsc2UgaWYgKHBvcnQgPj0gMCAmJiAocG9ydCtzaXplIDw9IDB4MGUpKQorICAgIHsK KyAgICAgICAgLy8gcmVhZCBmcm9tIHdpbmRvdworICAgICAgICB1aW50MzJfdCBjdXJ3aW5kb3cg PSBzLT5tSW50U3RhdHVzID4+IDEzOworICAgICAgICByZXR1cm4gcmVhZFJlZ1dpbmRvdyhvcGFx dWUsIGN1cndpbmRvdywgcG9ydCwgZGF0YSwgc2l6ZSk7CisgICAgfQorICAgIGVsc2UgaWYgKChw b3J0K3NpemUgPiAweDFlKSAmJiAocG9ydCA8PSAweDFmKSkKKyAgICB7CisgICAgICAgIGlmICgo cG9ydCAhPSAweDFlKSB8fCAoc2l6ZSAhPSAyKSkKKyAgICAgICAgeworICAgICAgICAgICAgREVC VUdfUFJJTlQoInVuYWxpZ25lZCByZWFkIGZyb20gSW50U3RhdHVzQXV0b1xuIik7CisgICAgICAg IH0KKyAgICAgICAgUmVnV2luZG93NSAqdzUgPSAoUmVnV2luZG93NSopICZzLT5tV2luZG93c1s1 XTsKKyAgICAgICAgLy8gc2lkZS1lZmZlY3RzIG9mIHJlYWRpbmcgSW50U3RhdHVzQXV0bzoKKyAg ICAgICAgLy8gMS5jbGVhciBJbnRlcnJ1cHRFbmFibGUKKyAgICAgICAgdzUtPkludGVycnVwdEVu YWJsZSA9IDA7CisgICAgICAgIC8vIDIuY2xlYXIgc29tZSBmbGFncworICAgICAgICBhY2tub3ds ZWRnZShJU19kbkNvbXBsZXRlIHwgSVNfdXBDb21wbGV0ZQorICAgICAgICAgICAgICAgICAgICB8 IElTX3J4RWFybHkgfCBJU19pbnRSZXF1ZXN0ZWQKKyAgICAgICAgICAgICAgICAgICAgfCBJU19p bnRlcnJ1cHRMYXRjaCB8IElTX2xpbmtFdmVudCwgb3BhcXVlKTsKKyAgICAgICAgREVCVUdfUFJJ TlQoInJlYWQgSW50U3RhdHVzQXV0b1xuIik7CisgICAgICAgIHJldHVybiBzLT5tSW50U3RhdHVz OworICAgIH0KKyAgICBlbHNlIGlmICgocG9ydCA+PSAweDEwKSAmJiAocG9ydCtzaXplIDw9IDB4 MTAgKyBzaXplb2YoUmVnaXN0ZXJzKSkpCisgICAgeworICAgICAgICB1aW50OF90IGwgPSBnUmVn QWNjZXNzW3BvcnQtMHgxMF07CisgICAgICAgIGlmIChsICE9IHNpemUpCisgICAgICAgIHsKKyAg ICAgICAgICAgIERFQlVHX1BSSU5UKCJpbnZhbGlkL3VuYWxpZ25lZCByZWFkXG4iKTsKKyAgICAg ICAgfQorICAgICAgICAvLyByZWFkIGZyb20gKHN0YW5kYXJkKSByZWdpc3RlcgorICAgICAgICBt ZW1jcHkoJmRhdGEsICgodWludDhfdCopJnMtPm1SZWdpc3RlcnMpK3BvcnQtMHgxMCwgc2l6ZSk7 CisgICAgICAgIHN3aXRjaCAocG9ydCkKKyAgICAgICAgeworICAgICAgICBjYXNlIDB4MWE6Cisg ICAgICAgICAgICBERUJVR19QUklOVCgicmVhZCBUaW1lclxuIik7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgY2FzZSAweDIwOgorICAgICAgICAgICAgREVCVUdfUFJJTlQoInJlYWQgRG1h Q3RybFxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDI0OgorICAgICAg ICAgICAgREVCVUdfUFJJTlQoInJlYWQgRG93bkxpc3RQdHJcbiIpOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIGNhc2UgMHgzODoKKyAgICAgICAgICAgIERFQlVHX1BSSU5UKCJyZWFkIFVw TGlzdFB0clxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgIERFQlVHX1BSSU5UKCJyZWFkIHJlZ1xuIik7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgfQorICAgICAgICByZXR1cm4gZGF0YTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIGEzYzkweF9pb193cml0ZXgodm9pZCAqb3BhcXVlLCB1aW50OF90IHBvcnQs IHVpbnQzMl90IGRhdGEsIGludCBzaXplKQoreworICAgIEEzQzkwWFN0YXRlICpzID0gb3BhcXVl OworCisgICAgaWYgKHBvcnQgPT0gMHhlKQorICAgIHsKKyAgICAgICAgLy8gQ29tbWFuZFJlZyAo bm8gbWF0dGVyIHdoaWNoIHdpbmRvdykKKyAgICAgICAgaWYgKHNpemUgIT0gMikKKyAgICAgICAg eworICAgICAgICAgICAgREVCVUdfUFJJTlQoInVuYWxpZ25lZCB3cml0ZSB0byBDb21tYW5kUmVn XG4iKTsKKyAgICAgICAgfQorICAgICAgICBzZXRDUihkYXRhLCBvcGFxdWUpOworICAgIH0KKyAg ICBlbHNlIGlmIChwb3J0ID49IDAgJiYgKHBvcnQrc2l6ZSA8PSAweDBlKSkKKyAgICB7CisgICAg ICAgIC8vIHdyaXRlIHRvIHdpbmRvdworICAgICAgICB1aW50MzJfdCBjdXJ3aW5kb3cgPSBzLT5t SW50U3RhdHVzID4+IDEzOworICAgICAgICB3cml0ZVJlZ1dpbmRvdyhvcGFxdWUsIGN1cndpbmRv dywgcG9ydCwgZGF0YSwgc2l6ZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHBvcnQgPj0gMHgxMCAm JiAocG9ydCArIHNpemUgPD0gMHgxMCArIHNpemVvZihSZWdpc3RlcnMpKSkKKyAgICB7CisgICAg ICAgIHVpbnQ4X3QgbCA9IGdSZWdBY2Nlc3NbcG9ydC0weDEwXTsKKyAgICAgICAgaWYgKGwgIT0g c2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgREVCVUdfUFJJTlQoImludmFsaWQvdW5hbGln bmVkIHdyaXRlIHRvIHJlZ2lzdGVyXG4iKTsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKHBv cnQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAweDIwOgorICAgICAgICB7CisgICAgICAgICAg ICB1aW50MzJfdCBEbWFDdHJsUldNYXNrID0gRENfdXBSeEVhcmx5RW5hYmxlIHwgRENfY291bnRl clNwZWVkIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ19jb3VudGRv d25Nb2RlIHwgRENfZGVmZWF0TVdJIHwgRENfZGVmZWF0TVJMIHwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEQ191cE92ZXJEaXNjRW5hYmxlOworICAgICAgICAgICAgcy0+ bVJlZ2lzdGVycy5EbWFDdHJsICY9IH5EbWFDdHJsUldNYXNrOworICAgICAgICAgICAgcy0+bVJl Z2lzdGVycy5EbWFDdHJsIHw9IGRhdGEgJiBEbWFDdHJsUldNYXNrOworICAgICAgICAgICAgREVC VUdfUFJJTlQoIndyaXRlIERtYUN0cmxcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IH0KKyAgICAgICAgY2FzZSAweDI0OgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXMtPm1S ZWdpc3RlcnMuRG5MaXN0UHRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHMtPm1S ZWdpc3RlcnMuRG5MaXN0UHRyID0gZGF0YTsKKyAgICAgICAgICAgICAgICBERUJVR19QUklOVCgi d3JpdGUgRG5MaXN0UHRyXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiZGlkbid0IHdyaXRlIERu TGlzdFB0ciBjYXVzZSBpdCdzIG5vdCAwXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGNoZWNrRG5Xb3JrKG9wYXF1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg ICAgICBjYXNlIDB4Mzg6CisgICAgICAgIHsKKyAgICAgICAgICAgIHMtPm1SZWdpc3RlcnMuVXBM aXN0UHRyID0gZGF0YTsKKyAgICAgICAgICAgIERFQlVHX1BSSU5UKCJ3cml0ZSBVcExpc3RQdHJc biIpOworICAgICAgICAgICAgY2hlY2tVcFdvcmsob3BhcXVlKTsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICB9CisgICAgICAgIGNhc2UgMHgyZDoKKyAgICAgICAgICAgIERFQlVHX1BSSU5U KCJEblBvbGxcbiIpOworICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgY2FzZSAweDJhOgorICAgICAgICAgICAgbWVtY3B5KCgodWludDhf dCopJnMtPm1SZWdpc3RlcnMpK3BvcnQtMHgxMCwgJmRhdGEsIHNpemUpOworICAgICAgICAgICAg REVCVUdfUFJJTlQoIndyaXRlIERuQnVyc3RUaHJlc2hcbiIpOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIGNhc2UgMHgyYzoKKyAgICAgICAgICAgIG1lbWNweSgoKHVpbnQ4X3QqKSZzLT5t UmVnaXN0ZXJzKStwb3J0LTB4MTAsICZkYXRhLCBzaXplKTsKKyAgICAgICAgICAgIERFQlVHX1BS SU5UKCJ3cml0ZSBEblByaW9yaXR5VGhyZXNoXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICBjYXNlIDB4MmY6CisgICAgICAgICAgICAvLyB1c2VkIGJ5IERhcndpbiBhcyBUeEZyZWVU aHJlc2guIE5vdCBkb2N1bWVudGVkIGluIFsxXS4KKyAgICAgICAgICAgIG1lbWNweSgoKHVpbnQ4 X3QqKSZzLT5tUmVnaXN0ZXJzKStwb3J0LTB4MTAsICZkYXRhLCBzaXplKTsKKyAgICAgICAgICAg IERFQlVHX1BSSU5UKCJ3cml0ZSBUeEZyZWVUaHJlc2hcbiIpOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIGNhc2UgMHgzYzoKKyAgICAgICAgICAgIG1lbWNweSgoKHVpbnQ4X3QqKSZzLT5t UmVnaXN0ZXJzKStwb3J0LTB4MTAsICZkYXRhLCBzaXplKTsKKyAgICAgICAgICAgIERFQlVHX1BS SU5UKCJ3cml0ZSBVcFByaW9yaXR5VGhyZXNoXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICBjYXNlIDB4M2U6CisgICAgICAgICAgICBtZW1jcHkoKCh1aW50OF90Kikmcy0+bVJlZ2lz dGVycykrcG9ydC0weDEwLCAmZGF0YSwgc2l6ZSk7CisgICAgICAgICAgICBERUJVR19QUklOVCgi d3JpdGUgVXBCdXJzdFRocmVzaFxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz ZSAweDFiOgorICAgICAgICAgICAgaWYgKHNpemUgIT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICBERUJVR19QUklOVCgid3Jvbmcgc2l6ZSBmb3Igd3JpdGUgdG8gVHhTdGF0dXNc biIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IERFQlVHX1BSSU5UX0ZPUk1BVCgoIldyaXRpbmcgJXggdG8gVHhTdGF0dXNcbiIsIGRhdGEpKTsK KyAgICAgICAgICAgIHMtPm1SZWdpc3RlcnMuVHhTdGF0dXMgPSBkYXRhOworCisgICAgICAgICAg ICAvLyBhY2tub3dsZWRnZSB0aGUgcmVsZXZhbnQgYml0cworICAgICAgICAgICAgYWNrbm93bGVk Z2UoSVNfdHhDb21wbGV0ZSwgb3BhcXVlKTsKKyAgICAgICAgICAgIC8vICB8IElTX2RuQ29tcGxl dGUgfCBJU19jbWRJblByb2dyZXNzCisKKyAgICAgICAgICAgIC8vIE5PVEU6ICJBbiBJL08gd3Jp dGUgb2YgYW4gYXJiaXRyYXJ5IHZhbHVlIHRvIFR4U3RhdHVzIGFkdmFuY2VzIHRoZSBxdWV1ZSB0 byB0aGUgbmV4dCB0cmFuc21pdCBzdGF0dXMgYnl0ZS4iCisgICAgICAgICAgICAvLyBXZSBhbHNv IG5lZWQgdG8ga2VlcCB0aGUgcXVldWUgb2YgVFggU3RhdHVzIGJ5dGVzIQorCisgICAgICAgICAg ICAvLyBtYXliZVJhaXNlSW50cihvcGFxdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IGRlZmF1bHQ6CisgICAgICAgICAgICBERUJVR19QUklOVCgid3JpdGUgdG8gcmVnaXN0ZXJcbiIp OworICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAgICAgICAgICAvLyB3cml0ZSB0 byAoc3RhbmRhcmQpIHJlZ2lzdGVyCisgICAgICAgICAgICBtZW1jcHkoKCh1aW50OF90Kikmcy0+ bVJlZ2lzdGVycykrcG9ydC0weDEwLCAmZGF0YSwgc2l6ZSk7CisgICAgICAgIH0KKyAgICB9Cit9 CisKK3N0YXRpYyB2b2lkIGEzYzkweF9pb193cml0ZWIodm9pZCAqb3BhcXVlLCB1aW50OF90IGFk ZHIsIHVpbnQzMl90IHZhbCkKK3sKKyAgICBhM2M5MHhfaW9fd3JpdGV4KG9wYXF1ZSwgYWRkciwg dmFsLCAxKTsKK30KKworc3RhdGljIHZvaWQgYTNjOTB4X2lvX3dyaXRldyh2b2lkICpvcGFxdWUs IHVpbnQ4X3QgYWRkciwgdWludDMyX3QgdmFsKQoreworICAgIGEzYzkweF9pb193cml0ZXgob3Bh cXVlLCBhZGRyLCB2YWwsIDIpOworfQorCitzdGF0aWMgdm9pZCBhM2M5MHhfaW9fd3JpdGVsKHZv aWQgKm9wYXF1ZSwgdWludDhfdCBhZGRyLCB1aW50MzJfdCB2YWwpCit7CisgICAgYTNjOTB4X2lv X3dyaXRleChvcGFxdWUsIGFkZHIsIHZhbCwgNCk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBhM2M5 MHhfaW9fcmVhZGIodm9pZCAqb3BhcXVlLCB1aW50OF90IGFkZHIpCit7CisgICAgcmV0dXJuIGEz YzkweF9pb19yZWFkeChvcGFxdWUsIGFkZHIsIDEpOworfQorCitzdGF0aWMgdWludDMyX3QgYTNj OTB4X2lvX3JlYWR3KHZvaWQgKm9wYXF1ZSwgdWludDhfdCBhZGRyKQoreworICAgIHJldHVybiBh M2M5MHhfaW9fcmVhZHgob3BhcXVlLCBhZGRyLCAyKTsKK30KKworc3RhdGljIHVpbnQzMl90IGEz YzkweF9pb19yZWFkbCh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgYWRkcikKK3sKKyAgICByZXR1cm4g YTNjOTB4X2lvX3JlYWR4KG9wYXF1ZSwgYWRkciwgNCk7Cit9CisKKy8qICovCisKK3N0YXRpYyB2 b2lkIGEzYzkweF9pb3BvcnRfd3JpdGViKHZvaWQgKm9wYXF1ZSwgdWludDMyX3QgYWRkciwgdWlu dDMyX3QgdmFsKQoreworICAgIGEzYzkweF9pb193cml0ZWIob3BhcXVlLCBhZGRyICYgMHhGRiwg dmFsKTsKK30KKworc3RhdGljIHZvaWQgYTNjOTB4X2lvcG9ydF93cml0ZXcodm9pZCAqb3BhcXVl LCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCB2YWwpCit7CisgICAgYTNjOTB4X2lvX3dyaXRldyhv cGFxdWUsIGFkZHIgJiAweEZGLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBhM2M5MHhfaW9wb3J0 X3dyaXRlbCh2b2lkICpvcGFxdWUsIHVpbnQzMl90IGFkZHIsIHVpbnQzMl90IHZhbCkKK3sKKyAg ICBhM2M5MHhfaW9fd3JpdGVsKG9wYXF1ZSwgYWRkciAmIDB4RkYsIHZhbCk7Cit9CisKK3N0YXRp YyB1aW50MzJfdCBhM2M5MHhfaW9wb3J0X3JlYWRiKHZvaWQgKm9wYXF1ZSwgdWludDMyX3QgYWRk cikKK3sKKyAgICByZXR1cm4gYTNjOTB4X2lvX3JlYWRiKG9wYXF1ZSwgYWRkciAmIDB4RkYpOwor fQorCitzdGF0aWMgdWludDMyX3QgYTNjOTB4X2lvcG9ydF9yZWFkdyh2b2lkICpvcGFxdWUsIHVp bnQzMl90IGFkZHIpCit7CisgICAgcmV0dXJuIGEzYzkweF9pb19yZWFkdyhvcGFxdWUsIGFkZHIg JiAweEZGKTsKK30KKworc3RhdGljIHVpbnQzMl90IGEzYzkweF9pb3BvcnRfcmVhZGwodm9pZCAq b3BhcXVlLCB1aW50MzJfdCBhZGRyKQoreworICAgIHJldHVybiBhM2M5MHhfaW9fcmVhZGwob3Bh cXVlLCBhZGRyICYgMHhGRik7Cit9CisKKy8qICovCisKK3N0YXRpYyB2b2lkIGEzYzkweF9tbWlv X3dyaXRlYih2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLCB1aW50MzJfdCB2 YWwpCit7CisgICAgYTNjOTB4X2lvX3dyaXRlYihvcGFxdWUsIGFkZHIgJiAweEZGLCB2YWwpOwor fQorCitzdGF0aWMgdm9pZCBhM2M5MHhfbW1pb193cml0ZXcodm9pZCAqb3BhcXVlLCB0YXJnZXRf cGh5c19hZGRyX3QgYWRkciwgdWludDMyX3QgdmFsKQoreworI2lmZGVmIFRBUkdFVF9XT1JEU19C SUdFTkRJQU4KKyAgICB2YWwgPSBic3dhcDE2KHZhbCk7CisjZW5kaWYKKyAgICBhM2M5MHhfaW9f d3JpdGV3KG9wYXF1ZSwgYWRkciAmIDB4RkYsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGEzYzkw eF9tbWlvX3dyaXRlbCh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLCB1aW50 MzJfdCB2YWwpCit7CisjaWZkZWYgVEFSR0VUX1dPUkRTX0JJR0VORElBTgorICAgIHZhbCA9IGJz d2FwMzIodmFsKTsKKyNlbmRpZgorICAgIGEzYzkweF9pb193cml0ZWwob3BhcXVlLCBhZGRyICYg MHhGRiwgdmFsKTsKK30KKworc3RhdGljIHVpbnQzMl90IGEzYzkweF9tbWlvX3JlYWRiKHZvaWQg Km9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpCit7CisgICAgcmV0dXJuIGEzYzkweF9p b19yZWFkYihvcGFxdWUsIGFkZHIgJiAweEZGKTsKK30KKworc3RhdGljIHVpbnQzMl90IGEzYzkw eF9tbWlvX3JlYWR3KHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpCit7Cisg ICAgdWludDMyX3QgdmFsID0gYTNjOTB4X2lvX3JlYWR3KG9wYXF1ZSwgYWRkciAmIDB4RkYpOwor I2lmZGVmIFRBUkdFVF9XT1JEU19CSUdFTkRJQU4KKyAgICB2YWwgPSBic3dhcDE2KHZhbCk7Cisj ZW5kaWYKKyAgICByZXR1cm4gdmFsOworfQorCitzdGF0aWMgdWludDMyX3QgYTNjOTB4X21taW9f cmVhZGwodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkcikKK3sKKyAgICB1aW50 MzJfdCB2YWwgPSBhM2M5MHhfaW9fcmVhZGwob3BhcXVlLCBhZGRyICYgMHhGRik7CisjaWZkZWYg VEFSR0VUX1dPUkRTX0JJR0VORElBTgorICAgIHZhbCA9IGJzd2FwMzIodmFsKTsKKyNlbmRpZgor ICAgIHJldHVybiB2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFBDSSAzQzkweCBkZWZpbml0aW9ucyAqLwor Cit0eXBlZGVmIHN0cnVjdCBQQ0kzQzkwWFN0YXRlCit7CisgICAgUENJRGV2aWNlIGRldjsKKyAg ICBBM0M5MFhTdGF0ZSBhM2M5MHg7Cit9IFBDSTNDOTBYU3RhdGU7CisKK3N0YXRpYyB2b2lkIGEz YzkweF9tbWlvX21hcChQQ0lEZXZpY2UgKnBjaV9kZXYsIGludCByZWdpb25fbnVtLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFkZHIsIHVpbnQzMl90IHNpemUsIGludCB0 eXBlKQoreworICAgIFBDSTNDOTBYU3RhdGUgKmQgPSAoUENJM0M5MFhTdGF0ZSAqKXBjaV9kZXY7 CisgICAgQTNDOTBYU3RhdGUgKnMgPSAmZC0+YTNjOTB4OworCisgICAgY3B1X3JlZ2lzdGVyX3Bo eXNpY2FsX21lbW9yeShhZGRyICsgMCwgMHgxMDAsIHMtPmEzYzkweF9tbWlvX2lvX2FkZHIpOwor fQorCitzdGF0aWMgdm9pZCBhM2M5MHhfaW9wb3J0X21hcChQQ0lEZXZpY2UgKnBjaV9kZXYsIGlu dCByZWdpb25fbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRk ciwgdWludDMyX3Qgc2l6ZSwgaW50IHR5cGUpCit7CisgICAgUENJM0M5MFhTdGF0ZSAqZCA9IChQ Q0kzQzkwWFN0YXRlICopcGNpX2RldjsKKyAgICBBM0M5MFhTdGF0ZSAqcyA9ICZkLT5hM2M5MHg7 CisKKyAgICByZWdpc3Rlcl9pb3BvcnRfd3JpdGUoYWRkciwgMHgxMDAsIDEsIGEzYzkweF9pb3Bv cnRfd3JpdGViLCBzKTsKKyAgICByZWdpc3Rlcl9pb3BvcnRfcmVhZCggYWRkciwgMHgxMDAsIDEs IGEzYzkweF9pb3BvcnRfcmVhZGIsICBzKTsKKworICAgIHJlZ2lzdGVyX2lvcG9ydF93cml0ZShh ZGRyLCAweDEwMCwgMiwgYTNjOTB4X2lvcG9ydF93cml0ZXcsIHMpOworICAgIHJlZ2lzdGVyX2lv cG9ydF9yZWFkKCBhZGRyLCAweDEwMCwgMiwgYTNjOTB4X2lvcG9ydF9yZWFkdywgIHMpOworCisg ICAgcmVnaXN0ZXJfaW9wb3J0X3dyaXRlKGFkZHIsIDB4MTAwLCA0LCBhM2M5MHhfaW9wb3J0X3dy aXRlbCwgcyk7CisgICAgcmVnaXN0ZXJfaW9wb3J0X3JlYWQoIGFkZHIsIDB4MTAwLCA0LCBhM2M5 MHhfaW9wb3J0X3JlYWRsLCAgcyk7Cit9CisKK3N0YXRpYyBDUFVSZWFkTWVtb3J5RnVuYyAqYTNj OTB4X21taW9fcmVhZFszXSA9Cit7CisgICAgYTNjOTB4X21taW9fcmVhZGIsCisgICAgYTNjOTB4 X21taW9fcmVhZHcsCisgICAgYTNjOTB4X21taW9fcmVhZGwsCit9OworCitzdGF0aWMgQ1BVV3Jp dGVNZW1vcnlGdW5jICphM2M5MHhfbW1pb193cml0ZVszXSA9Cit7CisgICAgYTNjOTB4X21taW9f d3JpdGViLAorICAgIGEzYzkweF9tbWlvX3dyaXRldywKKyAgICBhM2M5MHhfbW1pb193cml0ZWws Cit9OworCitzdGF0aWMgaW5saW5lIGludDY0X3QgYTNjOTB4X2dldF9uZXh0X3RjdHJfdGltZShB M0M5MFhTdGF0ZSAqcywgaW50NjRfdCBjdXJyZW50X3RpbWUpCit7CisgICAgaW50NjRfdCBuZXh0 X3RpbWUgPSBjdXJyZW50X3RpbWUgKworICAgICAgICAgICAgICAgICAgICAgICAgbXVsZGl2NjQo MSwgdGlja3NfcGVyX3NlYywgUENJX0ZSRVFVRU5DWSk7CisgICAgaWYgKG5leHRfdGltZSA8PSBj dXJyZW50X3RpbWUpCisgICAgICAgIG5leHRfdGltZSA9IGN1cnJlbnRfdGltZSArIDE7CisgICAg cmV0dXJuIG5leHRfdGltZTsKK30KKwordm9pZCBhM2M5MHhfY2xlYW51cChWTEFOQ2xpZW50U3Rh dGUgKnZjKQoreworICAgIERFQlVHX1BSSU5UKCIzQzkwWDogQ2xlYW51cCBub3QgaW1wbGVtZW50 ZWRcbiIpOworfQorCitQQ0lEZXZpY2UgKnBjaV9hM2M5MHhfaW5pdChQQ0lCdXMgKmJ1cywgTklD SW5mbyAqbmQsIGludCBkZXZmbikKK3sKKyAgICBQQ0kzQzkwWFN0YXRlICpkOworICAgIEEzQzkw WFN0YXRlICpzOworICAgIHVpbnQ4X3QgKnBjaV9jb25mOworCisgICAgZCA9IChQQ0kzQzkwWFN0 YXRlICopcGNpX3JlZ2lzdGVyX2RldmljZShidXMsCisgICAgICAgICAgICAiM0M5MHgiLCBzaXpl b2YoUENJM0M5MFhTdGF0ZSksCisgICAgICAgICAgICBkZXZmbiwKKyAgICAgICAgICAgIE5VTEws IE5VTEwpOworICAgIHBjaV9jb25mID0gZC0+ZGV2LmNvbmZpZzsKKyAgICBwY2lfY29uZmlnX3Nl dF92ZW5kb3JfaWQocGNpX2NvbmYsIFBDSV9WRU5ET1JfSURfM0NPTSk7CisgICAgcGNpX2NvbmZp Z19zZXRfZGV2aWNlX2lkKHBjaV9jb25mLCBQQ0lfREVWSUNFX0lEXzNDOTBYKTsKKyAgICBwY2lf Y29uZlsweDA0XSA9IDB4MDc7IC8qIGNvbW1hbmQgPSBJL08gc3BhY2UsIEJ1cyBNYXN0ZXIgKi8K KyAgICBwY2lfY29uZlsweDA4XSA9IDA7CisgICAgcGNpX2NvbmZpZ19zZXRfY2xhc3MocGNpX2Nv bmYsIFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUKTsKKyAgICBwY2lfY29uZlsweDBlXSA9IDB4 MDA7IC8qIGhlYWRlcl90eXBlICovCisgICAgcGNpX2NvbmZbMHgzZF0gPSAxOyAgICAvKiBpbnRl cnJ1cHQgcGluIDAgKi8KKyAgICBwY2lfY29uZlsweDM0XSA9IDB4ZGM7CisKKyAgICBwY2lfY29u ZlsweDNlXSA9IDU7CisgICAgcGNpX2NvbmZbMHgzZl0gPSA0ODsKKworICAgIHMgPSAmZC0+YTNj OTB4OworCisgICAgLyogSS9PIGhhbmRsZXIgZm9yIG1lbW9yeS1tYXBwZWQgSS9PICovCisgICAg cy0+YTNjOTB4X21taW9faW9fYWRkciA9CisgICAgICAgIGNwdV9yZWdpc3Rlcl9pb19tZW1vcnko MCwgYTNjOTB4X21taW9fcmVhZCwgYTNjOTB4X21taW9fd3JpdGUsIHMpOworCisgICAgcGNpX3Jl Z2lzdGVyX2lvX3JlZ2lvbigmZC0+ZGV2LCAwLCAweDEwMCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBDSV9BRERSRVNTX1NQQUNFX0lPLCAgYTNjOTB4X2lvcG9ydF9tYXApOworCisgICAg cGNpX3JlZ2lzdGVyX2lvX3JlZ2lvbigmZC0+ZGV2LCAxLCAweDEwMCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBDSV9BRERSRVNTX1NQQUNFX01FTSwgYTNjOTB4X21taW9fbWFwKTsKKwor ICAgIHMtPnBjaV9kZXYgPSAoUENJRGV2aWNlICopZDsKKyAgICBtZW1jcHkocy0+bU1BQywgbmQt Pm1hY2FkZHIsIDYpOworICAgIGEzYzkweF9yZXNldChzKTsKKyAgICBzLT52YyA9IHFlbXVfbmV3 X3ZsYW5fY2xpZW50KG5kLT52bGFuLCBuZC0+bW9kZWwsIG5kLT5uYW1lLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYTNjOTB4X3JlY2VpdmUsIGEzYzkweF9jYW5fcmVjZWl2ZSwg YTNjOTB4X2NsZWFudXAsIHMpOworCisgICAgcWVtdV9mb3JtYXRfbmljX2luZm9fc3RyKHMtPnZj LCBzLT5tTUFDKTsKKworICAgIC8vcmVnaXN0ZXJfc2F2ZXZtKCIzYzkweCIsIC0xLCA0LCBhM2M5 MHhfc2F2ZSwgYTNjOTB4X2xvYWQsIHMpOworCisgICAgcmV0dXJuIChQQ0lEZXZpY2UgKilkOwor fQorCmRpZmYgLS1naXQgYS9ody9wY2kuYyBiL2h3L3BjaS5jCmluZGV4IGJmZDM5NDIuLmU4NjAz ZGYgMTAwNjQ0Ci0tLSBhL2h3L3BjaS5jCisrKyBiL2h3L3BjaS5jCkBAIC03ODMsNiArNzgzLDcg QEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwY2lfbmljX21vZGVsc1tdID0gewogICAgICJp ODI1NTdiIiwKICAgICAiaTgyNTU5ZXIiLAogICAgICJydGw4MTM5IiwKKyAgICAiM2M5MHgiLAog ICAgICJlMTAwMCIsCiAgICAgInBjbmV0IiwKICAgICAidmlydGlvIiwKQEAgLTc5Nyw2ICs3OTgs NyBAQCBzdGF0aWMgUENJTklDSW5pdEZuIHBjaV9uaWNfaW5pdF9mbnNbXSA9IHsKICAgICBwY2lf aTgyNTU3Yl9pbml0LAogICAgIHBjaV9pODI1NTllcl9pbml0LAogICAgIHBjaV9ydGw4MTM5X2lu aXQsCisgICAgcGNpX2EzYzkweF9pbml0LAogICAgIHBjaV9lMTAwMF9pbml0LAogICAgIHBjaV9w Y25ldF9pbml0LAogICAgIHZpcnRpb19uZXRfaW5pdCwKZGlmZiAtLWdpdCBhL2h3L3BjaS5oIGIv aHcvcGNpLmgKaW5kZXggNGEzMGQ5OC4uMThiZWRmZSAxMDA2NDQKLS0tIGEvaHcvcGNpLmgKKysr IGIvaHcvcGNpLmgKQEAgLTI0Miw2ICsyNDIsOSBAQCBQQ0lEZXZpY2UgKnBjaV9uZTIwMDBfaW5p dChQQ0lCdXMgKmJ1cywgTklDSW5mbyAqbmQsIGludCBkZXZmbik7CiAKIFBDSURldmljZSAqcGNp X3J0bDgxMzlfaW5pdChQQ0lCdXMgKmJ1cywgTklDSW5mbyAqbmQsIGludCBkZXZmbik7CiAKKy8q IDNjOTB4LmMgKi8KK1BDSURldmljZSAqcGNpX2EzYzkweF9pbml0KFBDSUJ1cyAqYnVzLCBOSUNJ bmZvICpuZCwgaW50IGRldmZuKTsKKwogLyogZTEwMDAuYyAqLwogUENJRGV2aWNlICpwY2lfZTEw MDBfaW5pdChQQ0lCdXMgKmJ1cywgTklDSW5mbyAqbmQsIGludCBkZXZmbik7CiAKZGlmZiAtLWdp dCBhL2h3L3BjaV9pZHMuaCBiL2h3L3BjaV9pZHMuaAppbmRleCA0MjdmY2Q1Li40ZjdiNzg4IDEw MDY0NAotLS0gYS9ody9wY2lfaWRzLmgKKysrIGIvaHcvcGNpX2lkcy5oCkBAIC03Myw2ICs3Myw5 IEBACiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUkVBTFRFSyAgICAgICAgICAgIDB4MTBlYwogI2Rl ZmluZSBQQ0lfREVWSUNFX0lEX1JFQUxURUtfODEzOSAgICAgICAweDgxMzkKIAorI2RlZmluZSBQ Q0lfVkVORE9SX0lEXzNDT00gICAgICAgICAgICAgICAweDEwYjcKKyNkZWZpbmUgUENJX0RFVklD RV9JRF8zQzkwWCAgICAgICAgICAgICAgMHg5MjAwCisKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9Y SUxJTlggICAgICAgICAgICAgMHgxMGVlCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NQVJWRUxM ICAgICAgICAgICAgMHgxMWFiCg== --0016e64763e08aad31046b5b988b--