From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1M1FWQ-0007N6-V6 for qemu-devel@nongnu.org; Tue, 05 May 2009 03:57:03 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1M1FWK-0007MW-7B for qemu-devel@nongnu.org; Tue, 05 May 2009 03:57:02 -0400 Received: from [199.232.76.173] (port=45580 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1M1FWK-0007MT-2y for qemu-devel@nongnu.org; Tue, 05 May 2009 03:56:56 -0400 Received: from mail-qy0-f111.google.com ([209.85.221.111]:41824) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1M1FWI-0004w0-RP for qemu-devel@nongnu.org; Tue, 05 May 2009 03:56:55 -0400 Received: by qyk9 with SMTP id 9so7770700qyk.4 for ; Tue, 05 May 2009 00:56:51 -0700 (PDT) MIME-Version: 1.0 Date: Tue, 5 May 2009 17:56:51 +1000 Message-ID: From: Matthew Iselin Content-Type: multipart/mixed; boundary=0016e6470e0c2616700469259f41 Subject: [Qemu-devel] PATCH: Add 3C90X emulation List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org --0016e6470e0c2616700469259f41 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Hi, This patch adds the 3Com 3C90x series to the set of NICs that QEMU can emulate. It is still a work in progress, however at this stage it has the base required functionality and works with Ubuntu and Damn Small Linux. Part 1 modifies the Makefile.target file to add the object file for the emulation implementation. Part 2 includes the hw directory modifications, including the new 3c90x.c file. Thanks, Matthew --0016e6470e0c2616700469259f41 Content-Type: text/x-patch; charset=US-ASCII; name="3c90x_1.patch" Content-Disposition: attachment; filename="3c90x_1.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fucb2abf0 LS0tIC4vcWVtdS0wLjEwLjMtY2xlYW4vTWFrZWZpbGUudGFyZ2V0CTIwMDktMDUtMDIgMDM6MDI6 NDQuMDAwMDAwMDAwICsxMDAwCisrKyAuL3FlbXUtMC4xMC4zL01ha2VmaWxlLnRhcmdldAkyMDA5 LTA1LTA1IDE3OjE2OjQxLjAwMDAwMDAwMCArMTAwMApAQCAtNTcyLDYgKzU3Miw3IEBAIE9CSlMg Kz0gZWVwcm8xMDAubwogT0JKUyArPSBuZTIwMDAubwogT0JKUyArPSBwY25ldC5vCiBPQkpTICs9 IHJ0bDgxMzkubworT0JKUyArPSAzYzkweC5vCiBPQkpTICs9IGUxMDAwLm8KIAogIyBTZXJpYWwg bW91c2UK --0016e6470e0c2616700469259f41 Content-Type: text/x-patch; charset=US-ASCII; name="3c90x_2.patch" Content-Disposition: attachment; filename="3c90x_2.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fucb2j071 ZGlmZiAtcnVOcCAtLSAuL3FlbXUtMC4xMC4zLWNsZWFuL2h3LzNjOTB4LmMgLi9xZW11LTAuMTAu My9ody8zYzkweC5jCi0tLSAuL3FlbXUtMC4xMC4zLWNsZWFuL2h3LzNjOTB4LmMJMTk3MC0wMS0w MSAxMDowMDowMC4wMDAwMDAwMDAgKzEwMDAKKysrIC4vcWVtdS0wLjEwLjMvaHcvM2M5MHguYwky MDA5LTA1LTA1IDE3OjI1OjIzLjAwMDAwMDAwMCArMTAwMApAQCAtMCwwICsxLDI0MDUgQEAKKy8q KgorICogUUVNVSAzQzkwWCBFbXVsYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTWF0 dGhldyBJc2VsaW4gKFFFTVUgVkVSU0lPTikKKyAqIENvcHlyaWdodCAoQykgMjAwNCBKb2huIEtl bGxleSAocGVhcnBjQGtlbGxleS5jYSkgKFBFQVJQQyBWRVJTSU9OKQorICogQ29weXJpZ2h0IChD KSAyMDAzIFN0ZWZhbiBXZXllcmdyYWYgKFBFQVJQQyBWRVJTSU9OKQorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmln aHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwg YmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKworICog TW9kaWZpY2F0aW9uczoKKyAqICAobm9uZSkKKyAqLworCisvKioKKyAqIFRPRE86CisgKiAgLSBT dGlsbCBhIGxvdCBvZiB1bmltcGxlbWVudGVkIGZ1bmN0aW9uYWxpdHkKKyAqICAtIE9uLWNoaXAg VENQIGNoZWNrc3VtIGVtdWxhdGlvbgorICogIC0gc2F2ZXZtIGZ1bmN0aW9ucworICogVEVTVEVE IE9OOgorICogIC0gRGFtbiBTbWFsbCBMaW51eCAoNC40LjEwKQorICogIC0gVWJ1bnR1ICg4LjEw LCA1LjEwKQorICogIC0gUGVkaWdyZWUKKyAqLworCisjaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRl ICJwY2kuaCIKKyNpbmNsdWRlICJxZW11LXRpbWVyLmgiCisjaW5jbHVkZSAibmV0LmgiCisKKy8v IFNob3VsZCB3ZSBpbnNwZWN0IGluY29taW5nIGZyYW1lcyBhbmQgcHJpbnQgZXh0cmEgZGVidWdn aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZW0/CisvLyNkZWZpbmUgREVCVUdfM0M5MFhfQU5BTFlT RV9GUkFNRVMgICAgICAgICAgMAorCisjaWZkZWYgREVCVUdfM0M5MFhfQU5BTFlTRV9GUkFNRVMK KyNkZWZpbmUgX19GQVZPUl9CU0QKKyNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisjaW5jbHVkZSA8 bmV0aW5ldC90Y3AuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisKKyNkZWZp bmUgUEFDS0VEICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisjZGVmaW5lIEFMSUdORUQg ICAgIF9fYXR0cmlidXRlX18oKGFsaWduZWQpKTsKKyNkZWZpbmUgUEFDS0VEOCAgICAgX19hdHRy aWJ1dGVfXygoYWxpZ25lZCg4KSkpOworI2RlZmluZSBQQUNLRUQxNiAgICBfX2F0dHJpYnV0ZV9f KChhbGlnbmVkKDE2KSkpOworI2RlZmluZSBQQUNLRUQzMiAgICBfX2F0dHJpYnV0ZV9fKChhbGln bmVkKDMyKSkpOworCisvKiBkZWJ1ZyAzQzkwWCBjYXJkICovCisvLyAjZGVmaW5lIERFQlVHXzND OTBYIDEKKworLyogZGVmaW5lIHRoaXMgdG8gb3V0cHV0IFRYIGFuZCBSWCBldmVudHMgKi8KKy8v ICNkZWZpbmUgREVCVUdfM0M5MFhfQVVYIDEKKworI2RlZmluZSBQQ0lfRlJFUVVFTkNZIDMzMDAw MDAwTAorCisvKiBDYWxjdWxhdGUgQ1JDcyBwcm9wZXJseSBvbiBUeCBwYWNrZXRzICovCisjZGVm aW5lIEEzQzkwWF9DQUxDVUxBVEVfVFhDUkMgMQorCisjaWYgZGVmaW5lZChBM0M5MHhfQ0FMQ1VM QVRFX1JYQ1JDKQorLyogRm9yIGNyYzMyICovCisjaW5jbHVkZSA8emxpYi5oPgorI2VuZGlmCisK KyNpZiBkZWZpbmVkIChERUJVR18zQzkwWCkKKyMgIGRlZmluZSBERUJVR19QUklOVCh4KSBkbyB7 IHByaW50Zih4KSA7IH0gd2hpbGUgKDApCisjICBkZWZpbmUgREVCVUdfUFJJTlRfRk9STUFUKHgp IGRvIHsgcHJpbnRmIHggIDsgfSB3aGlsZSAoMCkKKyNlbHNlCisjICBkZWZpbmUgREVCVUdfUFJJ TlQoeCkKKyMgIGRlZmluZSBERUJVR19QUklOVF9GT1JNQVQoeCkKKyNlbmRpZgorCisjaWYgZGVm aW5lZCAoREVCVUdfM0M5MFhfQVVYKQorIyAgZGVmaW5lIEFVWF9ERUJVR19QUklOVCh4KSBkbyB7 IHByaW50Zih4KSA7IH0gd2hpbGUgKDApCisjICBkZWZpbmUgQVVYX0RFQlVHX1BSSU5UX0ZPUk1B VCh4KSBkbyB7IHByaW50ZiB4ICA7IH0gd2hpbGUgKDApCisjZWxzZQorIyAgZGVmaW5lIEFVWF9E RUJVR19QUklOVCh4KSBERUJVR19QUklOVCh4KQorIyAgZGVmaW5lIEFVWF9ERUJVR19QUklOVF9G T1JNQVQoeCkgREVCVUdfUFJJTlRfRk9STUFUKHgpCisjZW5kaWYKKworI2RlZmluZSBNQVhfUEFD S0VUX1NJWkUgMTYzODQKKworZW51bSBDb21tYW5kCit7CisgICAgQ21kVG90YWxSZXNldCA9IDA8 PDExLAorICAgIENtZFNlbGVjdFdpbmRvdyA9IDE8PDExLAorICAgIENtZEVuYWJsZURDID0gMjw8 MTEsICAgICAgICAgICAgICAgIC8vIENtZFN0YXJ0Q29heAorICAgIENtZFJ4RGlzYWJsZSA9IDM8 PDExLAorICAgIENtZFJ4RW5hYmxlID0gNDw8MTEsCisgICAgQ21kUnhSZXNldCA9IDU8PDExLAor ICAgIENtZFN0YWxsID0gNjw8MTEsCisgICAgQ21kVHhEb25lID0gNzw8MTEsCisgICAgQ21kUnhE aXNjYXJkID0gODw8MTEsCisgICAgQ21kVHhFbmFibGUgPSA5PDwxMSwKKyAgICBDbWRUeERpc2Fi bGUgPSAxMDw8MTEsCisgICAgQ21kVHhSZXNldCA9IDExPDwxMSwKKyAgICBDbWRSZXFJbnRyID0g MTI8PDExLCAgICAgICAgICAgICAgICAvLyBDbWRGYWtlSW50cgorICAgIENtZEFja0ludHIgPSAx Mzw8MTEsCisgICAgQ21kU2V0SW50ckVuYiA9IDE0PDwxMSwKKyAgICBDbWRTZXRJbmRpY2F0aW9u RW5hYmxlID0gMTU8PDExLCAgICAvLyBDbWRTZXRTdGF0dXNFbmIKKyAgICBDbWRTZXRSeEZpbHRl ciA9IDE2PDwxMSwKKyAgICBDbWRTZXRSeEVhcmx5VGhyZXNoID0gMTc8PDExLAorICAgIENtZFNl dFR4VGhyZXNob2xkID0gMTg8PDExLCAgICAgICAgIC8vIGFrYSBUeEFnYWluID8KKyAgICBDbWRT ZXRUeFN0YXJ0VGhyZXNoID0gMTk8PDExLCAgICAgICAvLyBzZXQgVHhTdGFydFRyZXNoCisgICAg Ly8gIENtZFN0YXJ0RE1BVXAgPSAyMDw8MTEsCisgICAgLy8gIENtZFN0YXJ0RE1BRG93biA9ICgy MDw8MTEpKzEsCisgICAgQ21kU3RhdHNFbmFibGUgPSAyMTw8MTEsCisgICAgQ21kU3RhdHNEaXNh YmxlID0gMjI8PDExLAorICAgIENtZERpc2FibGVEQyA9IDIzPDwxMSwgICAgICAgICAgICAgIC8v IENtZFN0b3BDb2F4CisgICAgQ21kU2V0VHhSZWNsYWltVGhyZXNoID0gMjQ8PDExLAorICAgIENt ZFNldEhhc2hGaWx0ZXJCaXQgPSAyNTw8MTEKK307CisKKy8qCisgKiAgSW50U3RhdHVzQml0cwor ICovCitlbnVtIEludFN0YXR1c0JpdHMKK3sKKyAgICBJU19pbnRlcnJ1cHRMYXRjaCA9IDE8PDAs CisgICAgSVNfaG9zdEVycm9yID0gICAgICAxPDwxLAorICAgIElTX3R4Q29tcGxldGUgPSAgICAg MTw8MiwKKyAgICAvKiBiaXQgMyBpcyB1bnNwZWNpZmllZCAqLworICAgIElTX3J4Q29tcGxldGUg PSAgICAgMTw8NCwKKyAgICBJU19yeEVhcmx5ID0gICAgICAgIDE8PDUsCisgICAgSVNfaW50UmVx dWVzdGVkID0gICAxPDw2LAorICAgIElTX3VwZGF0ZVN0YXRzID0gICAgMTw8NywKKyAgICBJU19s aW5rRXZlbnQgPSAgICAgIDE8PDgsCisgICAgSVNfZG5Db21wbGV0ZSA9ICAgICAxPDw5LAorICAg IElTX3VwQ29tcGxldGUgPSAgICAgMTw8MTAsCisgICAgSVNfY21kSW5Qcm9ncmVzcyA9ICAxPDwx MSwKKyAgICAvKiBiaXQgMTIgaXMgdW5zcGVjaWZpZWQgKi8KKyAgICAvKiBbMTU6MTNdIGlzIGN1 cnJlbnRseSBzZWxlY3RlZCB3aW5kb3cgKi8KK307CisKKy8qCisgKiAgRG1hQ3RybEJpdHMgKFsx XSBwLjk2KQorICovCitlbnVtIERtYUN0cmxCaXRzCit7CisgICAgLyogYml0IDAgdW5zcGVjaWZp ZWQgKi8KKyAgICBEQ19kbkNtcGxSZXEgPSAgICAgICAgICAxPDwxLAorICAgIERDX2RuU3RhbGxl ZCA9ICAgICAgICAgIDE8PDIsCisgICAgRENfdXBDb21wbGV0ZSA9ICAgICAgICAgMTw8MywgICAv LyBGSVhNRTogc2FtZSBhcyBpbiBJbnRTdGF0dXMsIGJ1dCBhbHdheXMgdmlzaWJsZQorICAgIERD X2RuQ29tcGxldGUgPSAgICAgICAgIDE8PDQsICAgLy8gc2FtZSBhcyBhYm92ZSBeXl4KKyAgICBE Q191cFJ4RWFybHlFbmFibGUgPSAgICAxPDw1LAorICAgIERDX2FybUNvdW50ZG93biA9ICAgICAg IDE8PDYsCisgICAgRENfZG5JblByb2cgPSAgICAgICAgICAgMTw8NywKKyAgICBEQ19jb3VudGVy U3BlZWQgPSAgICAgICAxPDw4LAorICAgIERDX2NvdW50ZG93bk1vZGUgPSAgICAgIDE8PDksCisg ICAgLyogYml0cyAxMC0xNSB1bnNwZWNpZmllZCAqLworICAgIERDX3VwQWx0U2VxRGlzYWJsZSA9 ICAgIDE8PDE2LAorICAgIERDX2RuQWx0U2VxRGlzYWJsZSA9ICAgIDE8PDE3LAorICAgIERDX2Rl ZmVhdE1XSSA9ICAgICAgICAgIDE8PDIwLAorICAgIERDX2RlZmVhdE1STCA9ICAgICAgICAgIDE8 PDIxLAorICAgIERDX3VwT3ZlckRpc2NFbmFibGUgPSAgIDE8PDIyLAorICAgIERDX3RhcmdldEFi b3J0ID0gICAgICAgIDE8PDMwLAorICAgIERDX21hc3RlckFib3J0ID0gICAgICAgIDE8PDMxCit9 OworCisvKgorICogIE1JSSBSZWdpc3RlcnMKKyAqICBUT0RPOiBJbXBsZW1lbnQgTUlJIHByb3Bl cmx5CisgKi8KKy8qZW51bSBNSUlDb250cm9sQml0cyB7CisgICAgTUlJQ19jb2xsaXNpb24gPSAg ICAgICAgMTw8NywKKyAgICBNSUlDX2Z1bGxEdXBsZXggPSAgICAgICAxPDw4LAorICAgIE1JSUNf cmVzdGFydE5lZ290ZSA9ICAgIDE8PDksCisgICAgTUlJQ19jb2xsaXNpb24gPSAgICAgICAgMTw8 NywKKyAgICByZXN0IG1pc3NpbmcKK307Ki8KKworc3RydWN0IE1JSVJlZ2lzdGVycworeworICAg IHVpbnQxNl90IGNvbnRyb2w7CisgICAgdWludDE2X3Qgc3RhdHVzOworICAgIHVpbnQxNl90IGlk MDsKKyAgICB1aW50MTZfdCBpZDE7CisgICAgdWludDE2X3QgYWR2ZXJ0OworICAgIHVpbnQxNl90 IGxpbmtQYXJ0bmVyOworICAgIHVpbnQxNl90IGV4cGFuc2lvbjsKKyAgICB1aW50MTZfdCBuZXh0 UGFnZTsKK30gUEFDS0VEOwordHlwZWRlZiBzdHJ1Y3QgTUlJUmVnaXN0ZXJzIE1JSVJlZ2lzdGVy czsKKworLyoKKyAqICBSZWdpc3RlcnMKKyAqLwordW5pb24gUmVnV2luZG93Cit7CisgICAgdWlu dDhfdCBiWzE2XTsKKyAgICB1aW50MTZfdCB1MTZbOF07Cit9IFBBQ0tFRDsKK3R5cGVkZWYgdW5p b24gUmVnV2luZG93IFJlZ1dpbmRvdzsKKworc3RydWN0IFJlZ2lzdGVycworeworICAgIC8vIDB4 MTAgdWludDhfdHMgbWlzc2luZyAoY3VycmVudCB3aW5kb3cpCisgICAgdWludDMyX3QgICAgcjA7 CisgICAgdWludDMyX3QgICAgcjE7CisgICAgdWludDhfdCAgICAgVHhQa3RJZDsKKyAgICB1aW50 OF90ICAgICByMjsKKyAgICB1aW50OF90ICAgICBUaW1lcjsKKyAgICB1aW50OF90ICAgICBUeFN0 YXR1czsKKyAgICB1aW50MTZfdCAgICByMzsKKyAgICB1aW50MTZfdCAgICBfX2RvbnRVc2VNZTsv LyAgcmVhbGx5OiB1aW50MTZfdCBJbnRTdGF0dXNBdXRvOworICAgIHVpbnQzMl90ICAgIERtYUN0 cmw7ICAgIC8vICBbMV0gcC45NSAoZG4pLCBwLjEwMCAodXApCisgICAgdWludDMyX3QgICAgRG5M aXN0UHRyOyAgLy8gIFsxXSBwLjk4CisgICAgdWludDE2X3QgICAgcjQ7CisgICAgdWludDhfdCAg ICAgRG5CdXJzdFRocmVzaDsgIC8vIFsxXSBwLjk3CisgICAgdWludDhfdCAgICAgcjU7CisgICAg dWludDhfdCAgICAgRG5Qcmlvcml0eVRocmVzaDsKKyAgICB1aW50OF90ICAgICBEblBvbGw7ICAg ICAvLyBbMV0gcC4xMDAKKyAgICB1aW50MTZfdCAgICByNjsKKyAgICB1aW50MzJfdCAgICBVcFBr dFN0YXR1czsKKyAgICB1aW50MTZfdCAgICBGcmVlVGltZXI7CisgICAgdWludDE2X3QgICAgQ291 bnRkb3duOworICAgIHVpbnQzMl90ICAgIFVwTGlzdFB0cjsgIC8vIFsxXSBwLjExNQorICAgIHVp bnQ4X3QgICAgIFVwUHJpb3JpdHlUaHJlc2g7CisgICAgdWludDhfdCAgICAgVXBQb2xsOworICAg IHVpbnQ4X3QgICAgIFVwQnVyc3RUaHJlc2g7CisgICAgdWludDhfdCAgICAgcjc7CisgICAgdWlu dDMyX3QgICAgUmVhbFRpbWVDb3VudDsKKyAgICB1aW50OF90ICAgICBDb25maWdBZGRyZXNzOwor ICAgIHVpbnQ4X3QgICAgIHI4OworICAgIHVpbnQ4X3QgICAgIHI5OworICAgIHVpbnQ4X3QgICAg IHIxMDsKKyAgICB1aW50OF90ICAgICBDb25maWdEYXRhOworICAgIHVpbnQ4X3QgICAgIHIxMTsK KyAgICB1aW50OF90ICAgICByMTI7CisgICAgdWludDhfdCAgICAgcjEzOworICAgIHVpbnQzMl90 ICAgIHIxNFs5XTsKKyAgICB1aW50MzJfdCAgICBEZWJ1Z0RhdGE7CisgICAgdWludDE2X3QgICAg RGVidWdDb250cm9sOworICAgIHVpbnQxNl90ICAgIHIxNTsKKyAgICB1aW50MTZfdCAgICBEbk1h eEJ1cnN0OworICAgIHVpbnQxNl90ICAgIFVwTWF4QnVyc3Q7CisgICAgdWludDE2X3QgICAgUG93 ZXJNZ210Q3RybDsKKyAgICB1aW50MTZfdCAgICByMTY7Cit9IFBBQ0tFRDsKK3R5cGVkZWYgc3Ry dWN0IFJlZ2lzdGVycyBSZWdpc3RlcnM7CisKKyNkZWZpbmUgUkFfSU5WIDAKKworc3RhdGljIHVp bnQ4X3QgZ1JlZ0FjY2Vzc1sweDcwXSA9Cit7CisgICAgLyogMHgxMCAqLworICAgIFJBX0lOViwg UkFfSU5WLCBSQV9JTlYsIFJBX0lOViwKKyAgICAvKiAweDE0ICovCisgICAgUkFfSU5WLCBSQV9J TlYsIFJBX0lOViwgUkFfSU5WLAorICAgIC8qIDB4MTggKi8KKyAgICAxLCAgICAgICAgICAgICAg LyogVHhQa3RJZCAqLworICAgIFJBX0lOViwKKyAgICAxLCAgICAgICAgICAgICAgLyogVGltZXIg Ki8KKyAgICAxLCAgICAgICAgICAgICAgLyogVHhTdGF0dXMgKi8KKyAgICAvKiAweDFjICovCisg ICAgUkFfSU5WLCBSQV9JTlYsCisgICAgUkFfSU5WLCBSQV9JTlYsICAgICAgICAgICAgIC8qIElu dFN0YXR1c0F1dG8gKi8KKyAgICAvKiAweDIwICovCisgICAgNCwgUkFfSU5WLCBSQV9JTlYsIFJB X0lOViwgIC8qIERtYUN0cmwgKi8KKyAgICAvKiAweDI0ICovCisgICAgNCwgUkFfSU5WLCBSQV9J TlYsIFJBX0lOViwgIC8qIERuTGlzdFB0ciAqLworICAgIC8qIDB4MjggKi8KKyAgICBSQV9JTlYs IFJBX0lOViwKKyAgICAxLCAgICAgICAgICAgICAgLyogRG5CdXJzdFRocmVzaCAqLworICAgIFJB X0lOViwKKyAgICAvKiAweDJjICovCisgICAgMSwgICAgICAgICAgICAgIC8qIERuUHJpb3JpdHlU aHJlc2ggKi8KKyAgICAxLCAgICAgICAgICAgICAgLyogRG5Qb2xsICovCisgICAgUkFfSU5WLAor ICAgIDEsCisgICAgLyogMHgzMCAqLworICAgIDQsIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsICAv KiBVcFBrdFN0YXR1cyAqLworICAgIC8qIDB4MzQgKi8KKyAgICAyLCBSQV9JTlYsICAgICAgICAg IC8qIEZyZWVUaW1lciAqLworICAgIDIsIFJBX0lOViwgICAgICAgICAgLyogQ291bnRkb3duICov CisgICAgLyogMHgzOCAqLworICAgIDQsIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsICAvKiBVcExp c3RQdHIgKi8KKyAgICAvKiAweDNjICovCisgICAgMSwgICAgICAgICAgICAgIC8qIFVwUHJpb3Jp dHlUaHJlc2ggKi8KKyAgICAxLCAgICAgICAgICAgICAgLyogVXBQb2xsICovCisgICAgMSwgICAg ICAgICAgICAgIC8qIFVwQnVyc3RUaHJlc2ggKi8KKyAgICBSQV9JTlYsCisgICAgLyogMHg0MCAq LworICAgIDQsIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsICAvKiBSZWFsVGltZUNvdW50ICovCisg ICAgLyogMHg0NCAqLworICAgIDEsICAgICAgICAgICAgICAvKiBDb25maWdBZGRyZXNzICovCisg ICAgUkFfSU5WLAorICAgIFJBX0lOViwKKyAgICBSQV9JTlYsCisgICAgLyogMHg0OCAqLworICAg IDEsICAgICAgICAgICAgICAvKiBDb25maWdEYXRhICovCisgICAgUkFfSU5WLAorICAgIFJBX0lO ViwKKyAgICBSQV9JTlYsCisgICAgLyogMHg0YyAqLworICAgIFJBX0lOViwgUkFfSU5WLCBSQV9J TlYsIFJBX0lOViwKKyAgICAvKiAweDUwICovCisgICAgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwg UkFfSU5WLAorICAgIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwKKyAgICBSQV9JTlYs IFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsCisgICAgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwgUkFf SU5WLAorICAgIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwKKyAgICBSQV9JTlYsIFJB X0lOViwgUkFfSU5WLCBSQV9JTlYsCisgICAgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwgUkFfSU5W LAorICAgIFJBX0lOViwgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwKKyAgICAvKiAweDcwICovCisg ICAgNCwgUkFfSU5WLCBSQV9JTlYsIFJBX0lOViwgIC8qIERlYnVnRGF0YSAqLworICAgIC8qIDB4 NzQgKi8KKyAgICAyLCBSQV9JTlYsICAgICAgICAgIC8qIERlYnVnQ29udHJvbCAqLworICAgIFJB X0lOViwgUkFfSU5WLAorICAgIC8qIDB4NzggKi8KKyAgICAyLCBSQV9JTlYsICAgICAgICAgIC8q IERuTWF4QnVyc3QgKi8KKyAgICAyLCBSQV9JTlYsICAgICAgICAgIC8qIFVwTWF4QnVyc3QgKi8K KyAgICAvKiAweDdjICovCisgICAgMiwgUkFfSU5WLCAgICAgICAgICAvKiBQb3dlck1nbXRDdHJs ICovCisgICAgUkFfSU5WLCBSQV9JTlYKK307CisKKy8qCisgKiAgV2luZG93IDAKKyAqLworc3Ry dWN0IFJlZ1dpbmRvdzAKK3sKKyAgICB1aW50MzJfdCAgICByMDsKKyAgICB1aW50MzJfdCAgICBC aW9zUm9tQWRkcjsKKyAgICB1aW50OF90ICAgICBCaW9zUm9tRGF0YTsKKyAgICB1aW50OF90ICAg ICByMTsKKyAgICB1aW50MTZfdCAgICBFZXByb21Db21tYW5kOworICAgIHVpbnQxNl90ICAgIEVl cHJvbURhdGE7CisgICAgdWludDE2X3QgICAgWFhYOyAgICAgICAgLy8gSW50U3RhdHVzL0NvbW1h bmRSZWdpc3RlcgorfSBQQUNLRUQ7Cit0eXBlZGVmIHN0cnVjdCBSZWdXaW5kb3cwIFJlZ1dpbmRv dzA7CisKK2VudW0gVzBfT2Zmc2V0cworeworICAgIFcwX0VFUFJPTUNtZCA9IDB4YSwKKyAgICBX MF9FRVBST01EYXRhID0gMHhjCit9OworCitlbnVtIFcwX0VFUFJPTU9wY29kZQoreworICAgIEVF T1BfU3ViQ21kID0gMDw8NiwKKyAgICBFRU9QX1dyaXRlUmVnID0gMTw8NiwKKyAgICBFRU9QX1Jl YWRSZWcgPSAyPDw2LAorICAgIEVFT1BfRXJhc2VSZWcgPSAzPDw2Cit9OworCitlbnVtIFcwX0VF UFJPTVN1YkNtZAoreworICAgIEVFU0NfV3JpdGVEaXNhYmxlID0gMDw8NCwKKyAgICBFRVNDX1dy aXRlQWxsID0gMTw8NCwKKyAgICBFRVNDX0VyYXNlQWxsID0gMjw8NCwKKyAgICBFRVNDX1dyaXRl RW5hYmxlID0gMzw8NAorfTsKKworLyoKKyAqICBXaW5kb3cgMgorICovCitzdHJ1Y3QgUmVnV2lu ZG93MgoreworICAgIHVpbnQxNl90ICAgIFN0YXRpb25BZGRyZXNzWzZdOworICAgIHVpbnQxNl90 ICAgIFN0YXRpb25NYXNrWzZdOworICAgIHVpbnQxNl90ICAgIFJlc2V0T3B0aW9uczsKKyAgICB1 aW50MTZfdCAgICBYWFg7ICAgICAgICAvLyBJbnRTdGF0dXMvQ29tbWFuZFJlZ2lzdGVyCit9IFBB Q0tFRDsKK3R5cGVkZWYgc3RydWN0IFJlZ1dpbmRvdzIgUmVnV2luZG93MjsKKworLyoKKyAqICBX aW5kb3cgMworICovCitzdHJ1Y3QgUmVnV2luZG93MworeworICAgIHVpbnQzMl90ICAgIEludGVy bmFsQ29uZmlnOyAvLyBbMV0gcC41OCw3NgorICAgIHVpbnQxNl90ICAgIE1heFBrdFNpemU7Cisg ICAgdWludDE2X3QgICAgTWFjQ29udHJvbDsgICAgIC8vIFsxXSBwLjE3OQorICAgIHVpbnQxNl90 ICAgIE1lZGlhT3B0aW9uczsgICAvLyBbMV0gcC43OCAoRUUpLCBwLjE4MQorICAgIHVpbnQxNl90 ICAgIFJ4RnJlZTsKKyAgICB1aW50MTZfdCAgICBUeEZyZWU7ICAgICAgICAgLy8gWzFdIHAuMTAx CisgICAgdWludDE2X3QgICAgWFhYOyAgICAgICAgICAgIC8vIEludFN0YXR1cy9Db21tYW5kUmVn aXN0ZXIKK30gUEFDS0VEOwordHlwZWRlZiBzdHJ1Y3QgUmVnV2luZG93MyBSZWdXaW5kb3czOwor CisvKgorICogIFdpbmRvdyA0CisgKi8KK2VudW0gVzRfUGh5c01nbXRCaXRzCit7CisgICAgUE1f bWdtdENsayAgPSAxPDwwLAorICAgIFBNX21nbXREYXRhID0gMTw8MSwKKyAgICBQTV9tZ210RGly ICA9IDE8PDIKK307CisKK3N0cnVjdCBSZWdXaW5kb3c0Cit7CisgICAgdWludDE2X3QgICAgcjA7 ICAgICAgICAgICAgIC8qIG9mZnNldCAweDAgKi8KKyAgICB1aW50MTZfdCAgICByMTsgICAgICAg ICAgICAgLyogb2Zmc2V0IDB4MiAqLworICAgIHVpbnQxNl90ICAgIEZpZm9EaWFnbm9zdGljOyAv KiBvZmZzZXQgMHg0ICovCisgICAgdWludDE2X3QgICAgTmV0RGlhZ25vc3RpYzsgIC8vIFsxXSBw LjE4NCAvKiBvZmZzZXQgMHg2ICovCisgICAgdWludDE2X3QgICAgUGh5c01nbXQ7ICAgICAgIC8v IFsxXSBwLjE4NiAvKiBvZmZzZXQgMHg4ICovCisgICAgdWludDE2X3QgICAgTWVkaWFTdGF0dXM7 ICAgIC8vIFsxXSBwLjE4MiAvKiBvZmZzZXQgMHhhICovCisgICAgdWludDhfdCAgICAgQmFkU1NE OworICAgIHVpbnQ4X3QgICAgIFVwcGVydWludDhzT0s7CisgICAgdWludDE2X3QgICAgWFhYOyAg ICAgICAgICAgIC8vIEludFN0YXR1cy9Db21tYW5kUmVnaXN0ZXIKK30gUEFDS0VEOwordHlwZWRl ZiBzdHJ1Y3QgUmVnV2luZG93NCBSZWdXaW5kb3c0OworCisvKgorICogIFdpbmRvdyA1CisgKi8K K2VudW0gUnhGaWx0ZXJCaXRzICAgLy8gWzFdIHAuMTEyCit7CisgICAgUlhGSUxUX3JlY2VpdmVJ bmRpdmlkdWFsID0gMSwKKyAgICBSWEZJTFRfcmVjZWl2ZU11bHRpY2FzdCA9IDIsCisgICAgUlhG SUxUX3JlY2VpdmVCcm9hZGNhc3QgPSA0LAorICAgIFJYRklMVF9yZWNlaXZlQWxsRnJhbWVzID0g OCwKKyAgICBSWEZJTFRfcmVjZWl2ZU11bHRpY2FzdEhhc2ggPSAxNgorfTsKKworc3RydWN0IFJl Z1dpbmRvdzUKK3sKKyAgICB1aW50MTZfdCAgICBUeFN0YXJ0VGhyZXNoOworICAgIHVpbnQxNl90 ICAgIHIwOworICAgIHVpbnQxNl90ICAgIHIxOworICAgIHVpbnQxNl90ICAgIFJ4RWFybHlUaHJl c2g7CisgICAgdWludDhfdCAgICAgUnhGaWx0ZXI7ICAgICAgICAgICAvLyBbMV0gcC4xMTIKKyAg ICB1aW50OF90ICAgICBUeFJlY2xhaW1UaHJlc2g7CisgICAgdWludDE2X3QgICAgSW50ZXJydXB0 RW5hYmxlOyAgICAvLyBbMV0gcC4xMjAKKyAgICB1aW50MTZfdCAgICBJbmRpY2F0aW9uRW5hYmxl OyAgIC8vIFsxXSBwLjEyMAorICAgIHVpbnQxNl90ICAgIFhYWDsgICAgICAgICAgICAgICAgLy8g SW50U3RhdHVzL0NvbW1hbmRSZWdpc3RlcgorfSBQQUNLRUQ7Cit0eXBlZGVmIHN0cnVjdCBSZWdX aW5kb3c1IFJlZ1dpbmRvdzU7CisKKy8qCisgKiAgV2luZG93IDYKKyAqLworc3RydWN0IFJlZ1dp bmRvdzYKK3sKKyAgICB1aW50OF90ICAgICBDYXJyaWVyTG9zdDsKKyAgICB1aW50OF90ICAgICBT cWVFcnJvcnM7CisgICAgdWludDhfdCAgICAgTXVsdGlwbGVDb2xsaXNpb25zOworICAgIHVpbnQ4 X3QgICAgIFNpbmdsZUNvbGxpc2lvbnM7CisgICAgdWludDhfdCAgICAgTGF0ZUNvbGxpc2lvbnM7 CisgICAgdWludDhfdCAgICAgUnhPdmVycnVuczsKKyAgICB1aW50OF90ICAgICBGcmFtZXNYbWl0 dGVkT2s7CisgICAgdWludDhfdCAgICAgRnJhbWVzUmN2ZE9rOworICAgIHVpbnQ4X3QgICAgIEZy YW1lc0RlZmVycmVkOworICAgIHVpbnQ4X3QgICAgIFVwcGVyRnJhbWVzT2s7CisgICAgdWludDE2 X3QgICAgQnl0ZXNSY3ZkT2s7CisgICAgdWludDE2X3QgICAgQnl0ZXNYbWl0dGVkT2s7CisgICAg dWludDE2X3QgICAgWFhYOyAgICAgICAgICAgICAgICAvLyBJbnRTdGF0dXMvQ29tbWFuZFJlZ2lz dGVyCit9IFBBQ0tFRDsKK3R5cGVkZWYgc3RydWN0IFJlZ1dpbmRvdzYgUmVnV2luZG93NjsKKwor LyoKKyAqICBFRVBST00KKyAqLworZW51bSBFRVBST01GaWVsZAoreworICAgIEVFUFJPTV9Ob2Rl QWRkcmVzczAgPSAgICAgICAweDAwLAorICAgIEVFUFJPTV9Ob2RlQWRkcmVzczEgPSAgICAgICAw eDAxLAorICAgIEVFUFJPTV9Ob2RlQWRkcmVzczIgPSAgICAgICAweDAyLAorICAgIEVFUFJPTV9E ZXZpY2VJRCA9ICAgICAgICAgICAweDAzLAorICAgIEVFUFJPTV9NYW5pZmFjdHVyZXJJRCA9ICAg ICAweDA3LAorICAgIEVFUFJPTV9QQ0lQYXJhbSA9ICAgICAgICAgICAweDA4LAorICAgIEVFUFJP TV9Sb21JbmZvID0gICAgICAgICAgICAweDA5LAorICAgIEVFUFJPTV9PRU1Ob2RlQWRkcmVzczAg PSAgICAweDBhLAorICAgIEVFUFJPTV9PRU1Ob2RlQWRkcmVzczEgPSAgICAweDBiLAorICAgIEVF UFJPTV9PRU1Ob2RlQWRkcmVzczIgPSAgICAweDBjLAorICAgIEVFUFJPTV9Tb2Z0d2FyZUluZm8g PSAgICAgICAweDBkLAorICAgIEVFUFJPTV9Db21wV29yZCA9ICAgICAgICAgICAweDBlLAorICAg IEVFUFJPTV9Tb2Z0d2FyZUluZm8yID0gICAgICAweDBmLAorICAgIEVFUFJPTV9DYXBzID0gICAg ICAgICAgICAgICAweDEwLAorICAgIEVFUFJPTV9JbnRlcm5hbENvbmZpZzAgPSAgICAweDEyLAor ICAgIEVFUFJPTV9JbnRlcm5hbENvbmZpZzEgPSAgICAweDEzLAorICAgIEVFUFJPTV9TdWJzeXN0 ZW1WZW5kb3JJRCA9ICAweDE3LAorICAgIEVFUFJPTV9TdWJzeXN0ZW1JRCA9ICAgICAgICAweDE4 LAorICAgIEVFUFJPTV9NZWRpYU9wdGlvbnMgPSAgICAgICAweDE5LAorICAgIEVFUFJPTV9TbWJB ZGRyZXNzID0gICAgICAgICAweDFiLAorICAgIEVFUFJPTV9QQ0lQYXJhbTIgPSAgICAgICAgICAw eDFjLAorICAgIEVFUFJPTV9QQ0lQYXJhbTMgPSAgICAgICAgICAweDFkLAorICAgIEVFUFJPTV9D aGVja3N1bSA9ICAgICAgICAgICAweDIwCit9OworCisvKgorICogIFVwL0Rvd25sb2FkaW5nCisg Ki8KKworLy8gbXVzdCBiZSBvbiA4LXVpbnQ4X3QgcGh5c2ljYWwgYWRkcmVzcyBib3VuZGFyeQor c3RydWN0IERQRDAKK3sKKyAgICB1aW50MzJfdCAgICBEbk5leHRQdHI7CisgICAgdWludDMyX3Qg ICAgRnJhbWVTdGFydEhlYWRlcjsKKyAgICAvKiAgRFBERnJhZ0Rlc2MgRnJhZ3Nbbl0gKi8KK30g UEFDS0VEODsKK3R5cGVkZWYgc3RydWN0IERQRDAgRFBEMDsKKworZW51bSBGcmFtZVN0YXJ0SGVh ZGVyQml0cworeworICAgIEZTSF9ybmR1cEJuZHJ5ID0gICAgICAgIDM8PDAsCisgICAgRlNIX3Br dElkID0gICAgICAgICAgICAgMTU8PDIsCisgICAgLyogMTI6MTAgdW5zcGVjaWZpZWQgKi8KKyAg ICBGU0hfY3JjQXBwZW5kRGlzYWJsZSA9ICAxPDwxMywKKyAgICBGU0hfdHhJbmRpY2F0ZSA9ICAg ICAgICAxPDwxNSwKKyAgICBGU0hfZG5Db21wbGV0ZSA9ICAgICAgICAxPDwxNiwKKyAgICBGU0hf cmVBcm1EaXNhYmxlID0gICAgICAxPDwyMywKKyAgICBGU0hfbGFzdEthcCA9ICAgICAgICAgICAx PDwyNCwKKyAgICBGU0hfYWRkSXBDaGVja3N1bSA9ICAgICAxPDwyNSwgLyoqIFRPRE86IHdyaXRl IHN1cHBvcnQgZm9yIHRoZXNlICovCisgICAgRlNIX2FkZFRjcENoZWNrc3VtID0gICAgMTw8MjYs CisgICAgRlNIX2FkZFVkcENoZWNrc3VtID0gICAgMTw8MjcsCisgICAgRlNIX3JuZHVwRGVmZWF0 ID0gICAgICAgMTw8MjgsCisgICAgRlNIX2RwZEVtcHR5ID0gICAgICAgICAgMTw8MjksCisgICAg LyogMzAgdW5zcGVjaWZpZWQgKi8KKyAgICBGU0hfZG5JbmRpY2F0ZSA9ICAgICAgICAxPDwzMQor fTsKKworLy8gbXVzdCBiZSBvbiAxNi11aW50OF90IHBoeXNpY2FsIGFkZHJlc3MgYm91bmRhcnkK K3N0cnVjdCBEUEQxCit7CisgICAgdWludDMyX3QgICAgRG5OZXh0UHRyOworICAgIHVpbnQzMl90 ICAgIFNjaGVkdWxlVGltZTsKKyAgICB1aW50MzJfdCAgICBGcmFtZVN0YXJ0SGVhZGVyOworICAg IHVpbnQzMl90ICAgIHJlczsKKyAgICAvKiAgRFBERnJhZ0Rlc2MgRnJhZ3Nbbl0gKi8KK30gUEFD S0VEMTY7Cit0eXBlZGVmIHN0cnVjdCBEUEQxIERQRDE7CisKK3N0cnVjdCBEUERGcmFnRGVzYwor eworICAgIHVpbnQzMl90ICAgIERuRnJhZ0FkZHI7CisgICAgdWludDMyX3QgICAgRG5GcmFnTGVu OyAgLy8gWzEyOjBdIGZyYWdMZW4sIFszMV0gbGFzdEZyYWcKK30gUEFDS0VEOwordHlwZWRlZiBz dHJ1Y3QgRFBERnJhZ0Rlc2MgRFBERnJhZ0Rlc2M7CisKKy8vIG11c3QgYmUgb24gOC11aW50OF90 IHBoeXNpY2FsIGFkZHJlc3MgYm91bmRhcnkKK3N0cnVjdCBVUEQKK3sKKyAgICB1aW50MzJfdCAg ICBVcE5leHRQdHI7CisgICAgdWludDMyX3QgICAgVXBQa3RTdGF0dXM7CisgICAgLyogIFVQREZy YWdEZXNjIEZyYWdzW25dICovCit9IFBBQ0tFRDg7Cit0eXBlZGVmIHN0cnVjdCBVUEQgVVBEOwor CitzdHJ1Y3QgVVBERnJhZ0Rlc2MKK3sKKyAgICB1aW50MzJfdCAgICBVcEZyYWdBZGRyOworICAg IHVpbnQzMl90ICAgIFVwRnJhZ0xlbjsgIC8vIFsxMjowXSBmcmFnTGVuLCBbMzFdIGxhc3RGcmFn Cit9IFBBQ0tFRDsKK3R5cGVkZWYgc3RydWN0IFVQREZyYWdEZXNjIFVQREZyYWdEZXNjOworCisj ZGVmaW5lIE1BWF9EUERfRlJBR1MgICA2MworI2RlZmluZSBNQVhfVVBEX0ZSQUdTICAgNjMKKyNk ZWZpbmUgTUFYX1VQRF9TSVpFICAgIChzaXplb2YoVVBEKSArIHNpemVvZihVUERGcmFnRGVzYykq TUFYX1VQRF9GUkFHUykgLy8gNTEyCisKK2VudW0gVXBQa3RTdGF0dXNCaXRzCit7CisgICAgVVBT X3VwUGt0TGVuID0gMHgxZmZmLAorICAgIC8qIDEzIHVuc3BlY2lmaWVkICovCisgICAgVVBTX3Vw RXJyb3IgPSAxPDwxNCwKKyAgICBVUFNfdXBDb21wbGV0ZSA9IDE8PDE1LAorICAgIFVQU191cE92 ZXJydW4gPSAxPDwxNiwKKyAgICBVUFNfcnVudEZyYW1lID0gMTw8MTcsCisgICAgVVBTX2FsaWdu bWVudEVycm9yID0gMTw8MTgsCisgICAgVVBTX2NyY0Vycm9yID0gMTw8MTksCisgICAgVVBTX292 ZXJzaXplZEZyYW1lID0gMTw8MjAsCisgICAgLyogMjI6MjEgdW5zcGVjaWZpZWQgKi8KKyAgICBV UFNfZHJpYmJsZUJpdHMgPSAxPDwyMywKKyAgICBVUFNfdXBPdmVyZmxvdyA9IDE8PDI0LAorICAg IFVQU19pcENoZWNrc3VtRXJyb3IgPSAxPDwyNSwKKyAgICBVUFNfdGNwQ2hlY2tzdW1FcnJvciA9 IDE8PDI2LAorICAgIFVQU191ZHBDaGVja3N1bUVycm9yID0gMTw8MjcsCisgICAgVVBEX2ltcGxp ZWRCdWZmZXJFbmFibGUgPSAxPDwyOCwKKyAgICBVUFNfaXBDaGVja3N1bUNoZWNrZWQgPSAxPDwy OSwKKyAgICBVUFNfdGNwQ2hlY2tzdW1DaGVja2VkID0gMTw8MzAsCisgICAgVVBTX3VkcENoZWNr c3VtQ2hlY2tlZCA9IDE8PDMxCit9OworCisvLyBJRUVFIDgwMi4zIE1BQywgRXRoZXJuZXQtSUkK K3N0cnVjdCBFdGhGcmFtZUlJCit7CisgICAgdWludDhfdCBkZXN0TUFDWzZdOworICAgIHVpbnQ4 X3Qgc3JjTUFDWzZdOworICAgIHVpbnQ4X3QgdHlwZVsyXTsKK30gUEFDS0VEOwordHlwZWRlZiBz dHJ1Y3QgRXRoRnJhbWVJSSBFdGhGcmFtZUlJOworCitzdHJ1Y3QgQTNDOTBYU3RhdGUKK3sKKwor ICAgIHVpbnQxNl90ICAgIG1FRVBST01bMHg0MF07CisgICAgY2hhciAgICAgICAgbUVFUFJPTVdy aXRhYmxlOworICAgIFJlZ2lzdGVycyAgIG1SZWdpc3RlcnM7CisgICAgUmVnV2luZG93ICAgbVdp bmRvd3NbOF07CisgICAgdWludDE2X3QgICAgbUludFN0YXR1czsKKyAgICBjaGFyICAgICAgICBt UnhFbmFibGVkOworICAgIGNoYXIgICAgICAgIG1UeEVuYWJsZWQ7CisgICAgY2hhciAgICAgICAg bVVwU3RhbGxlZDsKKyAgICBjaGFyICAgICAgICBtRG5TdGFsbGVkOworICAgIHVpbnQ4X3QgICAg IG1SeFBhY2tldFtNQVhfUEFDS0VUX1NJWkVdOworICAgIHVpbnQzMl90ICAgIG1SeFBhY2tldFNp emU7CisgICAgdWludDE2X3QgICAgbU1JSVJlZ3NbOF07CisgICAgdWludDMyX3QgICAgbU1JSVJl YWRXb3JkOworICAgIHVpbnQ2NF90ICAgIG1NSUlXcml0ZVdvcmQ7CisgICAgdWludDMyX3QgICAg bU1JSVdyaXR0ZW5CaXRzOworICAgIHVpbnQxNl90ICAgIG1MYXN0SGlDbGtQaHlzTWdtdDsKKyAg ICB1aW50OF90ICAgICBtTUFDWzZdOworCisKKyAgICBQQ0lEZXZpY2UgICAqcGNpX2RldjsKKyAg ICBpbnQgICAgICAgICBhM2M5MHhfbW1pb19pb19hZGRyOworCisgICAgVkxBTkNsaWVudFN0YXRl ICp2YzsKKworfTsKK3R5cGVkZWYgc3RydWN0IEEzQzkwWFN0YXRlIEEzQzkwWFN0YXRlOworCitz dGF0aWMgdm9pZCBhM2M5MHhfcmVzZXQoQTNDOTBYU3RhdGUgKnMpOworCitzdGF0aWMgdm9pZCBz ZXRDUih1aW50MTZfdCBjciwgdm9pZCAqb3BhcXVlKTsKKworc3RhdGljIHVpbnQzMl90IHJlYWRS ZWdXaW5kb3coQTNDOTBYU3RhdGUgKnMsIHVpbnQzMl90IHdpbmRvdywgdWludDMyX3QgcG9ydCwg dWludDMyX3QgZGF0YSwgdWludDMyX3Qgc2l6ZSk7CitzdGF0aWMgdm9pZCB3cml0ZVJlZ1dpbmRv dyhBM0M5MFhTdGF0ZSAqcywgdWludDMyX3Qgd2luZG93LCB1aW50MzJfdCBwb3J0LCB1aW50MzJf dCBkYXRhLCB1aW50MzJfdCBzaXplKTsKKworc3RhdGljIHZvaWQgY2hlY2tEbldvcmsodm9pZCAq b3BhcXVlKTsKK3N0YXRpYyB2b2lkIGNoZWNrVXBXb3JrKHZvaWQgKm9wYXF1ZSk7CisKK3N0YXRp YyB2b2lkIHR4RFBEMCh2b2lkICpvcGFxdWUsIERQRDAgKmRwZCk7CitzdGF0aWMgdm9pZCByeFVQ RCh2b2lkICpvcGFxdWUsIFVQRCAqdXBkKTsKKworc3RhdGljIHZvaWQgaW5kaWNhdGUodWludDMy X3QgaW5kaWNhdGlvbnMsIHZvaWQgKm9wYXF1ZSk7CitzdGF0aWMgdm9pZCBhY2tub3dsZWRnZSh1 aW50MzJfdCBpbmRpY2F0aW9ucywgdm9pZCAqb3BhcXVlKTsKK3N0YXRpYyB2b2lkIG1heWJlUmFp c2VJbnRyKHZvaWQgKm9wYXF1ZSk7CisKK3N0YXRpYyBjaGFyIHBhc3Nlc1J4RmlsdGVyKHVpbnQ4 X3QgKnBidWYsIHVpbnQzMl90IHBzaXplLCB2b2lkICpvcGFxdWUpOworCitzdGF0aWMgdm9pZCBo YW5kbGVfcngodm9pZCAqb3BhcXVlLCBjb25zdCB1aW50OF90ICpidWYsIGludCBzaXplKTsKKwor c3RhdGljIHZvaWQgYTNjOTB4X2NsZWFudXAoVkxBTkNsaWVudFN0YXRlICp2Yyk7CisKK3N0YXRp YyBpbnQgY29tcGFyZU1BQ3ModWludDhfdCBhWzZdLCB1aW50OF90IGJbNl0pOworCisvKgorICog IG1pc2MKKyAqLworc3RhdGljIGludCBjb21wYXJlTUFDcyh1aW50OF90IGFbNl0sIHVpbnQ4X3Qg Yls2XSkKK3sKKyAgICB1aW50MzJfdCBpOworICAgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisg ICAgeworICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKSByZXR1cm4gYVtpXSAtIGJbaV07CisgICAg fQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhM2M5MHhfcmVzZXQoQTNDOTBYU3Rh dGUgKnMpCit7CisgICAgLyogRklYTUU6IHJlc2V0dGluZyBjYW4gYmUgZG9uZSBtb3JlIGZpbmUt Z3JhaW5lZCAoc2VlIFRvdGFsUmVzZXQgY21kKS4KKyAgICAgKiAgICAgICAgdGhpcyBpcyByZXNl dCBBTEwgcmVncy4KKyAgICAgKi8KKyAgICBpZiAoc2l6ZW9mKFJlZ2lzdGVycykgIT0gMHg3MCkK KyAgICB7CisgICAgICAgIERFQlVHX1BSSU5UKCJzaXplb2YgUmVnaXN0ZXJzICE9IDB4NzBcbiIp OworICAgIH0KKworICAgIFJlZ1dpbmRvdzMgKnczID0gKFJlZ1dpbmRvdzMqKSAmKHMtPm1XaW5k b3dzWzNdKTsKKyAgICBSZWdXaW5kb3c0ICp3NCA9IChSZWdXaW5kb3c0KikgJihzLT5tV2luZG93 c1s0XSk7CisgICAgUmVnV2luZG93NSAqdzUgPSAoUmVnV2luZG93NSopICYocy0+bVdpbmRvd3Nb NV0pOworCisgICAgLy8gaW50ZXJuYWxzCisgICAgcy0+bUVFUFJPTVdyaXRhYmxlID0gMDsKKyAg ICBtZW1zZXQoJihzLT5tV2luZG93cyksIDAsIHNpemVvZiBzLT5tV2luZG93cyk7CisgICAgbWVt c2V0KCYocy0+bVJlZ2lzdGVycyksIDAsIHNpemVvZiBzLT5tUmVnaXN0ZXJzKTsKKyAgICBzLT5t SW50U3RhdHVzID0gMDsKKyAgICBzLT5tUnhFbmFibGVkID0gMDsKKyAgICBzLT5tVHhFbmFibGVk ID0gMDsKKyAgICBzLT5tVXBTdGFsbGVkID0gMDsKKyAgICBzLT5tRG5TdGFsbGVkID0gMDsKKyAg ICB3My0+TWF4UGt0U2l6ZSA9IDE1MTQgLyogRklYTUU6IHNob3VsZCBkZXBlbmQgb24gc2l6ZW9m IG1SeFBhY2tldCovOworICAgIHczLT5SeEZyZWUgPSAxNioxMDI0OworICAgIHczLT5UeEZyZWUg PSAxNioxMDI0OworICAgIHMtPm1SeFBhY2tldFNpemUgPSAwOworICAgIHc1LT5UeFN0YXJ0VGhy ZXNoID0gODE4ODsKKyAgICBtZW1zZXQocy0+bUVFUFJPTSwgMCwgc2l6ZW9mIHMtPm1FRVBST00p OworICAgIHMtPm1FRVBST01bRUVQUk9NX05vZGVBZGRyZXNzMF0gPSAgICAgICAocy0+bU1BQ1sw XTw8OCkgfCBzLT5tTUFDWzFdOworICAgIHMtPm1FRVBST01bRUVQUk9NX05vZGVBZGRyZXNzMV0g PSAgICAgICAocy0+bU1BQ1syXTw8OCkgfCBzLT5tTUFDWzNdOworICAgIHMtPm1FRVBST01bRUVQ Uk9NX05vZGVBZGRyZXNzMl0gPSAgICAgICAocy0+bU1BQ1s0XTw8OCkgfCBzLT5tTUFDWzVdOwor ICAgIHMtPm1FRVBST01bRUVQUk9NX0RldmljZUlEXSA9ICAgICAgICAgICAweDkyMDA7CisgICAg cy0+bUVFUFJPTVtFRVBST01fTWFuaWZhY3R1cmVySURdID0gICAgIDB4NmQ1MDsKKyAgICBzLT5t RUVQUk9NW0VFUFJPTV9QQ0lQYXJhbV0gPSAgICAgICAgICAgMHgyOTQwOworICAgIHMtPm1FRVBS T01bRUVQUk9NX1JvbUluZm9dID0gICAgICAgICAgICAwOyAgLy8gbm8gUk9NCisgICAgcy0+bUVF UFJPTVtFRVBST01fT0VNTm9kZUFkZHJlc3MwXSA9ICAgIHMtPm1FRVBST01bRUVQUk9NX05vZGVB ZGRyZXNzMF07CisgICAgcy0+bUVFUFJPTVtFRVBST01fT0VNTm9kZUFkZHJlc3MxXSA9ICAgIHMt Pm1FRVBST01bRUVQUk9NX05vZGVBZGRyZXNzMV07CisgICAgcy0+bUVFUFJPTVtFRVBST01fT0VN Tm9kZUFkZHJlc3MyXSA9ICAgIHMtPm1FRVBST01bRUVQUk9NX05vZGVBZGRyZXNzMl07CisgICAg cy0+bUVFUFJPTVtFRVBST01fU29mdHdhcmVJbmZvXSA9ICAgICAgIDB4NDAxMDsKKyAgICBzLT5t RUVQUk9NW0VFUFJPTV9Db21wV29yZF0gPSAgICAgICAgICAgMDsKKyAgICBzLT5tRUVQUk9NW0VF UFJPTV9Tb2Z0d2FyZUluZm8yXSA9ICAgICAgMHgwMGFhOworICAgIHMtPm1FRVBST01bRUVQUk9N X0NhcHNdID0gICAgICAgICAgICAgICAweDcyYTI7CisgICAgcy0+bUVFUFJPTVtFRVBST01fSW50 ZXJuYWxDb25maWcwXSA9ICAgIDA7CisgICAgcy0+bUVFUFJPTVtFRVBST01fSW50ZXJuYWxDb25m aWcxXSA9ICAgIDB4MDA1MDsgLy8gZGVmYXVsdCBpcyAweDAxODAKKyAgICBzLT5tRUVQUk9NW0VF UFJPTV9TdWJzeXN0ZW1WZW5kb3JJRF0gPSAgMHgxMGI3OworICAgIHMtPm1FRVBST01bRUVQUk9N X1N1YnN5c3RlbUlEXSA9ICAgICAgICAweDkyMDA7CisgICAgcy0+bUVFUFJPTVtFRVBST01fTWVk aWFPcHRpb25zXSA9ICAgICAgIDB4MDAwYTsKKyAgICBzLT5tRUVQUk9NW0VFUFJPTV9TbWJBZGRy ZXNzXSA9ICAgICAgICAgMHg2MzAwOworICAgIHMtPm1FRVBST01bRUVQUk9NX1BDSVBhcmFtMl0g PSAgICAgICAgICAweGZmYjc7CisgICAgcy0+bUVFUFJPTVtFRVBST01fUENJUGFyYW0zXSA9ICAg ICAgICAgIDB4YjdiNzsKKyAgICBzLT5tRUVQUk9NW0VFUFJPTV9DaGVja3N1bV0gPSAgICAgICAg ICAgMDsKKworICAgIC8vIE1JSQorICAgIG1lbXNldChzLT5tTUlJUmVncywgMCwgc2l6ZW9mIHMt Pm1NSUlSZWdzKTsKKyAgICBNSUlSZWdpc3RlcnMgKm1paXJlZ3MgPSAoTUlJUmVnaXN0ZXJzKikg cy0+bU1JSVJlZ3M7CisgICAgbWlpcmVncy0+c3RhdHVzID0gKDE8PDE0KSB8ICgxPDwxMykgfCAo MTw8MTIpIHwgKDE8PDExKSB8ICgxPDw1KSB8ICgxPDwzKSB8ICgxPDwyKSB8IDE7CisgICAgbWlp cmVncy0+bGlua1BhcnRuZXIgPSAoMTw8MTQpIHwgKDE8PDcpIHwgMTsKKyAgICBtaWlyZWdzLT5h ZHZlcnQgPSAoMTw8MTQpIHwgKDEgPDwgMTApIHwgKDE8PDcpIHwgMTsKKyAgICBzLT5tTUlJUmVh ZFdvcmQgPSAwOworICAgIHMtPm1NSUlXcml0ZVdvcmQgPSAwOworICAgIHMtPm1NSUlXcml0dGVu Qml0cyA9IDA7CisgICAgcy0+bUxhc3RIaUNsa1BoeXNNZ210ID0gMDsKKworICAgIC8vIFJlZ2lz dGVyIGZvbGxvdy11cHMKKyAgICB3My0+TWVkaWFPcHRpb25zID0gcy0+bUVFUFJPTVtFRVBST01f TWVkaWFPcHRpb25zXTsKKyAgICB3My0+SW50ZXJuYWxDb25maWcgPSBzLT5tRUVQUk9NW0VFUFJP TV9JbnRlcm5hbENvbmZpZzBdIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAocy0+bUVFUFJP TVtFRVBST01fSW50ZXJuYWxDb25maWcxXSA8PCAxNik7CisKKyAgICAvLyBBIHZhbGlkIGxpbmsg aXMgZXN0YWJsaXNoZWQgb24gdGhlIE5JQworICAgIHc0LT5NZWRpYVN0YXR1cyA9ICgxIDw8IDEx KSB8IDB4ODAwMDsKKworICAgIC8vIEFuZCBjbGVhbiBvdXQgdGhlIFJYIGJ1ZmZlcgorICAgIG1l bXNldChzLT5tUnhQYWNrZXQsIDB4YWIsIE1BWF9QQUNLRVRfU0laRSk7Cit9CisKK3N0YXRpYyB1 aW50MzJfdCByZWFkUmVnV2luZG93KEEzQzkwWFN0YXRlICpzLCB1aW50MzJfdCB3aW5kb3csIHVp bnQzMl90IHBvcnQsIHVpbnQzMl90IGRhdGEsIHVpbnQzMl90IHNpemUpCit7CisgICAgREVCVUdf UFJJTlQoInJlYWRSZWdXaW5kb3dcbiIpOworICAgIHN3aXRjaCAod2luZG93KQorICAgIHsKKyAg ICAgICAgLyogd2luZG93IDAgKi8KKyAgICBjYXNlIDA6CisgICAgeworICAgICAgICBSZWdXaW5k b3cwICp3MCA9IChSZWdXaW5kb3cwKikgJnMtPm1XaW5kb3dzWzBdOworICAgICAgICBzd2l0Y2gg KHBvcnQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBXMF9FRVBST01DbWQ6CisgICAgICAgIHsK KyAgICAgICAgICAgIGlmIChzaXplICE9IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgREVCVUdfUFJJTlQoIldBUk46IEVlcHJvbUNvbW1hbmQsIHNpemUgIT0gMlxuIik7CisgICAg ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g dzAtPkVlcHJvbUNvbW1hbmQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg ICBjYXNlIFcwX0VFUFJPTURhdGE6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzaXplICE9 IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQoIldBUk46IEVl cHJvbURhdGEsIHNpemUgIT0gMlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdzAtPkVlcHJvbURhdGE7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREVCVUdf UFJJTlQoIldBUk46IHJlYWRpbmcgaGVyZSB1bmltcGxcbiIpOworICAgICAgICAgICAgcmV0dXJu IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9 CisgICAgLyogd2luZG93IDEgKi8KKyAgICBjYXNlIDE6CisgICAgeworICAgICAgICBkYXRhID0g MDsKKyAgICAgICAgbWVtY3B5KCZkYXRhLCAmcy0+bVdpbmRvd3NbMV0uYltwb3J0XSwgc2l6ZSk7 CisgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgLyogd2lu ZG93IDIgKi8KKyAgICBjYXNlIDI6CisgICAgeworICAgICAgICBkYXRhID0gMDsKKyAgICAgICAg bWVtY3B5KCZkYXRhLCAmcy0+bVdpbmRvd3NbMl0uYltwb3J0XSwgc2l6ZSk7CisgICAgICAgIHJl dHVybiBkYXRhOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgLyogd2luZG93IDMgKi8KKyAg ICBjYXNlIDM6CisgICAgeworICAgICAgICBkYXRhID0gMDsKKyAgICAgICAgbWVtY3B5KCZkYXRh LCAmcy0+bVdpbmRvd3NbM10uYltwb3J0XSwgc2l6ZSk7CisgICAgICAgIHJldHVybiBkYXRhOwor ICAgICAgICBicmVhazsKKyAgICB9CisgICAgLyogd2luZG93IDQgKi8KKyAgICBjYXNlIDQ6Cisg ICAgeworICAgICAgICBERUJVR19QUklOVCgiUmVhZCBmcm9tIHdpbmRvdyA0XG4iKTsKKyAgICAg ICAgUmVnV2luZG93NCAqdzQgPSAoUmVnV2luZG93NCopICZzLT5tV2luZG93c1s0XTsKKyAgICAg ICAgZGF0YSA9IDA7CisgICAgICAgIHN3aXRjaCAocG9ydCkKKyAgICAgICAgeworICAgICAgICBj YXNlIDg6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE1JSS1pbnRlcmZhY2UKKyAgICAgICAg ICAgIGlmIChzaXplICE9IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREVCVUdf UFJJTlQoImFsaWdubWVudC40LjgucmVhZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFyIG1nbXREYXRhID0gKHMtPm1NSUlSZWFk V29yZCAmIDB4ODAwMDAwMDApID8gMSA6IDA7CisgICAgICAgICAgICBpZiAobWdtdERhdGEpCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YSA9IHc0LT5QaHlzTWdtdCB8IFBNX21n bXREYXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgIGRhdGEgPSB3NC0+UGh5c01nbXQgJiAoflBNX21nbXREYXRhKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug MHhjOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2l6ZSAhPSAxKQorICAgICAgICAgICAg eworICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJhbGlnbm1lbnQuNC5jLnJlYWRcbiIpOwor ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g cmVhZGluZyBjbGVhcnMKKyAgICAgICAgICAgIHc0LT5CYWRTU0QgPSAwOworICAgICAgICAgICAg bWVtY3B5KCZkYXRhLCAmcy0+bVdpbmRvd3NbNF0uYltwb3J0XSwgc2l6ZSk7CisgICAgICAgICAg ICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRl ZmF1bHQ6CisgICAgICAgICAgICBtZW1jcHkoJmRhdGEsICYocy0+bVdpbmRvd3NbNF0uYltwb3J0 XSksIHNpemUpOworICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgIH0KKyAgICAgICAg YnJlYWs7CisgICAgfQorICAgIC8qIFdpbmRvdyA1ICovCisgICAgY2FzZSA1OgorICAgIHsKKyAg ICAgICAgZGF0YSA9IDA7CisgICAgICAgIG1lbWNweSgmZGF0YSwgJnMtPm1XaW5kb3dzWzVdLmJb cG9ydF0sIHNpemUpOworICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgYnJlYWs7CisgICAg fQorICAgIC8qIFdpbmRvdyA2ICovCisgICAgY2FzZSA2OgorICAgIHsKKyAgICAgICAgUmVnV2lu ZG93NiAqdzYgPSAoUmVnV2luZG93NiopICZzLT5tV2luZG93c1s2XTsKKyAgICAgICAgLy8gcmVh ZGluZyBjbGVhcnMKKyAgICAgICAgaWYgKChwb3J0ID09IDB4YSkgJiYgKHNpemUgPT0gMikpCisg ICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBCeXRlc1JjdmRPayByZWFsbHkgaXMgMjAg Yml0cyAhCisgICAgICAgICAgICAvLyB3aGVuIHJlYWRpbmcgaGVyZSwgd3JpdGUgdXBwZXIgNCBi aXRzCisgICAgICAgICAgICAvLyBpbiB3NC5VcHBlckJ5dGVzT2tbMzowXS4gbm8gY2xlYXJpbmcu CisgICAgICAgICAgICB3Ni0+Qnl0ZXNSY3ZkT2sgPSAwOworICAgICAgICB9CisgICAgICAgIGVs c2UgaWYgKChwb3J0ID09IDB4YykgJiYgKHNpemUgPT0gMikpCisgICAgICAgIHsKKyAgICAgICAg ICAgIC8vIEZJWE1FOiBCeXRlc1htaXR0ZWRPayByZWFsbHkgaXMgMjAgYml0cyAhCisgICAgICAg ICAgICAvLyB3aGVuIHJlYWRpbmcgaGVyZSwgd3JpdGUgdXBwZXIgNCBiaXRzCisgICAgICAgICAg ICAvLyBpbiB3NC5VcHBlckJ5dGVzT2tbNzo0XS4gbm8gY2xlYXJpbmcuCisgICAgICAgICAgICB3 Ni0+Qnl0ZXNYbWl0dGVkT2sgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChwb3J0 ID09IDApICYmIChzaXplID09IDEpKQorICAgICAgICB7CisgICAgICAgICAgICB3Ni0+Q2Fycmll ckxvc3QgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChwb3J0ID09IDgpICYmIChz aXplID09IDEpKQorICAgICAgICB7CisgICAgICAgICAgICB3Ni0+RnJhbWVzRGVmZXJyZWQgPSAw OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChwb3J0ID09IDcpICYmIChzaXplID09IDEp KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGSVhNRTogRnJhbWVzUmN2ZE9rIHJlYWxseSBp cyAxMCBiaXRzICEKKyAgICAgICAgICAgIC8vIHdoZW4gcmVhZGluZyBoZXJlLCB3cml0ZSB1cHBl ciAyIGJpdHMKKyAgICAgICAgICAgIC8vIGluIHc2LlVwcGVyRnJhbWVzT2tbMTowXS4gbm8gY2xl YXJpbmcuCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKHBvcnQgPT0gNikgJiYgKHNpemUg PT0gMSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBGcmFtZXNYbWl0dGVkT2sg cmVhbGx5IGlzIDEwIGJpdHMgIQorICAgICAgICAgICAgLy8gd2hlbiByZWFkaW5nIGhlcmUsIHdy aXRlIHVwcGVyIDIgYml0cworICAgICAgICAgICAgLy8gaW4gdzYuVXBwZXJGcmFtZXNPa1s1OjRd LiBubyBjbGVhcmluZy4KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgocG9ydCA9PSA0KSAm JiAoc2l6ZSA9PSAxKSkKKyAgICAgICAgeworICAgICAgICAgICAgdzYtPkxhdGVDb2xsaXNpb25z ID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgocG9ydCA9PSAyKSAmJiAoc2l6ZSA9 PSAxKSkKKyAgICAgICAgeworICAgICAgICAgICAgdzYtPk11bHRpcGxlQ29sbGlzaW9ucyA9IDA7 CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKHBvcnQgPT0gNSkgJiYgKHNpemUgPT0gMSkp CisgICAgICAgIHsKKyAgICAgICAgICAgIHc2LT5SeE92ZXJydW5zID0gMDsKKyAgICAgICAgfQor ICAgICAgICBlbHNlIGlmICgocG9ydCA9PSAzKSAmJiAoc2l6ZSA9PSAxKSkKKyAgICAgICAgewor ICAgICAgICAgICAgdzYtPlNpbmdsZUNvbGxpc2lvbnMgPSAwOworICAgICAgICB9CisgICAgICAg IGVsc2UgaWYgKChwb3J0ID09IDEpICYmIChzaXplID09IDEpKQorICAgICAgICB7CisgICAgICAg ICAgICB3Ni0+U3FlRXJyb3JzID0gMDsKKyAgICAgICAgfQorICAgICAgICBkYXRhID0gMDsKKyAg ICAgICAgbWVtY3B5KCZkYXRhLCAmcy0+bVdpbmRvd3NbNl0uYltwb3J0XSwgc2l6ZSk7CisgICAg ICAgIHJldHVybiBkYXRhOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgLyogV2luZG93IDcg Ki8KKyAgICBjYXNlIDc6CisgICAgeworICAgICAgICBkYXRhID0gMDsKKyAgICAgICAgbWVtY3B5 KCZkYXRhLCAmcy0+bVdpbmRvd3NbN10uYltwb3J0XSwgc2l6ZSk7CisgICAgICAgIHJldHVybiBk YXRhOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgREVCVUdf UFJJTlQoInJlYWRpbmcgaGVyZSB1bmltcGwuXG4iKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgd3JpdGVSZWdXaW5kb3coQTNDOTBYU3RhdGUgKnMsIHVpbnQzMl90 IHdpbmRvdywgdWludDMyX3QgcG9ydCwgdWludDMyX3QgZGF0YSwgdWludDMyX3Qgc2l6ZSkKK3sK KyAgICBERUJVR19QUklOVCgid3JpdGVSZWdXaW5kb3dcbiIpOworICAgIHN3aXRjaCAod2luZG93 KQorICAgIHsKKyAgICAgICAgLyogV2luZG93IDAgKi8KKyAgICBjYXNlIDA6CisgICAgeworICAg ICAgICBSZWdXaW5kb3cwICp3MCA9IChSZWdXaW5kb3cwKikgJnMtPm1XaW5kb3dzWzBdOworICAg ICAgICBzd2l0Y2ggKHBvcnQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBXMF9FRVBST01DbWQ6 CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzaXplICE9IDIpCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgREVCVUdfUFJJTlQoIkVlcHJvbUNvbW1hbmQsIHNpemUgIT0gMlxuIik7 CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdzAt PkVlcHJvbUNvbW1hbmQgPSBkYXRhICYgMHhmZjdmOyAgLy8gY2xlYXIgZWVwcm9tQnVzeQorICAg ICAgICAgICAgdWludDMyX3QgZWVwcm9tX2FkZHIgPSAgKChkYXRhID4+IDIpICYgMHhmZmMwKSB8 IChkYXRhICYgMHgzZik7CisgICAgICAgICAgICBzd2l0Y2ggKGRhdGEgJiAweGMwKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgY2FzZSBFRU9QX1N1YkNtZDoKKyAgICAgICAgICAgICAgICBz d2l0Y2ggKGRhdGEgJiAweDMwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBj YXNlIEVFU0NfV3JpdGVEaXNhYmxlOgorICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVCgi RUVTQ19Xcml0ZURpc2FibGVcbiIpOworICAgICAgICAgICAgICAgICAgICBzLT5tRUVQUk9NV3Jp dGFibGUgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj YXNlIEVFU0NfV3JpdGVBbGw6CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB0aGlzIG5l ZWRzIGZpeGluZyA6KQorICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiV3JpdGVBbGwg bm90IGltcGwuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgbWVtc2V0KHMtPm1FRVBST00sIDB4 ZmYsIHNpemVvZiBzLT5tRUVQUk9NKTsKKyAgICAgICAgICAgICAgICAgICAgcy0+bUVFUFJPTVdy aXRhYmxlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg Y2FzZSBFRVNDX0VyYXNlQWxsOgorICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiRXJh c2VBbGwgbm90IGltcGwuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgi Iik7CisgICAgICAgICAgICAgICAgICAgIG1lbXNldChzLT5tRUVQUk9NLCAwLCBzaXplb2Ygcy0+ bUVFUFJPTSk7CisgICAgICAgICAgICAgICAgICAgIHMtPm1FRVBST01Xcml0YWJsZSA9IDA7Cisg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRUVTQ19Xcml0 ZUVuYWJsZToKKyAgICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQoIkVFU0NfV3JpdGVFbmFi bGVcbiIpOworICAgICAgICAgICAgICAgICAgICBzLT5tRUVQUk9NV3JpdGFibGUgPSAwOworICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg ICAgICAgICAgICAgICBERUJVR19QUklOVCgiaW1wb3NzaWJsZVxuIik7CisgICAgICAgICAgICAg ICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRUVPUF9Xcml0ZVJlZzoKKyAgICAgICAgICAg ICAgICBpZiAocy0+bUVFUFJPTVdyaXRhYmxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKGVlcHJvbV9hZGRyKjIgPCBzaXplb2Ygcy0+bUVFUFJPTSkKKyAgICAg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZWQKKyAg ICAgICAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJFRU9QX1dyaXRlUmVnXG4iKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICAgICAgICAg ICAgICAgICAgcy0+bUVFUFJPTVtlZXByb21fYWRkcl0gPSB3MC0+RWVwcm9tRGF0YTsKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJGQUlMRUQob3V0 IG9mIGJvdW5kcyk6IEVFT1BfV3JpdGVSZWdcbiIpOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgIHMtPm1FRVBST01Xcml0YWJsZSA9IDA7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgIERFQlVHX1BSSU5UKCJGQUlMRUQobm90IHdyaXRhYmxlKTogRUVPUF9Xcml0ZVJl Z1xuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgY2FzZSBFRU9QX1JlYWRSZWc6CisgICAgICAgICAgICAgICAgaWYgKGVlcHJvbV9hZGRy KjIgPCBzaXplb2Ygcy0+bUVFUFJPTSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgIHcwLT5FZXByb21EYXRhID0gcy0+bUVFUFJPTVtlZXByb21fYWRkcl07CisgICAgICAg ICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJFRU9QX1JlYWRSZWdcbiIpOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgICBERUJVR19QUklOVCgiRkFJTEVEKG91dCBvZiBib3VuZHMpOiBFRU9QX1JlYWRS ZWdcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIGNhc2UgRUVPUF9FcmFzZVJlZzoKKyAgICAgICAgICAgICAgICBpZiAocy0+bUVFUFJP TVdyaXRhYmxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVl cHJvbV9hZGRyKjIgPCBzaXplb2Ygcy0+bUVFUFJPTSkKKyAgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZWQKKyAgICAgICAgICAgICAgICAgICAg ICAgIERFQlVHX1BSSU5UKCJFRU9QX0VyYXNlUmVnXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcy0+bUVFUFJP TVtlZXByb21fYWRkcl0gPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg ICAgREVCVUdfUFJJTlQoIkZBSUxFRChvdXQgb2YgYm91bmRzKTogRUVPUF9FcmFzZVJlZ1xuIik7 CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTSU5HTEVTVEVQKCIiKTsKKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzLT5tRUVQUk9NV3JpdGFibGUgPSAwOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiRkFJTEVEKG5vdCB3cml0YWJsZSk6 IEVFT1BfRXJhc2VSZWdcbiIpOworICAgICAgICAgICAgICAgICAgICAvLyBTSU5HTEVTVEVQKCIi KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJpbXBvc3NpYmxlXG4iKTsK KyAgICAgICAgICAgICAgICAvLyBTSU5HTEVTVEVQKCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVzBfRUVQUk9NRGF0YToKKyAg ICAgICAgICAgIGlmIChzaXplICE9IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg REVCVUdfUFJJTlQoIkVlcHJvbURhdGEsIHNpemUgIT0gMlxuIik7CisgICAgICAgICAgICAgICAg Ly8gU0lOR0xFU1RFUCgiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3MC0+RWVwcm9t RGF0YSA9IGRhdGE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgIERFQlVHX1BSSU5UKCJ3cml0aW5nIGhlcmUgdW5pbXBsLjBcbiIpOworICAgICAgICAg ICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg ICAgICBicmVhazsKKyAgICB9CisgICAgLyogV2luZG93IDIgKi8KKyAgICBjYXNlIDI6CisgICAg eworICAgICAgICBpZiAocG9ydCtzaXplPD0weGMpCisgICAgICAgIHsKKyAgICAgICAgICAgIERF QlVHX1BSSU5UKCJTdGF0aW9uQWRkcmVzcyBvciBTdGF0aW9uTWFza1xuIik7CisgICAgICAgICAg ICAvKiBTdGF0aW9uQWRkcmVzcyBvciBTdGF0aW9uTWFzayAqLworICAgICAgICAgICAgbWVtY3B5 KCZzLT5tV2luZG93c1syXS5iW3BvcnRdLCAmZGF0YSwgc2l6ZSk7CisgICAgICAgIH0KKyAgICAg ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBERUJVR19QUklOVCgid3JpdGluZyBoZXJl IHVuaW1wbC4yXG4iKTsKKyAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICB9 CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvKiBXaW5kb3cgMyAqLworICAgIGNhc2UgMzoK KyAgICB7CisgICAgICAgIFJlZ1dpbmRvdzMgKnczID0gKFJlZ1dpbmRvdzMqKSAmcy0+bVdpbmRv d3NbM107CisgICAgICAgIHN3aXRjaCAocG9ydCkKKyAgICAgICAgeworICAgICAgICBjYXNlIDA6 CisgICAgICAgICAgICBpZiAoc2l6ZSAhPSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgIERFQlVHX1BSSU5UKCJhbGlnbm1lbnQuMy4wXG4iKTsKKyAgICAgICAgICAgICAgICAvLyBT SU5HTEVTVEVQKCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERFQlVHX1BSSU5UKCJJ bnRlcm5hbENvbmZpZ1xuIik7CisgICAgICAgICAgICB3My0+SW50ZXJuYWxDb25maWcgPSBkYXRh OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIGlmIChz aXplICE9IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQoImFs aWdubWVudC4zLjRcbiIpOworICAgICAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgREVCVUdfUFJJTlQoIkVSUjogTWF4UGt0U2l6ZVxuIik7 CisgICAgICAgICAgICB3My0+TWF4UGt0U2l6ZSA9IGRhdGE7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgaWYgKHNpemUgIT0gMikKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiYWxpZ25tZW50LjMuNlxuIik7CisgICAg ICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBERUJVR19QUklOVCgiTWFjQ29udHJvbFxuIik7CisgICAgICAgICAgICBpZiAoZGF0YSAhPSAw KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJzZXR0aW5nIE1h Y0NvbnRyb2wgIT0gMFxuIik7CisgICAgICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICB3My0+TWFjQ29udHJvbCA9IGRhdGE7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgaWYgKHNpemUgIT0gMikK KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiYWxpZ25tZW50LjMu OFxuIik7CisgICAgICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBERUJVR19QUklOVCgiTWVkaWFPcHRpb25zXG4iKTsKKyAgICAgICAgICAg IHczLT5NZWRpYU9wdGlvbnMgPSBkYXRhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh c2UgMTA6CisgICAgICAgICAgICBpZiAoc2l6ZSAhPSAyKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgIERFQlVHX1BSSU5UKCJhbGlnbm1lbnQuMy4xMFxuIik7CisgICAgICAgICAgICAg ICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBERUJVR19Q UklOVCgiUnhGcmVlXG4iKTsKKyAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAg ICAgICAgdzMtPlJ4RnJlZSA9IGRhdGE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz ZSAxMjoKKyAgICAgICAgICAgIGlmIChzaXplICE9IDIpCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgREVCVUdfUFJJTlQoImFsaWdubWVudC4zLjEyXG4iKTsKKyAgICAgICAgICAgICAg ICAvLyBTSU5HTEVTVEVQKCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERFQlVHX1BS SU5UKCJUeEZyZWVcbiIpOworICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAgICAg ICAgICB3My0+VHhGcmVlID0gZGF0YTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh dWx0OgorICAgICAgICAgICAgREVCVUdfUFJJTlQoIndyaXRpbmcgaGVyZSB1bmltcGwuM1xuIik7 CisgICAgICAgICAgICAvLyBTSU5HTEVTVEVQKCIiKTsKKyAgICAgICAgfQorICAgICAgICBicmVh azsKKyAgICB9CisgICAgLyogV2luZG93IDQgKi8KKyAgICBjYXNlIDQ6CisgICAgeworICAgICAg ICBSZWdXaW5kb3c0ICp3NCA9IChSZWdXaW5kb3c0KikgJnMtPm1XaW5kb3dzWzRdOworICAgICAg ICBzd2l0Y2ggKHBvcnQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSA2OgorICAgICAgICB7Cisg ICAgICAgICAgICBpZiAoc2l6ZSAhPSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg IERFQlVHX1BSSU5UKCJhbGlnbm1lbnQuNC42XG4iKTsKKyAgICAgICAgICAgICAgICAvLyBTSU5H TEVTVEVQKCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVpbnQzMl90IG1hc2sgPSAw eGYzNDE7CisgICAgICAgICAgICBERUJVR19QUklOVCgiTmV0RGlhZ25vc3RpYyIpOworICAgICAg ICAgICAgdzQtPk5ldERpYWdub3N0aWMgJj0gfm1hc2s7CisgICAgICAgICAgICB3NC0+TmV0RGlh Z25vc3RpYyB8PSBkYXRhICYgbWFzazsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg ICAgICAgIGNhc2UgODoKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTUlJLWludGVyZmFjZQor ICAgICAgICAgICAgaWYgKHNpemUgIT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICBERUJVR19QUklOVCgiYWxpZ25tZW50LjQuOFxuIik7CisgICAgICAgICAgICAgICAgLy8gU0lO R0xFU1RFUCgiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFyIGhpQ2xrID0gKCEo KHc0LT5QaHlzTWdtdCAmIFBNX21nbXRDbGspICYmIChkYXRhICYgUE1fbWdtdENsaykpKSA/IDEg OiAwOworICAgICAgICAgICAgaWYgKGhpQ2xrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgIC8vIFogbWVhbnMgbG8gZWRnZSBvZiBtZ210RGlyCisgICAgICAgICAgICAgICAgY2hhciBa ID0gKChzLT5tTGFzdEhpQ2xrUGh5c01nbXQgJiBQTV9tZ210RGlyKSAmJiAhKGRhdGEgJiBQTV9t Z210RGlyKSkgPyAxIDogMDsKKyAgICAgICAgICAgICAgICBpZiAoWikKKyAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSA1IGZyYW1lcyBoYXZlIGJl ZW4gc2VudAorICAgICAgICAgICAgICAgICAgICBpZiAoKChzLT5tTUlJV3JpdGVXb3JkID4+IChz LT5tTUlJV3JpdHRlbkJpdHMtMzItMikpICYgMHgzZmZmZmZmZmZVTEwpID09IDB4M2ZmZmZmZmZk VUxMKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50 MzJfdCBvcGNvZGUgPSAocy0+bU1JSVdyaXRlV29yZCA+PiAocy0+bU1JSVdyaXR0ZW5CaXRzLTMy LTItMikpICYgMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFBIWWFkZHIgPSAo cy0+bU1JSVdyaXRlV29yZCA+PiAocy0+bU1JSVdyaXR0ZW5CaXRzLTMyLTItMi01KSkgJiAweDFm OworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgUkVHYWRkciA9IChzLT5tTUlJV3Jp dGVXb3JkID4+IChzLT5tTUlJV3JpdHRlbkJpdHMtMzItMi0yLTUtNSkpICYgMHgxZjsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgoUEhZYWRkciA9PSAweDE4IC8qIGhhcmRjb2RlZCBhZGRy ZXNzIFsxXSBwLjE5NiAqLykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKFJF R2FkZHIgPCAweDEwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3Bjb2Rl IFdyaXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJPcGNv ZGUgV3JpdGVcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocy0+bU1J SVdyaXR0ZW5CaXRzID09IDY0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2YWx1ZSA9IHMtPm1N SUlXcml0ZVdvcmQgJiAweGZmZmY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzLT5tTUlJUmVnc1tSRUdhZGRyXSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgREVCVUdfUFJJTlQoIkJ1dCBpbnZhbGlkIHdyaXRlIGNvdW50XG4iKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzLT5tTUlJV3JpdGVXb3JkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wY29kZSBSZWFkCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJPcGNvZGUgUmVhZFxuIik7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChzLT5tTUlJV3JpdHRlbkJpdHMgPT0gMzIrMisyKzUr NSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLy8gbXNiIGdldHMgc2VudCBmaXJzdCBhbmQgaXMgemVybyB0byBp bmRpY2F0ZWQgc3VjY2VzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g dGhlIHJlZ2lzdGVyIHRvIGJlIHNlbnQgZm9sbG93cyBtc2IgdG8gbHNiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzLT5tTUlJUmVhZFdvcmQgPSBzLT5tTUlJUmVnc1tSRUdh ZGRyXSA8PCAxNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJC dXQgaW52YWxpZCB3cml0ZSBjb3VudFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+bU1JSVdyaXRlV29yZCA9 IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlcnJvcgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiSW52YWxpZCBvcGNvZGVcbiIpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5tTUlJUmVhZFdvcmQgPSAweGZmZmZmZmZmOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlcnJvcgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERFQlVHX1BSSU5UKCJJbnZhbGlkIFBIWSBvciBSRUdcbiIpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHMtPm1NSUlSZWFkV29yZCA9IDB4ZmZmZmZmZmY7CisgICAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgcy0+bU1JSVdyaXR0ZW5CaXRzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgdzQtPlBo eXNNZ210ID0gZGF0YTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBp ZiAoZGF0YSAmIFBNX21nbXREaXIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICAvLyB3cml0ZQorICAgICAgICAgICAgICAgICAgICBjaGFyIG1nbXREYXRhID0gKGRhdGEg JiBQTV9tZ210RGF0YSkgPyAxIDogMDsKKyAgICAgICAgICAgICAgICAgICAgdzQtPlBoeXNNZ210 ID0gZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgcy0+bU1JSVdyaXRlV29yZCA8PD0gMTsKKyAg ICAgICAgICAgICAgICAgICAgcy0+bU1JSVdyaXRlV29yZCB8PSBtZ210RGF0YSA/IDEgOiAwOwor ICAgICAgICAgICAgICAgICAgICBzLT5tTUlJV3JpdHRlbkJpdHMrKzsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgICAgLy8gcmVhZAorICAgICAgICAgICAgICAgICAgICBjaGFyIG1nbXREYXRhID0gKHMt Pm1NSUlSZWFkV29yZCAmIDB4ODAwMDAwMDApID8gMSA6IDA7CisgICAgICAgICAgICAgICAgICAg IHc0LT5QaHlzTWdtdCA9IGRhdGE7CisgICAgICAgICAgICAgICAgICAgIGlmIChtZ210RGF0YSkK KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdzQtPlBoeXNN Z210ID0gdzQtPlBoeXNNZ210IHwgUE1fbWdtdERhdGE7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICAgICAgICB3NC0+UGh5c01nbXQgPSB3NC0+UGh5c01nbXQgJiAoflBNX21nbXRE YXRhKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzLT5tTUlJ UmVhZFdvcmQgPDw9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHMtPm1M YXN0SGlDbGtQaHlzTWdtdCA9IHc0LT5QaHlzTWdtdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3NC0+UGh5c01nbXQgPSBk YXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg ICAgY2FzZSAxMDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNpemUgIT0gMikKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICBERUJVR19QUklOVCgiYWxpZ25tZW50LjQuMTBcbiIp OworICAgICAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgdWludDMyX3QgbWFzayA9IDB4MTBjYzsKKyAgICAgICAgICAgIERFQlVHX1BSSU5U KCJNZWRpYVN0YXR1c1xuIik7CisgICAgICAgICAgICB3NC0+TWVkaWFTdGF0dXMgJj0gfm1hc2s7 CisgICAgICAgICAgICB3NC0+TWVkaWFTdGF0dXMgfD0gZGF0YSAmIG1hc2s7CisgICAgICAgICAg ICB3NC0+TWVkaWFTdGF0dXMgfD0gMHg4MDAwOyAgLy8gYXVpRGlzYWJsZSBhbHdheXMgb24KKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg ICBERUJVR19QUklOVCgiZ2VuZXJpYyB0byB3aW5kb3cgNFxuIik7CisgICAgICAgICAgICAvLyBT SU5HTEVTVEVQKCIiKTsKKyAgICAgICAgICAgIG1lbWNweSgmcy0+bVdpbmRvd3NbNF0uYltwb3J0 XSwgJmRhdGEsIHNpemUpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAv KiovCisgICAgZGVmYXVsdDoKKyAgICAgICAgREVCVUdfUFJJTlQoIndyaXRpbmcgaGVyZSB1bmlt cGwuXG4iKTsKKyAgICAgICAgLy8gU0lOR0xFU1RFUCgiIik7CisgICAgfQorfQorCitzdGF0aWMg dm9pZCBzZXRDUih1aW50MTZfdCBjciwgdm9pZCAqb3BhcXVlKQoreworICAgIEEzQzkwWFN0YXRl ICpzID0gb3BhcXVlOworCisgICAgREVCVUdfUFJJTlQoInNldENSXG4iKTsKKyAgICBzd2l0Y2gg KGNyICYgKDMxPDwxMSkpCisgICAgeworICAgIGNhc2UgQ21kVG90YWxSZXNldDoKKyAgICAgICAg Ly8gRklYTUU6IGNhcmUgYWJvdXQgcGFyYW1zCisgICAgICAgIERFQlVHX1BSSU5UKCJUb3RhbFJl c2V0XG4iKTsKKyAgICAgICAgYTNjOTB4X3Jlc2V0KG9wYXF1ZSk7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgQ21kU2VsZWN0V2luZG93OgorICAgIHsKKyAgICAgICAgREVCVUdfUFJJTlQoIlNl bGVjdFdpbmRvd1xuIik7CisgICAgICAgIHMtPm1JbnRTdGF0dXMgJj0gMHgxZmZmOworICAgICAg ICBzLT5tSW50U3RhdHVzIHw9IChjciAmIDcpPDwxMzsKKyAgICAgICAgYnJlYWs7CisgICAgfQor ICAgIGNhc2UgQ21kVHhSZXNldDoKKyAgICAgICAgREVCVUdfUFJJTlQoIlR4UmVzZXRcbiIpOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIENtZFJ4UmVzZXQ6CisgICAgICAgIERFQlVHX1BSSU5U KCJSeFJlc2V0XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDbWRTZXRJbmRpY2F0aW9u RW5hYmxlOgorICAgIHsKKyAgICAgICAgUmVnV2luZG93NSAqdzUgPSAoUmVnV2luZG93NSopICZz LT5tV2luZG93c1s1XTsKKyAgICAgICAgREVCVUdfUFJJTlQoIlNldEluZGljYXRpb25FbmFibGVc biIpOworICAgICAgICB3NS0+SW5kaWNhdGlvbkVuYWJsZSA9IGNyICYgMHg3ZmU7CisgICAgICAg IGJyZWFrOworICAgIH0KKyAgICBjYXNlIENtZFNldEludHJFbmI6CisgICAgeworICAgICAgICBS ZWdXaW5kb3c1ICp3NSA9IChSZWdXaW5kb3c1KikgJnMtPm1XaW5kb3dzWzVdOworICAgICAgICBE RUJVR19QUklOVCgiU2V0SW50ckVuYWJcbiIpOworICAgICAgICB3NS0+SW50ZXJydXB0RW5hYmxl ID0gY3IgJiAweDdmZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ21kU3RhdHNF bmFibGU6CisgICAgICAgIC8qIGltcGxlbWVudCBtZSAqLworICAgICAgICBERUJVR19QUklOVCgi U3RhdHNFbmFibGVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENtZFN0YXRzRGlzYWJs ZToKKyAgICAgICAgLyogaW1wbGVtZW50IG1lICovCisgICAgICAgIERFQlVHX1BSSU5UKCJTdGF0 c0Rpc2FibGVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENtZEVuYWJsZURDOgorICAg ICAgICAvKiBpbXBsZW1lbnQgbWUgKi8KKyAgICAgICAgREVCVUdfUFJJTlQoIkVuYWJsZURDXG4i KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDbWREaXNhYmxlREM6CisgICAgICAgIC8qIGlt cGxlbWVudCBtZSAqLworICAgICAgICBERUJVR19QUklOVCgiRGlzYWJsZURDXG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBDbWRTdGFsbDoKKyAgICB7CisgICAgICAgIC8qIEZJWE1FOiB0 aHJlYWRpbmcgKi8KKyAgICAgICAgc3dpdGNoIChjciAmIDMpCisgICAgICAgIHsKKyAgICAgICAg Y2FzZSAwOiAvKiBVcFN0YWxsICovCisgICAgICAgIGNhc2UgMTogLyogVXBVbnN0YWxsICovCisg ICAgICAgIHsKKyAgICAgICAgICAgIERFQlVHX1BSSU5UKCJTdGFsbFxuIik7CisgICAgICAgICAg ICBjaGFyIHN0YWxsID0gKCEoY3IgJiAxKSkgPyAxIDogMDsKKyAgICAgICAgICAgIHMtPm1VcFN0 YWxsZWQgPSBzdGFsbDsKKyAgICAgICAgICAgIGNoZWNrVXBXb3JrKG9wYXF1ZSk7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDI6IC8qIERuU3RhbGwgKi8KKyAg ICAgICAgY2FzZSAzOiAvKiBEblVuc3RhbGwgKi8KKyAgICAgICAgeworICAgICAgICAgICAgREVC VUdfUFJJTlQoIlN0YWxsXG4iKTsKKyAgICAgICAgICAgIGNoYXIgc3RhbGwgPSAoIShjciAmIDEp KSA/IDEgOiAwOworICAgICAgICAgICAgcy0+bURuU3RhbGxlZCA9IHN0YWxsOworICAgICAgICAg ICAgcy0+bVJlZ2lzdGVycy5EbWFDdHJsICY9IH5EQ19kblN0YWxsZWQ7CisgICAgICAgICAgICBp ZiAoc3RhbGwpIHMtPm1SZWdpc3RlcnMuRG1hQ3RybCB8PSBEQ19kblN0YWxsZWQ7CisgICAgICAg ICAgICBjaGVja0RuV29yayhvcGFxdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDbWRTZXRSeEZpbHRl cjoKKyAgICB7CisgICAgICAgIERFQlVHX1BSSU5UKCJTZXRSeEZpbHRlclxuIik7CisgICAgICAg IFJlZ1dpbmRvdzUgKnc1ID0gKFJlZ1dpbmRvdzUqKSAmcy0+bVdpbmRvd3NbNV07CisgICAgICAg IHc1LT5SeEZpbHRlciA9IGNyICYgMzE7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl IENtZFNldFR4UmVjbGFpbVRocmVzaDoKKyAgICB7CisgICAgICAgIERFQlVHX1BSSU5UKCJTZXRU eFJlY2xhaW1IYXNoXG4iKTsKKyAgICAgICAgUmVnV2luZG93NSAqdzUgPSAoUmVnV2luZG93NSop ICZzLT5tV2luZG93c1s1XTsKKyAgICAgICAgdzUtPlR4UmVjbGFpbVRocmVzaCA9IGNyICYgMjU1 OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDbWRTZXRUeFN0YXJ0VGhyZXNoOgor ICAgIHsKKyAgICAgICAgREVCVUdfUFJJTlQoIlNldFR4U3RhcnRUcmVzaFxuIik7CisgICAgICAg IFJlZ1dpbmRvdzUgKnc1ID0gKFJlZ1dpbmRvdzUqKSAmcy0+bVdpbmRvd3NbNV07CisgICAgICAg IHc1LT5UeFN0YXJ0VGhyZXNoID0gKGNyICYgMHg3ZmYpIDw8IDI7CisgICAgICAgIGJyZWFrOwor ICAgIH0KKyAgICBjYXNlIENtZFNldEhhc2hGaWx0ZXJCaXQ6CisgICAgeworICAgICAgICAvKiog VE9ETzogaW1wbGVtZW50ICovCisgICAgICAgIC8vIGNoYXIgdmFsdWUgPSAoY3IgJiAweDQwMCkg PyAxIDogMDsKKyAgICAgICAgLy8gdWludDMyX3Qgd2hpY2ggPSBjciAmIDB4M2Y7CisgICAgICAg IERFQlVHX1BSSU5UKCJTZXRIYXNoRmlsdGVyQml0XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg fQorICAgIGNhc2UgQ21kU2V0UnhFYXJseVRocmVzaDoKKyAgICB7CisgICAgICAgIERFQlVHX1BS SU5UKCJTZXRUeFN0YXJ0VHJlc2hcbiIpOworICAgICAgICBSZWdXaW5kb3c1ICp3NSA9IChSZWdX aW5kb3c1KikgJnMtPm1XaW5kb3dzWzVdOworICAgICAgICB3NS0+UnhFYXJseVRocmVzaCA9IChj ciAmIDB4N2ZmKSA8PCAyOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDbWRSeEVu YWJsZToKKyAgICB7CisgICAgICAgIERFQlVHX1BSSU5UKCJSeEVuYWJsZVxuIik7CisgICAgICAg IHMtPm1SeEVuYWJsZWQgPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDbWRS eERpc2FibGU6CisgICAgeworICAgICAgICBERUJVR19QUklOVCgiUnhEaXNhYmxlXG4iKTsKKyAg ICAgICAgcy0+bVJ4RW5hYmxlZCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl IENtZFR4RW5hYmxlOgorICAgIHsKKyAgICAgICAgREVCVUdfUFJJTlQoIlR4RW5hYmxlXG4iKTsK KyAgICAgICAgcy0+bVR4RW5hYmxlZCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj YXNlIENtZFR4RGlzYWJsZToKKyAgICB7CisgICAgICAgIERFQlVHX1BSSU5UKCJUeERpc2FibGVc biIpOworICAgICAgICBzLT5tVHhFbmFibGVkID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQor ICAgIGNhc2UgQ21kQWNrSW50cjoKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgIDB4MSAgICAg aW50ZXJydXB0TGF0Y2hBY2sKKyAgICAgICAgMHgyICAgICBsaW5rRXZlbnRBY2sKKyAgICAgICAg MHgyMCAgICByeEVhcmx5QWNrCisgICAgICAgIDB4NDAgICAgaW50UmVxdWVzdGVkQWNrCisgICAg ICAgIDB4MjAwICAgZG5Db21wbGV0ZUFjaworICAgICAgICAweDQwMCAgIHVwQ29tcGxldGVBY2sK KworICAgICAgICAweDUKKyAgICAgICAgKi8KKyAgICAgICAgREVCVUdfUFJJTlQoIkFja0ludHJc biIpOworICAgICAgICAvLyBhY2svY2xlYXIgY29ycmVzcG9uZGluZyBiaXRzIGluIEludFN0YXR1 cworICAgICAgICB1aW50MzJfdCBJU2FjayA9IDA7CisgICAgICAgIGlmIChjciAmIDB4MDEpIElT YWNrIHw9IElTX2ludGVycnVwdExhdGNoOworICAgICAgICBpZiAoY3IgJiAweDAyKSBJU2FjayB8 PSBJU19saW5rRXZlbnQ7CisgICAgICAgIGlmIChjciAmIDB4MjApIElTYWNrIHw9IElTX3J4RWFy bHk7CisgICAgICAgIGlmIChjciAmIDB4NDApIElTYWNrIHw9IElTX2ludFJlcXVlc3RlZDsKKyAg ICAgICAgaWYgKGNyICYgMHgyMDApIElTYWNrIHw9IElTX2RuQ29tcGxldGU7CisgICAgICAgIGlm IChjciAmIDB4NDAwKSBJU2FjayB8PSBJU191cENvbXBsZXRlOworICAgICAgICBhY2tub3dsZWRn ZShJU2Fjaywgb3BhcXVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8qICBjYXNlIENt ZFJlcUludHI6IHsKKyAgICAgICAgICAgIFJlZ1dpbmRvdzUgJnc1ID0gKFJlZ1dpbmRvdzUmKW1X aW5kb3dzWzVdOworICAgICAgICAgICAgLy8gc2V0IGludFJlcXVlc3RlZCBpbiBJbnRTdGF0dXMK KyAgICAgICAgICAgIG1JbnRTdGF0dXMgfD0gSVNfaW50UmVxdWVzdGVkOworCisgICAgICAgICAg ICAvLyBGSVhNRTogZ2VuZXJhdGUgSW50ZXJydXB0IChpZiBlbmFibGVkKQorICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIH0qLworCisgICAgLyoKKyAgICAgICAgY2FzZSBDbWRUeERvbmU6Cisg ICAgICAgIGNhc2UgQ21kUnhEaXNjYXJkOgorICAgICAgICBjYXNlIENtZFNldFR4VGhyZXNob2xk OgorICAgICovCisgICAgZGVmYXVsdDoKKyAgICAgICAgREVCVUdfUFJJTlQoImNvbW1hbmQgbm90 IGltcGxlbWVudGVkXG4iKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHR4RFBEMCh2b2lkICpv cGFxdWUsIERQRDAgKmRwZCkKK3sKKyAgICBBM0M5MFhTdGF0ZSAqcyA9IG9wYXF1ZTsKKworICAg IERFQlVHX1BSSU5UKCJ0eERQRDBcbiIpOworCisgICAgLy8gRklYTUU6IGNyZWF0ZUhvc3RTdHJ1 Y3QoKQorICAgIHVpbnQzMl90IGZzaCA9IGRwZC0+RnJhbWVTdGFydEhlYWRlcjsKKyAgICBERUJV R19QUklOVF9GT1JNQVQoKCJmc2ggPSAlMDh4XG4iLCBmc2gpKTsKKyAgICBpZiAoZnNoICYgRlNI X2RwZEVtcHR5KQorICAgIHsKKyAgICAgICAgLy8gbW9kaWZ5IEZyYW1lU3RhcnRIZWFkZXIgaW4g RFBEICghKQorICAgICAgICBkcGQtPkZyYW1lU3RhcnRIZWFkZXIgfD0gRlNIX2RuQ29tcGxldGU7 CisgICAgICAgIC8vIHNldCBuZXh0IERuTGlzdFB0cgorICAgICAgICBzLT5tUmVnaXN0ZXJzLkRu TGlzdFB0ciA9IGRwZC0+RG5OZXh0UHRyOworICAgICAgICBERUJVR19QUklOVCgiZHBkIGVtcHR5 XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBEUERGcmFnRGVzYyAqZnJhZ3MgPSAo RFBERnJhZ0Rlc2MqKShkcGQrMSk7CisgICAgdWludDhfdCBwYnVmW01BWF9QQUNLRVRfU0laRV07 CisgICAgdWludDhfdCAqcCA9IHBidWY7CisKKyAgICAvLyBzb21lIHBhY2tldCBkcml2ZXJzIG5l ZWQgcGFkZGluZworICAgIC8vIHVpbnQgZnJhbWVQcmVmaXggPSBtRXRoVHVuLT5nZXRXcml0ZUZy YW1lUHJlZml4KCk7CisgICAgLy8gbWVtc2V0KHAsIDAsIGZyYW1lUHJlZml4KTsKKyAgICAvLyBw ICs9IGZyYW1lUHJlZml4OworCisgICAgREVCVUdfUFJJTlRfRk9STUFUKCgiRFBEOiBOZXh0UHRy ID0gJXgsIEZTSCA9ICV4LCBGcmFnQWRkciA9ICV4LCBGcmFnTGVuID0gJXhcbiIsCisgICAgICAg ICAgICAgICAgICAgICAgICBkcGQtPkRuTmV4dFB0ciwgZHBkLT5GcmFtZVN0YXJ0SGVhZGVyLCBm cmFncy0+RG5GcmFnQWRkciwgZnJhZ3MtPkRuRnJhZ0xlbikpOworCisgICAgLy8KKyAgICB1aW50 MzJfdCBpID0gMDsKKyAgICAvLyBhc3NlbWJsZSBwYWNrZXQgZnJvbSBmcmFnbWVudHMgKHVwIHRv IE1BWF9EUERfRlJBR1MgZnJhZ21lbnRzKQorICAgIHdoaWxlIChpIDwgTUFYX0RQRF9GUkFHUykK KyAgICB7CisgICAgICAgIHVpbnQzMl90IGFkZHIgPSBmcmFncy0+RG5GcmFnQWRkcjsKKyAgICAg ICAgdWludDMyX3QgbGVuID0gZnJhZ3MtPkRuRnJhZ0xlbiAmIDB4MWZmZjsKKyAgICAgICAgaWYg KHAtcGJ1ZitsZW4gPj0gc2l6ZW9mIHBidWYpCisgICAgICAgIHsKKyAgICAgICAgICAgIERFQlVH X1BSSU5UKCJwYWNrZXQgdG9vIGJpZyFcbiIpOworICAgICAgICAgICAgLy8gU0lOR0xFU1RFUCgi Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgREVCVUdfUFJJTlQo ImRtYV9yZWFkXG4iKTsKKworICAgICAgICBpZiAobGVuID09IDAgfHwgYWRkciA9PSAwKQorICAg ICAgICB7CisgICAgICAgICAgICBERUJVR19QUklOVCgiTm8gZGF0YSEgQmFpbCFcbiIpOworICAg ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY3B1X3BoeXNpY2FsX21lbW9y eV9yZWFkKGFkZHIsIHAsIGxlbik7CisKKyAgICAgICAgREVCVUdfUFJJTlRfRk9STUFUKCgiIC0g RG5BZGRyID0gJXgsIERuRnJhZ0xlbiA9ICV4XG4iLCBmcmFncy0+RG5GcmFnQWRkciwgZnJhZ3Mt PkRuRnJhZ0xlbikpOworCisgICAgICAgIHAgKz0gbGVuOworICAgICAgICAvLyBsYXN0IGZyYWdt ZW50ID8KKyAgICAgICAgaWYgKGZyYWdzLT5EbkZyYWdMZW4gJiAweDgwMDAwMDAwKSBicmVhazsK KyAgICAgICAgZnJhZ3MrKzsKKyAgICAgICAgaSsrOworICAgIH0KKyAgICB1aW50MzJfdCBwc2l6 ZSA9IHAtcGJ1ZjsKKyAgICBpZiAoIShmc2ggJiBGU0hfcm5kdXBEZWZlYXQpKQorICAgIHsKKyAg ICAgICAgLy8gcm91bmQgcGFja2V0IGxlbmd0aAorICAgICAgICBzd2l0Y2ggKGZzaCAmIEZTSF9y bmR1cEJuZHJ5KQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgeworICAgICAg ICAgICAgLy8gNCBieXRlcworICAgICAgICAgICAgdWludDMyX3QgZ2FwID0gKChwc2l6ZSszKSAm IH4zKSAtcHNpemU7CisgICAgICAgICAgICBtZW1zZXQocGJ1Zitwc2l6ZSwgMCwgZ2FwKTsKKyAg ICAgICAgICAgIHBzaXplICs9IGdhcDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg ICAgICAgIGNhc2UgMjoKKyAgICAgICAgeworICAgICAgICAgICAgLy8gMiBieXRlcworICAgICAg ICAgICAgdWludDMyX3QgZ2FwID0gKChwc2l6ZSsxKSAmIH4xKSAtcHNpemU7CisgICAgICAgICAg ICBtZW1zZXQocGJ1Zitwc2l6ZSwgMCwgZ2FwKTsKKyAgICAgICAgICAgIHBzaXplICs9IGdhcDsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLy9G U0hfcmVBcm1EaXNhYmxlID0gICAgMTw8MjMsCisgICAgLy9GU0hfbGFzdEthcCA9ICAgICAgICAg MTw8MjQsCisgICAgLy9GU0hfYWRkSXBDaGVja3N1bSA9ICAgMTw8MjUsCisgICAgLy9GU0hfYWRk VGNwQ2hlY2tzdW0gPSAgMTw8MjYsCisgICAgLy9GU0hfYWRkVWRwQ2hlY2tzdW0gPSAgMTw8Mjcs CisgICAgaWYgKGZzaCAmICgweDFmIDw8IDIzKSkKKyAgICB7CisgICAgICAgIERFQlVHX1BSSU5U KCJ1bnN1cHBvcnRlZCBmbGFncyBpbiBmc2hcbiIpOworICAgIH0KKworICAgIGlmIChwc2l6ZTw2 MCkKKyAgICB7CisgICAgICAgIC8vIHBhZCBwYWNrZXQgdG8gYXQgbGVhc3QgNjAgYnl0ZXMgKCs0 IGJ5dGVzIGNyYyA9IDY0IGJ5dGVzKQorICAgICAgICBtZW1zZXQocGJ1Zitwc2l6ZSwgMCwgKDYw LXBzaXplKSk7CisgICAgICAgIHBzaXplID0gNjA7CisgICAgfQorICAgIC8vIGFwcGVuZCBjcmMK KyAgICBpZiAoIShmc2ggJiBGU0hfY3JjQXBwZW5kRGlzYWJsZSkpCisgICAgeworI2lmZGVmIEEz QzkweF9DQUxDVUxBVEVfVFhDUkMKKyAgICAgICAgdWludDMyX3QgY3JjID0gY3JjMzIoMCwgcGJ1 ZiwgcHNpemUpOworI2Vsc2UKKyAgICAgICAgdWludDMyX3QgY3JjID0gMDsKKyNlbmRpZgorICAg ICAgICBwYnVmW3BzaXplKzBdID0gY3JjOworICAgICAgICBwYnVmW3BzaXplKzFdID0gY3JjPj44 OworICAgICAgICBwYnVmW3BzaXplKzJdID0gY3JjPj4xNjsKKyAgICAgICAgcGJ1Zltwc2l6ZSsz XSA9IGNyYz4+MjQ7CisgICAgICAgIHBzaXplICs9IDQ7CisgICAgICAgIERFQlVHX1BSSU5UKCJj cmMgY29tcGxldGVcbiIpOworICAgIH0KKworICAgIEFVWF9ERUJVR19QUklOVCgiM0M5MFg6IFBh Y2tldCBzZW50XG4iKTsKKworICAgIHFlbXVfc2VuZF9wYWNrZXQocy0+dmMsIHBidWYsIHBzaXpl KTsKKworICAgIC8vIGluZGljYXRpb25zCisgICAgcy0+bVJlZ2lzdGVycy5EbWFDdHJsIHw9IERD X2RuQ29tcGxldGU7CisgICAgdWludDhfdCB0eFN0YXR1cyA9IDA7CisgICAgdWludDMyX3QgaW5k cyA9IDA7CisgICAgaWYgKGZzaCAmIEZTSF9kbkluZGljYXRlKSBpbmRzIHw9IElTX2RuQ29tcGxl dGU7CisgICAgaWYgKGZzaCAmIEZTSF90eEluZGljYXRlKQorICAgIHsKKyAgICAgICAgaW5kcyB8 PSBJU190eENvbXBsZXRlOworICAgICAgICB0eFN0YXR1cyB8PSAoMSA8PCA2KTsKKyAgICB9CisK KyAgICAvLyB0cmFuc21pdCBjb21wbGV0ZQorICAgIHR4U3RhdHVzIHw9ICgxIDw8IDcpOworCisg ICAgaW5kaWNhdGUoaW5kcywgb3BhcXVlKTsKKyAgICAvLyBtb2RpZnkgRnJhbWVTdGFydEhlYWRl ciBpbiBEUEQgKCEpCisgICAgZHBkLT5GcmFtZVN0YXJ0SGVhZGVyIHw9IEZTSF9kbkNvbXBsZXRl OworICAgIC8vIHNldCBuZXh0IERuTGlzdFB0ciwgVHhQa3RJZAorICAgIHMtPm1SZWdpc3RlcnMu RG5MaXN0UHRyID0gZHBkLT5Ebk5leHRQdHI7CisgICAgdWludDMyX3QgcGt0SWQgPSAoZnNoICYg RlNIX3BrdElkKSA+PiAyOworICAgIHMtPm1SZWdpc3RlcnMuVHhQa3RJZCA9IHBrdElkOworICAg IHMtPm1SZWdpc3RlcnMuVHhTdGF0dXMgPSB0eFN0YXR1czsKKyAgICAvLyBtYXliZSBnZW5lcmF0 ZSBpbnRlcnJ1cHQKKyAgICBtYXliZVJhaXNlSW50cihvcGFxdWUpOworfQorCitzdGF0aWMgY2hh ciBwYXNzZXNSeEZpbHRlcih1aW50OF90ICpwYnVmLCB1aW50MzJfdCBwc2l6ZSwgdm9pZCAqb3Bh cXVlKQoreworICAgIEEzQzkwWFN0YXRlICpzID0gb3BhcXVlOworCisgICAgRXRoRnJhbWVJSSAq ZiA9IChFdGhGcmFtZUlJKikgcGJ1ZjsKKyAgICBSZWdXaW5kb3c1ICp3NSA9IChSZWdXaW5kb3c1 KikgJnMtPm1XaW5kb3dzWzVdOworICAgIGlmICh3NS0+UnhGaWx0ZXIgJiBSWEZJTFRfcmVjZWl2 ZUFsbEZyYW1lcykgcmV0dXJuIDE7CisgICAgLy8gRklYTUU6IE11bHRpY2FzdCBoYXNoaW5nIG5v dCBpbXBsZW1lbnRlZAorICAgIGlmICh3NS0+UnhGaWx0ZXIgJiBSWEZJTFRfcmVjZWl2ZU11bHRp Y2FzdEhhc2gpIHJldHVybiAxOworICAgIC8vIEZJWE1FOiBNdWx0aWNhc3Rpbmcgbm90IHVuZGVy c3Rvb2QKKyAgICBpZiAodzUtPlJ4RmlsdGVyICYgUlhGSUxUX3JlY2VpdmVNdWx0aWNhc3QpIHJl dHVybiAxOworICAgIGlmICh3NS0+UnhGaWx0ZXIgJiBSWEZJTFRfcmVjZWl2ZUJyb2FkY2FzdCkK KyAgICB7CisgICAgICAgIHVpbnQ4X3QgYnJvYWRjYXN0TUFDWzZdID0gezB4ZmYsMHhmZiwweGZm LDB4ZmYsMHhmZiwweGZmfTsKKyAgICAgICAgaWYgKGNvbXBhcmVNQUNzKGYtPmRlc3RNQUMsIGJy b2FkY2FzdE1BQykgPT0gMCkgcmV0dXJuIDE7CisgICAgfQorICAgIGlmICh3NS0+UnhGaWx0ZXIg JiBSWEZJTFRfcmVjZWl2ZUluZGl2aWR1YWwpCisgICAgeworICAgICAgICB1aW50OF90IGRlc3RN QUNbNl07CisgICAgICAgIHVpbnQ4X3QgdGhpc01BQ1s2XTsKKyAgICAgICAgUmVnV2luZG93MiAq dzIgPSAoUmVnV2luZG93MiopICZzLT5tV2luZG93c1syXTsKKyAgICAgICAgdWludDMyX3QgaTsK KyAgICAgICAgZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg ZGVzdE1BQ1tpXSA9IGYtPmRlc3RNQUNbaV0gJiB+dzItPlN0YXRpb25NYXNrW2ldOworICAgICAg ICAgICAgdGhpc01BQ1tpXSA9IHcyLT5TdGF0aW9uQWRkcmVzc1tpXSAmIH53Mi0+U3RhdGlvbk1h c2tbaV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChjb21wYXJlTUFDcyhkZXN0TUFDLCB0 aGlzTUFDKSA9PSAwKSA/IDEgOiAwOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgcnhVUEQodm9pZCAqb3BhcXVlLCBVUEQgKnVwZCkKK3sKKyAgICBBM0M5MFhTdGF0ZSAq cyA9IG9wYXF1ZTsKKworICAgIC8vIEZJWE1FOiB0aHJlYWRpbmcgdG8gY2FyZSBhYm91dCAobVJl Z2lzdGVycy5EbWFDdHJsICYgRENfdXBBbHRTZXFEaXNhYmxlKQorICAgIERFQlVHX1BSSU5UKCJy eFVQRCgpXG4iKTsKKworICAgIGNoYXIgZXJyb3IgPSAwOworCisgICAgaWYgKHVwZC0+VXBQa3RT dGF0dXMgJiBVUFNfdXBDb21wbGV0ZSkKKyAgICB7CisgICAgICAgIC8vIElPXzNDOTBYX1dBUk4o IlVQRCBhbHJlYWR5IHVwQ29tcGxldGUhXG4iKTsKKworICAgICAgICAvLyB0aGUgdG9wIG9mIHRo ZSByaW5nIGJ1ZmZlciBpcyBhbHJlYWR5IHVzZWQsCisgICAgICAgIC8vIHN0YWxsIHRoZSB1cGxv YWQgYW5kIHRocm93IGF3YXkgdGhlIHBhY2tldC4KKyAgICAgICAgLy8gdGhlIHJpbmcgYnVmZmVy cyBhcmUgZmlsbGVkLgorCisgICAgICAgIHMtPm1VcFN0YWxsZWQgPSAxOworICAgICAgICByZXR1 cm47CisgICAgfQorCisgICAgdWludDMyX3QgdXBQa3RTdGF0dXMgPSAwOworCisgICAgaWYgKHMt Pm1SZWdpc3RlcnMuVXBQb2xsKQorICAgIHsKKyAgICAgICAgREVCVUdfUFJJTlQoIlVwUG9sbCB1 bnN1cHBvcnRlZFxuIik7CisgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOworICAgICAgICByZXR1 cm47CisgICAgfQorICAgIC8vIEZJWE1FOgorLy8gIGlmIChtUmVnaXN0ZXJzLkRtYUN0cmwgJiBE Q191cFJ4RWFybHlFbmFibGUpCisvLyAgICAgIElPXzNDOTBYX0VSUigiRENfdXBSeEVhcmx5RW5h YmxlIHVuc3VwcG9ydGVkXG4iKTsKKworICAgIGlmICgocy0+bVJ4UGFja2V0U2l6ZSA+IDB4MWZm ZikgfHwgKHMtPm1SeFBhY2tldFNpemUgPiBzaXplb2Ygcy0+bVJ4UGFja2V0KSkKKyAgICB7Cisg ICAgICAgIERFQlVHX1BSSU5UKCJvdmVyc2l6ZWQgZnJhbWVcbiIpOworICAgICAgICB1cGQtPlVw UGt0U3RhdHVzID0gVVBTX3VwRXJyb3IgfCBVUFNfb3ZlcnNpemVkRnJhbWU7CisgICAgICAgIGVy cm9yID0gMTsKKyAgICB9CisKKyAgICBpZiAocy0+bVJ4UGFja2V0U2l6ZSA8IDYwKQorICAgIHsK KyAgICAgICAgLy8gcGFkIHBhY2tldCB0byBhdCBsZWFzdCA2MCBieXRlcyAoKzQgYnl0ZXMgY3Jj ID0gNjQgYnl0ZXMpCisgICAgICAgIG1lbXNldChzLT5tUnhQYWNrZXQrcy0+bVJ4UGFja2V0U2l6 ZSwgMCwgKDYwLXMtPm1SeFBhY2tldFNpemUpKTsKKyAgICAgICAgcy0+bVJ4UGFja2V0U2l6ZSA9 IDYwOworICAgIH0KKworICAgIC8qICBSZWdXaW5kb3c1ICZ3NSA9IChSZWdXaW5kb3c1JiltV2lu ZG93c1s1XTsKKyAgICAgICAgaWYgKChtUnhQYWNrZXRTaXplIDwgNjApICYmICh3NS5SeEVhcmx5 VGhyZXNoID49IDYwKSkgeworICAgICAgICAgICAgSU9fM0M5MFhfVFJBQ0UoInJ1bnQgZnJhbWVc biIpOworICAgICAgICAgICAgdXBQa3RTdGF0dXMgfD0gVVBTX3VwRXJyb3IgfCBVUFNfcnVudEZy YW1lOworICAgICAgICAgICAgdXBkLT5VcFBrdFN0YXR1cyA9IHVwUGt0U3RhdHVzOworICAgICAg ICAgICAgZXJyb3IgPSB0cnVlOworICAgICAgICB9Ki8KKyAgICBpZiAodXBkLT5VcFBrdFN0YXR1 cyAmIFVQRF9pbXBsaWVkQnVmZmVyRW5hYmxlKQorICAgIHsKKyAgICAgICAgREVCVUdfUFJJTlQo IlVQRF9pbXBsaWVkQnVmZmVyRW5hYmxlIHVuc3VwcG9ydGVkXG4iKTsKKyAgICAgICAgLy8gU0lO R0xFU1RFUCgiIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgVVBERnJhZ0Rlc2MgKmZy YWdzID0gKFVQREZyYWdEZXNjKikodXBkKzEpOworCisgICAgdWludDhfdCAqcCA9IHMtPm1SeFBh Y2tldDsKKyAgICB1aW50MzJfdCBpID0gMDsKKyAgICB3aGlsZSAoIWVycm9yICYmIGkgPCBNQVhf VVBEX0ZSQUdTKSAgICAgLy8gKHVwIHRvIE1BWF9VUERfRlJBR1MgZnJhZ21lbnRzKQorICAgIHsK KyAgICAgICAgdWludDMyX3QgYWRkciA9IGZyYWdzLT5VcEZyYWdBZGRyOworICAgICAgICB1aW50 MzJfdCBsZW4gPSBmcmFncy0+VXBGcmFnTGVuICYgMHgxZmZmOworICAgICAgICBpZiAocC1zLT5t UnhQYWNrZXQrbGVuID4gc2l6ZW9mIHMtPm1SeFBhY2tldCkKKyAgICAgICAgeworICAgICAgICAg ICAgdXBQa3RTdGF0dXMgfD0gVVBTX3VwRXJyb3IgfCBVUFNfdXBPdmVyZmxvdzsKKyAgICAgICAg ICAgIHVwZC0+VXBQa3RTdGF0dXMgPSB1cFBrdFN0YXR1czsKKyAgICAgICAgICAgIERFQlVHX1BS SU5UKCJVUEQgb3ZlcmZsb3chXG4iKTsKKyAgICAgICAgICAgIC8vIFNJTkdMRVNURVAoIiIpOwor ICAgICAgICAgICAgZXJyb3IgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor ICAgICAgICBjcHVfcGh5c2ljYWxfbWVtb3J5X3dyaXRlKGFkZHIsIHAsIGxlbik7CisKKyAgICAg ICAgcCArPSBsZW47CisgICAgICAgIC8vIGxhc3QgZnJhZ21lbnQgPworICAgICAgICBpZiAoZnJh Z3MtPlVwRnJhZ0xlbiAmIDB4ODAwMDAwMDApIGJyZWFrOworICAgICAgICBmcmFncysrOworICAg ICAgICBpKys7CisgICAgfQorCisgICAgaWYgKCFlcnJvcikKKyAgICB7CisgICAgICAgIERFQlVH X1BSSU5UKCJzdWNjZXNzZnVsbHkgdXBsb2FkZWQgcGFja2V0XG4iKTsKKyAgICB9CisgICAgdXBQ a3RTdGF0dXMgfD0gcy0+bVJ4UGFja2V0U2l6ZSAmIDB4MWZmZjsKKyAgICB1cFBrdFN0YXR1cyB8 PSBVUFNfdXBDb21wbGV0ZTsKKyAgICB1cGQtPlVwUGt0U3RhdHVzID0gdXBQa3RTdGF0dXM7CisK KyAgICBzLT5tUnhQYWNrZXRTaXplID0gMDsKKworICAgIC8qIFRoZSBjbGllbnQgT1MgaXMgd2Fp dGluZyBmb3IgYSBjaGFuZ2UgaW4gc3RhdHVzLCBidXQgd29uJ3Qgc2VlIGl0CisgICAgICogdW50 aWwgd2UgZG1hIG91ciBsb2NhbCBjb3B5IHVwZC0+VXBQa3RTdGF0dXMgYmFjayB0byB0aGUgY2xp ZW50IGFkZHJlc3Mgc3BhY2UKKyAgICAgKi8KKyAgICBjcHVfcGh5c2ljYWxfbWVtb3J5X3dyaXRl KHMtPm1SZWdpc3RlcnMuVXBMaXN0UHRyICsgNCwgKGNvbnN0IHVpbnQ4X3QqKSAmKHVwZC0+VXBQ a3RTdGF0dXMpLCBzaXplb2YodXBkLT5VcFBrdFN0YXR1cykpOworCisgICAgcy0+bVJlZ2lzdGVy cy5VcExpc3RQdHIgPSB1cGQtPlVwTmV4dFB0cjsKKworICAgIC8vIEluZGljYXRpb25zCisgICAg cy0+bVJlZ2lzdGVycy5EbWFDdHJsIHw9IERDX3VwQ29tcGxldGU7CisgICAgaW5kaWNhdGUoSVNf dXBDb21wbGV0ZSwgb3BhcXVlKTsKKyAgICBtYXliZVJhaXNlSW50cihvcGFxdWUpOworfQorCitz dGF0aWMgdm9pZCBpbmRpY2F0ZSh1aW50MzJfdCBpbmRpY2F0aW9ucywgdm9pZCAqb3BhcXVlKQor eworICAgIEEzQzkwWFN0YXRlICpzID0gb3BhcXVlOworCisgICAgUmVnV2luZG93NSAqdzUgPSAo UmVnV2luZG93NSopICZzLT5tV2luZG93c1s1XTsKKyAgICBpZiAoKHc1LT5JbmRpY2F0aW9uRW5h YmxlICYgaW5kaWNhdGlvbnMpICE9IGluZGljYXRpb25zKQorICAgIHsKKyAgICAgICAgREVCVUdf UFJJTlQoInNvbWUgbWFza2VkXG4iKTsKKyAgICB9CisgICAgcy0+bUludFN0YXR1cyB8PSB3NS0+ SW5kaWNhdGlvbkVuYWJsZSAmIGluZGljYXRpb25zOworICAgIGlmIChpbmRpY2F0aW9ucyAmIElT X3VwQ29tcGxldGUpCisgICAgeworICAgICAgICBzLT5tUmVnaXN0ZXJzLkRtYUN0cmwgfD0gRENf dXBDb21wbGV0ZTsKKyAgICB9CisgICAgaWYgKGluZGljYXRpb25zICYgSVNfZG5Db21wbGV0ZSkK KyAgICB7CisgICAgICAgIHMtPm1SZWdpc3RlcnMuRG1hQ3RybCB8PSBEQ19kbkNvbXBsZXRlOwor ICAgIH0KK30KKworc3RhdGljIHZvaWQgYWNrbm93bGVkZ2UodWludDMyX3QgaW5kaWNhdGlvbnMs IHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBBM0M5MFhTdGF0ZSAqcyA9IG9wYXF1ZTsKKworICAgIERF QlVHX1BSSU5UX0ZPUk1BVCgoImludFN0YXR1cyB3YXMgJXggW2luZGljYXRpb25zPSV4XVxuIiwg cy0+bUludFN0YXR1cywgaW5kaWNhdGlvbnMpKTsKKyAgICBzLT5tSW50U3RhdHVzICY9IH5pbmRp Y2F0aW9uczsKKyAgICBERUJVR19QUklOVF9GT1JNQVQoKCJpbnRTdGF0dXMgaXMgbm93ICV4XG4i LCBzLT5tSW50U3RhdHVzKSk7CisgICAgaWYgKGluZGljYXRpb25zICYgSVNfdXBDb21wbGV0ZSkK KyAgICB7CisgICAgICAgIHMtPm1SZWdpc3RlcnMuRG1hQ3RybCAmPSB+RENfdXBDb21wbGV0ZTsK KyAgICB9CisgICAgaWYgKGluZGljYXRpb25zICYgSVNfZG5Db21wbGV0ZSkKKyAgICB7CisgICAg ICAgIHMtPm1SZWdpc3RlcnMuRG1hQ3RybCAmPSB+RENfZG5Db21wbGV0ZTsKKyAgICB9CisKKyAg ICAvLyBsb3dlciB0aGUgaXJxIGxpbmUgbm93IHRoYXQgdGhlIElSUSBpcyBhY2snZAorICAgIHFl bXVfc2V0X2lycShzLT5wY2lfZGV2LT5pcnFbMF0sIDApOworfQorCitzdGF0aWMgdm9pZCBtYXli ZVJhaXNlSW50cih2b2lkICpvcGFxdWUpCit7CisgICAgQTNDOTBYU3RhdGUgKnMgPSBvcGFxdWU7 CisgICAgUmVnV2luZG93NSAqdzUgPSAoUmVnV2luZG93NSopICZzLT5tV2luZG93c1s1XTsKKwor ICAgIERFQlVHX1BSSU5UKCJtYXliZVJhaXNlSW50clxuIik7CisgICAgREVCVUdfUFJJTlRfRk9S TUFUKCgiSW5kRW5hYmxlID0gJXgsIEludEVuYWJsZSA9ICV4LCBJbnRTdGF0dXMgPSAleFxuIiwg dzUtPkluZGljYXRpb25FbmFibGUsIHc1LT5JbnRlcnJ1cHRFbmFibGUsIHMtPm1JbnRTdGF0dXMp KTsKKworICAgIGlmICh3NS0+SW5kaWNhdGlvbkVuYWJsZSAmIHc1LT5JbnRlcnJ1cHRFbmFibGUg JiBzLT5tSW50U3RhdHVzKQorICAgIHsKKyAgICAgICAgcy0+bUludFN0YXR1cyB8PSBJU19pbnRl cnJ1cHRMYXRjaDsKKworICAgICAgICBERUJVR19QUklOVCgiR2VuZXJhdGluZyBpbnRlcnJ1cHQh XG4iKTsKKworICAgICAgICAvLyByYWlzZSB0aGUgSVJRIGxpbmUKKyAgICAgICAgcWVtdV9zZXRf aXJxKHMtPnBjaV9kZXYtPmlycVswXSwgMSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg ICAgIC8vIGxvd2VyIHRoZSBJUlEgbGluZQorICAgICAgICBxZW11X3NldF9pcnEocy0+cGNpX2Rl di0+aXJxWzBdLCAwKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrRG5Xb3JrKHZvaWQg Km9wYXF1ZSkKK3sKKyAgICBBM0M5MFhTdGF0ZSAqcyA9IG9wYXF1ZTsKKworICAgIHdoaWxlICgh cy0+bURuU3RhbGxlZCAmJiAocy0+bVJlZ2lzdGVycy5Ebkxpc3RQdHIgIT0gMCkpCisgICAgewor ICAgICAgICB1aW50OF90IGRwZFs1MTJdOworCisgICAgICAgIGNwdV9waHlzaWNhbF9tZW1vcnlf cmVhZChzLT5tUmVnaXN0ZXJzLkRuTGlzdFB0ciwgZHBkLCBzaXplb2YgZHBkKTsKKworICAgICAg ICB1aW50OF90IHR5cGUgPSBkcGRbN10gPj4gNjsKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAg ICAgICB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgY2FzZSAyOgorICAgICAgICB7CisgICAg ICAgICAgICBEUEQwICpwID0gKERQRDAqKSBkcGQ7CisgICAgICAgICAgICBERUJVR19QUklOVCgi R290IGEgdHlwZSAwIERQRCFcbiIpOworICAgICAgICAgICAgdHhEUEQwKG9wYXF1ZSwgcCk7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDE6CisgICAgICAgIHsK KyAgICAgICAgICAgIERFQlVHX1BSSU5UKCJHb3QgYSB0eXBlIDEgRFBEISBOb3QgaW1wbGVtZW50 ZWQhXG4iKTsKKyAgICAgICAgICAgIHMtPm1SZWdpc3RlcnMuRG5MaXN0UHRyID0gMDsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBE RUJVR19QUklOVCgiVW5zdXBwb3J0ZWQgcGFja2V0IHR5cGVcbiIpOworICAgICAgICAgICAgcy0+ bVJlZ2lzdGVycy5Ebkxpc3RQdHIgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH07 CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjaGVja1VwV29yayh2 b2lkICpvcGFxdWUpCit7CisgICAgQTNDOTBYU3RhdGUgKnMgPSBvcGFxdWU7CisKKyAgICBpZiAo cy0+bVJ4RW5hYmxlZCAmJiAhcy0+bVVwU3RhbGxlZCAmJiBzLT5tUnhQYWNrZXRTaXplICYmIChz LT5tUmVnaXN0ZXJzLlVwTGlzdFB0ciAhPSAwKSkKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgdXBk W01BWF9VUERfU0laRV07CisKKyAgICAgICAgY3B1X3BoeXNpY2FsX21lbW9yeV9yZWFkKHMtPm1S ZWdpc3RlcnMuVXBMaXN0UHRyLCB1cGQsIHNpemVvZiB1cGQpOworICAgICAgICBVUEQgKnAgPSAo VVBEKikgdXBkOworICAgICAgICByeFVQRChvcGFxdWUsIHApOworCisgICAgfQorICAgIGVsc2UK KyAgICB7CisgICAgICAgIERFQlVHX1BSSU5UKCJOb3QgdXBsb2FkaW5nXG4iKTsKKyAgICAgICAg REVCVUdfUFJJTlRfRk9STUFUKCgicnhFbmFibGVkID0gJXgsIHVwU3RhbGxlZCA9ICV4LCBSWCBQ YWNrZXQgc2l6ZSA9ICV4LCBVcCBsaXN0IHB0ciA9ICV4XG4iLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHMtPm1SeEVuYWJsZWQsIHMtPm1VcFN0YWxsZWQsIHMtPm1SeFBhY2tldFNpemUs IHMtPm1SZWdpc3RlcnMuVXBMaXN0UHRyKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBoYW5k bGVfcngodm9pZCAqb3BhcXVlLCBjb25zdCB1aW50OF90ICpidWYsIGludCBzaXplKQoreworICAg IEEzQzkwWFN0YXRlICpzID0gb3BhcXVlOworCisgICAgREVCVUdfUFJJTlRfRk9STUFUKCgiM2M5 MHg6IGhhbmRsZV9yeCAoJWQgYnl0ZXMpXG4iLCBzaXplKSk7CisgICAgaWYgKHMtPm1SeFBhY2tl dFNpemUpCisgICAgeworICAgICAgICBERUJVR19QUklOVCgiT2xkIHBhY2tldCBub3QgeWV0IHVw bG9hZGVkIVxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHMtPm1SeFBhY2tl dFNpemUgPSBzaXplOworICAgICAgICBtZW1jcHkocy0+bVJ4UGFja2V0LCBidWYsIHNpemUpOwor ICAgICAgICBpZiAocy0+bVJ4RW5hYmxlZCAmJiAocy0+bVJ4UGFja2V0U2l6ZSA+IHNpemVvZihF dGhGcmFtZUlJKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGljYXRlKElTX3J4Q29tcGxl dGUsIG9wYXF1ZSk7CisgICAgICAgICAgICBtYXliZVJhaXNlSW50cihvcGFxdWUpOworICAgICAg ICAgICAgYWNrbm93bGVkZ2UoSVNfcnhDb21wbGV0ZSwgb3BhcXVlKTsKKyAgICAgICAgICAgIGlm ICghcGFzc2VzUnhGaWx0ZXIocy0+bVJ4UGFja2V0LCBzLT5tUnhQYWNrZXRTaXplLCBvcGFxdWUp KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UX0ZPUk1BVCgoIlJl Y2VpdmVkICVkIGJ5dGVzLCBidXQgdGhleSBkb24ndCBwYXNzIHRoZSBmaWx0ZXIhXG4iLCBzLT5t UnhQYWNrZXRTaXplKSk7CisgICAgICAgICAgICAgICAgcy0+bVJ4UGFja2V0U2l6ZSA9IDA7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgLy8gYW5kIG5vdywgd2UgZG8gc29tZSBleHRyYSBkZWJ1Z2dpbmcgb3V0cHV0Li4uCisj aWZkZWYgREVCVUdfM0M5MFhfQU5BTFlTRV9GUkFNRVMKKyAgICAgICAgICAgICAgICBFdGhGcmFt ZUlJICpldGhGcmFtZSA9IChFdGhGcmFtZUlJKikgcy0+bVJ4UGFja2V0OworICAgICAgICAgICAg ICAgIEFVWF9ERUJVR19QUklOVF9GT1JNQVQoKCJJbmNvbWluZyBwYWNrZXQgaW5mb3JtYXRpb24g WyVkIGJ5dGVzXTpcbiIsIHMtPm1SeFBhY2tldFNpemUpKTsKKyAgICAgICAgICAgICAgICBpZiAo ZXRoRnJhbWUtPnR5cGVbMF0gPT0gOCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgIGlmIChldGhGcmFtZS0+dHlwZVsxXSA9PSAweDA2KQorICAgICAgICAgICAgICAgICAg ICAgICAgQVVYX0RFQlVHX1BSSU5UKCJBUlBcbiIpOworICAgICAgICAgICAgICAgICAgICBlbHNl IGlmIChldGhGcmFtZS0+dHlwZVsxXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXAgKmlwSGVhZGVyID0gKHN0cnVjdCBpcCopIChz LT5tUnhQYWNrZXQgKyBzaXplb2YoRXRoRnJhbWVJSSkpOworICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGlwSGVhZGVyLT5pcF9wID09IDB4MTEpCisgICAgICAgICAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVkcGhkciAqdWRwSGVhZGVyID0g KHN0cnVjdCB1ZHBoZHIqKSAocy0+bVJ4UGFja2V0ICsgc2l6ZW9mKEV0aEZyYW1lSUkpICsgKGlw SGVhZGVyLT5pcF9obCAqIDQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfREVC VUdfUFJJTlRfRk9STUFUKCgiVURQOiBzcmM9JWQgZGVzdD0lZFxuIiwgbnRvaHModWRwSGVhZGVy LT51aF9zcG9ydCksIG50b2hzKHVkcEhlYWRlci0+dWhfZHBvcnQpKSk7CisgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpcEhlYWRlci0+ aXBfcCA9PSAweDA2KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCB0Y3BoZHIgKnRjcEhlYWRlciA9IChzdHJ1Y3QgdGNwaGRyKikg KHMtPm1SeFBhY2tldCArIHNpemVvZihFdGhGcmFtZUlJKSArIChpcEhlYWRlci0+aXBfaGwgKiA0 KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0RFQlVHX1BSSU5UX0ZPUk1BVCgo IlRDUDogc3JjPSVkIGRlc3Q9JWQgIiwgbnRvaHModGNwSGVhZGVyLT50aF9zcG9ydCksIG50b2hz KHRjcEhlYWRlci0+dGhfZHBvcnQpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVY X0RFQlVHX1BSSU5UKCJmbGFncyA9Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHRjcEhlYWRlci0+dGhfZmxhZ3MgJiBUSF9GSU4pCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFVWF9ERUJVR19QUklOVCgiIEZJTiIpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICh0Y3BIZWFkZXItPnRoX2ZsYWdzICYgVEhfU1lOKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBVVhfREVCVUdfUFJJTlQoIiBTWU4iKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAodGNwSGVhZGVyLT50aF9mbGFncyAmIFRIX1JTVCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQVVYX0RFQlVHX1BSSU5UKCIgUlNUIik7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHRjcEhlYWRlci0+dGhfZmxhZ3MgJiBUSF9QVVNIKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfREVCVUdfUFJJTlQoIiBQU0giKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGNwSGVhZGVyLT50aF9mbGFncyAmIFRIX0FD SykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0RFQlVHX1BSSU5UKCIgQUNL Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRjcEhlYWRlci0+dGhfZmxhZ3Mg JiBUSF9VUkcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9ERUJVR19QUklO VCgiIFVSRyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9ERUJVR19QUklOVF9G T1JNQVQoKCIgc2VxPSVkIGFjaz0lZCIsIG50b2hsKHRjcEhlYWRlci0+dGhfc2VxKSwgbnRvaGwo dGNwSGVhZGVyLT50aF9hY2spKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0RF QlVHX1BSSU5UKCJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgICAgICAgQVVYX0RFQlVHX1BSSU5UKCIoY2FuJ3QgaW5zcGVjdClcbiIpOworI2Vu ZGlmCisgICAgICAgICAgICAgICAgREVCVUdfUFJJTlRfRk9STUFUKCgiUmVjZWl2ZWQgJWQgYnl0 ZXMhXG4iLCBzLT5tUnhQYWNrZXRTaXplKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBERUJVR19QUklOVF9GT1JNQVQoKCJP b3BzIC0gUnhFbmFibGVkID0gJXgsIHBhY2tldFNpemUgPSAlZCBbZXRoPSVkXVxuIiwgcy0+bVJ4 RW5hYmxlZCwgcy0+bVJ4UGFja2V0U2l6ZSwgc2l6ZW9mKEV0aEZyYW1lSUkpKSk7CisgICAgICAg ICAgICBzLT5tUnhQYWNrZXRTaXplID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBjaGVja1Vw V29yayhvcGFxdWUpOworfQorCitzdGF0aWMgaW50IGEzYzkweF9jYW5fcmVjZWl2ZSh2b2lkICpv cGFxdWUpCit7CisgICAgQTNDOTBYU3RhdGUgKnMgPSBvcGFxdWU7CisgICAgaWYgKHMtPm1SeEVu YWJsZWQpCisgICAgeworICAgICAgICBpZiAocy0+bVJ4UGFja2V0U2l6ZSkKKyAgICAgICAgewor ICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhbHJlYWR5IGEgcGFja2V0IHRoZXJlLCB0cnkgYW5k IHVwbG9hZCBpdCBhZ2FpbgorICAgICAgICAgICAgREVCVUdfUFJJTlQoIk9sZCBwYWNrZXQgbm90 IHlldCB1cGxvYWRlZCFcbiIpOworICAgICAgICAgICAgY2hlY2tVcFdvcmsob3BhcXVlKTsKKyAg ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg IHJldHVybiAxOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgdm9pZCBhM2M5MHhfcmVjZWl2ZSh2b2lkICpvcGFxdWUsIGNvbnN0IHVpbnQ4X3QgKmJ1Ziwg aW50IHNpemUpCit7CisgICAgQVVYX0RFQlVHX1BSSU5UKCIzQzkwWDogUGFja2V0IHJlY2VpdmVk XG4iKTsKKyAgICBoYW5kbGVfcngob3BhcXVlLCBidWYsIHNpemUpOworfQorCitzdGF0aWMgdWlu dDMyX3QgYTNjOTB4X2lvX3JlYWR4KHZvaWQgKm9wYXF1ZSwgdWludDhfdCBwb3J0LCBpbnQgc2l6 ZSkKK3sKKyAgICBBM0M5MFhTdGF0ZSAqcyA9IG9wYXF1ZTsKKyAgICB1aW50MzJfdCBkYXRhID0g MDsKKworICAgIGlmIChwb3J0ID09IDB4ZSkKKyAgICB7CisgICAgICAgIC8vIEludFN0YXR1cyAo bm8gbWF0dGVyIHdoaWNoIHdpbmRvdykKKyAgICAgICAgaWYgKHNpemUgIT0gMikKKyAgICAgICAg eworICAgICAgICAgICAgREVCVUdfUFJJTlQoInVuYWxpZ25lZCByZWFkIGZyb20gSW50U3RhdHVz XG4iKTsKKyAgICAgICAgfQorICAgICAgICBERUJVR19QUklOVCgicmVhZCBJbnRTdGF0dXNcbiIp OworICAgICAgICByZXR1cm4gcy0+bUludFN0YXR1czsKKyAgICB9CisgICAgZWxzZSBpZiAocG9y dCA+PSAwICYmIChwb3J0K3NpemUgPD0gMHgwZSkpCisgICAgeworICAgICAgICAvLyByZWFkIGZy b20gd2luZG93CisgICAgICAgIHVpbnQzMl90IGN1cndpbmRvdyA9IHMtPm1JbnRTdGF0dXMgPj4g MTM7CisgICAgICAgIHJldHVybiByZWFkUmVnV2luZG93KG9wYXF1ZSwgY3Vyd2luZG93LCBwb3J0 LCBkYXRhLCBzaXplKTsKKyAgICB9CisgICAgZWxzZSBpZiAoKHBvcnQrc2l6ZSA+IDB4MWUpICYm IChwb3J0IDw9IDB4MWYpKQorICAgIHsKKyAgICAgICAgaWYgKChwb3J0ICE9IDB4MWUpIHx8IChz aXplICE9IDIpKQorICAgICAgICB7CisgICAgICAgICAgICBERUJVR19QUklOVCgidW5hbGlnbmVk IHJlYWQgZnJvbSBJbnRTdGF0dXNBdXRvXG4iKTsKKyAgICAgICAgfQorICAgICAgICBSZWdXaW5k b3c1ICp3NSA9IChSZWdXaW5kb3c1KikgJnMtPm1XaW5kb3dzWzVdOworICAgICAgICAvLyBzaWRl LWVmZmVjdHMgb2YgcmVhZGluZyBJbnRTdGF0dXNBdXRvOgorICAgICAgICAvLyAxLmNsZWFyIElu dGVycnVwdEVuYWJsZQorICAgICAgICB3NS0+SW50ZXJydXB0RW5hYmxlID0gMDsKKyAgICAgICAg Ly8gMi5jbGVhciBzb21lIGZsYWdzCisgICAgICAgIGFja25vd2xlZGdlKElTX2RuQ29tcGxldGUg fCBJU191cENvbXBsZXRlCisgICAgICAgICAgICAgICAgICAgIHwgSVNfcnhFYXJseSB8IElTX2lu dFJlcXVlc3RlZAorICAgICAgICAgICAgICAgICAgICB8IElTX2ludGVycnVwdExhdGNoIHwgSVNf bGlua0V2ZW50LCBvcGFxdWUpOworICAgICAgICBERUJVR19QUklOVCgicmVhZCBJbnRTdGF0dXNB dXRvXG4iKTsKKyAgICAgICAgcmV0dXJuIHMtPm1JbnRTdGF0dXM7CisgICAgfQorICAgIGVsc2Ug aWYgKChwb3J0ID49IDB4MTApICYmIChwb3J0K3NpemUgPD0gMHgxMCArIHNpemVvZihSZWdpc3Rl cnMpKSkKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgbCA9IGdSZWdBY2Nlc3NbcG9ydC0weDEwXTsK KyAgICAgICAgaWYgKGwgIT0gc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgREVCVUdfUFJJ TlQoImludmFsaWQvdW5hbGlnbmVkIHJlYWRcbiIpOworICAgICAgICB9CisgICAgICAgIC8vIHJl YWQgZnJvbSAoc3RhbmRhcmQpIHJlZ2lzdGVyCisgICAgICAgIG1lbWNweSgmZGF0YSwgKCh1aW50 OF90Kikmcy0+bVJlZ2lzdGVycykrcG9ydC0weDEwLCBzaXplKTsKKyAgICAgICAgc3dpdGNoIChw b3J0KQorICAgICAgICB7CisgICAgICAgIGNhc2UgMHgxYToKKyAgICAgICAgICAgIERFQlVHX1BS SU5UKCJyZWFkIFRpbWVyXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4 MjA6CisgICAgICAgICAgICBERUJVR19QUklOVCgicmVhZCBEbWFDdHJsXG4iKTsKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MjQ6CisgICAgICAgICAgICBERUJVR19QUklOVCgi cmVhZCBEb3duTGlzdFB0clxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAw eDM4OgorICAgICAgICAgICAgREVCVUdfUFJJTlQoInJlYWQgVXBMaXN0UHRyXG4iKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREVCVUdfUFJJTlQo InJlYWQgcmVnXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJl dHVybiBkYXRhOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYTNjOTB4 X2lvX3dyaXRleCh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgcG9ydCwgdWludDMyX3QgZGF0YSwgaW50 IHNpemUpCit7CisgICAgQTNDOTBYU3RhdGUgKnMgPSBvcGFxdWU7CisKKyAgICBpZiAocG9ydCA9 PSAweGUpCisgICAgeworICAgICAgICAvLyBDb21tYW5kUmVnIChubyBtYXR0ZXIgd2hpY2ggd2lu ZG93KQorICAgICAgICBpZiAoc2l6ZSAhPSAyKQorICAgICAgICB7CisgICAgICAgICAgICBERUJV R19QUklOVCgidW5hbGlnbmVkIHdyaXRlIHRvIENvbW1hbmRSZWdcbiIpOworICAgICAgICB9Cisg ICAgICAgIHNldENSKGRhdGEsIG9wYXF1ZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHBvcnQgPj0g MCAmJiAocG9ydCtzaXplIDw9IDB4MGUpKQorICAgIHsKKyAgICAgICAgLy8gd3JpdGUgdG8gd2lu ZG93CisgICAgICAgIHVpbnQzMl90IGN1cndpbmRvdyA9IHMtPm1JbnRTdGF0dXMgPj4gMTM7Cisg ICAgICAgIHdyaXRlUmVnV2luZG93KG9wYXF1ZSwgY3Vyd2luZG93LCBwb3J0LCBkYXRhLCBzaXpl KTsKKyAgICB9CisgICAgZWxzZSBpZiAocG9ydCA+PSAweDEwICYmIChwb3J0ICsgc2l6ZSA8PSAw eDEwICsgc2l6ZW9mKFJlZ2lzdGVycykpKQorICAgIHsKKyAgICAgICAgdWludDhfdCBsID0gZ1Jl Z0FjY2Vzc1twb3J0LTB4MTBdOworICAgICAgICBpZiAobCAhPSBzaXplKQorICAgICAgICB7Cisg ICAgICAgICAgICBERUJVR19QUklOVCgiaW52YWxpZC91bmFsaWduZWQgd3JpdGUgdG8gcmVnaXN0 ZXJcbiIpOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAocG9ydCkKKyAgICAgICAgeworICAg ICAgICBjYXNlIDB4MjA6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQzMl90IERtYUN0cmxS V01hc2sgPSBEQ191cFJ4RWFybHlFbmFibGUgfCBEQ19jb3VudGVyU3BlZWQgfAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERDX2NvdW50ZG93bk1vZGUgfCBEQ19kZWZlYXRN V0kgfCBEQ19kZWZlYXRNUkwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERDX3VwT3ZlckRpc2NFbmFibGU7CisgICAgICAgICAgICBzLT5tUmVnaXN0ZXJzLkRtYUN0cmwg Jj0gfkRtYUN0cmxSV01hc2s7CisgICAgICAgICAgICBzLT5tUmVnaXN0ZXJzLkRtYUN0cmwgfD0g ZGF0YSAmIERtYUN0cmxSV01hc2s7CisgICAgICAgICAgICBERUJVR19QUklOVCgid3JpdGUgRG1h Q3RybFxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDB4 MjQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghcy0+bVJlZ2lzdGVycy5Ebkxpc3RQdHIp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcy0+bVJlZ2lzdGVycy5Ebkxpc3RQdHIg PSBkYXRhOworICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UKCJ3cml0ZSBEbkxpc3RQdHJcbiIp OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgIERFQlVHX1BSSU5UKCJkaWRuJ3Qgd3JpdGUgRG5MaXN0UHRyIGNhdXNlIGl0J3Mg bm90IDBcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hlY2tEbldvcmsob3BhcXVl KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgMHgzODoKKyAg ICAgICAgeworICAgICAgICAgICAgcy0+bVJlZ2lzdGVycy5VcExpc3RQdHIgPSBkYXRhOworICAg ICAgICAgICAgREVCVUdfUFJJTlQoIndyaXRlIFVwTGlzdFB0clxuIik7CisgICAgICAgICAgICBj aGVja1VwV29yayhvcGFxdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg ICAgY2FzZSAweDJkOgorICAgICAgICAgICAgREVCVUdfUFJJTlQoIkRuUG9sbFxuIik7CisgICAg ICAgICAgICAvLyBTSU5HTEVTVEVQKCIiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj YXNlIDB4MmE6CisgICAgICAgICAgICBtZW1jcHkoKCh1aW50OF90Kikmcy0+bVJlZ2lzdGVycykr cG9ydC0weDEwLCAmZGF0YSwgc2l6ZSk7CisgICAgICAgICAgICBERUJVR19QUklOVCgid3JpdGUg RG5CdXJzdFRocmVzaFxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDJj OgorICAgICAgICAgICAgbWVtY3B5KCgodWludDhfdCopJnMtPm1SZWdpc3RlcnMpK3BvcnQtMHgx MCwgJmRhdGEsIHNpemUpOworICAgICAgICAgICAgREVCVUdfUFJJTlQoIndyaXRlIERuUHJpb3Jp dHlUaHJlc2hcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgyZjoKKyAg ICAgICAgICAgIC8vIHVzZWQgYnkgRGFyd2luIGFzIFR4RnJlZVRocmVzaC4gTm90IGRvY3VtZW50 ZWQgaW4gWzFdLgorICAgICAgICAgICAgbWVtY3B5KCgodWludDhfdCopJnMtPm1SZWdpc3RlcnMp K3BvcnQtMHgxMCwgJmRhdGEsIHNpemUpOworICAgICAgICAgICAgREVCVUdfUFJJTlQoIndyaXRl IFR4RnJlZVRocmVzaFxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDNj OgorICAgICAgICAgICAgbWVtY3B5KCgodWludDhfdCopJnMtPm1SZWdpc3RlcnMpK3BvcnQtMHgx MCwgJmRhdGEsIHNpemUpOworICAgICAgICAgICAgREVCVUdfUFJJTlQoIndyaXRlIFVwUHJpb3Jp dHlUaHJlc2hcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgzZToKKyAg ICAgICAgICAgIG1lbWNweSgoKHVpbnQ4X3QqKSZzLT5tUmVnaXN0ZXJzKStwb3J0LTB4MTAsICZk YXRhLCBzaXplKTsKKyAgICAgICAgICAgIERFQlVHX1BSSU5UKCJ3cml0ZSBVcEJ1cnN0VGhyZXNo XG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MWI6CisgICAgICAgICAg ICBpZiAoc2l6ZSAhPSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERFQlVHX1BS SU5UKCJ3cm9uZyBzaXplIGZvciB3cml0ZSB0byBUeFN0YXR1c1xuIik7CisgICAgICAgICAgICAg ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgREVCVUdfUFJJTlRfRk9STUFU KCgiV3JpdGluZyAleCB0byBUeFN0YXR1c1xuIiwgZGF0YSkpOworICAgICAgICAgICAgcy0+bVJl Z2lzdGVycy5UeFN0YXR1cyA9IGRhdGE7CisKKyAgICAgICAgICAgIC8vIGFja25vd2xlZGdlIHRo ZSByZWxldmFudCBiaXRzCisgICAgICAgICAgICBhY2tub3dsZWRnZShJU190eENvbXBsZXRlLCBv cGFxdWUpOworICAgICAgICAgICAgLy8gIHwgSVNfZG5Db21wbGV0ZSB8IElTX2NtZEluUHJvZ3Jl c3MKKworICAgICAgICAgICAgLy8gTk9URTogIkFuIEkvTyB3cml0ZSBvZiBhbiBhcmJpdHJhcnkg dmFsdWUgdG8gVHhTdGF0dXMgYWR2YW5jZXMgdGhlIHF1ZXVlIHRvIHRoZSBuZXh0IHRyYW5zbWl0 IHN0YXR1cyBieXRlLiIKKyAgICAgICAgICAgIC8vIFdlIGFsc28gbmVlZCB0byBrZWVwIHRoZSBx dWV1ZSBvZiBUWCBTdGF0dXMgYnl0ZXMhCisKKyAgICAgICAgICAgIC8vIG1heWJlUmFpc2VJbnRy KG9wYXF1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg ICAgIERFQlVHX1BSSU5UKCJ3cml0ZSB0byByZWdpc3RlclxuIik7CisgICAgICAgICAgICAvLyBT SU5HTEVTVEVQKCIiKTsKKyAgICAgICAgICAgIC8vIHdyaXRlIHRvIChzdGFuZGFyZCkgcmVnaXN0 ZXIKKyAgICAgICAgICAgIG1lbWNweSgoKHVpbnQ4X3QqKSZzLT5tUmVnaXN0ZXJzKStwb3J0LTB4 MTAsICZkYXRhLCBzaXplKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgYTNj OTB4X2lvX3dyaXRlYih2b2lkICpvcGFxdWUsIHVpbnQ4X3QgYWRkciwgdWludDMyX3QgdmFsKQor eworICAgIGEzYzkweF9pb193cml0ZXgob3BhcXVlLCBhZGRyLCB2YWwsIDEpOworfQorCitzdGF0 aWMgdm9pZCBhM2M5MHhfaW9fd3JpdGV3KHZvaWQgKm9wYXF1ZSwgdWludDhfdCBhZGRyLCB1aW50 MzJfdCB2YWwpCit7CisgICAgYTNjOTB4X2lvX3dyaXRleChvcGFxdWUsIGFkZHIsIHZhbCwgMik7 Cit9CisKK3N0YXRpYyB2b2lkIGEzYzkweF9pb193cml0ZWwodm9pZCAqb3BhcXVlLCB1aW50OF90 IGFkZHIsIHVpbnQzMl90IHZhbCkKK3sKKyAgICBhM2M5MHhfaW9fd3JpdGV4KG9wYXF1ZSwgYWRk ciwgdmFsLCA0KTsKK30KKworc3RhdGljIHVpbnQzMl90IGEzYzkweF9pb19yZWFkYih2b2lkICpv cGFxdWUsIHVpbnQ4X3QgYWRkcikKK3sKKyAgICByZXR1cm4gYTNjOTB4X2lvX3JlYWR4KG9wYXF1 ZSwgYWRkciwgMSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBhM2M5MHhfaW9fcmVhZHcodm9pZCAq b3BhcXVlLCB1aW50OF90IGFkZHIpCit7CisgICAgcmV0dXJuIGEzYzkweF9pb19yZWFkeChvcGFx dWUsIGFkZHIsIDIpOworfQorCitzdGF0aWMgdWludDMyX3QgYTNjOTB4X2lvX3JlYWRsKHZvaWQg Km9wYXF1ZSwgdWludDhfdCBhZGRyKQoreworICAgIHJldHVybiBhM2M5MHhfaW9fcmVhZHgob3Bh cXVlLCBhZGRyLCA0KTsKK30KKworLyogKi8KKworc3RhdGljIHZvaWQgYTNjOTB4X2lvcG9ydF93 cml0ZWIodm9pZCAqb3BhcXVlLCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCB2YWwpCit7CisgICAg YTNjOTB4X2lvX3dyaXRlYihvcGFxdWUsIGFkZHIgJiAweEZGLCB2YWwpOworfQorCitzdGF0aWMg dm9pZCBhM2M5MHhfaW9wb3J0X3dyaXRldyh2b2lkICpvcGFxdWUsIHVpbnQzMl90IGFkZHIsIHVp bnQzMl90IHZhbCkKK3sKKyAgICBhM2M5MHhfaW9fd3JpdGV3KG9wYXF1ZSwgYWRkciAmIDB4RkYs IHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGEzYzkweF9pb3BvcnRfd3JpdGVsKHZvaWQgKm9wYXF1 ZSwgdWludDMyX3QgYWRkciwgdWludDMyX3QgdmFsKQoreworICAgIGEzYzkweF9pb193cml0ZWwo b3BhcXVlLCBhZGRyICYgMHhGRiwgdmFsKTsKK30KKworc3RhdGljIHVpbnQzMl90IGEzYzkweF9p b3BvcnRfcmVhZGIodm9pZCAqb3BhcXVlLCB1aW50MzJfdCBhZGRyKQoreworICAgIHJldHVybiBh M2M5MHhfaW9fcmVhZGIob3BhcXVlLCBhZGRyICYgMHhGRik7Cit9CisKK3N0YXRpYyB1aW50MzJf dCBhM2M5MHhfaW9wb3J0X3JlYWR3KHZvaWQgKm9wYXF1ZSwgdWludDMyX3QgYWRkcikKK3sKKyAg ICByZXR1cm4gYTNjOTB4X2lvX3JlYWR3KG9wYXF1ZSwgYWRkciAmIDB4RkYpOworfQorCitzdGF0 aWMgdWludDMyX3QgYTNjOTB4X2lvcG9ydF9yZWFkbCh2b2lkICpvcGFxdWUsIHVpbnQzMl90IGFk ZHIpCit7CisgICAgcmV0dXJuIGEzYzkweF9pb19yZWFkbChvcGFxdWUsIGFkZHIgJiAweEZGKTsK K30KKworLyogKi8KKworc3RhdGljIHZvaWQgYTNjOTB4X21taW9fd3JpdGViKHZvaWQgKm9wYXF1 ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsIHVpbnQzMl90IHZhbCkKK3sKKyAgICBhM2M5MHhf aW9fd3JpdGViKG9wYXF1ZSwgYWRkciAmIDB4RkYsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGEz YzkweF9tbWlvX3dyaXRldyh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLCB1 aW50MzJfdCB2YWwpCit7CisjaWZkZWYgVEFSR0VUX1dPUkRTX0JJR0VORElBTgorICAgIHZhbCA9 IGJzd2FwMTYodmFsKTsKKyNlbmRpZgorICAgIGEzYzkweF9pb193cml0ZXcob3BhcXVlLCBhZGRy ICYgMHhGRiwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgYTNjOTB4X21taW9fd3JpdGVsKHZvaWQg Km9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsIHVpbnQzMl90IHZhbCkKK3sKKyNpZmRl ZiBUQVJHRVRfV09SRFNfQklHRU5ESUFOCisgICAgdmFsID0gYnN3YXAzMih2YWwpOworI2VuZGlm CisgICAgYTNjOTB4X2lvX3dyaXRlbChvcGFxdWUsIGFkZHIgJiAweEZGLCB2YWwpOworfQorCitz dGF0aWMgdWludDMyX3QgYTNjOTB4X21taW9fcmVhZGIodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5 c19hZGRyX3QgYWRkcikKK3sKKyAgICByZXR1cm4gYTNjOTB4X2lvX3JlYWRiKG9wYXF1ZSwgYWRk ciAmIDB4RkYpOworfQorCitzdGF0aWMgdWludDMyX3QgYTNjOTB4X21taW9fcmVhZHcodm9pZCAq b3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkcikKK3sKKyAgICB1aW50MzJfdCB2YWwgPSBh M2M5MHhfaW9fcmVhZHcob3BhcXVlLCBhZGRyICYgMHhGRik7CisjaWZkZWYgVEFSR0VUX1dPUkRT X0JJR0VORElBTgorICAgIHZhbCA9IGJzd2FwMTYodmFsKTsKKyNlbmRpZgorICAgIHJldHVybiB2 YWw7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBhM2M5MHhfbW1pb19yZWFkbCh2b2lkICpvcGFxdWUs IHRhcmdldF9waHlzX2FkZHJfdCBhZGRyKQoreworICAgIHVpbnQzMl90IHZhbCA9IGEzYzkweF9p b19yZWFkbChvcGFxdWUsIGFkZHIgJiAweEZGKTsKKyNpZmRlZiBUQVJHRVRfV09SRFNfQklHRU5E SUFOCisgICAgdmFsID0gYnN3YXAzMih2YWwpOworI2VuZGlmCisgICAgcmV0dXJuIHZhbDsKK30K KworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworLyogUENJIDNDOTB4IGRlZmluaXRpb25zICovCisKK3R5cGVkZWYgc3RydWN0IFBD STNDOTBYU3RhdGUKK3sKKyAgICBQQ0lEZXZpY2UgZGV2OworICAgIEEzQzkwWFN0YXRlIGEzYzkw eDsKK30gUENJM0M5MFhTdGF0ZTsKKworc3RhdGljIHZvaWQgYTNjOTB4X21taW9fbWFwKFBDSURl dmljZSAqcGNpX2RldiwgaW50IHJlZ2lvbl9udW0sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3QgYWRkciwgdWludDMyX3Qgc2l6ZSwgaW50IHR5cGUpCit7CisgICAgUENJM0M5 MFhTdGF0ZSAqZCA9IChQQ0kzQzkwWFN0YXRlICopcGNpX2RldjsKKyAgICBBM0M5MFhTdGF0ZSAq cyA9ICZkLT5hM2M5MHg7CisKKyAgICBjcHVfcmVnaXN0ZXJfcGh5c2ljYWxfbWVtb3J5KGFkZHIg KyAwLCAweDEwMCwgcy0+YTNjOTB4X21taW9faW9fYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIGEz YzkweF9pb3BvcnRfbWFwKFBDSURldmljZSAqcGNpX2RldiwgaW50IHJlZ2lvbl9udW0sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCBzaXplLCBp bnQgdHlwZSkKK3sKKyAgICBQQ0kzQzkwWFN0YXRlICpkID0gKFBDSTNDOTBYU3RhdGUgKilwY2lf ZGV2OworICAgIEEzQzkwWFN0YXRlICpzID0gJmQtPmEzYzkweDsKKworICAgIHJlZ2lzdGVyX2lv cG9ydF93cml0ZShhZGRyLCAweDEwMCwgMSwgYTNjOTB4X2lvcG9ydF93cml0ZWIsIHMpOworICAg IHJlZ2lzdGVyX2lvcG9ydF9yZWFkKCBhZGRyLCAweDEwMCwgMSwgYTNjOTB4X2lvcG9ydF9yZWFk YiwgIHMpOworCisgICAgcmVnaXN0ZXJfaW9wb3J0X3dyaXRlKGFkZHIsIDB4MTAwLCAyLCBhM2M5 MHhfaW9wb3J0X3dyaXRldywgcyk7CisgICAgcmVnaXN0ZXJfaW9wb3J0X3JlYWQoIGFkZHIsIDB4 MTAwLCAyLCBhM2M5MHhfaW9wb3J0X3JlYWR3LCAgcyk7CisKKyAgICByZWdpc3Rlcl9pb3BvcnRf d3JpdGUoYWRkciwgMHgxMDAsIDQsIGEzYzkweF9pb3BvcnRfd3JpdGVsLCBzKTsKKyAgICByZWdp c3Rlcl9pb3BvcnRfcmVhZCggYWRkciwgMHgxMDAsIDQsIGEzYzkweF9pb3BvcnRfcmVhZGwsICBz KTsKK30KKworc3RhdGljIENQVVJlYWRNZW1vcnlGdW5jICphM2M5MHhfbW1pb19yZWFkWzNdID0K K3sKKyAgICBhM2M5MHhfbW1pb19yZWFkYiwKKyAgICBhM2M5MHhfbW1pb19yZWFkdywKKyAgICBh M2M5MHhfbW1pb19yZWFkbCwKK307CisKK3N0YXRpYyBDUFVXcml0ZU1lbW9yeUZ1bmMgKmEzYzkw eF9tbWlvX3dyaXRlWzNdID0KK3sKKyAgICBhM2M5MHhfbW1pb193cml0ZWIsCisgICAgYTNjOTB4 X21taW9fd3JpdGV3LAorICAgIGEzYzkweF9tbWlvX3dyaXRlbCwKK307CisKK3N0YXRpYyBpbmxp bmUgaW50NjRfdCBhM2M5MHhfZ2V0X25leHRfdGN0cl90aW1lKEEzQzkwWFN0YXRlICpzLCBpbnQ2 NF90IGN1cnJlbnRfdGltZSkKK3sKKyAgICBpbnQ2NF90IG5leHRfdGltZSA9IGN1cnJlbnRfdGlt ZSArCisgICAgICAgICAgICAgICAgICAgICAgICBtdWxkaXY2NCgxLCB0aWNrc19wZXJfc2VjLCBQ Q0lfRlJFUVVFTkNZKTsKKyAgICBpZiAobmV4dF90aW1lIDw9IGN1cnJlbnRfdGltZSkKKyAgICAg ICAgbmV4dF90aW1lID0gY3VycmVudF90aW1lICsgMTsKKyAgICByZXR1cm4gbmV4dF90aW1lOwor fQorCit2b2lkIGEzYzkweF9jbGVhbnVwKFZMQU5DbGllbnRTdGF0ZSAqdmMpCit7CisgICAgREVC VUdfUFJJTlQoIjNDOTBYOiBDbGVhbnVwIG5vdCBpbXBsZW1lbnRlZFxuIik7Cit9CisKK1BDSURl dmljZSAqcGNpX2EzYzkweF9pbml0KFBDSUJ1cyAqYnVzLCBOSUNJbmZvICpuZCwgaW50IGRldmZu KQoreworICAgIFBDSTNDOTBYU3RhdGUgKmQ7CisgICAgQTNDOTBYU3RhdGUgKnM7CisgICAgdWlu dDhfdCAqcGNpX2NvbmY7CisKKyAgICBkID0gKFBDSTNDOTBYU3RhdGUgKilwY2lfcmVnaXN0ZXJf ZGV2aWNlKGJ1cywKKyAgICAgICAgICAgICIzQzkweCIsIHNpemVvZihQQ0kzQzkwWFN0YXRlKSwK KyAgICAgICAgICAgIGRldmZuLAorICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgcGNpX2Nv bmYgPSBkLT5kZXYuY29uZmlnOworICAgIHBjaV9jb25maWdfc2V0X3ZlbmRvcl9pZChwY2lfY29u ZiwgUENJX1ZFTkRPUl9JRF8zQ09NKTsKKyAgICBwY2lfY29uZmlnX3NldF9kZXZpY2VfaWQocGNp X2NvbmYsIFBDSV9ERVZJQ0VfSURfM0M5MFgpOworICAgIHBjaV9jb25mWzB4MDRdID0gMHgwNzsg LyogY29tbWFuZCA9IEkvTyBzcGFjZSwgQnVzIE1hc3RlciAqLworICAgIHBjaV9jb25mWzB4MDhd ID0gMDsKKyAgICBwY2lfY29uZmlnX3NldF9jbGFzcyhwY2lfY29uZiwgUENJX0NMQVNTX05FVFdP UktfRVRIRVJORVQpOworICAgIHBjaV9jb25mWzB4MGVdID0gMHgwMDsgLyogaGVhZGVyX3R5cGUg Ki8KKyAgICBwY2lfY29uZlsweDNkXSA9IDE7ICAgIC8qIGludGVycnVwdCBwaW4gMCAqLworICAg IHBjaV9jb25mWzB4MzRdID0gMHhkYzsKKworICAgIHBjaV9jb25mWzB4M2VdID0gNTsKKyAgICBw Y2lfY29uZlsweDNmXSA9IDQ4OworCisgICAgcyA9ICZkLT5hM2M5MHg7CisKKyAgICAvKiBJL08g aGFuZGxlciBmb3IgbWVtb3J5LW1hcHBlZCBJL08gKi8KKyAgICBzLT5hM2M5MHhfbW1pb19pb19h ZGRyID0KKyAgICAgICAgY3B1X3JlZ2lzdGVyX2lvX21lbW9yeSgwLCBhM2M5MHhfbW1pb19yZWFk LCBhM2M5MHhfbW1pb193cml0ZSwgcyk7CisKKyAgICBwY2lfcmVnaXN0ZXJfaW9fcmVnaW9uKCZk LT5kZXYsIDAsIDB4MTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0FERFJFU1Nf U1BBQ0VfSU8sICBhM2M5MHhfaW9wb3J0X21hcCk7CisKKyAgICBwY2lfcmVnaXN0ZXJfaW9fcmVn aW9uKCZkLT5kZXYsIDEsIDB4MTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0FE RFJFU1NfU1BBQ0VfTUVNLCBhM2M5MHhfbW1pb19tYXApOworCisgICAgcy0+cGNpX2RldiA9IChQ Q0lEZXZpY2UgKilkOworICAgIG1lbWNweShzLT5tTUFDLCBuZC0+bWFjYWRkciwgNik7CisgICAg YTNjOTB4X3Jlc2V0KHMpOworICAgIHMtPnZjID0gcWVtdV9uZXdfdmxhbl9jbGllbnQobmQtPnZs YW4sIG5kLT5tb2RlbCwgbmQtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhM2M5MHhfcmVjZWl2ZSwgYTNjOTB4X2Nhbl9yZWNlaXZlLCBhM2M5MHhfY2xlYW51cCwgcyk7 CisKKyAgICBxZW11X2Zvcm1hdF9uaWNfaW5mb19zdHIocy0+dmMsIHMtPm1NQUMpOworCisgICAg Ly9yZWdpc3Rlcl9zYXZldm0oIjNjOTB4IiwgLTEsIDQsIGEzYzkweF9zYXZlLCBhM2M5MHhfbG9h ZCwgcyk7CisKKyAgICByZXR1cm4gKFBDSURldmljZSAqKWQ7Cit9CisKZGlmZiAtcnVOcCAtLSAu L3FlbXUtMC4xMC4zLWNsZWFuL2h3L3BjaS5jIC4vcWVtdS0wLjEwLjMvaHcvcGNpLmMKLS0tIC4v cWVtdS0wLjEwLjMtY2xlYW4vaHcvcGNpLmMJMjAwOS0wNS0wMiAwMzowMjo0NC4wMDAwMDAwMDAg KzEwMDAKKysrIC4vcWVtdS0wLjEwLjMvaHcvcGNpLmMJMjAwOS0wNS0wNSAxNzoxNDo1MS4wMDAw MDAwMDAgKzEwMDAKQEAgLTc4MSw2ICs3ODEsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0 IHBjaV9uaWNfbW9kZWxzCiAgICAgImk4MjU1N2IiLAogICAgICJpODI1NTllciIsCiAgICAgInJ0 bDgxMzkiLAorICAgICIzYzkweCIsCiAgICAgImUxMDAwIiwKICAgICAicGNuZXQiLAogICAgICJ2 aXJ0aW8iLApAQCAtNzk1LDYgKzc5Niw3IEBAIHN0YXRpYyBQQ0lOSUNJbml0Rm4gcGNpX25pY19p bml0X2Zuc1tdID0KICAgICBwY2lfaTgyNTU3Yl9pbml0LAogICAgIHBjaV9pODI1NTllcl9pbml0 LAogICAgIHBjaV9ydGw4MTM5X2luaXQsCisgICAgcGNpX2EzYzkweF9pbml0LAogICAgIHBjaV9l MTAwMF9pbml0LAogICAgIHBjaV9wY25ldF9pbml0LAogICAgIHZpcnRpb19uZXRfaW5pdCwKZGlm ZiAtcnVOcCAtLSAuL3FlbXUtMC4xMC4zLWNsZWFuL2h3L3BjaS5oIC4vcWVtdS0wLjEwLjMvaHcv cGNpLmgKLS0tIC4vcWVtdS0wLjEwLjMtY2xlYW4vaHcvcGNpLmgJMjAwOS0wNS0wMiAwMzowMjo0 NC4wMDAwMDAwMDAgKzEwMDAKKysrIC4vcWVtdS0wLjEwLjMvaHcvcGNpLmgJMjAwOS0wNS0wNSAx NzoxNjoyMS4wMDAwMDAwMDAgKzEwMDAKQEAgLTg1LDYgKzg1LDkgQEAgZXh0ZXJuIHRhcmdldF9w aHlzX2FkZHJfdCBwY2lfbWVtX2Jhc2U7CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkVBTFRFS19S VEw4MDI5ICAgIDB4ODAyOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JFQUxURUtfODEzOSAgICAg ICAweDgxMzkKIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEXzNDT00gICAgICAgICAgICAgICAweDEw YjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zQzkwWCAgICAgICAgICAgICAgMHg5MjAwCisKICNk ZWZpbmUgUENJX1ZFTkRPUl9JRF9YSUxJTlggICAgICAgICAgICAgMHgxMGVlCiAKICNkZWZpbmUg UENJX1ZFTkRPUl9JRF9NQVJWRUxMICAgICAgICAgICAgMHgxMWFiCkBAIC0yOTQsNiArMjk3LDkg QEAgUENJRGV2aWNlICpwY2lfbmUyMDAwX2luaXQoUENJQnVzICpidXMsIAogCiBQQ0lEZXZpY2Ug KnBjaV9ydGw4MTM5X2luaXQoUENJQnVzICpidXMsIE5JQ0luZm8gKm5kLCBpbnQgZGV2Zm4pOwog CisvKiAzYzkweC5jICovCitQQ0lEZXZpY2UgKnBjaV9hM2M5MHhfaW5pdChQQ0lCdXMgKmJ1cywg TklDSW5mbyAqbmQsIGludCBkZXZmbik7CisKIC8qIGUxMDAwLmMgKi8KIFBDSURldmljZSAqcGNp X2UxMDAwX2luaXQoUENJQnVzICpidXMsIE5JQ0luZm8gKm5kLCBpbnQgZGV2Zm4pOwogCg== --0016e6470e0c2616700469259f41--