From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MMJhu-0003GG-6w for qemu-devel@nongnu.org; Thu, 02 Jul 2009 06:39:58 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MMJhp-0003Bn-Iq for qemu-devel@nongnu.org; Thu, 02 Jul 2009 06:39:57 -0400 Received: from [199.232.76.173] (port=56393 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MMJhp-0003BQ-6j for qemu-devel@nongnu.org; Thu, 02 Jul 2009 06:39:53 -0400 Received: from mail-vw0-f171.google.com ([209.85.212.171]:55223) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MMJhn-0001ID-VW for qemu-devel@nongnu.org; Thu, 02 Jul 2009 06:39:53 -0400 Received: by vwj1 with SMTP id 1so818267vwj.4 for ; Thu, 02 Jul 2009 03:39:50 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <4A4C8A24.70209@redhat.com> References: <4A4C8A24.70209@redhat.com> Date: Thu, 2 Jul 2009 20:39:50 +1000 Message-ID: Subject: Re: [Qemu-devel] Re: PATCH: Add 3C90X emulation From: Matthew Iselin Content-Type: multipart/mixed; boundary=0016e647f026d33b45046db6a8c2 List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Kevin Wolf Cc: qemu-devel@nongnu.org --0016e647f026d33b45046db6a8c2 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit On Thu, Jul 2, 2009 at 8:21 PM, Kevin Wolf wrote: > I think you forgot something... ;-) > Also, if you want the patch to merged you should send a proper patch > description that can serve as a commit message, including a > Signed-off-by line. You don't seem to have included this in the previous > attempts. > > Kevin > Hi, Whoops! New patch attached. Cheers, Matthew --0016e647f026d33b45046db6a8c2 Content-Type: application/octet-stream; name="3C90x-emulation.patch" Content-Disposition: attachment; filename="3C90x-emulation.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fwnch34j0 VGhpcyBwYXRjaCBhZGRzIGFuIGVtdWxhdGlvbiBvZiB0aGUgM0NvbSAzQzkweCBzZXJpZXMgb2Yg TklDcyB0byBRRU1VLgoKU2lnbmVkLW9mZi1ieTogTWF0dGhldyBJc2VsaW4gPG1hdHRoZXdAdGhl aXNlbGlucy5uZXQ+Ci0tLQogTWFrZWZpbGUudGFyZ2V0IHwgICAgMSArCiBody8zYzkweC5jICAg ICAgfCAyNDA4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIGh3L3BjaS5jICAgICAgICB8ICAgIDIgKwogaHcvcGNpX2lkcy5oICAgIHwgICAg MyArCiA0IGZpbGVzIGNoYW5nZWQsIDI0MTQgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBody8zYzkweC5jCgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudGFy Z2V0IGIvTWFrZWZpbGUudGFyZ2V0CmluZGV4IGE1OTM1MDMuLmViNDUxOTkgMTAwNjQ0Ci0tLSBh L01ha2VmaWxlLnRhcmdldAorKysgYi9NYWtlZmlsZS50YXJnZXQKQEAgLTU1NSw2ICs1NTUsNyBA QCBvYmoteSArPSBlZXBybzEwMC5vCiBvYmoteSArPSBuZTIwMDAubwogb2JqLXkgKz0gcGNuZXQu bwogb2JqLXkgKz0gcnRsODEzOS5vCitvYmoteSArPSAzYzkweC5vCiBvYmoteSArPSBlMTAwMC5v CiAKICMgR2VuZXJpYyB3YXRjaGRvZyBzdXBwb3J0IGFuZCBzb21lIHdhdGNoZG9nIGRldmljZXMK ZGlmZiAtLWdpdCBhL2h3LzNjOTB4LmMgYi9ody8zYzkweC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmJjYmU1YTQKLS0tIC9kZXYvbnVsbAorKysgYi9ody8zYzkweC5jCkBA IC0wLDAgKzEsMjQwOCBAQAorLyoqCisgKiBRRU1VIDNDOTBYIEVtdWxhdGlvbgorICoKKyAqIENv cHlyaWdodCAoYykgMjAwOSBNYXR0aGV3IElzZWxpbiAoUUVNVSBWRVJTSU9OKQorICogQ29weXJp Z2h0IChDKSAyMDA0IEpvaG4gS2VsbGV5IChwZWFycGNAa2VsbGV5LmNhKSAoUEVBUlBDIFZFUlNJ T04pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgU3RlZmFuIFdleWVyZ3JhZiAoUEVBUlBDIFZFUlNJ T04pCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQg YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwK KyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwg cHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBv ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2Fy ZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt aXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICog VEhFIFNPRlRXQVJFLgorCisgKiBNb2RpZmljYXRpb25zOgorICogIChub25lKQorICovCisKKy8q KgorICogVE9ETzoKKyAqICAtIFN0aWxsIGEgbG90IG9mIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb25h bGl0eQorICogIC0gT24tY2hpcCBUQ1AgY2hlY2tzdW0gZW11bGF0aW9uCisgKiAgLSBzYXZldm0g ZnVuY3Rpb25zCisgKiBURVNURUQgT046CisgKiAgLSBEYW1uIFNtYWxsIExpbnV4ICg0LjQuMTAp CisgKiAgLSBVYnVudHUgKDguMTAsIDUuMTApCisgKiAgLSBQZWRpZ3JlZQorICovCisKKyNpbmNs dWRlICJody5oIgorI2luY2x1ZGUgInBjaS5oIgorI2luY2x1ZGUgInBjLmgiCisjaW5jbHVkZSAi cWVtdS10aW1lci5oIgorI2luY2x1ZGUgIm5ldC5oIgorCisvLyBTaG91bGQgd2UgaW5zcGVjdCBp bmNvbWluZyBmcmFtZXMgYW5kIHByaW50IGV4dHJhIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91 dCB0aGVtPworLy8jZGVmaW5lIERFQlVHXzNDOTBYX0FOQUxZU0VfRlJBTUVTICAgICAgICAgIDAK KworI2lmZGVmIERFQlVHXzNDOTBYX0FOQUxZU0VfRlJBTUVTCisjZGVmaW5lIF9fRkFWT1JfQlNE CisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjaW5j bHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorCisjZGVmaW5lIFBBQ0tFRCAgICAgIF9fYXR0 cmlidXRlX18oKHBhY2tlZCkpOworI2RlZmluZSBBTElHTkVEICAgICBfX2F0dHJpYnV0ZV9fKChh bGlnbmVkKSk7CisjZGVmaW5lIFBBQ0tFRDggICAgIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkp KTsKKyNkZWZpbmUgUEFDS0VEMTYgICAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKTsKKyNk ZWZpbmUgUEFDS0VEMzIgICAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKTsKKworLyogZGVi dWcgM0M5MFggY2FyZCAqLworLy8gI2RlZmluZSBERUJVR18zQzkwWCAxCisKKy8qIGRlZmluZSB0 aGlzIHRvIG91dHB1dCBUWCBhbmQgUlggZXZlbnRzICovCisvLyAjZGVmaW5lIERFQlVHXzNDOTBY X0FVWCAxCisKKyNkZWZpbmUgUENJX0ZSRVFVRU5DWSAzMzAwMDAwMEwKKworLyogQ2FsY3VsYXRl IENSQ3MgcHJvcGVybHkgb24gVHggcGFja2V0cyAqLworI2RlZmluZSBBM0M5MFhfQ0FMQ1VMQVRF X1RYQ1JDIDEKKworI2lmIGRlZmluZWQoQTNDOTB4X0NBTENVTEFURV9SWENSQykKKy8qIEZvciBj cmMzMiAqLworI2luY2x1ZGUgPHpsaWIuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoREVCVUdf M0M5MFgpCisjICBkZWZpbmUgREVCVUdfUFJJTlQoeCkgZG8geyBwcmludGYoeCkgOyB9IHdoaWxl ICgwKQorIyAgZGVmaW5lIERFQlVHX1BSSU5UX0ZPUk1BVCh4KSBkbyB7IHByaW50ZiB4ICA7IH0g d2hpbGUgKDApCisjZWxzZQorIyAgZGVmaW5lIERFQlVHX1BSSU5UKHgpCisjICBkZWZpbmUgREVC VUdfUFJJTlRfRk9STUFUKHgpCisjZW5kaWYKKworI2lmIGRlZmluZWQgKERFQlVHXzNDOTBYX0FV WCkKKyMgIGRlZmluZSBBVVhfREVCVUdfUFJJTlQoeCkgZG8geyBwcmludGYoeCkgOyB9IHdoaWxl ICgwKQorIyAgZGVmaW5lIEFVWF9ERUJVR19QUklOVF9GT1JNQVQoeCkgZG8geyBwcmludGYgeCAg OyB9IHdoaWxlICgwKQorI2Vsc2UKKyMgIGRlZmluZSBBVVhfREVCVUdfUFJJTlQoeCkgREVCVUdf UFJJTlQoeCkKKyMgIGRlZmluZSBBVVhfREVCVUdfUFJJTlRfRk9STUFUKHgpIERFQlVHX1BSSU5U X0ZPUk1BVCh4KQorI2VuZGlmCisKKyNkZWZpbmUgTUFYX1BBQ0tFVF9TSVpFIDE2Mzg0CisKK2Vu dW0gQ29tbWFuZAoreworICAgIENtZFRvdGFsUmVzZXQgPSAwPDwxMSwKKyAgICBDbWRTZWxlY3RX aW5kb3cgPSAxPDwxMSwKKyAgICBDbWRFbmFibGVEQyA9IDI8PDExLCAgICAgICAgICAgICAgICAv LyBDbWRTdGFydENvYXgKKyAgICBDbWRSeERpc2FibGUgPSAzPDwxMSwKKyAgICBDbWRSeEVuYWJs ZSA9IDQ8PDExLAorICAgIENtZFJ4UmVzZXQgPSA1PDwxMSwKKyAgICBDbWRTdGFsbCA9IDY8PDEx LAorICAgIENtZFR4RG9uZSA9IDc8PDExLAorICAgIENtZFJ4RGlzY2FyZCA9IDg8PDExLAorICAg IENtZFR4RW5hYmxlID0gOTw8MTEsCisgICAgQ21kVHhEaXNhYmxlID0gMTA8PDExLAorICAgIENt ZFR4UmVzZXQgPSAxMTw8MTEsCisgICAgQ21kUmVxSW50ciA9IDEyPDwxMSwgICAgICAgICAgICAg ICAgLy8gQ21kRmFrZUludHIKKyAgICBDbWRBY2tJbnRyID0gMTM8PDExLAorICAgIENtZFNldElu dHJFbmIgPSAxNDw8MTEsCisgICAgQ21kU2V0SW5kaWNhdGlvbkVuYWJsZSA9IDE1PDwxMSwgICAg Ly8gQ21kU2V0U3RhdHVzRW5iCisgICAgQ21kU2V0UnhGaWx0ZXIgPSAxNjw8MTEsCisgICAgQ21k U2V0UnhFYXJseVRocmVzaCA9IDE3PDwxMSwKKyAgICBDbWRTZXRUeFRocmVzaG9sZCA9IDE4PDwx MSwgICAgICAgICAvLyBha2EgVHhBZ2FpbiA/CisgICAgQ21kU2V0VHhTdGFydFRocmVzaCA9IDE5 PDwxMSwgICAgICAgLy8gc2V0IFR4U3RhcnRUcmVzaAorICAgIC8vICBDbWRTdGFydERNQVVwID0g MjA8PDExLAorICAgIC8vICBDbWRTdGFydERNQURvd24gPSAoMjA8PDExKSsxLAorICAgIENtZFN0 YXRzRW5hYmxlID0gMjE8PDExLAorICAgIENtZFN0YXRzRGlzYWJsZSA9IDIyPDwxMSwKKyAgICBD bWREaXNhYmxlREMgPSAyMzw8MTEsICAgICAgICAgICAgICAvLyBDbWRTdG9wQ29heAorICAgIENt ZFNldFR4UmVjbGFpbVRocmVzaCA9IDI0PDwxMSwKKyAgICBDbWRTZXRIYXNoRmlsdGVyQml0ID0g MjU8PDExCit9OworCisvKgorICogIEludFN0YXR1c0JpdHMKKyAqLworZW51bSBJbnRTdGF0dXNC aXRzCit7CisgICAgSVNfaW50ZXJydXB0TGF0Y2ggPSAxPDwwLAorICAgIElTX2hvc3RFcnJvciA9 ICAgICAgMTw8MSwKKyAgICBJU190eENvbXBsZXRlID0gICAgIDE8PDIsCisgICAgLyogYml0IDMg aXMgdW5zcGVjaWZpZWQgKi8KKyAgICBJU19yeENvbXBsZXRlID0gICAgIDE8PDQsCisgICAgSVNf cnhFYXJseSA9ICAgICAgICAxPDw1LAorICAgIElTX2ludFJlcXVlc3RlZCA9ICAgMTw8NiwKKyAg ICBJU191cGRhdGVTdGF0cyA9ICAgIDE8PDcsCisgICAgSVNfbGlua0V2ZW50ID0gICAgICAxPDw4 LAorICAgIElTX2RuQ29tcGxldGUgPSAgICAgMTw8OSwKKyAgICBJU191cENvbXBsZXRlID0gICAg IDE8PDEwLAorICAgIElTX2NtZEluUHJvZ3Jlc3MgPSAgMTw8MTEsCisgICAgLyogYml0IDEyIGlz IHVuc3BlY2lmaWVkICovCisgICAgLyogWzE1OjEzXSBpcyBjdXJyZW50bHkgc2VsZWN0ZWQgd2lu ZG93ICovCit9OworCisvKgorICogIERtYUN0cmxCaXRzIChbMV0gcC45NikKKyAqLworZW51bSBE bWFDdHJsQml0cworeworICAgIC8qIGJpdCAwIHVuc3BlY2lmaWVkICovCisgICAgRENfZG5DbXBs UmVxID0gICAgICAgICAgMTw8MSwKKyAgICBEQ19kblN0YWxsZWQgPSAgICAgICAgICAxPDwyLAor ICAgIERDX3VwQ29tcGxldGUgPSAgICAgICAgIDE8PDMsICAgLy8gRklYTUU6IHNhbWUgYXMgaW4g SW50U3RhdHVzLCBidXQgYWx3YXlzIHZpc2libGUKKyAgICBEQ19kbkNvbXBsZXRlID0gICAgICAg ICAxPDw0LCAgIC8vIHNhbWUgYXMgYWJvdmUgXl5eCisgICAgRENfdXBSeEVhcmx5RW5hYmxlID0g ICAgMTw8NSwKKyAgICBEQ19hcm1Db3VudGRvd24gPSAgICAgICAxPDw2LAorICAgIERDX2RuSW5Q cm9nID0gICAgICAgICAgIDE8PDcsCisgICAgRENfY291bnRlclNwZWVkID0gICAgICAgMTw8OCwK KyAgICBEQ19jb3VudGRvd25Nb2RlID0gICAgICAxPDw5LAorICAgIC8qIGJpdHMgMTAtMTUgdW5z cGVjaWZpZWQgKi8KKyAgICBEQ191cEFsdFNlcURpc2FibGUgPSAgICAxPDwxNiwKKyAgICBEQ19k bkFsdFNlcURpc2FibGUgPSAgICAxPDwxNywKKyAgICBEQ19kZWZlYXRNV0kgPSAgICAgICAgICAx PDwyMCwKKyAgICBEQ19kZWZlYXRNUkwgPSAgICAgICAgICAxPDwyMSwKKyAgICBEQ191cE92ZXJE aXNjRW5hYmxlID0gICAxPDwyMiwKKyAgICBEQ190YXJnZXRBYm9ydCA9ICAgICAgICAxPDwzMCwK KyAgICBEQ19tYXN0ZXJBYm9ydCA9ICAgICAgICAxPDwzMQorfTsKKworLyoKKyAqICBNSUkgUmVn aXN0ZXJzCisgKiAgVE9ETzogSW1wbGVtZW50IE1JSSBwcm9wZXJseQorICovCisvKmVudW0gTUlJ Q29udHJvbEJpdHMgeworICAgIE1JSUNfY29sbGlzaW9uID0gICAgICAgIDE8PDcsCisgICAgTUlJ Q19mdWxsRHVwbGV4ID0gICAgICAgMTw8OCwKKyAgICBNSUlDX3Jlc3RhcnROZWdvdGUgPSAgICAx PDw5LAorICAgIE1JSUNfY29sbGlzaW9uID0gICAgICAgIDE8PDcsCisgICAgcmVzdCBtaXNzaW5n Cit9OyovCisKK3N0cnVjdCBNSUlSZWdpc3RlcnMKK3sKKyAgICB1aW50MTZfdCBjb250cm9sOwor ICAgIHVpbnQxNl90IHN0YXR1czsKKyAgICB1aW50MTZfdCBpZDA7CisgICAgdWludDE2X3QgaWQx OworICAgIHVpbnQxNl90IGFkdmVydDsKKyAgICB1aW50MTZfdCBsaW5rUGFydG5lcjsKKyAgICB1 aW50MTZfdCBleHBhbnNpb247CisgICAgdWludDE2X3QgbmV4dFBhZ2U7Cit9IFBBQ0tFRDsKK3R5 cGVkZWYgc3RydWN0IE1JSVJlZ2lzdGVycyBNSUlSZWdpc3RlcnM7CisKKy8qCisgKiAgUmVnaXN0 ZXJzCisgKi8KK3VuaW9uIFJlZ1dpbmRvdworeworICAgIHVpbnQ4X3QgYlsxNl07CisgICAgdWlu dDE2X3QgdTE2WzhdOworfSBQQUNLRUQ7Cit0eXBlZGVmIHVuaW9uIFJlZ1dpbmRvdyBSZWdXaW5k b3c7CisKK3N0cnVjdCBSZWdpc3RlcnMKK3sKKyAgICAvLyAweDEwIHVpbnQ4X3RzIG1pc3Npbmcg KGN1cnJlbnQgd2luZG93KQorICAgIHVpbnQzMl90ICAgIHIwOworICAgIHVpbnQzMl90ICAgIHIx OworICAgIHVpbnQ4X3QgICAgIFR4UGt0SWQ7CisgICAgdWludDhfdCAgICAgcjI7CisgICAgdWlu dDhfdCAgICAgVGltZXI7CisgICAgdWludDhfdCAgICAgVHhTdGF0dXM7CisgICAgdWludDE2X3Qg ICAgcjM7CisgICAgdWludDE2X3QgICAgX19kb250VXNlTWU7Ly8gIHJlYWxseTogdWludDE2X3Qg SW50U3RhdHVzQXV0bzsKKyAgICB1aW50MzJfdCAgICBEbWFDdHJsOyAgICAvLyAgWzFdIHAuOTUg KGRuKSwgcC4xMDAgKHVwKQorICAgIHVpbnQzMl90ICAgIERuTGlzdFB0cjsgIC8vICBbMV0gcC45 OAorICAgIHVpbnQxNl90ICAgIHI0OworICAgIHVpbnQ4X3QgICAgIERuQnVyc3RUaHJlc2g7ICAv LyBbMV0gcC45NworICAgIHVpbnQ4X3QgICAgIHI1OworICAgIHVpbnQ4X3QgICAgIERuUHJpb3Jp dHlUaHJlc2g7CisgICAgdWludDhfdCAgICAgRG5Qb2xsOyAgICAgLy8gWzFdIHAuMTAwCisgICAg dWludDE2X3QgICAgcjY7CisgICAgdWludDMyX3QgICAgVXBQa3RTdGF0dXM7CisgICAgdWludDE2 X3QgICAgRnJlZVRpbWVyOworICAgIHVpbnQxNl90ICAgIENvdW50ZG93bjsKKyAgICB1aW50MzJf dCAgICBVcExpc3RQdHI7ICAvLyBbMV0gcC4xMTUKKyAgICB1aW50OF90ICAgICBVcFByaW9yaXR5 VGhyZXNoOworICAgIHVpbnQ4X3QgICAgIFVwUG9sbDsKKyAgICB1aW50OF90ICAgICBVcEJ1cnN0 VGhyZXNoOworICAgIHVpbnQ4X3QgICAgIHI3OworICAgIHVpbnQzMl90ICAgIFJlYWxUaW1lQ291 bnQ7CisgICAgdWludDhfdCAgICAgQ29uZmlnQWRkcmVzczsKKyAgICB1aW50OF90ICAgICByODsK KyAgICB1aW50OF90ICAgICByOTsKKyAgICB1aW50OF90ICAgICByMTA7CisgICAgdWludDhfdCAg ICAgQ29uZmlnRGF0YTsKKyAgICB1aW50OF90ICAgICByMTE7CisgICAgdWludDhfdCAgICAgcjEy OworICAgIHVpbnQ4X3QgICAgIHIxMzsKKyAgICB1aW50MzJfdCAgICByMTRbOV07CisgICAgdWlu dDMyX3QgICAgRGVidWdEYXRhOworICAgIHVpbnQxNl90ICAgIERlYnVnQ29udHJvbDsKKyAgICB1 aW50MTZfdCAgICByMTU7CisgICAgdWludDE2X3QgICAgRG5NYXhCdXJzdDsKKyAgICB1aW50MTZf dCAgICBVcE1heEJ1cnN0OworICAgIHVpbnQxNl90ICAgIFBvd2VyTWdtdEN0cmw7CisgICAgdWlu dDE2X3QgICAgcjE2OworfSBQQUNLRUQ7Cit0eXBlZGVmIHN0cnVjdCBSZWdpc3RlcnMgUmVnaXN0 ZXJzOworCisjZGVmaW5lIFJBX0lOViAwCisKK3N0YXRpYyB1aW50OF90IGdSZWdBY2Nlc3NbMHg3 MF0gPQoreworICAgIC8qIDB4MTAgKi8KKyAgICBSQV9JTlYsIFJBX0lOViwgUkFfSU5WLCBSQV9J TlYsCisgICAgLyogMHgxNCAqLworICAgIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwK KyAgICAvKiAweDE4ICovCisgICAgMSwgICAgICAgICAgICAgIC8qIFR4UGt0SWQgKi8KKyAgICBS QV9JTlYsCisgICAgMSwgICAgICAgICAgICAgIC8qIFRpbWVyICovCisgICAgMSwgICAgICAgICAg ICAgIC8qIFR4U3RhdHVzICovCisgICAgLyogMHgxYyAqLworICAgIFJBX0lOViwgUkFfSU5WLAor ICAgIFJBX0lOViwgUkFfSU5WLCAgICAgICAgICAgICAvKiBJbnRTdGF0dXNBdXRvICovCisgICAg LyogMHgyMCAqLworICAgIDQsIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsICAvKiBEbWFDdHJsICov CisgICAgLyogMHgyNCAqLworICAgIDQsIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsICAvKiBEbkxp c3RQdHIgKi8KKyAgICAvKiAweDI4ICovCisgICAgUkFfSU5WLCBSQV9JTlYsCisgICAgMSwgICAg ICAgICAgICAgIC8qIERuQnVyc3RUaHJlc2ggKi8KKyAgICBSQV9JTlYsCisgICAgLyogMHgyYyAq LworICAgIDEsICAgICAgICAgICAgICAvKiBEblByaW9yaXR5VGhyZXNoICovCisgICAgMSwgICAg ICAgICAgICAgIC8qIERuUG9sbCAqLworICAgIFJBX0lOViwKKyAgICAxLAorICAgIC8qIDB4MzAg Ki8KKyAgICA0LCBSQV9JTlYsIFJBX0lOViwgUkFfSU5WLCAgLyogVXBQa3RTdGF0dXMgKi8KKyAg ICAvKiAweDM0ICovCisgICAgMiwgUkFfSU5WLCAgICAgICAgICAvKiBGcmVlVGltZXIgKi8KKyAg ICAyLCBSQV9JTlYsICAgICAgICAgIC8qIENvdW50ZG93biAqLworICAgIC8qIDB4MzggKi8KKyAg ICA0LCBSQV9JTlYsIFJBX0lOViwgUkFfSU5WLCAgLyogVXBMaXN0UHRyICovCisgICAgLyogMHgz YyAqLworICAgIDEsICAgICAgICAgICAgICAvKiBVcFByaW9yaXR5VGhyZXNoICovCisgICAgMSwg ICAgICAgICAgICAgIC8qIFVwUG9sbCAqLworICAgIDEsICAgICAgICAgICAgICAvKiBVcEJ1cnN0 VGhyZXNoICovCisgICAgUkFfSU5WLAorICAgIC8qIDB4NDAgKi8KKyAgICA0LCBSQV9JTlYsIFJB X0lOViwgUkFfSU5WLCAgLyogUmVhbFRpbWVDb3VudCAqLworICAgIC8qIDB4NDQgKi8KKyAgICAx LCAgICAgICAgICAgICAgLyogQ29uZmlnQWRkcmVzcyAqLworICAgIFJBX0lOViwKKyAgICBSQV9J TlYsCisgICAgUkFfSU5WLAorICAgIC8qIDB4NDggKi8KKyAgICAxLCAgICAgICAgICAgICAgLyog Q29uZmlnRGF0YSAqLworICAgIFJBX0lOViwKKyAgICBSQV9JTlYsCisgICAgUkFfSU5WLAorICAg IC8qIDB4NGMgKi8KKyAgICBSQV9JTlYsIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsCisgICAgLyog MHg1MCAqLworICAgIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwKKyAgICBSQV9JTlYs IFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsCisgICAgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwgUkFf SU5WLAorICAgIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwKKyAgICBSQV9JTlYsIFJB X0lOViwgUkFfSU5WLCBSQV9JTlYsCisgICAgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwgUkFfSU5W LAorICAgIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwKKyAgICBSQV9JTlYsIFJBX0lO ViwgUkFfSU5WLCBSQV9JTlYsCisgICAgLyogMHg3MCAqLworICAgIDQsIFJBX0lOViwgUkFfSU5W LCBSQV9JTlYsICAvKiBEZWJ1Z0RhdGEgKi8KKyAgICAvKiAweDc0ICovCisgICAgMiwgUkFfSU5W LCAgICAgICAgICAvKiBEZWJ1Z0NvbnRyb2wgKi8KKyAgICBSQV9JTlYsIFJBX0lOViwKKyAgICAv KiAweDc4ICovCisgICAgMiwgUkFfSU5WLCAgICAgICAgICAvKiBEbk1heEJ1cnN0ICovCisgICAg MiwgUkFfSU5WLCAgICAgICAgICAvKiBVcE1heEJ1cnN0ICovCisgICAgLyogMHg3YyAqLworICAg IDIsIFJBX0lOViwgICAgICAgICAgLyogUG93ZXJNZ210Q3RybCAqLworICAgIFJBX0lOViwgUkFf SU5WCit9OworCisvKgorICogIFdpbmRvdyAwCisgKi8KK3N0cnVjdCBSZWdXaW5kb3cwCit7Cisg ICAgdWludDMyX3QgICAgcjA7CisgICAgdWludDMyX3QgICAgQmlvc1JvbUFkZHI7CisgICAgdWlu dDhfdCAgICAgQmlvc1JvbURhdGE7CisgICAgdWludDhfdCAgICAgcjE7CisgICAgdWludDE2X3Qg ICAgRWVwcm9tQ29tbWFuZDsKKyAgICB1aW50MTZfdCAgICBFZXByb21EYXRhOworICAgIHVpbnQx Nl90ICAgIFhYWDsgICAgICAgIC8vIEludFN0YXR1cy9Db21tYW5kUmVnaXN0ZXIKK30gUEFDS0VE OwordHlwZWRlZiBzdHJ1Y3QgUmVnV2luZG93MCBSZWdXaW5kb3cwOworCitlbnVtIFcwX09mZnNl dHMKK3sKKyAgICBXMF9FRVBST01DbWQgPSAweGEsCisgICAgVzBfRUVQUk9NRGF0YSA9IDB4Ywor fTsKKworZW51bSBXMF9FRVBST01PcGNvZGUKK3sKKyAgICBFRU9QX1N1YkNtZCA9IDA8PDYsCisg ICAgRUVPUF9Xcml0ZVJlZyA9IDE8PDYsCisgICAgRUVPUF9SZWFkUmVnID0gMjw8NiwKKyAgICBF RU9QX0VyYXNlUmVnID0gMzw8NgorfTsKKworZW51bSBXMF9FRVBST01TdWJDbWQKK3sKKyAgICBF RVNDX1dyaXRlRGlzYWJsZSA9IDA8PDQsCisgICAgRUVTQ19Xcml0ZUFsbCA9IDE8PDQsCisgICAg RUVTQ19FcmFzZUFsbCA9IDI8PDQsCisgICAgRUVTQ19Xcml0ZUVuYWJsZSA9IDM8PDQKK307CisK Ky8qCisgKiAgV2luZG93IDIKKyAqLworc3RydWN0IFJlZ1dpbmRvdzIKK3sKKyAgICB1aW50MTZf dCAgICBTdGF0aW9uQWRkcmVzc1s2XTsKKyAgICB1aW50MTZfdCAgICBTdGF0aW9uTWFza1s2XTsK KyAgICB1aW50MTZfdCAgICBSZXNldE9wdGlvbnM7CisgICAgdWludDE2X3QgICAgWFhYOyAgICAg ICAgLy8gSW50U3RhdHVzL0NvbW1hbmRSZWdpc3RlcgorfSBQQUNLRUQ7Cit0eXBlZGVmIHN0cnVj dCBSZWdXaW5kb3cyIFJlZ1dpbmRvdzI7CisKKy8qCisgKiAgV2luZG93IDMKKyAqLworc3RydWN0 IFJlZ1dpbmRvdzMKK3sKKyAgICB1aW50MzJfdCAgICBJbnRlcm5hbENvbmZpZzsgLy8gWzFdIHAu NTgsNzYKKyAgICB1aW50MTZfdCAgICBNYXhQa3RTaXplOworICAgIHVpbnQxNl90ICAgIE1hY0Nv bnRyb2w7ICAgICAvLyBbMV0gcC4xNzkKKyAgICB1aW50MTZfdCAgICBNZWRpYU9wdGlvbnM7ICAg Ly8gWzFdIHAuNzggKEVFKSwgcC4xODEKKyAgICB1aW50MTZfdCAgICBSeEZyZWU7CisgICAgdWlu dDE2X3QgICAgVHhGcmVlOyAgICAgICAgIC8vIFsxXSBwLjEwMQorICAgIHVpbnQxNl90ICAgIFhY WDsgICAgICAgICAgICAvLyBJbnRTdGF0dXMvQ29tbWFuZFJlZ2lzdGVyCit9IFBBQ0tFRDsKK3R5 cGVkZWYgc3RydWN0IFJlZ1dpbmRvdzMgUmVnV2luZG93MzsKKworLyoKKyAqICBXaW5kb3cgNAor ICovCitlbnVtIFc0X1BoeXNNZ210Qml0cworeworICAgIFBNX21nbXRDbGsgID0gMTw8MCwKKyAg ICBQTV9tZ210RGF0YSA9IDE8PDEsCisgICAgUE1fbWdtdERpciAgPSAxPDwyCit9OworCitzdHJ1 Y3QgUmVnV2luZG93NAoreworICAgIHVpbnQxNl90ICAgIHIwOyAgICAgICAgICAgICAvKiBvZmZz ZXQgMHgwICovCisgICAgdWludDE2X3QgICAgcjE7ICAgICAgICAgICAgIC8qIG9mZnNldCAweDIg Ki8KKyAgICB1aW50MTZfdCAgICBGaWZvRGlhZ25vc3RpYzsgLyogb2Zmc2V0IDB4NCAqLworICAg IHVpbnQxNl90ICAgIE5ldERpYWdub3N0aWM7ICAvLyBbMV0gcC4xODQgLyogb2Zmc2V0IDB4NiAq LworICAgIHVpbnQxNl90ICAgIFBoeXNNZ210OyAgICAgICAvLyBbMV0gcC4xODYgLyogb2Zmc2V0 IDB4OCAqLworICAgIHVpbnQxNl90ICAgIE1lZGlhU3RhdHVzOyAgICAvLyBbMV0gcC4xODIgLyog b2Zmc2V0IDB4YSAqLworICAgIHVpbnQ4X3QgICAgIEJhZFNTRDsKKyAgICB1aW50OF90ICAgICBV cHBlcnVpbnQ4c09LOworICAgIHVpbnQxNl90ICAgIFhYWDsgICAgICAgICAgICAvLyBJbnRTdGF0 dXMvQ29tbWFuZFJlZ2lzdGVyCit9IFBBQ0tFRDsKK3R5cGVkZWYgc3RydWN0IFJlZ1dpbmRvdzQg UmVnV2luZG93NDsKKworLyoKKyAqICBXaW5kb3cgNQorICovCitlbnVtIFJ4RmlsdGVyQml0cyAg IC8vIFsxXSBwLjExMgoreworICAgIFJYRklMVF9yZWNlaXZlSW5kaXZpZHVhbCA9IDEsCisgICAg UlhGSUxUX3JlY2VpdmVNdWx0aWNhc3QgPSAyLAorICAgIFJYRklMVF9yZWNlaXZlQnJvYWRjYXN0 ID0gNCwKKyAgICBSWEZJTFRfcmVjZWl2ZUFsbEZyYW1lcyA9IDgsCisgICAgUlhGSUxUX3JlY2Vp dmVNdWx0aWNhc3RIYXNoID0gMTYKK307CisKK3N0cnVjdCBSZWdXaW5kb3c1Cit7CisgICAgdWlu dDE2X3QgICAgVHhTdGFydFRocmVzaDsKKyAgICB1aW50MTZfdCAgICByMDsKKyAgICB1aW50MTZf dCAgICByMTsKKyAgICB1aW50MTZfdCAgICBSeEVhcmx5VGhyZXNoOworICAgIHVpbnQ4X3QgICAg IFJ4RmlsdGVyOyAgICAgICAgICAgLy8gWzFdIHAuMTEyCisgICAgdWludDhfdCAgICAgVHhSZWNs YWltVGhyZXNoOworICAgIHVpbnQxNl90ICAgIEludGVycnVwdEVuYWJsZTsgICAgLy8gWzFdIHAu MTIwCisgICAgdWludDE2X3QgICAgSW5kaWNhdGlvbkVuYWJsZTsgICAvLyBbMV0gcC4xMjAKKyAg ICB1aW50MTZfdCAgICBYWFg7ICAgICAgICAgICAgICAgIC8vIEludFN0YXR1cy9Db21tYW5kUmVn aXN0ZXIKK30gUEFDS0VEOwordHlwZWRlZiBzdHJ1Y3QgUmVnV2luZG93NSBSZWdXaW5kb3c1Owor CisvKgorICogIFdpbmRvdyA2CisgKi8KK3N0cnVjdCBSZWdXaW5kb3c2Cit7CisgICAgdWludDhf dCAgICAgQ2Fycmllckxvc3Q7CisgICAgdWludDhfdCAgICAgU3FlRXJyb3JzOworICAgIHVpbnQ4 X3QgICAgIE11bHRpcGxlQ29sbGlzaW9uczsKKyAgICB1aW50OF90ICAgICBTaW5nbGVDb2xsaXNp b25zOworICAgIHVpbnQ4X3QgICAgIExhdGVDb2xsaXNpb25zOworICAgIHVpbnQ4X3QgICAgIFJ4 T3ZlcnJ1bnM7CisgICAgdWludDhfdCAgICAgRnJhbWVzWG1pdHRlZE9rOworICAgIHVpbnQ4X3Qg ICAgIEZyYW1lc1JjdmRPazsKKyAgICB1aW50OF90ICAgICBGcmFtZXNEZWZlcnJlZDsKKyAgICB1 aW50OF90ICAgICBVcHBlckZyYW1lc09rOworICAgIHVpbnQxNl90ICAgIEJ5dGVzUmN2ZE9rOwor ICAgIHVpbnQxNl90ICAgIEJ5dGVzWG1pdHRlZE9rOworICAgIHVpbnQxNl90ICAgIFhYWDsgICAg ICAgICAgICAgICAgLy8gSW50U3RhdHVzL0NvbW1hbmRSZWdpc3RlcgorfSBQQUNLRUQ7Cit0eXBl ZGVmIHN0cnVjdCBSZWdXaW5kb3c2IFJlZ1dpbmRvdzY7CisKKy8qCisgKiAgRUVQUk9NCisgKi8K K2VudW0gRUVQUk9NRmllbGQKK3sKKyAgICBFRVBST01fTm9kZUFkZHJlc3MwID0gICAgICAgMHgw MCwKKyAgICBFRVBST01fTm9kZUFkZHJlc3MxID0gICAgICAgMHgwMSwKKyAgICBFRVBST01fTm9k ZUFkZHJlc3MyID0gICAgICAgMHgwMiwKKyAgICBFRVBST01fRGV2aWNlSUQgPSAgICAgICAgICAg MHgwMywKKyAgICBFRVBST01fTWFuaWZhY3R1cmVySUQgPSAgICAgMHgwNywKKyAgICBFRVBST01f UENJUGFyYW0gPSAgICAgICAgICAgMHgwOCwKKyAgICBFRVBST01fUm9tSW5mbyA9ICAgICAgICAg ICAgMHgwOSwKKyAgICBFRVBST01fT0VNTm9kZUFkZHJlc3MwID0gICAgMHgwYSwKKyAgICBFRVBS T01fT0VNTm9kZUFkZHJlc3MxID0gICAgMHgwYiwKKyAgICBFRVBST01fT0VNTm9kZUFkZHJlc3My ID0gICAgMHgwYywKKyAgICBFRVBST01fU29mdHdhcmVJbmZvID0gICAgICAgMHgwZCwKKyAgICBF RVBST01fQ29tcFdvcmQgPSAgICAgICAgICAgMHgwZSwKKyAgICBFRVBST01fU29mdHdhcmVJbmZv MiA9ICAgICAgMHgwZiwKKyAgICBFRVBST01fQ2FwcyA9ICAgICAgICAgICAgICAgMHgxMCwKKyAg ICBFRVBST01fSW50ZXJuYWxDb25maWcwID0gICAgMHgxMiwKKyAgICBFRVBST01fSW50ZXJuYWxD b25maWcxID0gICAgMHgxMywKKyAgICBFRVBST01fU3Vic3lzdGVtVmVuZG9ySUQgPSAgMHgxNywK KyAgICBFRVBST01fU3Vic3lzdGVtSUQgPSAgICAgICAgMHgxOCwKKyAgICBFRVBST01fTWVkaWFP cHRpb25zID0gICAgICAgMHgxOSwKKyAgICBFRVBST01fU21iQWRkcmVzcyA9ICAgICAgICAgMHgx YiwKKyAgICBFRVBST01fUENJUGFyYW0yID0gICAgICAgICAgMHgxYywKKyAgICBFRVBST01fUENJ UGFyYW0zID0gICAgICAgICAgMHgxZCwKKyAgICBFRVBST01fQ2hlY2tzdW0gPSAgICAgICAgICAg MHgyMAorfTsKKworLyoKKyAqICBVcC9Eb3dubG9hZGluZworICovCisKKy8vIG11c3QgYmUgb24g OC11aW50OF90IHBoeXNpY2FsIGFkZHJlc3MgYm91bmRhcnkKK3N0cnVjdCBEUEQwCit7CisgICAg dWludDMyX3QgICAgRG5OZXh0UHRyOworICAgIHVpbnQzMl90ICAgIEZyYW1lU3RhcnRIZWFkZXI7 CisgICAgLyogIERQREZyYWdEZXNjIEZyYWdzW25dICovCit9IFBBQ0tFRDg7Cit0eXBlZGVmIHN0 cnVjdCBEUEQwIERQRDA7CisKK2VudW0gRnJhbWVTdGFydEhlYWRlckJpdHMKK3sKKyAgICBGU0hf cm5kdXBCbmRyeSA9ICAgICAgICAzPDwwLAorICAgIEZTSF9wa3RJZCA9ICAgICAgICAgICAgIDE1 PDwyLAorICAgIC8qIDEyOjEwIHVuc3BlY2lmaWVkICovCisgICAgRlNIX2NyY0FwcGVuZERpc2Fi bGUgPSAgMTw8MTMsCisgICAgRlNIX3R4SW5kaWNhdGUgPSAgICAgICAgMTw8MTUsCisgICAgRlNI X2RuQ29tcGxldGUgPSAgICAgICAgMTw8MTYsCisgICAgRlNIX3JlQXJtRGlzYWJsZSA9ICAgICAg MTw8MjMsCisgICAgRlNIX2xhc3RLYXAgPSAgICAgICAgICAgMTw8MjQsCisgICAgRlNIX2FkZElw Q2hlY2tzdW0gPSAgICAgMTw8MjUsIC8qKiBUT0RPOiB3cml0ZSBzdXBwb3J0IGZvciB0aGVzZSAq LworICAgIEZTSF9hZGRUY3BDaGVja3N1bSA9ICAgIDE8PDI2LAorICAgIEZTSF9hZGRVZHBDaGVj a3N1bSA9ICAgIDE8PDI3LAorICAgIEZTSF9ybmR1cERlZmVhdCA9ICAgICAgIDE8PDI4LAorICAg IEZTSF9kcGRFbXB0eSA9ICAgICAgICAgIDE8PDI5LAorICAgIC8qIDMwIHVuc3BlY2lmaWVkICov CisgICAgRlNIX2RuSW5kaWNhdGUgPSAgICAgICAgMTw8MzEKK307CisKKy8vIG11c3QgYmUgb24g MTYtdWludDhfdCBwaHlzaWNhbCBhZGRyZXNzIGJvdW5kYXJ5CitzdHJ1Y3QgRFBEMQoreworICAg IHVpbnQzMl90ICAgIERuTmV4dFB0cjsKKyAgICB1aW50MzJfdCAgICBTY2hlZHVsZVRpbWU7Cisg ICAgdWludDMyX3QgICAgRnJhbWVTdGFydEhlYWRlcjsKKyAgICB1aW50MzJfdCAgICByZXM7Cisg ICAgLyogIERQREZyYWdEZXNjIEZyYWdzW25dICovCit9IFBBQ0tFRDE2OwordHlwZWRlZiBzdHJ1 Y3QgRFBEMSBEUEQxOworCitzdHJ1Y3QgRFBERnJhZ0Rlc2MKK3sKKyAgICB1aW50MzJfdCAgICBE bkZyYWdBZGRyOworICAgIHVpbnQzMl90ICAgIERuRnJhZ0xlbjsgIC8vIFsxMjowXSBmcmFnTGVu LCBbMzFdIGxhc3RGcmFnCit9IFBBQ0tFRDsKK3R5cGVkZWYgc3RydWN0IERQREZyYWdEZXNjIERQ REZyYWdEZXNjOworCisvLyBtdXN0IGJlIG9uIDgtdWludDhfdCBwaHlzaWNhbCBhZGRyZXNzIGJv dW5kYXJ5CitzdHJ1Y3QgVVBECit7CisgICAgdWludDMyX3QgICAgVXBOZXh0UHRyOworICAgIHVp bnQzMl90ICAgIFVwUGt0U3RhdHVzOworICAgIC8qICBVUERGcmFnRGVzYyBGcmFnc1tuXSAqLwor fSBQQUNLRUQ4OwordHlwZWRlZiBzdHJ1Y3QgVVBEIFVQRDsKKworc3RydWN0IFVQREZyYWdEZXNj Cit7CisgICAgdWludDMyX3QgICAgVXBGcmFnQWRkcjsKKyAgICB1aW50MzJfdCAgICBVcEZyYWdM ZW47ICAvLyBbMTI6MF0gZnJhZ0xlbiwgWzMxXSBsYXN0RnJhZworfSBQQUNLRUQ7Cit0eXBlZGVm IHN0cnVjdCBVUERGcmFnRGVzYyBVUERGcmFnRGVzYzsKKworI2RlZmluZSBNQVhfRFBEX0ZSQUdT ICAgNjMKKyNkZWZpbmUgTUFYX1VQRF9GUkFHUyAgIDYzCisjZGVmaW5lIE1BWF9VUERfU0laRSAg ICAoc2l6ZW9mKFVQRCkgKyBzaXplb2YoVVBERnJhZ0Rlc2MpKk1BWF9VUERfRlJBR1MpIC8vIDUx MgorCitlbnVtIFVwUGt0U3RhdHVzQml0cworeworICAgIFVQU191cFBrdExlbiA9IDB4MWZmZiwK KyAgICAvKiAxMyB1bnNwZWNpZmllZCAqLworICAgIFVQU191cEVycm9yID0gMTw8MTQsCisgICAg VVBTX3VwQ29tcGxldGUgPSAxPDwxNSwKKyAgICBVUFNfdXBPdmVycnVuID0gMTw8MTYsCisgICAg VVBTX3J1bnRGcmFtZSA9IDE8PDE3LAorICAgIFVQU19hbGlnbm1lbnRFcnJvciA9IDE8PDE4LAor ICAgIFVQU19jcmNFcnJvciA9IDE8PDE5LAorICAgIFVQU19vdmVyc2l6ZWRGcmFtZSA9IDE8PDIw LAorICAgIC8qIDIyOjIxIHVuc3BlY2lmaWVkICovCisgICAgVVBTX2RyaWJibGVCaXRzID0gMTw8 MjMsCisgICAgVVBTX3VwT3ZlcmZsb3cgPSAxPDwyNCwKKyAgICBVUFNfaXBDaGVja3N1bUVycm9y ID0gMTw8MjUsCisgICAgVVBTX3RjcENoZWNrc3VtRXJyb3IgPSAxPDwyNiwKKyAgICBVUFNfdWRw Q2hlY2tzdW1FcnJvciA9IDE8PDI3LAorICAgIFVQRF9pbXBsaWVkQnVmZmVyRW5hYmxlID0gMTw8 MjgsCisgICAgVVBTX2lwQ2hlY2tzdW1DaGVja2VkID0gMTw8MjksCisgICAgVVBTX3RjcENoZWNr c3VtQ2hlY2tlZCA9IDE8PDMwLAorICAgIFVQU191ZHBDaGVja3N1bUNoZWNrZWQgPSAxPDwzMQor fTsKKworLy8gSUVFRSA4MDIuMyBNQUMsIEV0aGVybmV0LUlJCitzdHJ1Y3QgRXRoRnJhbWVJSQor eworICAgIHVpbnQ4X3QgZGVzdE1BQ1s2XTsKKyAgICB1aW50OF90IHNyY01BQ1s2XTsKKyAgICB1 aW50OF90IHR5cGVbMl07Cit9IFBBQ0tFRDsKK3R5cGVkZWYgc3RydWN0IEV0aEZyYW1lSUkgRXRo RnJhbWVJSTsKKworc3RydWN0IEEzQzkwWFN0YXRlCit7CisKKyAgICB1aW50MTZfdCAgICBtRUVQ Uk9NWzB4NDBdOworICAgIGNoYXIgICAgICAgIG1FRVBST01Xcml0YWJsZTsKKyAgICBSZWdpc3Rl cnMgICBtUmVnaXN0ZXJzOworICAgIFJlZ1dpbmRvdyAgIG1XaW5kb3dzWzhdOworICAgIHVpbnQx Nl90ICAgIG1JbnRTdGF0dXM7CisgICAgY2hhciAgICAgICAgbVJ4RW5hYmxlZDsKKyAgICBjaGFy ICAgICAgICBtVHhFbmFibGVkOworICAgIGNoYXIgICAgICAgIG1VcFN0YWxsZWQ7CisgICAgY2hh ciAgICAgICAgbURuU3RhbGxlZDsKKyAgICB1aW50OF90ICAgICBtUnhQYWNrZXRbTUFYX1BBQ0tF VF9TSVpFXTsKKyAgICB1aW50MzJfdCAgICBtUnhQYWNrZXRTaXplOworICAgIHVpbnQxNl90ICAg IG1NSUlSZWdzWzhdOworICAgIHVpbnQzMl90ICAgIG1NSUlSZWFkV29yZDsKKyAgICB1aW50NjRf dCAgICBtTUlJV3JpdGVXb3JkOworICAgIHVpbnQzMl90ICAgIG1NSUlXcml0dGVuQml0czsKKyAg ICB1aW50MTZfdCAgICBtTGFzdEhpQ2xrUGh5c01nbXQ7CisgICAgdWludDhfdCAgICAgbU1BQ1s2 XTsKKworCisgICAgUENJRGV2aWNlICAgKnBjaV9kZXY7CisgICAgaW50ICAgICAgICAgYTNjOTB4 X21taW9faW9fYWRkcjsKKworICAgIFZMQU5DbGllbnRTdGF0ZSAqdmM7CisKK307Cit0eXBlZGVm IHN0cnVjdCBBM0M5MFhTdGF0ZSBBM0M5MFhTdGF0ZTsKKworc3RhdGljIHZvaWQgYTNjOTB4X3Jl c2V0KEEzQzkwWFN0YXRlICpzKTsKKworc3RhdGljIHZvaWQgc2V0Q1IodWludDE2X3QgY3IsIHZv aWQgKm9wYXF1ZSk7CisKK3N0YXRpYyB1aW50MzJfdCByZWFkUmVnV2luZG93KEEzQzkwWFN0YXRl ICpzLCB1aW50MzJfdCB3aW5kb3csIHVpbnQzMl90IHBvcnQsIHVpbnQzMl90IGRhdGEsIHVpbnQz Ml90IHNpemUpOworc3RhdGljIHZvaWQgd3JpdGVSZWdXaW5kb3coQTNDOTBYU3RhdGUgKnMsIHVp bnQzMl90IHdpbmRvdywgdWludDMyX3QgcG9ydCwgdWludDMyX3QgZGF0YSwgdWludDMyX3Qgc2l6 ZSk7CisKK3N0YXRpYyB2b2lkIGNoZWNrRG5Xb3JrKHZvaWQgKm9wYXF1ZSk7CitzdGF0aWMgdm9p ZCBjaGVja1VwV29yayh2b2lkICpvcGFxdWUpOworCitzdGF0aWMgdm9pZCB0eERQRDAodm9pZCAq b3BhcXVlLCBEUEQwICpkcGQpOworc3RhdGljIHZvaWQgcnhVUEQodm9pZCAqb3BhcXVlLCBVUEQg KnVwZCk7CisKK3N0YXRpYyB2b2lkIGluZGljYXRlKHVpbnQzMl90IGluZGljYXRpb25zLCB2b2lk ICpvcGFxdWUpOworc3RhdGljIHZvaWQgYWNrbm93bGVkZ2UodWludDMyX3QgaW5kaWNhdGlvbnMs IHZvaWQgKm9wYXF1ZSk7CitzdGF0aWMgdm9pZCBtYXliZVJhaXNlSW50cih2b2lkICpvcGFxdWUp OworCitzdGF0aWMgY2hhciBwYXNzZXNSeEZpbHRlcih1aW50OF90ICpwYnVmLCB1aW50MzJfdCBw c2l6ZSwgdm9pZCAqb3BhcXVlKTsKKworc3RhdGljIHZvaWQgaGFuZGxlX3J4KHZvaWQgKm9wYXF1 ZSwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgc2l6ZSk7CisKK3N0YXRpYyB2b2lkIGEzYzkweF9j bGVhbnVwKFZMQU5DbGllbnRTdGF0ZSAqdmMpOworCitzdGF0aWMgaW50IGNvbXBhcmVNQUNzKHVp bnQ4X3QgYVs2XSwgdWludDhfdCBiWzZdKTsKKworLyoKKyAqICBtaXNjCisgKi8KK3N0YXRpYyBp bnQgY29tcGFyZU1BQ3ModWludDhfdCBhWzZdLCB1aW50OF90IGJbNl0pCit7CisgICAgdWludDMy X3QgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGFb aV0gIT0gYltpXSkgcmV0dXJuIGFbaV0gLSBiW2ldOworICAgIH0KKyAgICByZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQgYTNjOTB4X3Jlc2V0KEEzQzkwWFN0YXRlICpzKQoreworICAgIC8qIEZJ WE1FOiByZXNldHRpbmcgY2FuIGJlIGRvbmUgbW9yZSBmaW5lLWdyYWluZWQgKHNlZSBUb3RhbFJl c2V0IGNtZCkuCisgICAgICogICAgICAgIHRoaXMgaXMgcmVzZXQgQUxMIHJlZ3MuCisgICAgICov CisgICAgaWYgKHNpemVvZihSZWdpc3RlcnMpICE9IDB4NzApCisgICAgeworICAgICAgICBERUJV R19QUklOVCgic2l6ZW9mIFJlZ2lzdGVycyAhPSAweDcwXG4iKTsKKyAgICB9CisKKyAgICBSZWdX aW5kb3czICp3MyA9IChSZWdXaW5kb3czKikgJihzLT5tV2luZG93c1szXSk7CisgICAgUmVnV2lu ZG93NCAqdzQgPSAoUmVnV2luZG93NCopICYocy0+bVdpbmRvd3NbNF0pOworICAgIFJlZ1dpbmRv dzUgKnc1ID0gKFJlZ1dpbmRvdzUqKSAmKHMtPm1XaW5kb3dzWzVdKTsKKworICAgIC8vIGludGVy bmFscworICAgIHMtPm1FRVBST01Xcml0YWJsZSA9IDA7CisgICAgbWVtc2V0KCYocy0+bVdpbmRv d3MpLCAwLCBzaXplb2Ygcy0+bVdpbmRvd3MpOworICAgIG1lbXNldCgmKHMtPm1SZWdpc3RlcnMp LCAwLCBzaXplb2Ygcy0+bVJlZ2lzdGVycyk7CisgICAgcy0+bUludFN0YXR1cyA9IDA7CisgICAg cy0+bVJ4RW5hYmxlZCA9IDA7CisgICAgcy0+bVR4RW5hYmxlZCA9IDA7CisgICAgcy0+bVVwU3Rh bGxlZCA9IDA7CisgICAgcy0+bURuU3RhbGxlZCA9IDA7CisgICAgdzMtPk1heFBrdFNpemUgPSAx NTE0IC8qIEZJWE1FOiBzaG91bGQgZGVwZW5kIG9uIHNpemVvZiBtUnhQYWNrZXQqLzsKKyAgICB3 My0+UnhGcmVlID0gMTYqMTAyNDsKKyAgICB3My0+VHhGcmVlID0gMTYqMTAyNDsKKyAgICBzLT5t UnhQYWNrZXRTaXplID0gMDsKKyAgICB3NS0+VHhTdGFydFRocmVzaCA9IDgxODg7CisgICAgbWVt c2V0KHMtPm1FRVBST00sIDAsIHNpemVvZiBzLT5tRUVQUk9NKTsKKyAgICBzLT5tRUVQUk9NW0VF UFJPTV9Ob2RlQWRkcmVzczBdID0gICAgICAgKHMtPm1NQUNbMF08PDgpIHwgcy0+bU1BQ1sxXTsK KyAgICBzLT5tRUVQUk9NW0VFUFJPTV9Ob2RlQWRkcmVzczFdID0gICAgICAgKHMtPm1NQUNbMl08 PDgpIHwgcy0+bU1BQ1szXTsKKyAgICBzLT5tRUVQUk9NW0VFUFJPTV9Ob2RlQWRkcmVzczJdID0g ICAgICAgKHMtPm1NQUNbNF08PDgpIHwgcy0+bU1BQ1s1XTsKKyAgICBzLT5tRUVQUk9NW0VFUFJP TV9EZXZpY2VJRF0gPSAgICAgICAgICAgMHg5MjAwOworICAgIHMtPm1FRVBST01bRUVQUk9NX01h bmlmYWN0dXJlcklEXSA9ICAgICAweDZkNTA7CisgICAgcy0+bUVFUFJPTVtFRVBST01fUENJUGFy YW1dID0gICAgICAgICAgIDB4Mjk0MDsKKyAgICBzLT5tRUVQUk9NW0VFUFJPTV9Sb21JbmZvXSA9 ICAgICAgICAgICAgMDsgIC8vIG5vIFJPTQorICAgIHMtPm1FRVBST01bRUVQUk9NX09FTU5vZGVB ZGRyZXNzMF0gPSAgICBzLT5tRUVQUk9NW0VFUFJPTV9Ob2RlQWRkcmVzczBdOworICAgIHMtPm1F RVBST01bRUVQUk9NX09FTU5vZGVBZGRyZXNzMV0gPSAgICBzLT5tRUVQUk9NW0VFUFJPTV9Ob2Rl QWRkcmVzczFdOworICAgIHMtPm1FRVBST01bRUVQUk9NX09FTU5vZGVBZGRyZXNzMl0gPSAgICBz LT5tRUVQUk9NW0VFUFJPTV9Ob2RlQWRkcmVzczJdOworICAgIHMtPm1FRVBST01bRUVQUk9NX1Nv ZnR3YXJlSW5mb10gPSAgICAgICAweDQwMTA7CisgICAgcy0+bUVFUFJPTVtFRVBST01fQ29tcFdv cmRdID0gICAgICAgICAgIDA7CisgICAgcy0+bUVFUFJPTVtFRVBST01fU29mdHdhcmVJbmZvMl0g PSAgICAgIDB4MDBhYTsKKyAgICBzLT5tRUVQUk9NW0VFUFJPTV9DYXBzXSA9ICAgICAgICAgICAg ICAgMHg3MmEyOworICAgIHMtPm1FRVBST01bRUVQUk9NX0ludGVybmFsQ29uZmlnMF0gPSAgICAw OworICAgIHMtPm1FRVBST01bRUVQUk9NX0ludGVybmFsQ29uZmlnMV0gPSAgICAweDAwNTA7IC8v IGRlZmF1bHQgaXMgMHgwMTgwCisgICAgcy0+bUVFUFJPTVtFRVBST01fU3Vic3lzdGVtVmVuZG9y SURdID0gIDB4MTBiNzsKKyAgICBzLT5tRUVQUk9NW0VFUFJPTV9TdWJzeXN0ZW1JRF0gPSAgICAg ICAgMHg5MjAwOworICAgIHMtPm1FRVBST01bRUVQUk9NX01lZGlhT3B0aW9uc10gPSAgICAgICAw eDAwMGE7CisgICAgcy0+bUVFUFJPTVtFRVBST01fU21iQWRkcmVzc10gPSAgICAgICAgIDB4NjMw MDsKKyAgICBzLT5tRUVQUk9NW0VFUFJPTV9QQ0lQYXJhbTJdID0gICAgICAgICAgMHhmZmI3Owor ICAgIHMtPm1FRVBST01bRUVQUk9NX1BDSVBhcmFtM10gPSAgICAgICAgICAweGI3Yjc7CisgICAg cy0+bUVFUFJPTVtFRVBST01fQ2hlY2tzdW1dID0gICAgICAgICAgIDA7CisKKyAgICAvLyBNSUkK KyAgICBtZW1zZXQocy0+bU1JSVJlZ3MsIDAsIHNpemVvZiBzLT5tTUlJUmVncyk7CisgICAgTUlJ UmVnaXN0ZXJzICptaWlyZWdzID0gKE1JSVJlZ2lzdGVycyopIHMtPm1NSUlSZWdzOworICAgIG1p aXJlZ3MtPnN0YXR1cyA9ICgxPDwxNCkgfCAoMTw8MTMpIHwgKDE8PDEyKSB8ICgxPDwxMSkgfCAo MTw8NSkgfCAoMTw8MykgfCAoMTw8MikgfCAxOworICAgIG1paXJlZ3MtPmxpbmtQYXJ0bmVyID0g KDE8PDE0KSB8ICgxPDw3KSB8IDE7CisgICAgbWlpcmVncy0+YWR2ZXJ0ID0gKDE8PDE0KSB8ICgx IDw8IDEwKSB8ICgxPDw3KSB8IDE7CisgICAgcy0+bU1JSVJlYWRXb3JkID0gMDsKKyAgICBzLT5t TUlJV3JpdGVXb3JkID0gMDsKKyAgICBzLT5tTUlJV3JpdHRlbkJpdHMgPSAwOworICAgIHMtPm1M YXN0SGlDbGtQaHlzTWdtdCA9IDA7CisKKyAgICAvLyBSZWdpc3RlciBmb2xsb3ctdXBzCisgICAg dzMtPk1lZGlhT3B0aW9ucyA9IHMtPm1FRVBST01bRUVQUk9NX01lZGlhT3B0aW9uc107CisgICAg dzMtPkludGVybmFsQ29uZmlnID0gcy0+bUVFUFJPTVtFRVBST01fSW50ZXJuYWxDb25maWcwXSB8 CisgICAgICAgICAgICAgICAgICAgICAgICAgKHMtPm1FRVBST01bRUVQUk9NX0ludGVybmFsQ29u ZmlnMV0gPDwgMTYpOworCisgICAgLy8gQSB2YWxpZCBsaW5rIGlzIGVzdGFibGlzaGVkIG9uIHRo ZSBOSUMKKyAgICB3NC0+TWVkaWFTdGF0dXMgPSAoMSA8PCAxMSkgfCAweDgwMDA7CisKKyAgICAv LyBBbmQgY2xlYW4gb3V0IHRoZSBSWCBidWZmZXIKKyAgICBtZW1zZXQocy0+bVJ4UGFja2V0LCAw eGFiLCBNQVhfUEFDS0VUX1NJWkUpOworfQorCitzdGF0aWMgdWludDMyX3QgcmVhZFJlZ1dpbmRv dyhBM0M5MFhTdGF0ZSAqcywgdWludDMyX3Qgd2luZG93LCB1aW50MzJfdCBwb3J0LCB1aW50MzJf dCBkYXRhLCB1aW50MzJfdCBzaXplKQoreworICAgIERFQlVHX1BSSU5UKCJyZWFkUmVnV2luZG93 XG4iKTsKKyAgICBzd2l0Y2ggKHdpbmRvdykKKyAgICB7CisgICAgICAgIC8qIHdpbmRvdyAwICov CisgICAgY2FzZSAwOgorICAgIHsKKyAgICAgICAgUmVnV2luZG93MCAqdzAgPSAoUmVnV2luZG93 MCopICZzLT5tV2luZG93c1swXTsKKyAgICAgICAgc3dpdGNoIChwb3J0KQorICAgICAgICB7Cisg ICAgICAgIGNhc2UgVzBfRUVQUk9NQ21kOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2l6 ZSAhPSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJXQVJO OiBFZXByb21Db21tYW5kLCBzaXplICE9IDJcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAw OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHcwLT5FZXByb21Db21tYW5kOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXMF9FRVBST01EYXRh OgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2l6ZSAhPSAyKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJXQVJOOiBFZXByb21EYXRhLCBzaXplICE9IDJc biIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgcmV0dXJuIHcwLT5FZXByb21EYXRhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERFQlVHX1BSSU5UKCJXQVJOOiByZWFkaW5n IGhlcmUgdW5pbXBsXG4iKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8qIHdpbmRvdyAxICov CisgICAgY2FzZSAxOgorICAgIHsKKyAgICAgICAgZGF0YSA9IDA7CisgICAgICAgIG1lbWNweSgm ZGF0YSwgJnMtPm1XaW5kb3dzWzFdLmJbcG9ydF0sIHNpemUpOworICAgICAgICByZXR1cm4gZGF0 YTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8qIHdpbmRvdyAyICovCisgICAgY2FzZSAy OgorICAgIHsKKyAgICAgICAgZGF0YSA9IDA7CisgICAgICAgIG1lbWNweSgmZGF0YSwgJnMtPm1X aW5kb3dzWzJdLmJbcG9ydF0sIHNpemUpOworICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAg YnJlYWs7CisgICAgfQorICAgIC8qIHdpbmRvdyAzICovCisgICAgY2FzZSAzOgorICAgIHsKKyAg ICAgICAgZGF0YSA9IDA7CisgICAgICAgIG1lbWNweSgmZGF0YSwgJnMtPm1XaW5kb3dzWzNdLmJb cG9ydF0sIHNpemUpOworICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgYnJlYWs7CisgICAg fQorICAgIC8qIHdpbmRvdyA0ICovCisgICAgY2FzZSA0OgorICAgIHsKKyAgICAgICAgREVCVUdf UFJJTlQoIlJlYWQgZnJvbSB3aW5kb3cgNFxuIik7CisgICAgICAgIFJlZ1dpbmRvdzQgKnc0ID0g KFJlZ1dpbmRvdzQqKSAmcy0+bVdpbmRvd3NbNF07CisgICAgICAgIGRhdGEgPSAwOworICAgICAg ICBzd2l0Y2ggKHBvcnQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICB7Cisg ICAgICAgICAgICAvLyBNSUktaW50ZXJmYWNlCisgICAgICAgICAgICBpZiAoc2l6ZSAhPSAyKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJhbGlnbm1lbnQuNC44 LnJlYWRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgY2hhciBtZ210RGF0YSA9IChzLT5tTUlJUmVhZFdvcmQgJiAweDgwMDAwMDAwKSA/ IDEgOiAwOworICAgICAgICAgICAgaWYgKG1nbXREYXRhKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgIGRhdGEgPSB3NC0+UGh5c01nbXQgfCBQTV9tZ210RGF0YTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRh ID0gdzQtPlBoeXNNZ210ICYgKH5QTV9tZ210RGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDB4YzoKKyAgICAgICAgeworICAg ICAgICAgICAgaWYgKHNpemUgIT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBE RUJVR19QUklOVCgiYWxpZ25tZW50LjQuYy5yZWFkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1 cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHJlYWRpbmcgY2xlYXJzCisgICAg ICAgICAgICB3NC0+QmFkU1NEID0gMDsKKyAgICAgICAgICAgIG1lbWNweSgmZGF0YSwgJnMtPm1X aW5kb3dzWzRdLmJbcG9ydF0sIHNpemUpOworICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg bWVtY3B5KCZkYXRhLCAmKHMtPm1XaW5kb3dzWzRdLmJbcG9ydF0pLCBzaXplKTsKKyAgICAgICAg ICAgIHJldHVybiBkYXRhOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAv KiBXaW5kb3cgNSAqLworICAgIGNhc2UgNToKKyAgICB7CisgICAgICAgIGRhdGEgPSAwOworICAg ICAgICBtZW1jcHkoJmRhdGEsICZzLT5tV2luZG93c1s1XS5iW3BvcnRdLCBzaXplKTsKKyAgICAg ICAgcmV0dXJuIGRhdGE7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvKiBXaW5kb3cgNiAq LworICAgIGNhc2UgNjoKKyAgICB7CisgICAgICAgIFJlZ1dpbmRvdzYgKnc2ID0gKFJlZ1dpbmRv dzYqKSAmcy0+bVdpbmRvd3NbNl07CisgICAgICAgIC8vIHJlYWRpbmcgY2xlYXJzCisgICAgICAg IGlmICgocG9ydCA9PSAweGEpICYmIChzaXplID09IDIpKQorICAgICAgICB7CisgICAgICAgICAg ICAvLyBGSVhNRTogQnl0ZXNSY3ZkT2sgcmVhbGx5IGlzIDIwIGJpdHMgIQorICAgICAgICAgICAg Ly8gd2hlbiByZWFkaW5nIGhlcmUsIHdyaXRlIHVwcGVyIDQgYml0cworICAgICAgICAgICAgLy8g aW4gdzQuVXBwZXJCeXRlc09rWzM6MF0uIG5vIGNsZWFyaW5nLgorICAgICAgICAgICAgdzYtPkJ5 dGVzUmN2ZE9rID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgocG9ydCA9PSAweGMp ICYmIChzaXplID09IDIpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGSVhNRTogQnl0ZXNY bWl0dGVkT2sgcmVhbGx5IGlzIDIwIGJpdHMgIQorICAgICAgICAgICAgLy8gd2hlbiByZWFkaW5n IGhlcmUsIHdyaXRlIHVwcGVyIDQgYml0cworICAgICAgICAgICAgLy8gaW4gdzQuVXBwZXJCeXRl c09rWzc6NF0uIG5vIGNsZWFyaW5nLgorICAgICAgICAgICAgdzYtPkJ5dGVzWG1pdHRlZE9rID0g MDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgocG9ydCA9PSAwKSAmJiAoc2l6ZSA9PSAx KSkKKyAgICAgICAgeworICAgICAgICAgICAgdzYtPkNhcnJpZXJMb3N0ID0gMDsKKyAgICAgICAg fQorICAgICAgICBlbHNlIGlmICgocG9ydCA9PSA4KSAmJiAoc2l6ZSA9PSAxKSkKKyAgICAgICAg eworICAgICAgICAgICAgdzYtPkZyYW1lc0RlZmVycmVkID0gMDsKKyAgICAgICAgfQorICAgICAg ICBlbHNlIGlmICgocG9ydCA9PSA3KSAmJiAoc2l6ZSA9PSAxKSkKKyAgICAgICAgeworICAgICAg ICAgICAgLy8gRklYTUU6IEZyYW1lc1JjdmRPayByZWFsbHkgaXMgMTAgYml0cyAhCisgICAgICAg ICAgICAvLyB3aGVuIHJlYWRpbmcgaGVyZSwgd3JpdGUgdXBwZXIgMiBiaXRzCisgICAgICAgICAg ICAvLyBpbiB3Ni5VcHBlckZyYW1lc09rWzE6MF0uIG5vIGNsZWFyaW5nLgorICAgICAgICB9Cisg ICAgICAgIGVsc2UgaWYgKChwb3J0ID09IDYpICYmIChzaXplID09IDEpKQorICAgICAgICB7Cisg ICAgICAgICAgICAvLyBGSVhNRTogRnJhbWVzWG1pdHRlZE9rIHJlYWxseSBpcyAxMCBiaXRzICEK KyAgICAgICAgICAgIC8vIHdoZW4gcmVhZGluZyBoZXJlLCB3cml0ZSB1cHBlciAyIGJpdHMKKyAg ICAgICAgICAgIC8vIGluIHc2LlVwcGVyRnJhbWVzT2tbNTo0XS4gbm8gY2xlYXJpbmcuCisgICAg ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKHBvcnQgPT0gNCkgJiYgKHNpemUgPT0gMSkpCisgICAg ICAgIHsKKyAgICAgICAgICAgIHc2LT5MYXRlQ29sbGlzaW9ucyA9IDA7CisgICAgICAgIH0KKyAg ICAgICAgZWxzZSBpZiAoKHBvcnQgPT0gMikgJiYgKHNpemUgPT0gMSkpCisgICAgICAgIHsKKyAg ICAgICAgICAgIHc2LT5NdWx0aXBsZUNvbGxpc2lvbnMgPSAwOworICAgICAgICB9CisgICAgICAg IGVsc2UgaWYgKChwb3J0ID09IDUpICYmIChzaXplID09IDEpKQorICAgICAgICB7CisgICAgICAg ICAgICB3Ni0+UnhPdmVycnVucyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKHBv cnQgPT0gMykgJiYgKHNpemUgPT0gMSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHc2LT5TaW5n bGVDb2xsaXNpb25zID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgocG9ydCA9PSAx KSAmJiAoc2l6ZSA9PSAxKSkKKyAgICAgICAgeworICAgICAgICAgICAgdzYtPlNxZUVycm9ycyA9 IDA7CisgICAgICAgIH0KKyAgICAgICAgZGF0YSA9IDA7CisgICAgICAgIG1lbWNweSgmZGF0YSwg JnMtPm1XaW5kb3dzWzZdLmJbcG9ydF0sIHNpemUpOworICAgICAgICByZXR1cm4gZGF0YTsKKyAg ICAgICAgYnJlYWs7CisgICAgfQorICAgIC8qIFdpbmRvdyA3ICovCisgICAgY2FzZSA3OgorICAg IHsKKyAgICAgICAgZGF0YSA9IDA7CisgICAgICAgIG1lbWNweSgmZGF0YSwgJnMtPm1XaW5kb3dz WzddLmJbcG9ydF0sIHNpemUpOworICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgYnJlYWs7 CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIERFQlVHX1BSSU5UKCJyZWFkaW5nIGhlcmUg dW5pbXBsLlxuIik7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdy aXRlUmVnV2luZG93KEEzQzkwWFN0YXRlICpzLCB1aW50MzJfdCB3aW5kb3csIHVpbnQzMl90IHBv cnQsIHVpbnQzMl90IGRhdGEsIHVpbnQzMl90IHNpemUpCit7CisgICAgREVCVUdfUFJJTlQoIndy aXRlUmVnV2luZG93XG4iKTsKKyAgICBzd2l0Y2ggKHdpbmRvdykKKyAgICB7CisgICAgICAgIC8q IFdpbmRvdyAwICovCisgICAgY2FzZSAwOgorICAgIHsKKyAgICAgICAgUmVnV2luZG93MCAqdzAg PSAoUmVnV2luZG93MCopICZzLT5tV2luZG93c1swXTsKKyAgICAgICAgc3dpdGNoIChwb3J0KQor ICAgICAgICB7CisgICAgICAgIGNhc2UgVzBfRUVQUk9NQ21kOgorICAgICAgICB7CisgICAgICAg ICAgICBpZiAoc2l6ZSAhPSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERFQlVH X1BSSU5UKCJFZXByb21Db21tYW5kLCBzaXplICE9IDJcbiIpOworICAgICAgICAgICAgICAgIHJl dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHcwLT5FZXByb21Db21tYW5kID0gZGF0 YSAmIDB4ZmY3ZjsgIC8vIGNsZWFyIGVlcHJvbUJ1c3kKKyAgICAgICAgICAgIHVpbnQzMl90IGVl cHJvbV9hZGRyID0gICgoZGF0YSA+PiAyKSAmIDB4ZmZjMCkgfCAoZGF0YSAmIDB4M2YpOworICAg ICAgICAgICAgc3dpdGNoIChkYXRhICYgMHhjMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg IGNhc2UgRUVPUF9TdWJDbWQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhICYgMHgzMCkK KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBFRVNDX1dyaXRlRGlzYWJs ZToKKyAgICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQoIkVFU0NfV3JpdGVEaXNhYmxlXG4i KTsKKyAgICAgICAgICAgICAgICAgICAgcy0+bUVFUFJPTVdyaXRhYmxlID0gMDsKKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBFRVNDX1dyaXRlQWxsOgor ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBuZWVkcyBmaXhpbmcgOikKKyAgICAg ICAgICAgICAgICAgICAgREVCVUdfUFJJTlQoIldyaXRlQWxsIG5vdCBpbXBsLlxuIik7CisgICAg ICAgICAgICAgICAgICAgIG1lbXNldChzLT5tRUVQUk9NLCAweGZmLCBzaXplb2Ygcy0+bUVFUFJP TSk7CisgICAgICAgICAgICAgICAgICAgIHMtPm1FRVBST01Xcml0YWJsZSA9IDA7CisgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRUVTQ19FcmFzZUFsbDoK KyAgICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQoIkVyYXNlQWxsIG5vdCBpbXBsLlxuIik7 CisgICAgICAgICAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICAgICAgICAg ICAgICBtZW1zZXQocy0+bUVFUFJPTSwgMCwgc2l6ZW9mIHMtPm1FRVBST00pOworICAgICAgICAg ICAgICAgICAgICBzLT5tRUVQUk9NV3JpdGFibGUgPSAwOworICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVFU0NfV3JpdGVFbmFibGU6CisgICAgICAgICAg ICAgICAgICAgIERFQlVHX1BSSU5UKCJFRVNDX1dyaXRlRW5hYmxlXG4iKTsKKyAgICAgICAgICAg ICAgICAgICAgcy0+bUVFUFJPTVdyaXRhYmxlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgREVCVUdf UFJJTlQoImltcG9zc2libGVcbiIpOworICAgICAgICAgICAgICAgICAgICAvLyBTSU5HTEVTVEVQ KCIiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICBjYXNlIEVFT1BfV3JpdGVSZWc6CisgICAgICAgICAgICAgICAgaWYgKHMtPm1FRVBST01X cml0YWJsZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlZXBy b21fYWRkcioyIDwgc2l6ZW9mIHMtPm1FRVBST00pCisgICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGVkCisgICAgICAgICAgICAgICAgICAgICAg ICBERUJVR19QUklOVCgiRUVPUF9Xcml0ZVJlZ1xuIik7CisgICAgICAgICAgICAgICAgICAgICAg ICAvLyBTSU5HTEVTVEVQKCIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPm1FRVBST01b ZWVwcm9tX2FkZHJdID0gdzAtPkVlcHJvbURhdGE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgICAgICBERUJVR19QUklOVCgiRkFJTEVEKG91dCBvZiBib3VuZHMpOiBFRU9QX1dy aXRlUmVnXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBz LT5tRUVQUk9NV3JpdGFibGUgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBERUJVR19QUklO VCgiRkFJTEVEKG5vdCB3cml0YWJsZSk6IEVFT1BfV3JpdGVSZWdcbiIpOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRUVPUF9SZWFk UmVnOgorICAgICAgICAgICAgICAgIGlmIChlZXByb21fYWRkcioyIDwgc2l6ZW9mIHMtPm1FRVBS T00pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3MC0+RWVwcm9tRGF0 YSA9IHMtPm1FRVBST01bZWVwcm9tX2FkZHJdOworICAgICAgICAgICAgICAgICAgICBERUJVR19Q UklOVCgiRUVPUF9SZWFkUmVnXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdfUFJJ TlQoIkZBSUxFRChvdXQgb2YgYm91bmRzKTogRUVPUF9SZWFkUmVnXG4iKTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVFT1BfRXJh c2VSZWc6CisgICAgICAgICAgICAgICAgaWYgKHMtPm1FRVBST01Xcml0YWJsZSkKKyAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlZXByb21fYWRkcioyIDwgc2l6ZW9m IHMtPm1FRVBST00pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIC8vIGRpc2FibGVkCisgICAgICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiRUVP UF9FcmFzZVJlZ1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTSU5HTEVTVEVQKCIi KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPm1FRVBST01bZWVwcm9tX2FkZHJdID0gMDsK KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJGQUlM RUQob3V0IG9mIGJvdW5kcyk6IEVFT1BfRXJhc2VSZWdcbiIpOworICAgICAgICAgICAgICAgICAg ICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgcy0+bUVFUFJPTVdyaXRhYmxlID0gMDsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgREVCVUdfUFJJTlQoIkZBSUxFRChub3Qgd3JpdGFibGUpOiBFRU9QX0VyYXNlUmVnXG4iKTsK KyAgICAgICAgICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg ICAgICAgICBERUJVR19QUklOVCgiaW1wb3NzaWJsZVxuIik7CisgICAgICAgICAgICAgICAgLy8g U0lOR0xFU1RFUCgiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgfQorICAgICAgICBjYXNlIFcwX0VFUFJPTURhdGE6CisgICAgICAgICAgICBpZiAoc2l6ZSAh PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJFZXByb21E YXRhLCBzaXplICE9IDJcbiIpOworICAgICAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgdzAtPkVlcHJvbURhdGEgPSBkYXRhOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERUJVR19QUklOVCgi d3JpdGluZyBoZXJlIHVuaW1wbC4wXG4iKTsKKyAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIp OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor ICAgIC8qIFdpbmRvdyAyICovCisgICAgY2FzZSAyOgorICAgIHsKKyAgICAgICAgaWYgKHBvcnQr c2l6ZTw9MHhjKQorICAgICAgICB7CisgICAgICAgICAgICBERUJVR19QUklOVCgiU3RhdGlvbkFk ZHJlc3Mgb3IgU3RhdGlvbk1hc2tcbiIpOworICAgICAgICAgICAgLyogU3RhdGlvbkFkZHJlc3Mg b3IgU3RhdGlvbk1hc2sgKi8KKyAgICAgICAgICAgIG1lbWNweSgmcy0+bVdpbmRvd3NbMl0uYltw b3J0XSwgJmRhdGEsIHNpemUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor ICAgICAgICAgICAgREVCVUdfUFJJTlQoIndyaXRpbmcgaGVyZSB1bmltcGwuMlxuIik7CisgICAg ICAgICAgICAvLyBTSU5HTEVTVEVQKCIiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg ICB9CisgICAgLyogV2luZG93IDMgKi8KKyAgICBjYXNlIDM6CisgICAgeworICAgICAgICBSZWdX aW5kb3czICp3MyA9IChSZWdXaW5kb3czKikgJnMtPm1XaW5kb3dzWzNdOworICAgICAgICBzd2l0 Y2ggKHBvcnQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgaWYgKHNp emUgIT0gNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiYWxp Z25tZW50LjMuMFxuIik7CisgICAgICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBERUJVR19QUklOVCgiSW50ZXJuYWxDb25maWdcbiIpOwor ICAgICAgICAgICAgdzMtPkludGVybmFsQ29uZmlnID0gZGF0YTsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBpZiAoc2l6ZSAhPSAyKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJhbGlnbm1lbnQuMy40XG4iKTsKKyAg ICAgICAgICAgICAgICAvLyBTSU5HTEVTVEVQKCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIERFQlVHX1BSSU5UKCJFUlI6IE1heFBrdFNpemVcbiIpOworICAgICAgICAgICAgdzMtPk1h eFBrdFNpemUgPSBkYXRhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNjoKKyAg ICAgICAgICAgIGlmIChzaXplICE9IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg REVCVUdfUFJJTlQoImFsaWdubWVudC4zLjZcbiIpOworICAgICAgICAgICAgICAgIC8vIFNJTkdM RVNURVAoIiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgREVCVUdfUFJJTlQoIk1hY0Nv bnRyb2xcbiIpOworICAgICAgICAgICAgaWYgKGRhdGEgIT0gMCkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICBERUJVR19QUklOVCgic2V0dGluZyBNYWNDb250cm9sICE9IDBcbiIpOwor ICAgICAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgdzMtPk1hY0NvbnRyb2wgPSBkYXRhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IGNhc2UgODoKKyAgICAgICAgICAgIGlmIChzaXplICE9IDIpCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgREVCVUdfUFJJTlQoImFsaWdubWVudC4zLjhcbiIpOworICAgICAgICAgICAg ICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgREVCVUdf UFJJTlQoIk1lZGlhT3B0aW9uc1xuIik7CisgICAgICAgICAgICB3My0+TWVkaWFPcHRpb25zID0g ZGF0YTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAg aWYgKHNpemUgIT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBERUJVR19QUklO VCgiYWxpZ25tZW50LjMuMTBcbiIpOworICAgICAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIp OworICAgICAgICAgICAgfQorICAgICAgICAgICAgREVCVUdfUFJJTlQoIlJ4RnJlZVxuIik7Cisg ICAgICAgICAgICAvLyBTSU5HTEVTVEVQKCIiKTsKKyAgICAgICAgICAgIHczLT5SeEZyZWUgPSBk YXRhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTI6CisgICAgICAgICAgICBp ZiAoc2l6ZSAhPSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERFQlVHX1BSSU5U KCJhbGlnbm1lbnQuMy4xMlxuIik7CisgICAgICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBERUJVR19QUklOVCgiVHhGcmVlXG4iKTsKKyAg ICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICAgICAgdzMtPlR4RnJlZSA9IGRh dGE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERF QlVHX1BSSU5UKCJ3cml0aW5nIGhlcmUgdW5pbXBsLjNcbiIpOworICAgICAgICAgICAgLy8gU0lO R0xFU1RFUCgiIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8qIFdp bmRvdyA0ICovCisgICAgY2FzZSA0OgorICAgIHsKKyAgICAgICAgUmVnV2luZG93NCAqdzQgPSAo UmVnV2luZG93NCopICZzLT5tV2luZG93c1s0XTsKKyAgICAgICAgc3dpdGNoIChwb3J0KQorICAg ICAgICB7CisgICAgICAgIGNhc2UgNjoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNpemUg IT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiYWxpZ25t ZW50LjQuNlxuIik7CisgICAgICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICB1aW50MzJfdCBtYXNrID0gMHhmMzQxOworICAgICAgICAgICAg REVCVUdfUFJJTlQoIk5ldERpYWdub3N0aWMiKTsKKyAgICAgICAgICAgIHc0LT5OZXREaWFnbm9z dGljICY9IH5tYXNrOworICAgICAgICAgICAgdzQtPk5ldERpYWdub3N0aWMgfD0gZGF0YSAmIG1h c2s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDg6CisgICAg ICAgIHsKKyAgICAgICAgICAgIC8vIE1JSS1pbnRlcmZhY2UKKyAgICAgICAgICAgIGlmIChzaXpl ICE9IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQoImFsaWdu bWVudC40LjhcbiIpOworICAgICAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgY2hhciBoaUNsayA9ICghKCh3NC0+UGh5c01nbXQgJiBQTV9t Z210Q2xrKSAmJiAoZGF0YSAmIFBNX21nbXRDbGspKSkgPyAxIDogMDsKKyAgICAgICAgICAgIGlm IChoaUNsaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBaIG1lYW5zIGxvIGVk Z2Ugb2YgbWdtdERpcgorICAgICAgICAgICAgICAgIGNoYXIgWiA9ICgocy0+bUxhc3RIaUNsa1Bo eXNNZ210ICYgUE1fbWdtdERpcikgJiYgIShkYXRhICYgUE1fbWdtdERpcikpID8gMSA6IDA7Cisg ICAgICAgICAgICAgICAgaWYgKFopCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICAvLyBjaGVjayBpZiB0aGUgNSBmcmFtZXMgaGF2ZSBiZWVuIHNlbnQKKyAgICAgICAgICAg ICAgICAgICAgaWYgKCgocy0+bU1JSVdyaXRlV29yZCA+PiAocy0+bU1JSVdyaXR0ZW5CaXRzLTMy LTIpKSAmIDB4M2ZmZmZmZmZmVUxMKSA9PSAweDNmZmZmZmZmZFVMTCkKKyAgICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgb3Bjb2RlID0gKHMtPm1N SUlXcml0ZVdvcmQgPj4gKHMtPm1NSUlXcml0dGVuQml0cy0zMi0yLTIpKSAmIDM7CisgICAgICAg ICAgICAgICAgICAgICAgICB1aW50MzJfdCBQSFlhZGRyID0gKHMtPm1NSUlXcml0ZVdvcmQgPj4g KHMtPm1NSUlXcml0dGVuQml0cy0zMi0yLTItNSkpICYgMHgxZjsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQzMl90IFJFR2FkZHIgPSAocy0+bU1JSVdyaXRlV29yZCA+PiAocy0+bU1JSVdy aXR0ZW5CaXRzLTMyLTItMi01LTUpKSAmIDB4MWY7CisgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoKFBIWWFkZHIgPT0gMHgxOCAvKiBoYXJkY29kZWQgYWRkcmVzcyBbMV0gcC4xOTYgKi8pCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChSRUdhZGRyIDwgMHgxMCkpCisgICAg ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNo IChvcGNvZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wY29kZSBXcml0ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiT3Bjb2RlIFdyaXRlXG4iKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMtPm1NSUlXcml0dGVuQml0cyA9PSA2NCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdWludDMyX3QgdmFsdWUgPSBzLT5tTUlJV3JpdGVXb3JkICYgMHhmZmZm OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+bU1JSVJlZ3NbUkVHYWRk cl0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJC dXQgaW52YWxpZCB3cml0ZSBjb3VudFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+bU1JSVdyaXRlV29yZCA9 IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLyBPcGNvZGUgUmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJV R19QUklOVCgiT3Bjb2RlIFJlYWRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAocy0+bU1JSVdyaXR0ZW5CaXRzID09IDMyKzIrMis1KzUpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v IG1zYiBnZXRzIHNlbnQgZmlyc3QgYW5kIGlzIHplcm8gdG8gaW5kaWNhdGVkIHN1Y2Nlc3MKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSByZWdpc3RlciB0byBiZSBz ZW50IGZvbGxvd3MgbXNiIHRvIGxzYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcy0+bU1JSVJlYWRXb3JkID0gcy0+bU1JSVJlZ3NbUkVHYWRkcl0gPDwgMTU7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiQnV0IGludmFsaWQgd3JpdGUgY291 bnRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHMtPm1NSUlXcml0ZVdvcmQgPSAwOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVC VUdfUFJJTlQoIkludmFsaWQgb3Bjb2RlXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcy0+bU1JSVJlYWRXb3JkID0gMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8gZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR19QUklO VCgiSW52YWxpZCBQSFkgb3IgUkVHXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz LT5tTUlJUmVhZFdvcmQgPSAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHMtPm1NSUlXcml0dGVu Qml0cyA9IDA7CisgICAgICAgICAgICAgICAgICAgIHc0LT5QaHlzTWdtdCA9IGRhdGE7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEgJiBQTV9tZ210RGly KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gd3JpdGUKKyAgICAg ICAgICAgICAgICAgICAgY2hhciBtZ210RGF0YSA9IChkYXRhICYgUE1fbWdtdERhdGEpID8gMSA6 IDA7CisgICAgICAgICAgICAgICAgICAgIHc0LT5QaHlzTWdtdCA9IGRhdGE7CisgICAgICAgICAg ICAgICAgICAgIHMtPm1NSUlXcml0ZVdvcmQgPDw9IDE7CisgICAgICAgICAgICAgICAgICAgIHMt Pm1NSUlXcml0ZVdvcmQgfD0gbWdtdERhdGEgPyAxIDogMDsKKyAgICAgICAgICAgICAgICAgICAg cy0+bU1JSVdyaXR0ZW5CaXRzKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWQKKyAg ICAgICAgICAgICAgICAgICAgY2hhciBtZ210RGF0YSA9IChzLT5tTUlJUmVhZFdvcmQgJiAweDgw MDAwMDAwKSA/IDEgOiAwOworICAgICAgICAgICAgICAgICAgICB3NC0+UGh5c01nbXQgPSBkYXRh OworICAgICAgICAgICAgICAgICAgICBpZiAobWdtdERhdGEpCisgICAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHc0LT5QaHlzTWdtdCA9IHc0LT5QaHlzTWdtdCB8 IFBNX21nbXREYXRhOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdzQt PlBoeXNNZ210ID0gdzQtPlBoeXNNZ210ICYgKH5QTV9tZ210RGF0YSk7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcy0+bU1JSVJlYWRXb3JkIDw8PSAxOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzLT5tTGFzdEhpQ2xrUGh5c01nbXQgPSB3 NC0+UGh5c01nbXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgdzQtPlBoeXNNZ210ID0gZGF0YTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgMTA6CisgICAgICAg IHsKKyAgICAgICAgICAgIGlmIChzaXplICE9IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgREVCVUdfUFJJTlQoImFsaWdubWVudC40LjEwXG4iKTsKKyAgICAgICAgICAgICAgICAv LyBTSU5HTEVTVEVQKCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVpbnQzMl90IG1h c2sgPSAweDEwY2M7CisgICAgICAgICAgICBERUJVR19QUklOVCgiTWVkaWFTdGF0dXNcbiIpOwor ICAgICAgICAgICAgdzQtPk1lZGlhU3RhdHVzICY9IH5tYXNrOworICAgICAgICAgICAgdzQtPk1l ZGlhU3RhdHVzIHw9IGRhdGEgJiBtYXNrOworICAgICAgICAgICAgdzQtPk1lZGlhU3RhdHVzIHw9 IDB4ODAwMDsgIC8vIGF1aURpc2FibGUgYWx3YXlzIG9uCisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREVCVUdfUFJJTlQoImdlbmVy aWMgdG8gd2luZG93IDRcbiIpOworICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAg ICAgICAgICBtZW1jcHkoJnMtPm1XaW5kb3dzWzRdLmJbcG9ydF0sICZkYXRhLCBzaXplKTsKKyAg ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgLyoqLworICAgIGRlZmF1bHQ6Cisg ICAgICAgIERFQlVHX1BSSU5UKCJ3cml0aW5nIGhlcmUgdW5pbXBsLlxuIik7CisgICAgICAgIC8v IFNJTkdMRVNURVAoIiIpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc2V0Q1IodWludDE2X3Qg Y3IsIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBBM0M5MFhTdGF0ZSAqcyA9IG9wYXF1ZTsKKworICAg IERFQlVHX1BSSU5UKCJzZXRDUlxuIik7CisgICAgc3dpdGNoIChjciAmICgzMTw8MTEpKQorICAg IHsKKyAgICBjYXNlIENtZFRvdGFsUmVzZXQ6CisgICAgICAgIC8vIEZJWE1FOiBjYXJlIGFib3V0 IHBhcmFtcworICAgICAgICBERUJVR19QUklOVCgiVG90YWxSZXNldFxuIik7CisgICAgICAgIGEz YzkweF9yZXNldChvcGFxdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENtZFNlbGVjdFdp bmRvdzoKKyAgICB7CisgICAgICAgIERFQlVHX1BSSU5UKCJTZWxlY3RXaW5kb3dcbiIpOworICAg ICAgICBzLT5tSW50U3RhdHVzICY9IDB4MWZmZjsKKyAgICAgICAgcy0+bUludFN0YXR1cyB8PSAo Y3IgJiA3KTw8MTM7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENtZFR4UmVzZXQ6 CisgICAgICAgIERFQlVHX1BSSU5UKCJUeFJlc2V0XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBDbWRSeFJlc2V0OgorICAgICAgICBERUJVR19QUklOVCgiUnhSZXNldFxuIik7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgQ21kU2V0SW5kaWNhdGlvbkVuYWJsZToKKyAgICB7CisgICAg ICAgIFJlZ1dpbmRvdzUgKnc1ID0gKFJlZ1dpbmRvdzUqKSAmcy0+bVdpbmRvd3NbNV07CisgICAg ICAgIERFQlVHX1BSSU5UKCJTZXRJbmRpY2F0aW9uRW5hYmxlXG4iKTsKKyAgICAgICAgdzUtPklu ZGljYXRpb25FbmFibGUgPSBjciAmIDB4N2ZlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg Y2FzZSBDbWRTZXRJbnRyRW5iOgorICAgIHsKKyAgICAgICAgUmVnV2luZG93NSAqdzUgPSAoUmVn V2luZG93NSopICZzLT5tV2luZG93c1s1XTsKKyAgICAgICAgREVCVUdfUFJJTlQoIlNldEludHJF bmFiXG4iKTsKKyAgICAgICAgdzUtPkludGVycnVwdEVuYWJsZSA9IGNyICYgMHg3ZmU7CisgICAg ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENtZFN0YXRzRW5hYmxlOgorICAgICAgICAvKiBp bXBsZW1lbnQgbWUgKi8KKyAgICAgICAgREVCVUdfUFJJTlQoIlN0YXRzRW5hYmxlXG4iKTsKKyAg ICAgICAgYnJlYWs7CisgICAgY2FzZSBDbWRTdGF0c0Rpc2FibGU6CisgICAgICAgIC8qIGltcGxl bWVudCBtZSAqLworICAgICAgICBERUJVR19QUklOVCgiU3RhdHNEaXNhYmxlXG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBDbWRFbmFibGVEQzoKKyAgICAgICAgLyogaW1wbGVtZW50IG1l ICovCisgICAgICAgIERFQlVHX1BSSU5UKCJFbmFibGVEQ1xuIik7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgQ21kRGlzYWJsZURDOgorICAgICAgICAvKiBpbXBsZW1lbnQgbWUgKi8KKyAgICAg ICAgREVCVUdfUFJJTlQoIkRpc2FibGVEQ1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug Q21kU3RhbGw6CisgICAgeworICAgICAgICAvKiBGSVhNRTogdGhyZWFkaW5nICovCisgICAgICAg IHN3aXRjaCAoY3IgJiAzKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDogLyogVXBTdGFsbCAq LworICAgICAgICBjYXNlIDE6IC8qIFVwVW5zdGFsbCAqLworICAgICAgICB7CisgICAgICAgICAg ICBERUJVR19QUklOVCgiU3RhbGxcbiIpOworICAgICAgICAgICAgY2hhciBzdGFsbCA9ICghKGNy ICYgMSkpID8gMSA6IDA7CisgICAgICAgICAgICBzLT5tVXBTdGFsbGVkID0gc3RhbGw7CisgICAg ICAgICAgICBjaGVja1VwV29yayhvcGFxdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IH0KKyAgICAgICAgY2FzZSAyOiAvKiBEblN0YWxsICovCisgICAgICAgIGNhc2UgMzogLyogRG5V bnN0YWxsICovCisgICAgICAgIHsKKyAgICAgICAgICAgIERFQlVHX1BSSU5UKCJTdGFsbFxuIik7 CisgICAgICAgICAgICBjaGFyIHN0YWxsID0gKCEoY3IgJiAxKSkgPyAxIDogMDsKKyAgICAgICAg ICAgIHMtPm1EblN0YWxsZWQgPSBzdGFsbDsKKyAgICAgICAgICAgIHMtPm1SZWdpc3RlcnMuRG1h Q3RybCAmPSB+RENfZG5TdGFsbGVkOworICAgICAgICAgICAgaWYgKHN0YWxsKSBzLT5tUmVnaXN0 ZXJzLkRtYUN0cmwgfD0gRENfZG5TdGFsbGVkOworICAgICAgICAgICAgY2hlY2tEbldvcmsob3Bh cXVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg YnJlYWs7CisgICAgfQorICAgIGNhc2UgQ21kU2V0UnhGaWx0ZXI6CisgICAgeworICAgICAgICBE RUJVR19QUklOVCgiU2V0UnhGaWx0ZXJcbiIpOworICAgICAgICBSZWdXaW5kb3c1ICp3NSA9IChS ZWdXaW5kb3c1KikgJnMtPm1XaW5kb3dzWzVdOworICAgICAgICB3NS0+UnhGaWx0ZXIgPSBjciAm IDMxOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDbWRTZXRUeFJlY2xhaW1UaHJl c2g6CisgICAgeworICAgICAgICBERUJVR19QUklOVCgiU2V0VHhSZWNsYWltSGFzaFxuIik7Cisg ICAgICAgIFJlZ1dpbmRvdzUgKnc1ID0gKFJlZ1dpbmRvdzUqKSAmcy0+bVdpbmRvd3NbNV07Cisg ICAgICAgIHc1LT5UeFJlY2xhaW1UaHJlc2ggPSBjciAmIDI1NTsKKyAgICAgICAgYnJlYWs7Cisg ICAgfQorICAgIGNhc2UgQ21kU2V0VHhTdGFydFRocmVzaDoKKyAgICB7CisgICAgICAgIERFQlVH X1BSSU5UKCJTZXRUeFN0YXJ0VHJlc2hcbiIpOworICAgICAgICBSZWdXaW5kb3c1ICp3NSA9IChS ZWdXaW5kb3c1KikgJnMtPm1XaW5kb3dzWzVdOworICAgICAgICB3NS0+VHhTdGFydFRocmVzaCA9 IChjciAmIDB4N2ZmKSA8PCAyOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDbWRT ZXRIYXNoRmlsdGVyQml0OgorICAgIHsKKyAgICAgICAgLyoqIFRPRE86IGltcGxlbWVudCAqLwor ICAgICAgICAvLyBjaGFyIHZhbHVlID0gKGNyICYgMHg0MDApID8gMSA6IDA7CisgICAgICAgIC8v IHVpbnQzMl90IHdoaWNoID0gY3IgJiAweDNmOworICAgICAgICBERUJVR19QUklOVCgiU2V0SGFz aEZpbHRlckJpdFxuIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENtZFNldFJ4 RWFybHlUaHJlc2g6CisgICAgeworICAgICAgICBERUJVR19QUklOVCgiU2V0VHhTdGFydFRyZXNo XG4iKTsKKyAgICAgICAgUmVnV2luZG93NSAqdzUgPSAoUmVnV2luZG93NSopICZzLT5tV2luZG93 c1s1XTsKKyAgICAgICAgdzUtPlJ4RWFybHlUaHJlc2ggPSAoY3IgJiAweDdmZikgPDwgMjsKKyAg ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ21kUnhFbmFibGU6CisgICAgeworICAgICAg ICBERUJVR19QUklOVCgiUnhFbmFibGVcbiIpOworICAgICAgICBzLT5tUnhFbmFibGVkID0gMTsK KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ21kUnhEaXNhYmxlOgorICAgIHsKKyAg ICAgICAgREVCVUdfUFJJTlQoIlJ4RGlzYWJsZVxuIik7CisgICAgICAgIHMtPm1SeEVuYWJsZWQg PSAwOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDbWRUeEVuYWJsZToKKyAgICB7 CisgICAgICAgIERFQlVHX1BSSU5UKCJUeEVuYWJsZVxuIik7CisgICAgICAgIHMtPm1UeEVuYWJs ZWQgPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDbWRUeERpc2FibGU6Cisg ICAgeworICAgICAgICBERUJVR19QUklOVCgiVHhEaXNhYmxlXG4iKTsKKyAgICAgICAgcy0+bVR4 RW5hYmxlZCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENtZEFja0ludHI6 CisgICAgeworICAgICAgICAvKgorICAgICAgICAweDEgICAgIGludGVycnVwdExhdGNoQWNrCisg ICAgICAgIDB4MiAgICAgbGlua0V2ZW50QWNrCisgICAgICAgIDB4MjAgICAgcnhFYXJseUFjawor ICAgICAgICAweDQwICAgIGludFJlcXVlc3RlZEFjaworICAgICAgICAweDIwMCAgIGRuQ29tcGxl dGVBY2sKKyAgICAgICAgMHg0MDAgICB1cENvbXBsZXRlQWNrCisKKyAgICAgICAgMHg1CisgICAg ICAgICovCisgICAgICAgIERFQlVHX1BSSU5UKCJBY2tJbnRyXG4iKTsKKyAgICAgICAgLy8gYWNr L2NsZWFyIGNvcnJlc3BvbmRpbmcgYml0cyBpbiBJbnRTdGF0dXMKKyAgICAgICAgdWludDMyX3Qg SVNhY2sgPSAwOworICAgICAgICBpZiAoY3IgJiAweDAxKSBJU2FjayB8PSBJU19pbnRlcnJ1cHRM YXRjaDsKKyAgICAgICAgaWYgKGNyICYgMHgwMikgSVNhY2sgfD0gSVNfbGlua0V2ZW50OworICAg ICAgICBpZiAoY3IgJiAweDIwKSBJU2FjayB8PSBJU19yeEVhcmx5OworICAgICAgICBpZiAoY3Ig JiAweDQwKSBJU2FjayB8PSBJU19pbnRSZXF1ZXN0ZWQ7CisgICAgICAgIGlmIChjciAmIDB4MjAw KSBJU2FjayB8PSBJU19kbkNvbXBsZXRlOworICAgICAgICBpZiAoY3IgJiAweDQwMCkgSVNhY2sg fD0gSVNfdXBDb21wbGV0ZTsKKyAgICAgICAgYWNrbm93bGVkZ2UoSVNhY2ssIG9wYXF1ZSk7Cisg ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvKiAgY2FzZSBDbWRSZXFJbnRyOiB7CisgICAgICAg ICAgICBSZWdXaW5kb3c1ICZ3NSA9IChSZWdXaW5kb3c1JiltV2luZG93c1s1XTsKKyAgICAgICAg ICAgIC8vIHNldCBpbnRSZXF1ZXN0ZWQgaW4gSW50U3RhdHVzCisgICAgICAgICAgICBtSW50U3Rh dHVzIHw9IElTX2ludFJlcXVlc3RlZDsKKworICAgICAgICAgICAgLy8gRklYTUU6IGdlbmVyYXRl IEludGVycnVwdCAoaWYgZW5hYmxlZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Ki8K KworICAgIC8qCisgICAgICAgIGNhc2UgQ21kVHhEb25lOgorICAgICAgICBjYXNlIENtZFJ4RGlz Y2FyZDoKKyAgICAgICAgY2FzZSBDbWRTZXRUeFRocmVzaG9sZDoKKyAgICAqLworICAgIGRlZmF1 bHQ6CisgICAgICAgIERFQlVHX1BSSU5UKCJjb21tYW5kIG5vdCBpbXBsZW1lbnRlZFxuIik7Cisg ICAgfQorfQorCitzdGF0aWMgdm9pZCB0eERQRDAodm9pZCAqb3BhcXVlLCBEUEQwICpkcGQpCit7 CisgICAgQTNDOTBYU3RhdGUgKnMgPSBvcGFxdWU7CisKKyAgICBERUJVR19QUklOVCgidHhEUEQw XG4iKTsKKworICAgIC8vIEZJWE1FOiBjcmVhdGVIb3N0U3RydWN0KCkKKyAgICB1aW50MzJfdCBm c2ggPSBkcGQtPkZyYW1lU3RhcnRIZWFkZXI7CisgICAgREVCVUdfUFJJTlRfRk9STUFUKCgiZnNo ID0gJTA4eFxuIiwgZnNoKSk7CisgICAgaWYgKGZzaCAmIEZTSF9kcGRFbXB0eSkKKyAgICB7Cisg ICAgICAgIC8vIG1vZGlmeSBGcmFtZVN0YXJ0SGVhZGVyIGluIERQRCAoISkKKyAgICAgICAgZHBk LT5GcmFtZVN0YXJ0SGVhZGVyIHw9IEZTSF9kbkNvbXBsZXRlOworICAgICAgICAvLyBzZXQgbmV4 dCBEbkxpc3RQdHIKKyAgICAgICAgcy0+bVJlZ2lzdGVycy5Ebkxpc3RQdHIgPSBkcGQtPkRuTmV4 dFB0cjsKKyAgICAgICAgREVCVUdfUFJJTlQoImRwZCBlbXB0eVxuIik7CisgICAgICAgIHJldHVy bjsKKyAgICB9CisgICAgRFBERnJhZ0Rlc2MgKmZyYWdzID0gKERQREZyYWdEZXNjKikoZHBkKzEp OworICAgIHVpbnQ4X3QgcGJ1ZltNQVhfUEFDS0VUX1NJWkVdOworICAgIHVpbnQ4X3QgKnAgPSBw YnVmOworCisgICAgLy8gc29tZSBwYWNrZXQgZHJpdmVycyBuZWVkIHBhZGRpbmcKKyAgICAvLyB1 aW50IGZyYW1lUHJlZml4ID0gbUV0aFR1bi0+Z2V0V3JpdGVGcmFtZVByZWZpeCgpOworICAgIC8v IG1lbXNldChwLCAwLCBmcmFtZVByZWZpeCk7CisgICAgLy8gcCArPSBmcmFtZVByZWZpeDsKKwor ICAgIERFQlVHX1BSSU5UX0ZPUk1BVCgoIkRQRDogTmV4dFB0ciA9ICV4LCBGU0ggPSAleCwgRnJh Z0FkZHIgPSAleCwgRnJhZ0xlbiA9ICV4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgZHBk LT5Ebk5leHRQdHIsIGRwZC0+RnJhbWVTdGFydEhlYWRlciwgZnJhZ3MtPkRuRnJhZ0FkZHIsIGZy YWdzLT5EbkZyYWdMZW4pKTsKKworICAgIC8vCisgICAgdWludDMyX3QgaSA9IDA7CisgICAgLy8g YXNzZW1ibGUgcGFja2V0IGZyb20gZnJhZ21lbnRzICh1cCB0byBNQVhfRFBEX0ZSQUdTIGZyYWdt ZW50cykKKyAgICB3aGlsZSAoaSA8IE1BWF9EUERfRlJBR1MpCisgICAgeworICAgICAgICB1aW50 MzJfdCBhZGRyID0gZnJhZ3MtPkRuRnJhZ0FkZHI7CisgICAgICAgIHVpbnQzMl90IGxlbiA9IGZy YWdzLT5EbkZyYWdMZW4gJiAweDFmZmY7CisgICAgICAgIGlmIChwLXBidWYrbGVuID49IHNpemVv ZiBwYnVmKQorICAgICAgICB7CisgICAgICAgICAgICBERUJVR19QUklOVCgicGFja2V0IHRvbyBi aWchXG4iKTsKKyAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICAgICAgcmV0 dXJuOworICAgICAgICB9CisgICAgICAgIERFQlVHX1BSSU5UKCJkbWFfcmVhZFxuIik7CisKKyAg ICAgICAgaWYgKGxlbiA9PSAwIHx8IGFkZHIgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAg REVCVUdfUFJJTlQoIk5vIGRhdGEhIEJhaWwhXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg ICAgICAgfQorCisgICAgICAgIGNwdV9waHlzaWNhbF9tZW1vcnlfcmVhZChhZGRyLCBwLCBsZW4p OworCisgICAgICAgIERFQlVHX1BSSU5UX0ZPUk1BVCgoIiAtIERuQWRkciA9ICV4LCBEbkZyYWdM ZW4gPSAleFxuIiwgZnJhZ3MtPkRuRnJhZ0FkZHIsIGZyYWdzLT5EbkZyYWdMZW4pKTsKKworICAg ICAgICBwICs9IGxlbjsKKyAgICAgICAgLy8gbGFzdCBmcmFnbWVudCA/CisgICAgICAgIGlmIChm cmFncy0+RG5GcmFnTGVuICYgMHg4MDAwMDAwMCkgYnJlYWs7CisgICAgICAgIGZyYWdzKys7Cisg ICAgICAgIGkrKzsKKyAgICB9CisgICAgdWludDMyX3QgcHNpemUgPSBwLXBidWY7CisgICAgaWYg KCEoZnNoICYgRlNIX3JuZHVwRGVmZWF0KSkKKyAgICB7CisgICAgICAgIC8vIHJvdW5kIHBhY2tl dCBsZW5ndGgKKyAgICAgICAgc3dpdGNoIChmc2ggJiBGU0hfcm5kdXBCbmRyeSkKKyAgICAgICAg eworICAgICAgICBjYXNlIDA6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIDQgYnl0ZXMKKyAg ICAgICAgICAgIHVpbnQzMl90IGdhcCA9ICgocHNpemUrMykgJiB+MykgLXBzaXplOworICAgICAg ICAgICAgbWVtc2V0KHBidWYrcHNpemUsIDAsIGdhcCk7CisgICAgICAgICAgICBwc2l6ZSArPSBn YXA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDI6CisgICAg ICAgIHsKKyAgICAgICAgICAgIC8vIDIgYnl0ZXMKKyAgICAgICAgICAgIHVpbnQzMl90IGdhcCA9 ICgocHNpemUrMSkgJiB+MSkgLXBzaXplOworICAgICAgICAgICAgbWVtc2V0KHBidWYrcHNpemUs IDAsIGdhcCk7CisgICAgICAgICAgICBwc2l6ZSArPSBnYXA7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8vRlNIX3JlQXJtRGlzYWJsZSA9ICAg IDE8PDIzLAorICAgIC8vRlNIX2xhc3RLYXAgPSAgICAgICAgIDE8PDI0LAorICAgIC8vRlNIX2Fk ZElwQ2hlY2tzdW0gPSAgIDE8PDI1LAorICAgIC8vRlNIX2FkZFRjcENoZWNrc3VtID0gIDE8PDI2 LAorICAgIC8vRlNIX2FkZFVkcENoZWNrc3VtID0gIDE8PDI3LAorICAgIGlmIChmc2ggJiAoMHgx ZiA8PCAyMykpCisgICAgeworICAgICAgICBERUJVR19QUklOVCgidW5zdXBwb3J0ZWQgZmxhZ3Mg aW4gZnNoXG4iKTsKKyAgICB9CisKKyAgICBpZiAocHNpemU8NjApCisgICAgeworICAgICAgICAv LyBwYWQgcGFja2V0IHRvIGF0IGxlYXN0IDYwIGJ5dGVzICgrNCBieXRlcyBjcmMgPSA2NCBieXRl cykKKyAgICAgICAgbWVtc2V0KHBidWYrcHNpemUsIDAsICg2MC1wc2l6ZSkpOworICAgICAgICBw c2l6ZSA9IDYwOworICAgIH0KKyAgICAvLyBhcHBlbmQgY3JjCisgICAgaWYgKCEoZnNoICYgRlNI X2NyY0FwcGVuZERpc2FibGUpKQorICAgIHsKKyNpZmRlZiBBM0M5MHhfQ0FMQ1VMQVRFX1RYQ1JD CisgICAgICAgIHVpbnQzMl90IGNyYyA9IGNyYzMyKDAsIHBidWYsIHBzaXplKTsKKyNlbHNlCisg ICAgICAgIHVpbnQzMl90IGNyYyA9IDA7CisjZW5kaWYKKyAgICAgICAgcGJ1Zltwc2l6ZSswXSA9 IGNyYzsKKyAgICAgICAgcGJ1Zltwc2l6ZSsxXSA9IGNyYz4+ODsKKyAgICAgICAgcGJ1Zltwc2l6 ZSsyXSA9IGNyYz4+MTY7CisgICAgICAgIHBidWZbcHNpemUrM10gPSBjcmM+PjI0OworICAgICAg ICBwc2l6ZSArPSA0OworICAgICAgICBERUJVR19QUklOVCgiY3JjIGNvbXBsZXRlXG4iKTsKKyAg ICB9CisKKyAgICBBVVhfREVCVUdfUFJJTlQoIjNDOTBYOiBQYWNrZXQgc2VudFxuIik7CisKKyAg ICBxZW11X3NlbmRfcGFja2V0KHMtPnZjLCBwYnVmLCBwc2l6ZSk7CisKKyAgICAvLyBpbmRpY2F0 aW9ucworICAgIHMtPm1SZWdpc3RlcnMuRG1hQ3RybCB8PSBEQ19kbkNvbXBsZXRlOworICAgIHVp bnQ4X3QgdHhTdGF0dXMgPSAwOworICAgIHVpbnQzMl90IGluZHMgPSAwOworICAgIGlmIChmc2gg JiBGU0hfZG5JbmRpY2F0ZSkgaW5kcyB8PSBJU19kbkNvbXBsZXRlOworICAgIGlmIChmc2ggJiBG U0hfdHhJbmRpY2F0ZSkKKyAgICB7CisgICAgICAgIGluZHMgfD0gSVNfdHhDb21wbGV0ZTsKKyAg ICAgICAgdHhTdGF0dXMgfD0gKDEgPDwgNik7CisgICAgfQorCisgICAgLy8gdHJhbnNtaXQgY29t cGxldGUKKyAgICB0eFN0YXR1cyB8PSAoMSA8PCA3KTsKKworICAgIGluZGljYXRlKGluZHMsIG9w YXF1ZSk7CisgICAgLy8gbW9kaWZ5IEZyYW1lU3RhcnRIZWFkZXIgaW4gRFBEICghKQorICAgIGRw ZC0+RnJhbWVTdGFydEhlYWRlciB8PSBGU0hfZG5Db21wbGV0ZTsKKyAgICAvLyBzZXQgbmV4dCBE bkxpc3RQdHIsIFR4UGt0SWQKKyAgICBzLT5tUmVnaXN0ZXJzLkRuTGlzdFB0ciA9IGRwZC0+RG5O ZXh0UHRyOworICAgIHVpbnQzMl90IHBrdElkID0gKGZzaCAmIEZTSF9wa3RJZCkgPj4gMjsKKyAg ICBzLT5tUmVnaXN0ZXJzLlR4UGt0SWQgPSBwa3RJZDsKKyAgICBzLT5tUmVnaXN0ZXJzLlR4U3Rh dHVzID0gdHhTdGF0dXM7CisgICAgLy8gbWF5YmUgZ2VuZXJhdGUgaW50ZXJydXB0CisgICAgbWF5 YmVSYWlzZUludHIob3BhcXVlKTsKK30KKworc3RhdGljIGNoYXIgcGFzc2VzUnhGaWx0ZXIodWlu dDhfdCAqcGJ1ZiwgdWludDMyX3QgcHNpemUsIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBBM0M5MFhT dGF0ZSAqcyA9IG9wYXF1ZTsKKworICAgIEV0aEZyYW1lSUkgKmYgPSAoRXRoRnJhbWVJSSopIHBi dWY7CisgICAgUmVnV2luZG93NSAqdzUgPSAoUmVnV2luZG93NSopICZzLT5tV2luZG93c1s1XTsK KyAgICBpZiAodzUtPlJ4RmlsdGVyICYgUlhGSUxUX3JlY2VpdmVBbGxGcmFtZXMpIHJldHVybiAx OworICAgIC8vIEZJWE1FOiBNdWx0aWNhc3QgaGFzaGluZyBub3QgaW1wbGVtZW50ZWQKKyAgICBp ZiAodzUtPlJ4RmlsdGVyICYgUlhGSUxUX3JlY2VpdmVNdWx0aWNhc3RIYXNoKSByZXR1cm4gMTsK KyAgICAvLyBGSVhNRTogTXVsdGljYXN0aW5nIG5vdCB1bmRlcnN0b29kCisgICAgaWYgKHc1LT5S eEZpbHRlciAmIFJYRklMVF9yZWNlaXZlTXVsdGljYXN0KSByZXR1cm4gMTsKKyAgICBpZiAodzUt PlJ4RmlsdGVyICYgUlhGSUxUX3JlY2VpdmVCcm9hZGNhc3QpCisgICAgeworICAgICAgICB1aW50 OF90IGJyb2FkY2FzdE1BQ1s2XSA9IHsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZn07Cisg ICAgICAgIGlmIChjb21wYXJlTUFDcyhmLT5kZXN0TUFDLCBicm9hZGNhc3RNQUMpID09IDApIHJl dHVybiAxOworICAgIH0KKyAgICBpZiAodzUtPlJ4RmlsdGVyICYgUlhGSUxUX3JlY2VpdmVJbmRp dmlkdWFsKQorICAgIHsKKyAgICAgICAgdWludDhfdCBkZXN0TUFDWzZdOworICAgICAgICB1aW50 OF90IHRoaXNNQUNbNl07CisgICAgICAgIFJlZ1dpbmRvdzIgKncyID0gKFJlZ1dpbmRvdzIqKSAm cy0+bVdpbmRvd3NbMl07CisgICAgICAgIHVpbnQzMl90IGk7CisgICAgICAgIGZvciAoaSA9IDA7 IGkgPCA2OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc3RNQUNbaV0gPSBmLT5kZXN0 TUFDW2ldICYgfncyLT5TdGF0aW9uTWFza1tpXTsKKyAgICAgICAgICAgIHRoaXNNQUNbaV0gPSB3 Mi0+U3RhdGlvbkFkZHJlc3NbaV0gJiB+dzItPlN0YXRpb25NYXNrW2ldOworICAgICAgICB9Cisg ICAgICAgIHJldHVybiAoY29tcGFyZU1BQ3MoZGVzdE1BQywgdGhpc01BQykgPT0gMCkgPyAxIDog MDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJ4VVBEKHZvaWQgKm9w YXF1ZSwgVVBEICp1cGQpCit7CisgICAgQTNDOTBYU3RhdGUgKnMgPSBvcGFxdWU7CisKKyAgICAv LyBGSVhNRTogdGhyZWFkaW5nIHRvIGNhcmUgYWJvdXQgKG1SZWdpc3RlcnMuRG1hQ3RybCAmIERD X3VwQWx0U2VxRGlzYWJsZSkKKyAgICBERUJVR19QUklOVCgicnhVUEQoKVxuIik7CisKKyAgICBj aGFyIGVycm9yID0gMDsKKworICAgIGlmICh1cGQtPlVwUGt0U3RhdHVzICYgVVBTX3VwQ29tcGxl dGUpCisgICAgeworICAgICAgICAvLyBJT18zQzkwWF9XQVJOKCJVUEQgYWxyZWFkeSB1cENvbXBs ZXRlIVxuIik7CisKKyAgICAgICAgLy8gdGhlIHRvcCBvZiB0aGUgcmluZyBidWZmZXIgaXMgYWxy ZWFkeSB1c2VkLAorICAgICAgICAvLyBzdGFsbCB0aGUgdXBsb2FkIGFuZCB0aHJvdyBhd2F5IHRo ZSBwYWNrZXQuCisgICAgICAgIC8vIHRoZSByaW5nIGJ1ZmZlcnMgYXJlIGZpbGxlZC4KKworICAg ICAgICBzLT5tVXBTdGFsbGVkID0gMTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVp bnQzMl90IHVwUGt0U3RhdHVzID0gMDsKKworICAgIGlmIChzLT5tUmVnaXN0ZXJzLlVwUG9sbCkK KyAgICB7CisgICAgICAgIERFQlVHX1BSSU5UKCJVcFBvbGwgdW5zdXBwb3J0ZWRcbiIpOworICAg ICAgICAvLyBTSU5HTEVTVEVQKCIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBG SVhNRToKKy8vICBpZiAobVJlZ2lzdGVycy5EbWFDdHJsICYgRENfdXBSeEVhcmx5RW5hYmxlKQor Ly8gICAgICBJT18zQzkwWF9FUlIoIkRDX3VwUnhFYXJseUVuYWJsZSB1bnN1cHBvcnRlZFxuIik7 CisKKyAgICBpZiAoKHMtPm1SeFBhY2tldFNpemUgPiAweDFmZmYpIHx8IChzLT5tUnhQYWNrZXRT aXplID4gc2l6ZW9mIHMtPm1SeFBhY2tldCkpCisgICAgeworICAgICAgICBERUJVR19QUklOVCgi b3ZlcnNpemVkIGZyYW1lXG4iKTsKKyAgICAgICAgdXBkLT5VcFBrdFN0YXR1cyA9IFVQU191cEVy cm9yIHwgVVBTX292ZXJzaXplZEZyYW1lOworICAgICAgICBlcnJvciA9IDE7CisgICAgfQorCisg ICAgaWYgKHMtPm1SeFBhY2tldFNpemUgPCA2MCkKKyAgICB7CisgICAgICAgIC8vIHBhZCBwYWNr ZXQgdG8gYXQgbGVhc3QgNjAgYnl0ZXMgKCs0IGJ5dGVzIGNyYyA9IDY0IGJ5dGVzKQorICAgICAg ICBtZW1zZXQocy0+bVJ4UGFja2V0K3MtPm1SeFBhY2tldFNpemUsIDAsICg2MC1zLT5tUnhQYWNr ZXRTaXplKSk7CisgICAgICAgIHMtPm1SeFBhY2tldFNpemUgPSA2MDsKKyAgICB9CisKKyAgICAv KiAgUmVnV2luZG93NSAmdzUgPSAoUmVnV2luZG93NSYpbVdpbmRvd3NbNV07CisgICAgICAgIGlm ICgobVJ4UGFja2V0U2l6ZSA8IDYwKSAmJiAodzUuUnhFYXJseVRocmVzaCA+PSA2MCkpIHsKKyAg ICAgICAgICAgIElPXzNDOTBYX1RSQUNFKCJydW50IGZyYW1lXG4iKTsKKyAgICAgICAgICAgIHVw UGt0U3RhdHVzIHw9IFVQU191cEVycm9yIHwgVVBTX3J1bnRGcmFtZTsKKyAgICAgICAgICAgIHVw ZC0+VXBQa3RTdGF0dXMgPSB1cFBrdFN0YXR1czsKKyAgICAgICAgICAgIGVycm9yID0gdHJ1ZTsK KyAgICAgICAgfSovCisgICAgaWYgKHVwZC0+VXBQa3RTdGF0dXMgJiBVUERfaW1wbGllZEJ1ZmZl ckVuYWJsZSkKKyAgICB7CisgICAgICAgIERFQlVHX1BSSU5UKCJVUERfaW1wbGllZEJ1ZmZlckVu YWJsZSB1bnN1cHBvcnRlZFxuIik7CisgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAg ICByZXR1cm47CisgICAgfQorICAgIFVQREZyYWdEZXNjICpmcmFncyA9IChVUERGcmFnRGVzYyop KHVwZCsxKTsKKworICAgIHVpbnQ4X3QgKnAgPSBzLT5tUnhQYWNrZXQ7CisgICAgdWludDMyX3Qg aSA9IDA7CisgICAgd2hpbGUgKCFlcnJvciAmJiBpIDwgTUFYX1VQRF9GUkFHUykgICAgIC8vICh1 cCB0byBNQVhfVVBEX0ZSQUdTIGZyYWdtZW50cykKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGFk ZHIgPSBmcmFncy0+VXBGcmFnQWRkcjsKKyAgICAgICAgdWludDMyX3QgbGVuID0gZnJhZ3MtPlVw RnJhZ0xlbiAmIDB4MWZmZjsKKyAgICAgICAgaWYgKHAtcy0+bVJ4UGFja2V0K2xlbiA+IHNpemVv ZiBzLT5tUnhQYWNrZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVwUGt0U3RhdHVzIHw9IFVQ U191cEVycm9yIHwgVVBTX3VwT3ZlcmZsb3c7CisgICAgICAgICAgICB1cGQtPlVwUGt0U3RhdHVz ID0gdXBQa3RTdGF0dXM7CisgICAgICAgICAgICBERUJVR19QUklOVCgiVVBEIG92ZXJmbG93IVxu Iik7CisgICAgICAgICAgICAvLyBTSU5HTEVTVEVQKCIiKTsKKyAgICAgICAgICAgIGVycm9yID0g MTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY3B1X3BoeXNpY2Fs X21lbW9yeV93cml0ZShhZGRyLCBwLCBsZW4pOworCisgICAgICAgIHAgKz0gbGVuOworICAgICAg ICAvLyBsYXN0IGZyYWdtZW50ID8KKyAgICAgICAgaWYgKGZyYWdzLT5VcEZyYWdMZW4gJiAweDgw MDAwMDAwKSBicmVhazsKKyAgICAgICAgZnJhZ3MrKzsKKyAgICAgICAgaSsrOworICAgIH0KKwor ICAgIGlmICghZXJyb3IpCisgICAgeworICAgICAgICBERUJVR19QUklOVCgic3VjY2Vzc2Z1bGx5 IHVwbG9hZGVkIHBhY2tldFxuIik7CisgICAgfQorICAgIHVwUGt0U3RhdHVzIHw9IHMtPm1SeFBh Y2tldFNpemUgJiAweDFmZmY7CisgICAgdXBQa3RTdGF0dXMgfD0gVVBTX3VwQ29tcGxldGU7Cisg ICAgdXBkLT5VcFBrdFN0YXR1cyA9IHVwUGt0U3RhdHVzOworCisgICAgcy0+bVJ4UGFja2V0U2l6 ZSA9IDA7CisKKyAgICAvKiBUaGUgY2xpZW50IE9TIGlzIHdhaXRpbmcgZm9yIGEgY2hhbmdlIGlu IHN0YXR1cywgYnV0IHdvbid0IHNlZSBpdAorICAgICAqIHVudGlsIHdlIGRtYSBvdXIgbG9jYWwg Y29weSB1cGQtPlVwUGt0U3RhdHVzIGJhY2sgdG8gdGhlIGNsaWVudCBhZGRyZXNzIHNwYWNlCisg ICAgICovCisgICAgY3B1X3BoeXNpY2FsX21lbW9yeV93cml0ZShzLT5tUmVnaXN0ZXJzLlVwTGlz dFB0ciArIDQsIChjb25zdCB1aW50OF90KikgJih1cGQtPlVwUGt0U3RhdHVzKSwgc2l6ZW9mKHVw ZC0+VXBQa3RTdGF0dXMpKTsKKworICAgIHMtPm1SZWdpc3RlcnMuVXBMaXN0UHRyID0gdXBkLT5V cE5leHRQdHI7CisKKyAgICAvLyBJbmRpY2F0aW9ucworICAgIHMtPm1SZWdpc3RlcnMuRG1hQ3Ry bCB8PSBEQ191cENvbXBsZXRlOworICAgIGluZGljYXRlKElTX3VwQ29tcGxldGUsIG9wYXF1ZSk7 CisgICAgbWF5YmVSYWlzZUludHIob3BhcXVlKTsKK30KKworc3RhdGljIHZvaWQgaW5kaWNhdGUo dWludDMyX3QgaW5kaWNhdGlvbnMsIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBBM0M5MFhTdGF0ZSAq cyA9IG9wYXF1ZTsKKworICAgIFJlZ1dpbmRvdzUgKnc1ID0gKFJlZ1dpbmRvdzUqKSAmcy0+bVdp bmRvd3NbNV07CisgICAgaWYgKCh3NS0+SW5kaWNhdGlvbkVuYWJsZSAmIGluZGljYXRpb25zKSAh PSBpbmRpY2F0aW9ucykKKyAgICB7CisgICAgICAgIERFQlVHX1BSSU5UKCJzb21lIG1hc2tlZFxu Iik7CisgICAgfQorICAgIHMtPm1JbnRTdGF0dXMgfD0gdzUtPkluZGljYXRpb25FbmFibGUgJiBp bmRpY2F0aW9uczsKKyAgICBpZiAoaW5kaWNhdGlvbnMgJiBJU191cENvbXBsZXRlKQorICAgIHsK KyAgICAgICAgcy0+bVJlZ2lzdGVycy5EbWFDdHJsIHw9IERDX3VwQ29tcGxldGU7CisgICAgfQor ICAgIGlmIChpbmRpY2F0aW9ucyAmIElTX2RuQ29tcGxldGUpCisgICAgeworICAgICAgICBzLT5t UmVnaXN0ZXJzLkRtYUN0cmwgfD0gRENfZG5Db21wbGV0ZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2 b2lkIGFja25vd2xlZGdlKHVpbnQzMl90IGluZGljYXRpb25zLCB2b2lkICpvcGFxdWUpCit7Cisg ICAgQTNDOTBYU3RhdGUgKnMgPSBvcGFxdWU7CisKKyAgICBERUJVR19QUklOVF9GT1JNQVQoKCJp bnRTdGF0dXMgd2FzICV4IFtpbmRpY2F0aW9ucz0leF1cbiIsIHMtPm1JbnRTdGF0dXMsIGluZGlj YXRpb25zKSk7CisgICAgcy0+bUludFN0YXR1cyAmPSB+aW5kaWNhdGlvbnM7CisgICAgREVCVUdf UFJJTlRfRk9STUFUKCgiaW50U3RhdHVzIGlzIG5vdyAleFxuIiwgcy0+bUludFN0YXR1cykpOwor ICAgIGlmIChpbmRpY2F0aW9ucyAmIElTX3VwQ29tcGxldGUpCisgICAgeworICAgICAgICBzLT5t UmVnaXN0ZXJzLkRtYUN0cmwgJj0gfkRDX3VwQ29tcGxldGU7CisgICAgfQorICAgIGlmIChpbmRp Y2F0aW9ucyAmIElTX2RuQ29tcGxldGUpCisgICAgeworICAgICAgICBzLT5tUmVnaXN0ZXJzLkRt YUN0cmwgJj0gfkRDX2RuQ29tcGxldGU7CisgICAgfQorCisgICAgLy8gbG93ZXIgdGhlIGlycSBs aW5lIG5vdyB0aGF0IHRoZSBJUlEgaXMgYWNrJ2QKKyAgICBxZW11X3NldF9pcnEocy0+cGNpX2Rl di0+aXJxWzBdLCAwKTsKK30KKworc3RhdGljIHZvaWQgbWF5YmVSYWlzZUludHIodm9pZCAqb3Bh cXVlKQoreworICAgIEEzQzkwWFN0YXRlICpzID0gb3BhcXVlOworICAgIFJlZ1dpbmRvdzUgKnc1 ID0gKFJlZ1dpbmRvdzUqKSAmcy0+bVdpbmRvd3NbNV07CisKKyAgICBERUJVR19QUklOVCgibWF5 YmVSYWlzZUludHJcbiIpOworICAgIERFQlVHX1BSSU5UX0ZPUk1BVCgoIkluZEVuYWJsZSA9ICV4 LCBJbnRFbmFibGUgPSAleCwgSW50U3RhdHVzID0gJXhcbiIsIHc1LT5JbmRpY2F0aW9uRW5hYmxl LCB3NS0+SW50ZXJydXB0RW5hYmxlLCBzLT5tSW50U3RhdHVzKSk7CisKKyAgICBpZiAodzUtPklu ZGljYXRpb25FbmFibGUgJiB3NS0+SW50ZXJydXB0RW5hYmxlICYgcy0+bUludFN0YXR1cykKKyAg ICB7CisgICAgICAgIHMtPm1JbnRTdGF0dXMgfD0gSVNfaW50ZXJydXB0TGF0Y2g7CisKKyAgICAg ICAgREVCVUdfUFJJTlQoIkdlbmVyYXRpbmcgaW50ZXJydXB0IVxuIik7CisKKyAgICAgICAgLy8g cmFpc2UgdGhlIElSUSBsaW5lCisgICAgICAgIHFlbXVfc2V0X2lycShzLT5wY2lfZGV2LT5pcnFb MF0sIDEpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBsb3dlciB0aGUgSVJR IGxpbmUKKyAgICAgICAgcWVtdV9zZXRfaXJxKHMtPnBjaV9kZXYtPmlycVswXSwgMCk7CisgICAg fQorfQorCitzdGF0aWMgdm9pZCBjaGVja0RuV29yayh2b2lkICpvcGFxdWUpCit7CisgICAgQTND OTBYU3RhdGUgKnMgPSBvcGFxdWU7CisKKyAgICB3aGlsZSAoIXMtPm1EblN0YWxsZWQgJiYgKHMt Pm1SZWdpc3RlcnMuRG5MaXN0UHRyICE9IDApKQorICAgIHsKKyAgICAgICAgdWludDhfdCBkcGRb NTEyXTsKKworICAgICAgICBjcHVfcGh5c2ljYWxfbWVtb3J5X3JlYWQocy0+bVJlZ2lzdGVycy5E bkxpc3RQdHIsIGRwZCwgc2l6ZW9mIGRwZCk7CisKKyAgICAgICAgdWludDhfdCB0eXBlID0gZHBk WzddID4+IDY7CisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICBjYXNl IDA6CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgeworICAgICAgICAgICAgRFBEMCAqcCA9IChE UEQwKikgZHBkOworICAgICAgICAgICAgREVCVUdfUFJJTlQoIkdvdCBhIHR5cGUgMCBEUEQhXG4i KTsKKyAgICAgICAgICAgIHR4RFBEMChvcGFxdWUsIHApOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKyAgICAgICAgY2FzZSAxOgorICAgICAgICB7CisgICAgICAgICAgICBERUJVR19Q UklOVCgiR290IGEgdHlwZSAxIERQRCEgTm90IGltcGxlbWVudGVkIVxuIik7CisgICAgICAgICAg ICBzLT5tUmVnaXN0ZXJzLkRuTGlzdFB0ciA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREVCVUdfUFJJTlQoIlVuc3VwcG9y dGVkIHBhY2tldCB0eXBlXG4iKTsKKyAgICAgICAgICAgIHMtPm1SZWdpc3RlcnMuRG5MaXN0UHRy ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9OworCisgICAgICAgIGJyZWFrOwor ICAgIH0KK30KKworc3RhdGljIHZvaWQgY2hlY2tVcFdvcmsodm9pZCAqb3BhcXVlKQoreworICAg IEEzQzkwWFN0YXRlICpzID0gb3BhcXVlOworCisgICAgaWYgKHMtPm1SeEVuYWJsZWQgJiYgIXMt Pm1VcFN0YWxsZWQgJiYgcy0+bVJ4UGFja2V0U2l6ZSAmJiAocy0+bVJlZ2lzdGVycy5VcExpc3RQ dHIgIT0gMCkpCisgICAgeworICAgICAgICB1aW50OF90IHVwZFtNQVhfVVBEX1NJWkVdOworCisg ICAgICAgIGNwdV9waHlzaWNhbF9tZW1vcnlfcmVhZChzLT5tUmVnaXN0ZXJzLlVwTGlzdFB0ciwg dXBkLCBzaXplb2YgdXBkKTsKKyAgICAgICAgVVBEICpwID0gKFVQRCopIHVwZDsKKyAgICAgICAg cnhVUEQob3BhcXVlLCBwKTsKKworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBERUJV R19QUklOVCgiTm90IHVwbG9hZGluZ1xuIik7CisgICAgICAgIERFQlVHX1BSSU5UX0ZPUk1BVCgo InJ4RW5hYmxlZCA9ICV4LCB1cFN0YWxsZWQgPSAleCwgUlggUGFja2V0IHNpemUgPSAleCwgVXAg bGlzdCBwdHIgPSAleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5tUnhFbmFi bGVkLCBzLT5tVXBTdGFsbGVkLCBzLT5tUnhQYWNrZXRTaXplLCBzLT5tUmVnaXN0ZXJzLlVwTGlz dFB0cikpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3J4KHZvaWQgKm9wYXF1ZSwg Y29uc3QgdWludDhfdCAqYnVmLCBpbnQgc2l6ZSkKK3sKKyAgICBBM0M5MFhTdGF0ZSAqcyA9IG9w YXF1ZTsKKworICAgIERFQlVHX1BSSU5UX0ZPUk1BVCgoIjNjOTB4OiBoYW5kbGVfcnggKCVkIGJ5 dGVzKVxuIiwgc2l6ZSkpOworICAgIGlmIChzLT5tUnhQYWNrZXRTaXplKQorICAgIHsKKyAgICAg ICAgREVCVUdfUFJJTlQoIk9sZCBwYWNrZXQgbm90IHlldCB1cGxvYWRlZCFcbiIpOworICAgIH0K KyAgICBlbHNlCisgICAgeworICAgICAgICBzLT5tUnhQYWNrZXRTaXplID0gc2l6ZTsKKyAgICAg ICAgbWVtY3B5KHMtPm1SeFBhY2tldCwgYnVmLCBzaXplKTsKKyAgICAgICAgaWYgKHMtPm1SeEVu YWJsZWQgJiYgKHMtPm1SeFBhY2tldFNpemUgPiBzaXplb2YoRXRoRnJhbWVJSSkpKQorICAgICAg ICB7CisgICAgICAgICAgICBpbmRpY2F0ZShJU19yeENvbXBsZXRlLCBvcGFxdWUpOworICAgICAg ICAgICAgbWF5YmVSYWlzZUludHIob3BhcXVlKTsKKyAgICAgICAgICAgIGFja25vd2xlZGdlKElT X3J4Q29tcGxldGUsIG9wYXF1ZSk7CisgICAgICAgICAgICBpZiAoIXBhc3Nlc1J4RmlsdGVyKHMt Pm1SeFBhY2tldCwgcy0+bVJ4UGFja2V0U2l6ZSwgb3BhcXVlKSkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICBERUJVR19QUklOVF9GT1JNQVQoKCJSZWNlaXZlZCAlZCBieXRlcywgYnV0 IHRoZXkgZG9uJ3QgcGFzcyB0aGUgZmlsdGVyIVxuIiwgcy0+bVJ4UGFja2V0U2l6ZSkpOworICAg ICAgICAgICAgICAgIHMtPm1SeFBhY2tldFNpemUgPSAwOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIGFuZCBub3csIHdl IGRvIHNvbWUgZXh0cmEgZGVidWdnaW5nIG91dHB1dC4uLgorI2lmZGVmIERFQlVHXzNDOTBYX0FO QUxZU0VfRlJBTUVTCisgICAgICAgICAgICAgICAgRXRoRnJhbWVJSSAqZXRoRnJhbWUgPSAoRXRo RnJhbWVJSSopIHMtPm1SeFBhY2tldDsKKyAgICAgICAgICAgICAgICBBVVhfREVCVUdfUFJJTlRf Rk9STUFUKCgiSW5jb21pbmcgcGFja2V0IGluZm9ybWF0aW9uIFslZCBieXRlc106XG4iLCBzLT5t UnhQYWNrZXRTaXplKSk7CisgICAgICAgICAgICAgICAgaWYgKGV0aEZyYW1lLT50eXBlWzBdID09 IDgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoZXRoRnJhbWUt PnR5cGVbMV0gPT0gMHgwNikKKyAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9ERUJVR19QUklO VCgiQVJQXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXRoRnJhbWUtPnR5cGVb MV0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGlwICppcEhlYWRlciA9IChzdHJ1Y3QgaXAqKSAocy0+bVJ4UGFja2V0ICsgc2l6ZW9m KEV0aEZyYW1lSUkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpcEhlYWRlci0+aXBf cCA9PSAweDExKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCB1ZHBoZHIgKnVkcEhlYWRlciA9IChzdHJ1Y3QgdWRwaGRyKikgKHMt Pm1SeFBhY2tldCArIHNpemVvZihFdGhGcmFtZUlJKSArIChpcEhlYWRlci0+aXBfaGwgKiA0KSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0RFQlVHX1BSSU5UX0ZPUk1BVCgoIlVE UDogc3JjPSVkIGRlc3Q9JWRcbiIsIG50b2hzKHVkcEhlYWRlci0+dWhfc3BvcnQpLCBudG9ocyh1 ZHBIZWFkZXItPnVoX2Rwb3J0KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXBIZWFkZXItPmlwX3AgPT0gMHgwNikKKyAgICAg ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg dGNwaGRyICp0Y3BIZWFkZXIgPSAoc3RydWN0IHRjcGhkciopIChzLT5tUnhQYWNrZXQgKyBzaXpl b2YoRXRoRnJhbWVJSSkgKyAoaXBIZWFkZXItPmlwX2hsICogNCkpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFVWF9ERUJVR19QUklOVF9GT1JNQVQoKCJUQ1A6IHNyYz0lZCBkZXN0PSVk ICIsIG50b2hzKHRjcEhlYWRlci0+dGhfc3BvcnQpLCBudG9ocyh0Y3BIZWFkZXItPnRoX2Rwb3J0 KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9ERUJVR19QUklOVCgiZmxhZ3Mg PSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0Y3BIZWFkZXItPnRoX2ZsYWdz ICYgVEhfRklOKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfREVCVUdfUFJJ TlQoIiBGSU4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGNwSGVhZGVyLT50 aF9mbGFncyAmIFRIX1NZTikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0RF QlVHX1BSSU5UKCIgU1lOIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRjcEhl YWRlci0+dGhfZmxhZ3MgJiBUSF9SU1QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFVWF9ERUJVR19QUklOVCgiIFJTVCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm ICh0Y3BIZWFkZXItPnRoX2ZsYWdzICYgVEhfUFVTSCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQVVYX0RFQlVHX1BSSU5UKCIgUFNIIik7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKHRjcEhlYWRlci0+dGhfZmxhZ3MgJiBUSF9BQ0spCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFVWF9ERUJVR19QUklOVCgiIEFDSyIpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmICh0Y3BIZWFkZXItPnRoX2ZsYWdzICYgVEhfVVJHKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBVVhfREVCVUdfUFJJTlQoIiBVUkciKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBVVhfREVCVUdfUFJJTlRfRk9STUFUKCgiIHNlcT0lZCBhY2s9 JWQiLCBudG9obCh0Y3BIZWFkZXItPnRoX3NlcSksIG50b2hsKHRjcEhlYWRlci0+dGhfYWNrKSkp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9ERUJVR19QUklOVCgiXG4iKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFVWF9E RUJVR19QUklOVCgiKGNhbid0IGluc3BlY3QpXG4iKTsKKyNlbmRpZgorICAgICAgICAgICAgICAg IERFQlVHX1BSSU5UX0ZPUk1BVCgoIlJlY2VpdmVkICVkIGJ5dGVzIVxuIiwgcy0+bVJ4UGFja2V0 U2l6ZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg eworICAgICAgICAgICAgREVCVUdfUFJJTlRfRk9STUFUKCgiT29wcyAtIFJ4RW5hYmxlZCA9ICV4 LCBwYWNrZXRTaXplID0gJWQgW2V0aD0lZF1cbiIsIHMtPm1SeEVuYWJsZWQsIHMtPm1SeFBhY2tl dFNpemUsIHNpemVvZihFdGhGcmFtZUlJKSkpOworICAgICAgICAgICAgcy0+bVJ4UGFja2V0U2l6 ZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgY2hlY2tVcFdvcmsob3BhcXVlKTsKK30KKwor c3RhdGljIGludCBhM2M5MHhfY2FuX3JlY2VpdmUodm9pZCAqb3BhcXVlKQoreworICAgIEEzQzkw WFN0YXRlICpzID0gb3BhcXVlOworICAgIGlmIChzLT5tUnhFbmFibGVkKQorICAgIHsKKyAgICAg ICAgaWYgKHMtPm1SeFBhY2tldFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIHRo ZXJlJ3MgYWxyZWFkeSBhIHBhY2tldCB0aGVyZSwgdHJ5IGFuZCB1cGxvYWQgaXQgYWdhaW4KKyAg ICAgICAgICAgIERFQlVHX1BSSU5UKCJPbGQgcGFja2V0IG5vdCB5ZXQgdXBsb2FkZWQhXG4iKTsK KyAgICAgICAgICAgIGNoZWNrVXBXb3JrKG9wYXF1ZSk7CisgICAgICAgICAgICByZXR1cm4gMDsK KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICB9Cisg ICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYTNjOTB4X3JlY2Vp dmUodm9pZCAqb3BhcXVlLCBjb25zdCB1aW50OF90ICpidWYsIGludCBzaXplKQoreworICAgIEFV WF9ERUJVR19QUklOVCgiM0M5MFg6IFBhY2tldCByZWNlaXZlZFxuIik7CisgICAgaGFuZGxlX3J4 KG9wYXF1ZSwgYnVmLCBzaXplKTsKK30KKworc3RhdGljIHVpbnQzMl90IGEzYzkweF9pb19yZWFk eCh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgcG9ydCwgaW50IHNpemUpCit7CisgICAgQTNDOTBYU3Rh dGUgKnMgPSBvcGFxdWU7CisgICAgdWludDMyX3QgZGF0YSA9IDA7CisKKyAgICBpZiAocG9ydCA9 PSAweGUpCisgICAgeworICAgICAgICAvLyBJbnRTdGF0dXMgKG5vIG1hdHRlciB3aGljaCB3aW5k b3cpCisgICAgICAgIGlmIChzaXplICE9IDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIERFQlVH X1BSSU5UKCJ1bmFsaWduZWQgcmVhZCBmcm9tIEludFN0YXR1c1xuIik7CisgICAgICAgIH0KKyAg ICAgICAgREVCVUdfUFJJTlQoInJlYWQgSW50U3RhdHVzXG4iKTsKKyAgICAgICAgcmV0dXJuIHMt Pm1JbnRTdGF0dXM7CisgICAgfQorICAgIGVsc2UgaWYgKHBvcnQgPj0gMCAmJiAocG9ydCtzaXpl IDw9IDB4MGUpKQorICAgIHsKKyAgICAgICAgLy8gcmVhZCBmcm9tIHdpbmRvdworICAgICAgICB1 aW50MzJfdCBjdXJ3aW5kb3cgPSBzLT5tSW50U3RhdHVzID4+IDEzOworICAgICAgICByZXR1cm4g cmVhZFJlZ1dpbmRvdyhvcGFxdWUsIGN1cndpbmRvdywgcG9ydCwgZGF0YSwgc2l6ZSk7CisgICAg fQorICAgIGVsc2UgaWYgKChwb3J0K3NpemUgPiAweDFlKSAmJiAocG9ydCA8PSAweDFmKSkKKyAg ICB7CisgICAgICAgIGlmICgocG9ydCAhPSAweDFlKSB8fCAoc2l6ZSAhPSAyKSkKKyAgICAgICAg eworICAgICAgICAgICAgREVCVUdfUFJJTlQoInVuYWxpZ25lZCByZWFkIGZyb20gSW50U3RhdHVz QXV0b1xuIik7CisgICAgICAgIH0KKyAgICAgICAgUmVnV2luZG93NSAqdzUgPSAoUmVnV2luZG93 NSopICZzLT5tV2luZG93c1s1XTsKKyAgICAgICAgLy8gc2lkZS1lZmZlY3RzIG9mIHJlYWRpbmcg SW50U3RhdHVzQXV0bzoKKyAgICAgICAgLy8gMS5jbGVhciBJbnRlcnJ1cHRFbmFibGUKKyAgICAg ICAgdzUtPkludGVycnVwdEVuYWJsZSA9IDA7CisgICAgICAgIC8vIDIuY2xlYXIgc29tZSBmbGFn cworICAgICAgICBhY2tub3dsZWRnZShJU19kbkNvbXBsZXRlIHwgSVNfdXBDb21wbGV0ZQorICAg ICAgICAgICAgICAgICAgICB8IElTX3J4RWFybHkgfCBJU19pbnRSZXF1ZXN0ZWQKKyAgICAgICAg ICAgICAgICAgICAgfCBJU19pbnRlcnJ1cHRMYXRjaCB8IElTX2xpbmtFdmVudCwgb3BhcXVlKTsK KyAgICAgICAgREVCVUdfUFJJTlQoInJlYWQgSW50U3RhdHVzQXV0b1xuIik7CisgICAgICAgIHJl dHVybiBzLT5tSW50U3RhdHVzOworICAgIH0KKyAgICBlbHNlIGlmICgocG9ydCA+PSAweDEwKSAm JiAocG9ydCtzaXplIDw9IDB4MTAgKyBzaXplb2YoUmVnaXN0ZXJzKSkpCisgICAgeworICAgICAg ICB1aW50OF90IGwgPSBnUmVnQWNjZXNzW3BvcnQtMHgxMF07CisgICAgICAgIGlmIChsICE9IHNp emUpCisgICAgICAgIHsKKyAgICAgICAgICAgIERFQlVHX1BSSU5UKCJpbnZhbGlkL3VuYWxpZ25l ZCByZWFkXG4iKTsKKyAgICAgICAgfQorICAgICAgICAvLyByZWFkIGZyb20gKHN0YW5kYXJkKSBy ZWdpc3RlcgorICAgICAgICBtZW1jcHkoJmRhdGEsICgodWludDhfdCopJnMtPm1SZWdpc3RlcnMp K3BvcnQtMHgxMCwgc2l6ZSk7CisgICAgICAgIHN3aXRjaCAocG9ydCkKKyAgICAgICAgeworICAg ICAgICBjYXNlIDB4MWE6CisgICAgICAgICAgICBERUJVR19QUklOVCgicmVhZCBUaW1lclxuIik7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDIwOgorICAgICAgICAgICAgREVC VUdfUFJJTlQoInJlYWQgRG1hQ3RybFxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg Y2FzZSAweDI0OgorICAgICAgICAgICAgREVCVUdfUFJJTlQoInJlYWQgRG93bkxpc3RQdHJcbiIp OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgzODoKKyAgICAgICAgICAgIERF QlVHX1BSSU5UKCJyZWFkIFVwTGlzdFB0clxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERFQlVHX1BSSU5UKCJyZWFkIHJlZ1xuIik7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGF0YTsKKyAgICB9Cisg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGEzYzkweF9pb193cml0ZXgodm9pZCAqb3Bh cXVlLCB1aW50OF90IHBvcnQsIHVpbnQzMl90IGRhdGEsIGludCBzaXplKQoreworICAgIEEzQzkw WFN0YXRlICpzID0gb3BhcXVlOworCisgICAgaWYgKHBvcnQgPT0gMHhlKQorICAgIHsKKyAgICAg ICAgLy8gQ29tbWFuZFJlZyAobm8gbWF0dGVyIHdoaWNoIHdpbmRvdykKKyAgICAgICAgaWYgKHNp emUgIT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgREVCVUdfUFJJTlQoInVuYWxpZ25lZCB3 cml0ZSB0byBDb21tYW5kUmVnXG4iKTsKKyAgICAgICAgfQorICAgICAgICBzZXRDUihkYXRhLCBv cGFxdWUpOworICAgIH0KKyAgICBlbHNlIGlmIChwb3J0ID49IDAgJiYgKHBvcnQrc2l6ZSA8PSAw eDBlKSkKKyAgICB7CisgICAgICAgIC8vIHdyaXRlIHRvIHdpbmRvdworICAgICAgICB1aW50MzJf dCBjdXJ3aW5kb3cgPSBzLT5tSW50U3RhdHVzID4+IDEzOworICAgICAgICB3cml0ZVJlZ1dpbmRv dyhvcGFxdWUsIGN1cndpbmRvdywgcG9ydCwgZGF0YSwgc2l6ZSk7CisgICAgfQorICAgIGVsc2Ug aWYgKHBvcnQgPj0gMHgxMCAmJiAocG9ydCArIHNpemUgPD0gMHgxMCArIHNpemVvZihSZWdpc3Rl cnMpKSkKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgbCA9IGdSZWdBY2Nlc3NbcG9ydC0weDEwXTsK KyAgICAgICAgaWYgKGwgIT0gc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgREVCVUdfUFJJ TlQoImludmFsaWQvdW5hbGlnbmVkIHdyaXRlIHRvIHJlZ2lzdGVyXG4iKTsKKyAgICAgICAgfQor ICAgICAgICBzd2l0Y2ggKHBvcnQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAweDIwOgorICAg ICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCBEbWFDdHJsUldNYXNrID0gRENfdXBSeEVhcmx5 RW5hYmxlIHwgRENfY291bnRlclNwZWVkIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEQ19jb3VudGRvd25Nb2RlIHwgRENfZGVmZWF0TVdJIHwgRENfZGVmZWF0TVJMIHwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ191cE92ZXJEaXNjRW5hYmxl OworICAgICAgICAgICAgcy0+bVJlZ2lzdGVycy5EbWFDdHJsICY9IH5EbWFDdHJsUldNYXNrOwor ICAgICAgICAgICAgcy0+bVJlZ2lzdGVycy5EbWFDdHJsIHw9IGRhdGEgJiBEbWFDdHJsUldNYXNr OworICAgICAgICAgICAgREVCVUdfUFJJTlQoIndyaXRlIERtYUN0cmxcbiIpOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSAweDI0OgorICAgICAgICB7CisgICAg ICAgICAgICBpZiAoIXMtPm1SZWdpc3RlcnMuRG5MaXN0UHRyKQorICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgIHMtPm1SZWdpc3RlcnMuRG5MaXN0UHRyID0gZGF0YTsKKyAgICAgICAgICAg ICAgICBERUJVR19QUklOVCgid3JpdGUgRG5MaXN0UHRyXG4iKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBERUJVR19QUklO VCgiZGlkbid0IHdyaXRlIERuTGlzdFB0ciBjYXVzZSBpdCdzIG5vdCAwXG4iKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGNoZWNrRG5Xb3JrKG9wYXF1ZSk7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDB4Mzg6CisgICAgICAgIHsKKyAgICAgICAgICAg IHMtPm1SZWdpc3RlcnMuVXBMaXN0UHRyID0gZGF0YTsKKyAgICAgICAgICAgIERFQlVHX1BSSU5U KCJ3cml0ZSBVcExpc3RQdHJcbiIpOworICAgICAgICAgICAgY2hlY2tVcFdvcmsob3BhcXVlKTsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgMHgyZDoKKyAgICAg ICAgICAgIERFQlVHX1BSSU5UKCJEblBvbGxcbiIpOworICAgICAgICAgICAgLy8gU0lOR0xFU1RF UCgiIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDJhOgorICAgICAgICAg ICAgbWVtY3B5KCgodWludDhfdCopJnMtPm1SZWdpc3RlcnMpK3BvcnQtMHgxMCwgJmRhdGEsIHNp emUpOworICAgICAgICAgICAgREVCVUdfUFJJTlQoIndyaXRlIERuQnVyc3RUaHJlc2hcbiIpOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgyYzoKKyAgICAgICAgICAgIG1lbWNw eSgoKHVpbnQ4X3QqKSZzLT5tUmVnaXN0ZXJzKStwb3J0LTB4MTAsICZkYXRhLCBzaXplKTsKKyAg ICAgICAgICAgIERFQlVHX1BSSU5UKCJ3cml0ZSBEblByaW9yaXR5VGhyZXNoXG4iKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MmY6CisgICAgICAgICAgICAvLyB1c2VkIGJ5 IERhcndpbiBhcyBUeEZyZWVUaHJlc2guIE5vdCBkb2N1bWVudGVkIGluIFsxXS4KKyAgICAgICAg ICAgIG1lbWNweSgoKHVpbnQ4X3QqKSZzLT5tUmVnaXN0ZXJzKStwb3J0LTB4MTAsICZkYXRhLCBz aXplKTsKKyAgICAgICAgICAgIERFQlVHX1BSSU5UKCJ3cml0ZSBUeEZyZWVUaHJlc2hcbiIpOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgzYzoKKyAgICAgICAgICAgIG1lbWNw eSgoKHVpbnQ4X3QqKSZzLT5tUmVnaXN0ZXJzKStwb3J0LTB4MTAsICZkYXRhLCBzaXplKTsKKyAg ICAgICAgICAgIERFQlVHX1BSSU5UKCJ3cml0ZSBVcFByaW9yaXR5VGhyZXNoXG4iKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4M2U6CisgICAgICAgICAgICBtZW1jcHkoKCh1 aW50OF90Kikmcy0+bVJlZ2lzdGVycykrcG9ydC0weDEwLCAmZGF0YSwgc2l6ZSk7CisgICAgICAg ICAgICBERUJVR19QUklOVCgid3JpdGUgVXBCdXJzdFRocmVzaFxuIik7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgY2FzZSAweDFiOgorICAgICAgICAgICAgaWYgKHNpemUgIT0gMSkKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBERUJVR19QUklOVCgid3Jvbmcgc2l6ZSBmb3Ig d3JpdGUgdG8gVHhTdGF0dXNcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIERFQlVHX1BSSU5UX0ZPUk1BVCgoIldyaXRpbmcgJXggdG8gVHhT dGF0dXNcbiIsIGRhdGEpKTsKKyAgICAgICAgICAgIHMtPm1SZWdpc3RlcnMuVHhTdGF0dXMgPSBk YXRhOworCisgICAgICAgICAgICAvLyBhY2tub3dsZWRnZSB0aGUgcmVsZXZhbnQgYml0cworICAg ICAgICAgICAgYWNrbm93bGVkZ2UoSVNfdHhDb21wbGV0ZSwgb3BhcXVlKTsKKyAgICAgICAgICAg IC8vICB8IElTX2RuQ29tcGxldGUgfCBJU19jbWRJblByb2dyZXNzCisKKyAgICAgICAgICAgIC8v IE5PVEU6ICJBbiBJL08gd3JpdGUgb2YgYW4gYXJiaXRyYXJ5IHZhbHVlIHRvIFR4U3RhdHVzIGFk dmFuY2VzIHRoZSBxdWV1ZSB0byB0aGUgbmV4dCB0cmFuc21pdCBzdGF0dXMgYnl0ZS4iCisgICAg ICAgICAgICAvLyBXZSBhbHNvIG5lZWQgdG8ga2VlcCB0aGUgcXVldWUgb2YgVFggU3RhdHVzIGJ5 dGVzIQorCisgICAgICAgICAgICAvLyBtYXliZVJhaXNlSW50cihvcGFxdWUpOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERUJVR19QUklOVCgid3Jp dGUgdG8gcmVnaXN0ZXJcbiIpOworICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAg ICAgICAgICAvLyB3cml0ZSB0byAoc3RhbmRhcmQpIHJlZ2lzdGVyCisgICAgICAgICAgICBtZW1j cHkoKCh1aW50OF90Kikmcy0+bVJlZ2lzdGVycykrcG9ydC0weDEwLCAmZGF0YSwgc2l6ZSk7Cisg ICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGEzYzkweF9pb193cml0ZWIodm9pZCAq b3BhcXVlLCB1aW50OF90IGFkZHIsIHVpbnQzMl90IHZhbCkKK3sKKyAgICBhM2M5MHhfaW9fd3Jp dGV4KG9wYXF1ZSwgYWRkciwgdmFsLCAxKTsKK30KKworc3RhdGljIHZvaWQgYTNjOTB4X2lvX3dy aXRldyh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgYWRkciwgdWludDMyX3QgdmFsKQoreworICAgIGEz YzkweF9pb193cml0ZXgob3BhcXVlLCBhZGRyLCB2YWwsIDIpOworfQorCitzdGF0aWMgdm9pZCBh M2M5MHhfaW9fd3JpdGVsKHZvaWQgKm9wYXF1ZSwgdWludDhfdCBhZGRyLCB1aW50MzJfdCB2YWwp Cit7CisgICAgYTNjOTB4X2lvX3dyaXRleChvcGFxdWUsIGFkZHIsIHZhbCwgNCk7Cit9CisKK3N0 YXRpYyB1aW50MzJfdCBhM2M5MHhfaW9fcmVhZGIodm9pZCAqb3BhcXVlLCB1aW50OF90IGFkZHIp Cit7CisgICAgcmV0dXJuIGEzYzkweF9pb19yZWFkeChvcGFxdWUsIGFkZHIsIDEpOworfQorCitz dGF0aWMgdWludDMyX3QgYTNjOTB4X2lvX3JlYWR3KHZvaWQgKm9wYXF1ZSwgdWludDhfdCBhZGRy KQoreworICAgIHJldHVybiBhM2M5MHhfaW9fcmVhZHgob3BhcXVlLCBhZGRyLCAyKTsKK30KKwor c3RhdGljIHVpbnQzMl90IGEzYzkweF9pb19yZWFkbCh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgYWRk cikKK3sKKyAgICByZXR1cm4gYTNjOTB4X2lvX3JlYWR4KG9wYXF1ZSwgYWRkciwgNCk7Cit9CisK Ky8qICovCisKK3N0YXRpYyB2b2lkIGEzYzkweF9pb3BvcnRfd3JpdGViKHZvaWQgKm9wYXF1ZSwg dWludDMyX3QgYWRkciwgdWludDMyX3QgdmFsKQoreworICAgIGEzYzkweF9pb193cml0ZWIob3Bh cXVlLCBhZGRyICYgMHhGRiwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgYTNjOTB4X2lvcG9ydF93 cml0ZXcodm9pZCAqb3BhcXVlLCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCB2YWwpCit7CisgICAg YTNjOTB4X2lvX3dyaXRldyhvcGFxdWUsIGFkZHIgJiAweEZGLCB2YWwpOworfQorCitzdGF0aWMg dm9pZCBhM2M5MHhfaW9wb3J0X3dyaXRlbCh2b2lkICpvcGFxdWUsIHVpbnQzMl90IGFkZHIsIHVp bnQzMl90IHZhbCkKK3sKKyAgICBhM2M5MHhfaW9fd3JpdGVsKG9wYXF1ZSwgYWRkciAmIDB4RkYs IHZhbCk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBhM2M5MHhfaW9wb3J0X3JlYWRiKHZvaWQgKm9w YXF1ZSwgdWludDMyX3QgYWRkcikKK3sKKyAgICByZXR1cm4gYTNjOTB4X2lvX3JlYWRiKG9wYXF1 ZSwgYWRkciAmIDB4RkYpOworfQorCitzdGF0aWMgdWludDMyX3QgYTNjOTB4X2lvcG9ydF9yZWFk dyh2b2lkICpvcGFxdWUsIHVpbnQzMl90IGFkZHIpCit7CisgICAgcmV0dXJuIGEzYzkweF9pb19y ZWFkdyhvcGFxdWUsIGFkZHIgJiAweEZGKTsKK30KKworc3RhdGljIHVpbnQzMl90IGEzYzkweF9p b3BvcnRfcmVhZGwodm9pZCAqb3BhcXVlLCB1aW50MzJfdCBhZGRyKQoreworICAgIHJldHVybiBh M2M5MHhfaW9fcmVhZGwob3BhcXVlLCBhZGRyICYgMHhGRik7Cit9CisKKy8qICovCisKK3N0YXRp YyB2b2lkIGEzYzkweF9tbWlvX3dyaXRlYih2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJf dCBhZGRyLCB1aW50MzJfdCB2YWwpCit7CisgICAgYTNjOTB4X2lvX3dyaXRlYihvcGFxdWUsIGFk ZHIgJiAweEZGLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBhM2M5MHhfbW1pb193cml0ZXcodm9p ZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwgdWludDMyX3QgdmFsKQoreworI2lm ZGVmIFRBUkdFVF9XT1JEU19CSUdFTkRJQU4KKyAgICB2YWwgPSBic3dhcDE2KHZhbCk7CisjZW5k aWYKKyAgICBhM2M5MHhfaW9fd3JpdGV3KG9wYXF1ZSwgYWRkciAmIDB4RkYsIHZhbCk7Cit9CisK K3N0YXRpYyB2b2lkIGEzYzkweF9tbWlvX3dyaXRlbCh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlz X2FkZHJfdCBhZGRyLCB1aW50MzJfdCB2YWwpCit7CisjaWZkZWYgVEFSR0VUX1dPUkRTX0JJR0VO RElBTgorICAgIHZhbCA9IGJzd2FwMzIodmFsKTsKKyNlbmRpZgorICAgIGEzYzkweF9pb193cml0 ZWwob3BhcXVlLCBhZGRyICYgMHhGRiwgdmFsKTsKK30KKworc3RhdGljIHVpbnQzMl90IGEzYzkw eF9tbWlvX3JlYWRiKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpCit7Cisg ICAgcmV0dXJuIGEzYzkweF9pb19yZWFkYihvcGFxdWUsIGFkZHIgJiAweEZGKTsKK30KKworc3Rh dGljIHVpbnQzMl90IGEzYzkweF9tbWlvX3JlYWR3KHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNf YWRkcl90IGFkZHIpCit7CisgICAgdWludDMyX3QgdmFsID0gYTNjOTB4X2lvX3JlYWR3KG9wYXF1 ZSwgYWRkciAmIDB4RkYpOworI2lmZGVmIFRBUkdFVF9XT1JEU19CSUdFTkRJQU4KKyAgICB2YWwg PSBic3dhcDE2KHZhbCk7CisjZW5kaWYKKyAgICByZXR1cm4gdmFsOworfQorCitzdGF0aWMgdWlu dDMyX3QgYTNjOTB4X21taW9fcmVhZGwodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3Qg YWRkcikKK3sKKyAgICB1aW50MzJfdCB2YWwgPSBhM2M5MHhfaW9fcmVhZGwob3BhcXVlLCBhZGRy ICYgMHhGRik7CisjaWZkZWYgVEFSR0VUX1dPUkRTX0JJR0VORElBTgorICAgIHZhbCA9IGJzd2Fw MzIodmFsKTsKKyNlbmRpZgorICAgIHJldHVybiB2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFBDSSAzQzkw eCBkZWZpbml0aW9ucyAqLworCit0eXBlZGVmIHN0cnVjdCBQQ0kzQzkwWFN0YXRlCit7CisgICAg UENJRGV2aWNlIGRldjsKKyAgICBBM0M5MFhTdGF0ZSBhM2M5MHg7Cit9IFBDSTNDOTBYU3RhdGU7 CisKK3N0YXRpYyB2b2lkIGEzYzkweF9tbWlvX21hcChQQ0lEZXZpY2UgKnBjaV9kZXYsIGludCBy ZWdpb25fbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFkZHIsIHVp bnQzMl90IHNpemUsIGludCB0eXBlKQoreworICAgIFBDSTNDOTBYU3RhdGUgKmQgPSAoUENJM0M5 MFhTdGF0ZSAqKXBjaV9kZXY7CisgICAgQTNDOTBYU3RhdGUgKnMgPSAmZC0+YTNjOTB4OworCisg ICAgY3B1X3JlZ2lzdGVyX3BoeXNpY2FsX21lbW9yeShhZGRyICsgMCwgMHgxMDAsIHMtPmEzYzkw eF9tbWlvX2lvX2FkZHIpOworfQorCitzdGF0aWMgdm9pZCBhM2M5MHhfaW9wb3J0X21hcChQQ0lE ZXZpY2UgKnBjaV9kZXYsIGludCByZWdpb25fbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDMyX3QgYWRkciwgdWludDMyX3Qgc2l6ZSwgaW50IHR5cGUpCit7CisgICAgUENJ M0M5MFhTdGF0ZSAqZCA9IChQQ0kzQzkwWFN0YXRlICopcGNpX2RldjsKKyAgICBBM0M5MFhTdGF0 ZSAqcyA9ICZkLT5hM2M5MHg7CisKKyAgICByZWdpc3Rlcl9pb3BvcnRfd3JpdGUoYWRkciwgMHgx MDAsIDEsIGEzYzkweF9pb3BvcnRfd3JpdGViLCBzKTsKKyAgICByZWdpc3Rlcl9pb3BvcnRfcmVh ZCggYWRkciwgMHgxMDAsIDEsIGEzYzkweF9pb3BvcnRfcmVhZGIsICBzKTsKKworICAgIHJlZ2lz dGVyX2lvcG9ydF93cml0ZShhZGRyLCAweDEwMCwgMiwgYTNjOTB4X2lvcG9ydF93cml0ZXcsIHMp OworICAgIHJlZ2lzdGVyX2lvcG9ydF9yZWFkKCBhZGRyLCAweDEwMCwgMiwgYTNjOTB4X2lvcG9y dF9yZWFkdywgIHMpOworCisgICAgcmVnaXN0ZXJfaW9wb3J0X3dyaXRlKGFkZHIsIDB4MTAwLCA0 LCBhM2M5MHhfaW9wb3J0X3dyaXRlbCwgcyk7CisgICAgcmVnaXN0ZXJfaW9wb3J0X3JlYWQoIGFk ZHIsIDB4MTAwLCA0LCBhM2M5MHhfaW9wb3J0X3JlYWRsLCAgcyk7Cit9CisKK3N0YXRpYyBDUFVS ZWFkTWVtb3J5RnVuYyAqYTNjOTB4X21taW9fcmVhZFszXSA9Cit7CisgICAgYTNjOTB4X21taW9f cmVhZGIsCisgICAgYTNjOTB4X21taW9fcmVhZHcsCisgICAgYTNjOTB4X21taW9fcmVhZGwsCit9 OworCitzdGF0aWMgQ1BVV3JpdGVNZW1vcnlGdW5jICphM2M5MHhfbW1pb193cml0ZVszXSA9Cit7 CisgICAgYTNjOTB4X21taW9fd3JpdGViLAorICAgIGEzYzkweF9tbWlvX3dyaXRldywKKyAgICBh M2M5MHhfbW1pb193cml0ZWwsCit9OworCitzdGF0aWMgaW5saW5lIGludDY0X3QgYTNjOTB4X2dl dF9uZXh0X3RjdHJfdGltZShBM0M5MFhTdGF0ZSAqcywgaW50NjRfdCBjdXJyZW50X3RpbWUpCit7 CisgICAgaW50NjRfdCBuZXh0X3RpbWUgPSBjdXJyZW50X3RpbWUgKworICAgICAgICAgICAgICAg ICAgICAgICAgbXVsZGl2NjQoMSwgdGlja3NfcGVyX3NlYywgUENJX0ZSRVFVRU5DWSk7CisgICAg aWYgKG5leHRfdGltZSA8PSBjdXJyZW50X3RpbWUpCisgICAgICAgIG5leHRfdGltZSA9IGN1cnJl bnRfdGltZSArIDE7CisgICAgcmV0dXJuIG5leHRfdGltZTsKK30KKwordm9pZCBhM2M5MHhfY2xl YW51cChWTEFOQ2xpZW50U3RhdGUgKnZjKQoreworICAgIERFQlVHX1BSSU5UKCIzQzkwWDogQ2xl YW51cCBub3QgaW1wbGVtZW50ZWRcbiIpOworfQorCitzdGF0aWMgdm9pZCBwY2lfYTNjOTB4X2lu aXQoUENJRGV2aWNlICpwY2lfZGV2KQoreworICAgIFBDSTNDOTBYU3RhdGUgKmQ7CisgICAgQTND OTBYU3RhdGUgKnM7CisgICAgdWludDhfdCAqcGNpX2NvbmY7CisKKyAgICBkID0gKFBDSTNDOTBY U3RhdGUgKikgcGNpX2RldjsKKyAgICBwY2lfY29uZiA9IGQtPmRldi5jb25maWc7CisgICAgcGNp X2NvbmZpZ19zZXRfdmVuZG9yX2lkKHBjaV9jb25mLCBQQ0lfVkVORE9SX0lEXzNDT00pOworICAg IHBjaV9jb25maWdfc2V0X2RldmljZV9pZChwY2lfY29uZiwgUENJX0RFVklDRV9JRF8zQzkwWCk7 CisgICAgcGNpX2NvbmZbMHgwNF0gPSAweDA3OyAvKiBjb21tYW5kID0gSS9PIHNwYWNlLCBCdXMg TWFzdGVyICovCisgICAgcGNpX2NvbmZbMHgwOF0gPSAwOworICAgIHBjaV9jb25maWdfc2V0X2Ns YXNzKHBjaV9jb25mLCBQQ0lfQ0xBU1NfTkVUV09SS19FVEhFUk5FVCk7CisgICAgcGNpX2NvbmZb MHgwZV0gPSAweDAwOyAvKiBoZWFkZXJfdHlwZSAqLworICAgIHBjaV9jb25mWzB4M2RdID0gMTsg ICAgLyogaW50ZXJydXB0IHBpbiAwICovCisgICAgcGNpX2NvbmZbMHgzNF0gPSAweGRjOworCisg ICAgcGNpX2NvbmZbMHgzZV0gPSA1OworICAgIHBjaV9jb25mWzB4M2ZdID0gNDg7CisKKyAgICBz ID0gJmQtPmEzYzkweDsKKworICAgIC8qIEkvTyBoYW5kbGVyIGZvciBtZW1vcnktbWFwcGVkIEkv TyAqLworICAgIHMtPmEzYzkweF9tbWlvX2lvX2FkZHIgPQorICAgICAgICBjcHVfcmVnaXN0ZXJf aW9fbWVtb3J5KDAsIGEzYzkweF9tbWlvX3JlYWQsIGEzYzkweF9tbWlvX3dyaXRlLCBzKTsKKwor ICAgIHBjaV9yZWdpc3Rlcl9pb19yZWdpb24oJmQtPmRldiwgMCwgMHgxMDAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBQQ0lfQUREUkVTU19TUEFDRV9JTywgIGEzYzkweF9pb3BvcnRfbWFw KTsKKworICAgIHBjaV9yZWdpc3Rlcl9pb19yZWdpb24oJmQtPmRldiwgMSwgMHgxMDAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBQQ0lfQUREUkVTU19TUEFDRV9NRU0sIGEzYzkweF9tbWlv X21hcCk7CisKKyAgICBzLT5wY2lfZGV2ID0gKFBDSURldmljZSAqKWQ7CisgICAgcWRldl9nZXRf bWFjYWRkcigmZC0+ZGV2LnFkZXYsIHMtPm1NQUMpOworICAgIGEzYzkweF9yZXNldChzKTsKKyAg ICBzLT52YyA9IHFkZXZfZ2V0X3ZsYW5fY2xpZW50KCZkLT5kZXYucWRldiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGEzYzkweF9yZWNlaXZlLCBhM2M5MHhfY2FuX3JlY2VpdmUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhM2M5MHhfY2xlYW51cCwgcyk7CisK KyAgICBxZW11X2Zvcm1hdF9uaWNfaW5mb19zdHIocy0+dmMsIHMtPm1NQUMpOworCisgICAgLy9y ZWdpc3Rlcl9zYXZldm0oIjNjOTB4IiwgLTEsIDQsIGEzYzkweF9zYXZlLCBhM2M5MHhfbG9hZCwg cyk7Cit9CisKK3N0YXRpYyB2b2lkIGEzYzkweF9yZWdpc3Rlcl9kZXZpY2VzKHZvaWQpCit7Cisg ICAgcGNpX3FkZXZfcmVnaXN0ZXIoIjNjOTB4Iiwgc2l6ZW9mKFBDSTNDOTBYU3RhdGUpLCBwY2lf YTNjOTB4X2luaXQpOworfQorCitkZXZpY2VfaW5pdChhM2M5MHhfcmVnaXN0ZXJfZGV2aWNlcykK ZGlmZiAtLWdpdCBhL2h3L3BjaS5jIGIvaHcvcGNpLmMKaW5kZXggNDQ1ODA3OS4uZTExZGRhNiAx MDA2NDQKLS0tIGEvaHcvcGNpLmMKKysrIGIvaHcvcGNpLmMKQEAgLTc3MSw2ICs3NzEsNyBAQCBz dGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBjaV9uaWNfbW9kZWxzW10gPSB7CiAgICAgImk4MjU1 N2IiLAogICAgICJpODI1NTllciIsCiAgICAgInJ0bDgxMzkiLAorCSIzYzkweCIsCiAgICAgImUx MDAwIiwKICAgICAicGNuZXQiLAogICAgICJ2aXJ0aW8iLApAQCAtNzgzLDYgKzc4NCw3IEBAIHN0 YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGNpX25pY19uYW1lc1tdID0gewogICAgICJpODI1NTdi IiwKICAgICAiaTgyNTU5ZXIiLAogICAgICJydGw4MTM5IiwKKwkiM2M5MHgiLAogICAgICJlMTAw MCIsCiAgICAgInBjbmV0IiwKICAgICAidmlydGlvLW5ldC1wY2kiLApkaWZmIC0tZ2l0IGEvaHcv cGNpX2lkcy5oIGIvaHcvcGNpX2lkcy5oCmluZGV4IDNhZmU2NzQuLmVkYmJjYjcgMTAwNjQ0Ci0t LSBhL2h3L3BjaV9pZHMuaAorKysgYi9ody9wY2lfaWRzLmgKQEAgLTc1LDYgKzc1LDkgQEAKICNk ZWZpbmUgUENJX1ZFTkRPUl9JRF9SRUFMVEVLICAgICAgICAgICAgMHgxMGVjCiAjZGVmaW5lIFBD SV9ERVZJQ0VfSURfUkVBTFRFS184MTM5ICAgICAgIDB4ODEzOQogCisjZGVmaW5lIFBDSV9WRU5E T1JfSURfM0NPTSAgICAgICAgICAgICAgIDB4MTBiNworI2RlZmluZSBQQ0lfVkVORE9SX0lEXzND T01fM0M5MFggICAgICAgICAweDkyMDAKKwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1hJTElOWCAg ICAgICAgICAgICAweDEwZWUKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX01BUlZFTEwgICAgICAg ICAgICAweDExYWIKLS0gCjEuNi4zLjIuMTI5OS5nZWU0NmMKCg== --0016e647f026d33b45046db6a8c2--