From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1HSJSq-0001Md-CY for qemu-devel@nongnu.org; Fri, 16 Mar 2007 16:55:52 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1HSJSn-0001La-GM for qemu-devel@nongnu.org; Fri, 16 Mar 2007 16:55:51 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HSJSn-0001LW-9P for qemu-devel@nongnu.org; Fri, 16 Mar 2007 15:55:49 -0500 Received: from wr-out-0506.google.com ([64.233.184.225]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1HSJRb-0006xe-DY for qemu-devel@nongnu.org; Fri, 16 Mar 2007 16:54:37 -0400 Received: by wr-out-0506.google.com with SMTP id q50so692678wrq for ; Fri, 16 Mar 2007 13:54:34 -0700 (PDT) Message-ID: Date: Fri, 16 Mar 2007 21:54:33 +0100 From: "andrzej zaborowski" Sender: balrogg@gmail.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_98970_33123966.1174078473447" Subject: [Qemu-devel] [PATCH] ARM XScale core features and PXA270 and PXA255 emulation. Reply-To: balrogg@gmail.com, qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org ------=_Part_98970_33123966.1174078473447 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Implements basic differences between XScale and plain ARM. The patch also adds the main on-chip peripherals of PXA2xx: interrupt controller, DMA, GPIO controller, SSP, I2C, I2S busses, UARTs, FIR port, RTC, Clock/Power/Memory managers. There's also an api to hook funcitons to coprocessor writes and reads becaue PXA uses those in various on-chip peripherals (and they're supposed to be faster than memory IO access to the same peripherals, on the real hardware). Cheers, Andrew ------=_Part_98970_33123966.1174078473447 Content-Type: text/plain; name=0003-ARM-XScale-core-features.-PXA270-and-PXA255-emulation.txt; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_ezd65j0x Content-Disposition: attachment; filename="0003-ARM-XScale-core-features.-PXA270-and-PXA255-emulation.txt" RnJvbSBlMDcwMGMyZGEyNGY5N2QxMDAzN2UzZjE1MTdlM2QzMTc5YjJhZDhkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyemVqIFphYm9yb3dza2kgPGJhbHJvZ0B6YWJvci5vcmc+ CkRhdGU6IEZyaSwgMTYgTWFyIDIwMDcgMTg6MDM6MTEgKzAxMDAKU3ViamVjdDogW1BBVENIXSBB Uk0gWFNjYWxlIGNvcmUgZmVhdHVyZXMuIFBYQTI3MCBhbmQgUFhBMjU1IGVtdWxhdGlvbi4KCi0t LQogaHcvcHhhLmggICAgICAgICAgICAgICB8ICAxOTIgKysrKysKIGh3L3B4YTJ4eC5jICAgICAg ICAgICAgfCAxODc1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogaHcvcHhhMnh4X2RtYS5jICAgICAgICB8ICA1MDAgKysrKysrKysrKysrKwogaHcvcHhh Mnh4X2dwaW8uYyAgICAgICB8ICAyOTAgKysrKysrKysKIGh3L3B4YTJ4eF9waWMuYyAgICAgICAg fCAgMjg0ICsrKysrKysrCiB0YXJnZXQtYXJtL2NwdS5oICAgICAgIHwgICAzNyArLQogdGFyZ2V0 LWFybS9leGVjLmggICAgICB8ICAgIDIgKwogdGFyZ2V0LWFybS9oZWxwZXIuYyAgICB8ICAxNTEg KysrKy0KIHRhcmdldC1hcm0vb3AuYyAgICAgICAgfCAgIDE0ICstCiB0YXJnZXQtYXJtL3RyYW5z bGF0ZS5jIHwgICAzMiArCiB2bC5oICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiAxMSBmaWxl cyBjaGFuZ2VkLCAzMzYyIGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL2h3L3B4YS5oIGIvaHcvcHhhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMTZlYjMyZgotLS0gL2Rldi9udWxsCisrKyBiL2h3L3B4YS5oCkBAIC0wLDAgKzEsMTkyIEBA CisvKgorICogSW50ZWwgWFNjYWxlIFBYQTI1NS8yNzAgcHJvY2Vzc29yIHN1cHBvcnQuCisgKgor ICogQ29weXJpZ2h0IChjKSAyMDA2IE9wZW5lZGhhbmQgTHRkLgorICogV3JpdHRlbiBieSBBbmRy emVqIFphYm9yb3dza2kgPGJhbHJvZ0B6YWJvci5vcmc+CisgKgorICogVGhpcyBjb2RlIGlzIGxp Y2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKyNpZm5kZWYgUFhBX0gKKyMgZGVmaW5lIFBYQV9I CQkJInB4YS5oIgorCisvKiBJbnRlcnJ1cHQgbnVtYmVycyAqLworIyBkZWZpbmUgUFhBMlhYX1BJ Q19TU1AzCTAKKyMgZGVmaW5lIFBYQTJYWF9QSUNfVVNCSDIJMgorIyBkZWZpbmUgUFhBMlhYX1BJ Q19VU0JIMQkzCisjIGRlZmluZSBQWEEyWFhfUElDX1BXUkkyQwk2CisjIGRlZmluZSBQWEEyNVhf UElDX0hXVUFSVAk3CisjIGRlZmluZSBQWEEyN1hfUElDX09TVF80XzExCTcKKyMgZGVmaW5lIFBY QTJYWF9QSUNfR1BJT18wCTgKKyMgZGVmaW5lIFBYQTJYWF9QSUNfR1BJT18xCTkKKyMgZGVmaW5l IFBYQTJYWF9QSUNfR1BJT19YCTEwCisjIGRlZmluZSBQWEEyWFhfUElDX0kyUyAJMTMKKyMgZGVm aW5lIFBYQTI2WF9QSUNfQVNTUAkxNQorIyBkZWZpbmUgUFhBMjVYX1BJQ19OU1NQCTE2CisjIGRl ZmluZSBQWEEyN1hfUElDX1NTUDIJMTYKKyMgZGVmaW5lIFBYQTJYWF9QSUNfTENECQkxNworIyBk ZWZpbmUgUFhBMlhYX1BJQ19JMkMJCTE4CisjIGRlZmluZSBQWEEyWFhfUElDX0lDUAkJMTkKKyMg ZGVmaW5lIFBYQTJYWF9QSUNfU1RVQVJUCTIwCisjIGRlZmluZSBQWEEyWFhfUElDX0JUVUFSVAky MQorIyBkZWZpbmUgUFhBMlhYX1BJQ19GRlVBUlQJMjIKKyMgZGVmaW5lIFBYQTJYWF9QSUNfTU1D CQkyMworIyBkZWZpbmUgUFhBMlhYX1BJQ19TU1AJCTI0CisjIGRlZmluZSBQWEEyWFhfUElDX0RN QQkJMjUKKyMgZGVmaW5lIFBYQTJYWF9QSUNfT1NUXzAJMjYKKyMgZGVmaW5lIFBYQTJYWF9QSUNf UlRDMUhaCTMwCisjIGRlZmluZSBQWEEyWFhfUElDX1JUQ0FMQVJNCTMxCisKKy8qIERNQSByZXF1 ZXN0cyAqLworIyBkZWZpbmUgUFhBMlhYX1JYX1JRX0kyUwkyCisjIGRlZmluZSBQWEEyWFhfVFhf UlFfSTJTCTMKKyMgZGVmaW5lIFBYQTJYWF9SWF9SUV9CVFVBUlQJNAorIyBkZWZpbmUgUFhBMlhY X1RYX1JRX0JUVUFSVAk1CisjIGRlZmluZSBQWEEyWFhfUlhfUlFfRkZVQVJUCTYKKyMgZGVmaW5l IFBYQTJYWF9UWF9SUV9GRlVBUlQJNworIyBkZWZpbmUgUFhBMlhYX1JYX1JRX1NTUDEJMTMKKyMg ZGVmaW5lIFBYQTJYWF9UWF9SUV9TU1AxCTE0CisjIGRlZmluZSBQWEEyWFhfUlhfUlFfU1NQMgkx NQorIyBkZWZpbmUgUFhBMlhYX1RYX1JRX1NTUDIJMTYKKyMgZGVmaW5lIFBYQTJYWF9SWF9SUV9J Q1AJMTcKKyMgZGVmaW5lIFBYQTJYWF9UWF9SUV9JQ1AJMTgKKyMgZGVmaW5lIFBYQTJYWF9SWF9S UV9TVFVBUlQJMTkKKyMgZGVmaW5lIFBYQTJYWF9UWF9SUV9TVFVBUlQJMjAKKyMgZGVmaW5lIFBY QTJYWF9SWF9SUV9NTUNJCTIxCisjIGRlZmluZSBQWEEyWFhfVFhfUlFfTU1DSQkyMgorIyBkZWZp bmUgUFhBMlhYX1VTQl9SUSh4KQkoKHgpICsgMjQpCisjIGRlZmluZSBQWEEyWFhfUlhfUlFfU1NQ Mwk2NgorIyBkZWZpbmUgUFhBMlhYX1RYX1JRX1NTUDMJNjcKKworIyBkZWZpbmUgUFhBMlhYX1JB TV9CQVNFCTB4YTAwMDAwMDAKKworLyogcHhhMnh4X3BpYy5jICovCitzdHJ1Y3QgcHhhMnh4X3Bp Y19zdGF0ZV9zOworc3RydWN0IHB4YTJ4eF9waWNfc3RhdGVfcyAqcHhhMnh4X3BpY19pbml0KHRh cmdldF9waHlzX2FkZHJfdCBiYXNlLAorICAgICAgICAgICAgICAgIENQVVN0YXRlICplbnYpOwor CisvKiBweGEyeHhfZ3Bpby5jICovCitzdHJ1Y3QgcHhhMnh4X2dwaW9faW5mb19zOworc3RydWN0 IHB4YTJ4eF9ncGlvX2luZm9fcyAqcHhhMnh4X2dwaW9faW5pdCh0YXJnZXRfcGh5c19hZGRyX3Qg YmFzZSwKKyAgICAgICAgICAgICAgICBDUFVTdGF0ZSAqZW52LCB2b2lkICpwaWMsIGludCBsaW5l cyk7Cit2b2lkIHB4YTJ4eF9ncGlvX3NldChzdHJ1Y3QgcHhhMnh4X2dwaW9faW5mb19zICpzLCBp bnQgbGluZSwgaW50IGxldmVsKTsKK3ZvaWQgcHhhMnh4X2dwaW9faGFuZGxlcl9zZXQoc3RydWN0 IHB4YTJ4eF9ncGlvX2luZm9fcyAqcywgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgZ3Bpb19o YW5kbGVyX3QgaGFuZGxlciwgdm9pZCAqb3BhcXVlKTsKK3ZvaWQgcHhhMnh4X2dwaW9fcmVhZF9u b3RpZmllcihzdHJ1Y3QgcHhhMnh4X2dwaW9faW5mb19zICpzLAorICAgICAgICAgICAgICAgIHZv aWQgKCpoYW5kbGVyKSh2b2lkICpvcGFxdWUpLCB2b2lkICpvcGFxdWUpOworCisvKiBweGEyeHhf ZG1hLmMgKi8KK3N0cnVjdCBweGEyeHhfZG1hX3N0YXRlX3M7CitzdHJ1Y3QgcHhhMnh4X2RtYV9z dGF0ZV9zICpweGEyNTVfZG1hX2luaXQodGFyZ2V0X3BoeXNfYWRkcl90IGJhc2UsCisgICAgICAg ICAgICAgICAgdm9pZCAqcGljLCBpbnQgaXJxKTsKK3N0cnVjdCBweGEyeHhfZG1hX3N0YXRlX3Mg KnB4YTI3eF9kbWFfaW5pdCh0YXJnZXRfcGh5c19hZGRyX3QgYmFzZSwKKyAgICAgICAgICAgICAg ICB2b2lkICpwaWMsIGludCBpcnEpOwordm9pZCBweGEyeHhfZG1hX3JlcXVlc3Qoc3RydWN0IHB4 YTJ4eF9kbWFfc3RhdGVfcyAqcywgaW50IHJlcV9udW0sIGludCBvbik7CisKKy8qIHB4YTJ4eC5j ICovCitzdHJ1Y3QgcHhhMnh4X3NzcF9zOwordm9pZCBweGEyeHhfc3NwX2F0dGFjaChzdHJ1Y3Qg cHhhMnh4X3NzcF9zICpwb3J0LAorICAgICAgICAgICAgICAgIHVpbnQzMl90ICgqcmVhZGZuKSh2 b2lkICpvcGFxdWUpLAorICAgICAgICAgICAgICAgIHZvaWQgKCp3cml0ZWZuKSh2b2lkICpvcGFx dWUsIHVpbnQzMl90IHZhbHVlKSwgdm9pZCAqb3BhcXVlKTsKKworc3RydWN0IHB4YTJ4eF9pMmNf czsKK3N0cnVjdCBweGEyeHhfaTJzX3M7CitzdHJ1Y3QgcHhhMnh4X2Zpcl9zOworCitzdHJ1Y3Qg cHhhMnh4X3N0YXRlX3MgeworICAgIENQVVN0YXRlICplbnY7CisgICAgc3RydWN0IHB4YTJ4eF9w aWNfc3RhdGVfcyAqcGljOworICAgIHN0cnVjdCBweGEyeHhfZG1hX3N0YXRlX3MgKmRtYTsKKyAg ICBzdHJ1Y3QgcHhhMnh4X2dwaW9faW5mb19zICpncGlvOworICAgIHN0cnVjdCBweGEyeHhfc3Nw X3MgKipzc3A7CisgICAgc3RydWN0IHB4YTJ4eF9pMmNfcyAqaTJjWzJdOworICAgIHN0cnVjdCBw eGEyeHhfaTJzX3MgKmkyczsKKyAgICBzdHJ1Y3QgcHhhMnh4X2Zpcl9zICpmaXI7CisKKyAgICAv KiBQb3dlciBtYW5hZ2VtZW50ICovCisgICAgdGFyZ2V0X3BoeXNfYWRkcl90IHBtX2Jhc2U7Cisg ICAgdWludDMyX3QgcG1fcmVnc1sweDQwXTsKKworICAgIC8qIENsb2NrIG1hbmFnZW1lbnQgKi8K KyAgICB0YXJnZXRfcGh5c19hZGRyX3QgY21fYmFzZTsKKyAgICB1aW50MzJfdCBjbV9yZWdzWzRd OworICAgIHVpbnQzMl90IGNsa2NmZzsKKworICAgIC8qIE1lbW9yeSBtYW5hZ2VtZW50ICovCisg ICAgdGFyZ2V0X3BoeXNfYWRkcl90IG1tX2Jhc2U7CisgICAgdWludDMyX3QgbW1fcmVnc1sweDFh XTsKKworICAgIC8qIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgKi8KKyAgICB1aW50MzJfdCBwbW5j OworCisgICAgLyogUmVhbC1UaW1lIGNsb2NrICovCisgICAgdGFyZ2V0X3BoeXNfYWRkcl90IHJ0 Y19iYXNlOworICAgIHVpbnQzMl90IHJ0dHI7CisgICAgdWludDMyX3QgcnRzcjsKKyAgICB1aW50 MzJfdCBydGFyOworICAgIHVpbnQzMl90IHJkYXIxOworICAgIHVpbnQzMl90IHJkYXIyOworICAg IHVpbnQzMl90IHJ5YXIxOworICAgIHVpbnQzMl90IHJ5YXIyOworICAgIHVpbnQzMl90IHN3YXIx OworICAgIHVpbnQzMl90IHN3YXIyOworICAgIHVpbnQzMl90IHBpYXI7CisgICAgdWludDMyX3Qg bGFzdF9yY25yOworICAgIHVpbnQzMl90IGxhc3RfcmRjcjsKKyAgICB1aW50MzJfdCBsYXN0X3J5 Y3I7CisgICAgdWludDMyX3QgbGFzdF9zd2NyOworICAgIHVpbnQzMl90IGxhc3RfcnRjcGljcjsK KyAgICBpbnQ2NF90IGxhc3RfaHo7CisgICAgaW50NjRfdCBsYXN0X3N3OworICAgIGludDY0X3Qg bGFzdF9waTsKKyAgICBRRU1VVGltZXIgKnJ0Y19oejsKKyAgICBRRU1VVGltZXIgKnJ0Y19yZGFs MTsKKyAgICBRRU1VVGltZXIgKnJ0Y19yZGFsMjsKKyAgICBRRU1VVGltZXIgKnJ0Y19zd2FsMTsK KyAgICBRRU1VVGltZXIgKnJ0Y19zd2FsMjsKKyAgICBRRU1VVGltZXIgKnJ0Y19waTsKK307CisK K3N0cnVjdCBweGEyeHhfaTJjX3MgeworICAgIHRhcmdldF9waHlzX2FkZHJfdCBiYXNlOworICAg IGludCBpcnE7CisgICAgc3RydWN0IHB4YTJ4eF9waWNfc3RhdGVfcyAqcGljOworICAgIHN0cnVj dCBpMmNfbWFzdGVyX3MgbWFzdGVyOworICAgIHN0cnVjdCBpMmNfc2xhdmVfcyBzbGF2ZTsKKwor ICAgIHVpbnQxNl90IGNvbnRyb2w7CisgICAgdWludDE2X3Qgc3RhdHVzOworICAgIHVpbnQ4X3Qg aWJtcjsKK307CisKK3N0cnVjdCBweGEyeHhfaTJzX3MgeworICAgIHRhcmdldF9waHlzX2FkZHJf dCBiYXNlOworICAgIGludCBpcnE7CisgICAgc3RydWN0IHB4YTJ4eF9kbWFfc3RhdGVfcyAqZG1h OworICAgIHN0cnVjdCBweGEyeHhfcGljX3N0YXRlX3MgKnBpYzsKKyAgICB2b2lkICgqZGF0YV9y ZXEpKHZvaWQgKiwgaW50LCBpbnQpOworCisgICAgdWludDMyX3QgY29udHJvbFsyXTsKKyAgICB1 aW50MzJfdCBzdGF0dXM7CisgICAgdWludDMyX3QgbWFzazsKKyAgICB1aW50MzJfdCBjbGs7CisK KyAgICBpbnQgZW5hYmxlOworICAgIGludCByeF9sZW47CisgICAgaW50IHR4X2xlbjsKKyAgICB2 b2lkICgqY29kZWNfb3V0KSh2b2lkICosIHVpbnQzMl90KTsKKyAgICB1aW50MzJfdCAoKmNvZGVj X2luKSh2b2lkICopOworICAgIHZvaWQgKm9wYXF1ZTsKKworICAgIGludCBmaWZvX2xlbjsKKyAg ICB1aW50MzJfdCBmaWZvWzE2XTsKK307CisKKyMgZGVmaW5lIFBBX0ZNVAkJCSIweCUwOGx4Igor IyBkZWZpbmUgUkVHX0ZNVAkJIjB4JWx4IgorCitzdHJ1Y3QgcHhhMnh4X3N0YXRlX3MgKnB4YTI3 MF9pbml0KERpc3BsYXlTdGF0ZSAqZHMsIGNvbnN0IGNoYXIgKnJldmlzaW9uKTsKK3N0cnVjdCBw eGEyeHhfc3RhdGVfcyAqcHhhMjU1X2luaXQoRGlzcGxheVN0YXRlICpkcyk7CisKK3ZvaWQgcHhh Mnh4X3Jlc2V0KGludCBsaW5lLCBpbnQgbGV2ZWwsIHZvaWQgKm9wYXF1ZSk7CisKKyNlbmRpZgkv KiBQWEFfSCAqLwpkaWZmIC0tZ2l0IGEvaHcvcHhhMnh4LmMgYi9ody9weGEyeHguYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzIzMWFlCi0tLSAvZGV2L251bGwKKysrIGIv aHcvcHhhMnh4LmMKQEAgLTAsMCArMSwxODc1IEBACisvKgorICogSW50ZWwgWFNjYWxlIFBYQTI1 NS8yNzAgcHJvY2Vzc29yIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9wZW5l ZGhhbmQgTHRkLgorICogV3JpdHRlbiBieSBBbmRyemVqIFphYm9yb3dza2kgPGJhbHJvZ0B6YWJv ci5vcmc+CisgKgorICogVGhpcyBjb2RlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8K KworIyBpbmNsdWRlICJ2bC5oIgorCitzdGF0aWMgc3RydWN0IHsKKyAgICB0YXJnZXRfcGh5c19h ZGRyX3QgaW9fYmFzZTsKKyAgICBpbnQgaXJxOworfSBweGEyNTVfc2VyaWFsW10gPSB7CisgICAg eyAweDQwMTAwMDAwLCBQWEEyWFhfUElDX0ZGVUFSVCB9LAorICAgIHsgMHg0MDIwMDAwMCwgUFhB MlhYX1BJQ19CVFVBUlQgfSwKKyAgICB7IDB4NDA3MDAwMDAsIFBYQTJYWF9QSUNfU1RVQVJUIH0s CisgICAgeyAweDQxNjAwMDAwLCBQWEEyNVhfUElDX0hXVUFSVCB9LAorICAgIHsgMCwgMCB9Cit9 LCBweGEyNzBfc2VyaWFsW10gPSB7CisgICAgeyAweDQwMTAwMDAwLCBQWEEyWFhfUElDX0ZGVUFS VCB9LAorICAgIHsgMHg0MDIwMDAwMCwgUFhBMlhYX1BJQ19CVFVBUlQgfSwKKyAgICB7IDB4NDA3 MDAwMDAsIFBYQTJYWF9QSUNfU1RVQVJUIH0sCisgICAgeyAwLCAwIH0KK307CisKK3N0YXRpYyBz dHJ1Y3QgeworICAgIHRhcmdldF9waHlzX2FkZHJfdCBpb19iYXNlOworICAgIGludCBpcnE7Cit9 IHB4YTI1MF9zc3BbXSA9IHsKKyAgICB7IDB4NDEwMDAwMDAsIFBYQTJYWF9QSUNfU1NQIH0sCisg ICAgeyAwLCAwIH0KK30sIHB4YTI1NV9zc3BbXSA9IHsKKyAgICB7IDB4NDEwMDAwMDAsIFBYQTJY WF9QSUNfU1NQIH0sCisgICAgeyAweDQxNDAwMDAwLCBQWEEyNVhfUElDX05TU1AgfSwKKyAgICB7 IDAsIDAgfQorfSwgcHhhMjZ4X3NzcFtdID0geworICAgIHsgMHg0MTAwMDAwMCwgUFhBMlhYX1BJ Q19TU1AgfSwKKyAgICB7IDB4NDE0MDAwMDAsIFBYQTI1WF9QSUNfTlNTUCB9LAorICAgIHsgMHg0 MTUwMDAwMCwgUFhBMjZYX1BJQ19BU1NQIH0sCisgICAgeyAwLCAwIH0KK30sIHB4YTI3eF9zc3Bb XSA9IHsKKyAgICB7IDB4NDEwMDAwMDAsIFBYQTJYWF9QSUNfU1NQIH0sCisgICAgeyAweDQxNzAw MDAwLCBQWEEyN1hfUElDX1NTUDIgfSwKKyAgICB7IDB4NDE5MDAwMDAsIFBYQTJYWF9QSUNfU1NQ MyB9LAorICAgIHsgMCwgMCB9Cit9OworCisjZGVmaW5lIFBNQ1IJMHgwMAkvKiBQb3dlciBNYW5h Z2VyIENvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUFNTUgkweDA0CS8qIFBvd2VyIE1hbmFn ZXIgU2xlZXAgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFBTUFIJMHgwOAkvKiBQb3dlciBN YW5hZ2VyIFNjcmF0Y2gtUGFkIHJlZ2lzdGVyICovCisjZGVmaW5lIFBXRVIJMHgwYwkvKiBQb3dl ciBNYW5hZ2VyIFdha2UtVXAgRW5hYmxlIHJlZ2lzdGVyICovCisjZGVmaW5lIFBSRVIJMHgxMAkv KiBQb3dlciBNYW5hZ2VyIFJpc2luZy1FZGdlIERldGVjdCBFbmFibGUgcmVnaXN0ZXIgKi8KKyNk ZWZpbmUgUEZFUgkweDE0CS8qIFBvd2VyIE1hbmFnZXIgRmFsbGluZy1FZGdlIERldGVjdCBFbmFi bGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEVEUgkweDE4CS8qIFBvd2VyIE1hbmFnZXIgRWRnZS1E ZXRlY3QgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDRlIJMHgxYwkvKiBQb3dlciBNYW5h Z2VyIEdlbmVyYWwgQ29uZmlndXJhdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBQR1NSMAkweDIw CS8qIFBvd2VyIE1hbmFnZXIgR1BJTyBTbGVlcC1TdGF0ZSByZWdpc3RlciAwICovCisjZGVmaW5l IFBHU1IxCTB4MjQJLyogUG93ZXIgTWFuYWdlciBHUElPIFNsZWVwLVN0YXRlIHJlZ2lzdGVyIDEg Ki8KKyNkZWZpbmUgUEdTUjIJMHgyOAkvKiBQb3dlciBNYW5hZ2VyIEdQSU8gU2xlZXAtU3RhdGUg cmVnaXN0ZXIgMiAqLworI2RlZmluZSBQR1NSMwkweDJjCS8qIFBvd2VyIE1hbmFnZXIgR1BJTyBT bGVlcC1TdGF0ZSByZWdpc3RlciAzICovCisjZGVmaW5lIFJDU1IJMHgzMAkvKiBSZXNldCBDb250 cm9sbGVyIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBQU0xSCTB4MzQJLyogUG93ZXIgTWFu YWdlciBTbGVlcCBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIFBUU1IJMHgzOAkv KiBQb3dlciBNYW5hZ2VyIFN0YW5kYnkgQ29uZmlndXJhdGlvbiByZWdpc3RlciAqLworI2RlZmlu ZSBQVkNSCTB4NDAJLyogUG93ZXIgTWFuYWdlciBWb2x0YWdlIENoYW5nZSBDb250cm9sIHJlZ2lz dGVyICovCisjZGVmaW5lIFBVQ1IJMHg0YwkvKiBQb3dlciBNYW5hZ2VyIFVTSU0gQ2FyZCBDb250 cm9sL1N0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBQS1dSCTB4NTAJLyogUG93ZXIgTWFuYWdl ciBLZXlib2FyZCBXYWtlLVVwIEVuYWJsZSByZWdpc3RlciAqLworI2RlZmluZSBQS1NSCTB4NTQJ LyogUG93ZXIgTWFuYWdlciBLZXlib2FyZCBMZXZlbC1EZXRlY3QgU3RhdHVzICovCisjZGVmaW5l IFBDTUQwCTB4ODAJLyogUG93ZXIgTWFuYWdlciBJMkMgQ29tbWFuZCByZWdpc3RlciBGaWxlIDAg Ki8KKyNkZWZpbmUgUENNRDMxCTB4ZmMJLyogUG93ZXIgTWFuYWdlciBJMkMgQ29tbWFuZCByZWdp c3RlciBGaWxlIDMxICovCisKK3N0YXRpYyB1aW50MzJfdCBweGEyeHhfaTJjX3JlYWQodm9pZCAq LCB0YXJnZXRfcGh5c19hZGRyX3QpOworc3RhdGljIHZvaWQgcHhhMnh4X2kyY193cml0ZSh2b2lk ICosIHRhcmdldF9waHlzX2FkZHJfdCwgdWludDMyX3QpOworCitzdGF0aWMgdWludDMyX3QgcHhh Mnh4X3BtX3JlYWQodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkcikKK3sKKyAg ICBzdHJ1Y3QgcHhhMnh4X3N0YXRlX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9zdGF0ZV9zICopIG9w YXF1ZTsKKyAgICBpZiAoYWRkciA+IHMtPnBtX2Jhc2UgKyBQQ01EMzEpIHsKKyAgICAgICAgLyog U3BlY2lhbCBjYXNlOiBQV1JJMkMgcmVnaXN0ZXJzIGFwcGVhciBpbiB0aGUgc2FtZSByYW5nZS4g ICovCisgICAgICAgIHJldHVybiBweGEyeHhfaTJjX3JlYWQocy0+aTJjWzFdLCBhZGRyKTsKKyAg ICB9CisgICAgYWRkciAtPSBzLT5wbV9iYXNlOworCisgICAgc3dpdGNoIChhZGRyKSB7CisgICAg Y2FzZSBQTUNSIC4uLiBQQ01EMzE6CisgICAgICAgIGlmIChhZGRyICYgMykKKyAgICAgICAgICAg IGdvdG8gZmFpbDsKKworICAgICAgICByZXR1cm4gcy0+cG1fcmVnc1thZGRyID4+IDJdOworICAg IGRlZmF1bHQ6CisgICAgZmFpbDoKKyAgICAgICAgcHJpbnRmKCIlczogQmFkIHJlZ2lzdGVyICIg UkVHX0ZNVCAiXG4iLCBfX0ZVTkNUSU9OX18sIGFkZHIpOworICAgICAgICBicmVhazsKKyAgICB9 CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHB4YTJ4eF9wbV93cml0ZSh2b2lkICpv cGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLAorICAgICAgICAgICAgICAgIHVpbnQzMl90 IHZhbHVlKQoreworICAgIHN0cnVjdCBweGEyeHhfc3RhdGVfcyAqcyA9IChzdHJ1Y3QgcHhhMnh4 X3N0YXRlX3MgKikgb3BhcXVlOworICAgIGlmIChhZGRyID4gcy0+cG1fYmFzZSArIFBDTUQzMSkg eworICAgICAgICAvKiBTcGVjaWFsIGNhc2U6IFBXUkkyQyByZWdpc3RlcnMgYXBwZWFyIGluIHRo ZSBzYW1lIHJhbmdlLiAgKi8KKyAgICAgICAgcHhhMnh4X2kyY193cml0ZShzLT5pMmNbMV0sIGFk ZHIsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhZGRyIC09IHMtPnBtX2Jh c2U7CisKKyAgICBzd2l0Y2ggKGFkZHIpIHsKKyAgICBjYXNlIFBNQ1I6CisgICAgICAgIHMtPnBt X3JlZ3NbYWRkciA+PiAyXSAmPSAweDE1ICYgfih2YWx1ZSAmIDB4MmEpOworICAgICAgICBzLT5w bV9yZWdzW2FkZHIgPj4gMl0gfD0gdmFsdWUgJiAweDE1OworICAgICAgICBicmVhazsKKworICAg IGNhc2UgUFNTUjoJLyogUmVhZC1jbGVhbiByZWdpc3RlcnMgKi8KKyAgICBjYXNlIFJDU1I6Cisg ICAgY2FzZSBQS1NSOgorICAgICAgICBzLT5wbV9yZWdzW2FkZHIgPj4gMl0gJj0gfnZhbHVlOwor ICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CS8qIFJlYWQtd3JpdGUgcmVnaXN0ZXJzICov CisgICAgICAgIGlmIChhZGRyID49IFBNQ1IgJiYgYWRkciA8PSBQQ01EMzEgJiYgIShhZGRyICYg MykpIHsKKyAgICAgICAgICAgIHMtPnBtX3JlZ3NbYWRkciA+PiAyXSA9IHZhbHVlOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwcmludGYoIiVzOiBCYWQgcmVnaXN0 ZXIgIiBSRUdfRk1UICJcbiIsIF9fRlVOQ1RJT05fXywgYWRkcik7CisgICAgICAgIGJyZWFrOwor ICAgIH0KK30KKworc3RhdGljIENQVVJlYWRNZW1vcnlGdW5jICpweGEyeHhfcG1fcmVhZGZuW10g PSB7CisgICAgcHhhMnh4X3BtX3JlYWQsCisgICAgcHhhMnh4X3BtX3JlYWQsCisgICAgcHhhMnh4 X3BtX3JlYWQsCit9OworCitzdGF0aWMgQ1BVV3JpdGVNZW1vcnlGdW5jICpweGEyeHhfcG1fd3Jp dGVmbltdID0geworICAgIHB4YTJ4eF9wbV93cml0ZSwKKyAgICBweGEyeHhfcG1fd3JpdGUsCisg ICAgcHhhMnh4X3BtX3dyaXRlLAorfTsKKworI2RlZmluZSBDQ0NSCTB4MDAJLyogQ29yZSBDbG9j ayBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIENLRU4JMHgwNAkvKiBDbG9jayBF bmFibGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1NDQwkweDA4CS8qIE9zY2lsbGF0b3IgQ29uZmln dXJhdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBDQ1NSCTB4MGMJLyogQ29yZSBDbG9jayBTdGF0 dXMgcmVnaXN0ZXIgKi8KKworc3RhdGljIHVpbnQzMl90IHB4YTJ4eF9jbV9yZWFkKHZvaWQgKm9w YXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpCit7CisgICAgc3RydWN0IHB4YTJ4eF9zdGF0 ZV9zICpzID0gKHN0cnVjdCBweGEyeHhfc3RhdGVfcyAqKSBvcGFxdWU7CisgICAgYWRkciAtPSBz LT5jbV9iYXNlOworCisgICAgc3dpdGNoIChhZGRyKSB7CisgICAgY2FzZSBDQ0NSOgorICAgIGNh c2UgQ0tFTjoKKyAgICBjYXNlIE9TQ0M6CisgICAgICAgIHJldHVybiBzLT5jbV9yZWdzW2FkZHIg Pj4gMl07CisKKyAgICBjYXNlIENDU1I6CisgICAgICAgIHJldHVybiBzLT5jbV9yZWdzW0NDQ1Ig Pj4gMl0gfCAoMyA8PCAyOCk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoIiVzOiBC YWQgcmVnaXN0ZXIgIiBSRUdfRk1UICJcbiIsIF9fRlVOQ1RJT05fXywgYWRkcik7CisgICAgICAg IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHhhMnh4X2Nt X3dyaXRlKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsCisgICAgICAgICAg ICAgICAgdWludDMyX3QgdmFsdWUpCit7CisgICAgc3RydWN0IHB4YTJ4eF9zdGF0ZV9zICpzID0g KHN0cnVjdCBweGEyeHhfc3RhdGVfcyAqKSBvcGFxdWU7CisgICAgYWRkciAtPSBzLT5jbV9iYXNl OworCisgICAgc3dpdGNoIChhZGRyKSB7CisgICAgY2FzZSBDQ0NSOgorICAgIGNhc2UgQ0tFTjoK KyAgICAgICAgcy0+Y21fcmVnc1thZGRyID4+IDJdID0gdmFsdWU7CisgICAgICAgIGJyZWFrOwor CisgICAgY2FzZSBPU0NDOgorICAgICAgICBzLT5jbV9yZWdzW2FkZHIgPj4gMl0gJj0gfjB4NmU7 CisgICAgICAgIHMtPmNtX3JlZ3NbYWRkciA+PiAyXSB8PSB2YWx1ZSAmIDB4NmU7CisgICAgICAg IGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRmKCIlczogQmFkIHJlZ2lzdGVy ICIgUkVHX0ZNVCAiXG4iLCBfX0ZVTkNUSU9OX18sIGFkZHIpOworICAgICAgICBicmVhazsKKyAg ICB9Cit9CisKK3N0YXRpYyBDUFVSZWFkTWVtb3J5RnVuYyAqcHhhMnh4X2NtX3JlYWRmbltdID0g eworICAgIHB4YTJ4eF9jbV9yZWFkLAorICAgIHB4YTJ4eF9jbV9yZWFkLAorICAgIHB4YTJ4eF9j bV9yZWFkLAorfTsKKworc3RhdGljIENQVVdyaXRlTWVtb3J5RnVuYyAqcHhhMnh4X2NtX3dyaXRl Zm5bXSA9IHsKKyAgICBweGEyeHhfY21fd3JpdGUsCisgICAgcHhhMnh4X2NtX3dyaXRlLAorICAg IHB4YTJ4eF9jbV93cml0ZSwKK307CisKK3N0YXRpYyB1aW50MzJfdCBweGEyeHhfY2xrcHdyX3Jl YWQodm9pZCAqb3BhcXVlLCBpbnQgb3AyLCBpbnQgcmVnLCBpbnQgY3JtKQoreworICAgIHN0cnVj dCBweGEyeHhfc3RhdGVfcyAqcyA9IChzdHJ1Y3QgcHhhMnh4X3N0YXRlX3MgKikgb3BhcXVlOwor CisgICAgc3dpdGNoIChyZWcpIHsKKyAgICBjYXNlIDY6CS8qIENsb2NrIENvbmZpZ3VyYXRpb24g cmVnaXN0ZXIgKi8KKyAgICAgICAgcmV0dXJuIHMtPmNsa2NmZzsKKworICAgIGNhc2UgNzoJLyog UG93ZXIgTW9kZSByZWdpc3RlciAqLworICAgICAgICByZXR1cm4gMDsKKworICAgIGRlZmF1bHQ6 CisgICAgICAgIHByaW50ZigiJXM6IEJhZCByZWdpc3RlciAweCV4XG4iLCBfX0ZVTkNUSU9OX18s IHJlZyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgcHhhMnh4X2Nsa3B3cl93cml0ZSh2b2lkICpvcGFxdWUsIGludCBvcDIsIGludCByZWcs IGludCBjcm0sCisgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsdWUpCit7CisgICAgc3RydWN0 IHB4YTJ4eF9zdGF0ZV9zICpzID0gKHN0cnVjdCBweGEyeHhfc3RhdGVfcyAqKSBvcGFxdWU7Cisg ICAgc3RhdGljIGNvbnN0IGNoYXIgKnB3cm1vZGVbOF0gPSB7CisgICAgICAgICJOb3JtYWwiLCAi SWRsZSIsICJEZWVwLWlkbGUiLCAiU3RhbmRieSIsCisgICAgICAgICJTbGVlcCIsICJyZXNlcnZl ZCAoISkiLCAicmVzZXJ2ZWQgKCEpIiwgIkRlZXAtc2xlZXAiLAorICAgIH07CisKKyAgICBzd2l0 Y2ggKHJlZykgeworICAgIGNhc2UgNjoJLyogQ2xvY2sgQ29uZmlndXJhdGlvbiByZWdpc3RlciAq LworICAgICAgICBzLT5jbGtjZmcgPSB2YWx1ZSAmIDB4ZjsKKyAgICAgICAgaWYgKHZhbHVlICYg MikKKyAgICAgICAgICAgIHByaW50ZigiJXM6IENQVSBmcmVxdWVuY3kgY2hhbmdlIGF0dGVtcHRc biIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSA3OgkvKiBQb3dl ciBNb2RlIHJlZ2lzdGVyICovCisgICAgICAgIGlmICh2YWx1ZSAmIDgpCisgICAgICAgICAgICBw cmludGYoIiVzOiBDUFUgdm9sdGFnZSBjaGFuZ2UgYXR0ZW1wdFxuIiwgX19GVU5DVElPTl9fKTsK KyAgICAgICAgc3dpdGNoICh2YWx1ZSAmIDcpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAg ICAgLyogRG8gbm90aGluZyAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAx OgorICAgICAgICAgICAgLyogSWRsZSAqLworICAgICAgICAgICAgaWYgKCEocy0+Y21fcmVnc1tD Q0NSXSAmICgxIDw8IDMxKSkpIHsJLyogQ1BESVMgKi8KKyAgICAgICAgICAgICAgICBjcHVfaW50 ZXJydXB0KHMtPmVudiwgQ1BVX0lOVEVSUlVQVF9IQUxUKTsKKyAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisKKyAg ICAgICAgY2FzZSAyOgorICAgICAgICAgICAgLyogRGVlcC1JZGxlICovCisgICAgICAgICAgICBj cHVfaW50ZXJydXB0KHMtPmVudiwgQ1BVX0lOVEVSUlVQVF9IQUxUKTsKKyAgICAgICAgICAgIHMt PnBtX3JlZ3NbUkNTUiA+PiAyXSB8PSAweDg7CS8qIFNldCBHUFIgKi8KKyAgICAgICAgICAgIGdv dG8gbWVzc2FnZTsKKworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBjcHVfcmVzZXQocy0+ ZW52KTsKKyAgICAgICAgICAgIHMtPmVudi0+Y3AxNS5jMV9zeXMgPSAwOworICAgICAgICAgICAg cy0+ZW52LT5jcDE1LmMxX2NvcHJvYyA9IDA7CisgICAgICAgICAgICBzLT5lbnYtPmNwMTUuYzIg PSAwOworICAgICAgICAgICAgcy0+ZW52LT5jcDE1LmMzID0gMDsKKyAgICAgICAgICAgIHMtPnBt X3JlZ3NbUFNTUiA+PiAyXSB8PSAweDg7CS8qIFNldCBTVFMgKi8KKyAgICAgICAgICAgIHMtPnBt X3JlZ3NbUkNTUiA+PiAyXSB8PSAweDg7CS8qIFNldCBHUFIgKi8KKworICAgICAgICAgICAgLyoK KyAgICAgICAgICAgICAqIFRoZSBzY3JhdGNoLXBhZCByZWdpc3RlciBpcyBhbG1vc3QgdW5pdmVy c2FsbHkgdXNlZAorICAgICAgICAgICAgICogZm9yIHN0b3JpbmcgdGhlIHJldHVybiBhZGRyZXNz IG9uIHN1c3BlbmQuICBGb3IgdGhlCisgICAgICAgICAgICAgKiBsYWNrIG9mIGEgcmVzdW1pbmcg Ym9vdGxvYWRlciwgcGVyZm9ybSBhIGp1bXAKKyAgICAgICAgICAgICAqIGRpcmVjdGx5IHRvIHRo YXQgYWRkcmVzcy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbWVtc2V0KHMtPmVudi0+ cmVncywgMCwgNCAqIDE1KTsKKyAgICAgICAgICAgIHMtPmVudi0+cmVnc1sxNV0gPSBzLT5wbV9y ZWdzW1BTUFIgPj4gMl07CisKKyNpZiAwCisgICAgICAgICAgICBidWZmZXIgPSAweGU1OWZmMDAw OwkvKiBsZHIgICAgIHBjLCBbcGMsICMwXSAqLworICAgICAgICAgICAgY3B1X3BoeXNpY2FsX21l bW9yeV93cml0ZSgwLCAmYnVmZmVyLCA0KTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHMtPnBtX3Jl Z3NbUFNQUiA+PiAyXTsKKyAgICAgICAgICAgIGNwdV9waHlzaWNhbF9tZW1vcnlfd3JpdGUoOCwg JmJ1ZmZlciwgNCk7CisjZW5kaWYKKworICAgICAgICAgICAgLyogU3VzcGVuZCAqLworICAgICAg ICAgICAgY3B1X2ludGVycnVwdChjcHVfc2luZ2xlX2VudiwgQ1BVX0lOVEVSUlVQVF9IQUxUKTsK KworICAgICAgICAgICAgZ290byBtZXNzYWdlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg IG1lc3NhZ2U6CisgICAgICAgICAgICBwcmludGYoIiVzOiBtYWNoaW5lIGVudGVyZWQgJXMgbW9k ZVxuIiwgX19GVU5DVElPTl9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3cm1vZGVb dmFsdWUgJiA3XSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0Ogor ICAgICAgICBwcmludGYoIiVzOiBCYWQgcmVnaXN0ZXIgMHgleFxuIiwgX19GVU5DVElPTl9fLCBy ZWcpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8qIFBlcmZvcm1hY2UgTW9uaXRvcmlu ZyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ1BQTU5DCQkwCS8qIFBlcmZvcm1hbmNlIE1vbml0b3Ig Q29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDUENDTlQJCTEJLyogQ2xvY2sgQ291bnRlciBy ZWdpc3RlciAqLworI2RlZmluZSBDUElOVEVOCQk0CS8qIEludGVycnVwdCBFbmFibGUgcmVnaXN0 ZXIgKi8KKyNkZWZpbmUgQ1BGTEFHCQk1CS8qIE92ZXJmbG93IEZsYWcgcmVnaXN0ZXIgKi8KKyNk ZWZpbmUgQ1BFVlRTRUwJOAkvKiBFdmVudCBTZWxlY3Rpb24gcmVnaXN0ZXIgKi8KKworI2RlZmlu ZSBDUFBNTjAJCTAJLyogUGVyZm9ybWFuY2UgQ291bnQgcmVnaXN0ZXIgMCAqLworI2RlZmluZSBD UFBNTjEJCTEJLyogUGVyZm9ybWFuY2UgQ291bnQgcmVnaXN0ZXIgMSAqLworI2RlZmluZSBDUFBN TjIJCTIJLyogUGVyZm9ybWFuY2UgQ291bnQgcmVnaXN0ZXIgMiAqLworI2RlZmluZSBDUFBNTjMJ CTMJLyogUGVyZm9ybWFuY2UgQ291bnQgcmVnaXN0ZXIgMyAqLworCitzdGF0aWMgdWludDMyX3Qg cHhhMnh4X3BlcmZfcmVhZCh2b2lkICpvcGFxdWUsIGludCBvcDIsIGludCByZWcsIGludCBjcm0p Cit7CisgICAgc3RydWN0IHB4YTJ4eF9zdGF0ZV9zICpzID0gKHN0cnVjdCBweGEyeHhfc3RhdGVf cyAqKSBvcGFxdWU7CisKKyAgICBzd2l0Y2ggKHJlZykgeworICAgIGNhc2UgQ1BQTU5DOgorICAg ICAgICByZXR1cm4gcy0+cG1uYzsKKyAgICBjYXNlIENQQ0NOVDoKKyAgICAgICAgaWYgKHMtPnBt bmMgJiAxKQorICAgICAgICAgICAgcmV0dXJuIHFlbXVfZ2V0X2Nsb2NrKHZtX2Nsb2NrKTsKKyAg ICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBDUElOVEVOOgorICAg IGNhc2UgQ1BGTEFHOgorICAgIGNhc2UgQ1BFVlRTRUw6CisgICAgICAgIHJldHVybiAwOworCisg ICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRmKCIlczogQmFkIHJlZ2lzdGVyIDB4JXhcbiIsIF9f RlVOQ1RJT05fXywgcmVnKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiAwOwor fQorCitzdGF0aWMgdm9pZCBweGEyeHhfcGVyZl93cml0ZSh2b2lkICpvcGFxdWUsIGludCBvcDIs IGludCByZWcsIGludCBjcm0sCisgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsdWUpCit7Cisg ICAgc3RydWN0IHB4YTJ4eF9zdGF0ZV9zICpzID0gKHN0cnVjdCBweGEyeHhfc3RhdGVfcyAqKSBv cGFxdWU7CisKKyAgICBzd2l0Y2ggKHJlZykgeworICAgIGNhc2UgQ1BQTU5DOgorICAgICAgICBz LT5wbW5jID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDUENDTlQ6CisgICAg Y2FzZSBDUElOVEVOOgorICAgIGNhc2UgQ1BGTEFHOgorICAgIGNhc2UgQ1BFVlRTRUw6CisgICAg ICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRmKCIlczogQmFkIHJlZ2lz dGVyIDB4JXhcbiIsIF9fRlVOQ1RJT05fXywgcmVnKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor fQorCitzdGF0aWMgdWludDMyX3QgcHhhMnh4X2NwMTRfcmVhZCh2b2lkICpvcGFxdWUsIGludCBv cDIsIGludCByZWcsIGludCBjcm0pCit7CisgICAgc3dpdGNoIChjcm0pIHsKKyAgICBjYXNlIDA6 CisgICAgICAgIHJldHVybiBweGEyeHhfY2xrcHdyX3JlYWQob3BhcXVlLCBvcDIsIHJlZywgY3Jt KTsKKyAgICBjYXNlIDE6CisgICAgICAgIHJldHVybiBweGEyeHhfcGVyZl9yZWFkKG9wYXF1ZSwg b3AyLCByZWcsIGNybSk7CisgICAgY2FzZSAyOgorICAgICAgICBzd2l0Y2ggKHJlZykgeworICAg ICAgICBjYXNlIENQUE1OMDoKKyAgICAgICAgY2FzZSBDUFBNTjE6CisgICAgICAgIGNhc2UgQ1BQ TU4yOgorICAgICAgICBjYXNlIENQUE1OMzoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg ICB9CisgICAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworICAgIGRlZmF1bHQ6CisgICAgICAgIHBy aW50ZigiJXM6IEJhZCByZWdpc3RlciAweCV4XG4iLCBfX0ZVTkNUSU9OX18sIHJlZyk7CisgICAg ICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHhhMnh4 X2NwMTRfd3JpdGUodm9pZCAqb3BhcXVlLCBpbnQgb3AyLCBpbnQgcmVnLCBpbnQgY3JtLAorICAg ICAgICAgICAgICAgIHVpbnQzMl90IHZhbHVlKQoreworICAgIHN3aXRjaCAoY3JtKSB7CisgICAg Y2FzZSAwOgorICAgICAgICBweGEyeHhfY2xrcHdyX3dyaXRlKG9wYXF1ZSwgb3AyLCByZWcsIGNy bSwgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIHB4YTJ4eF9w ZXJmX3dyaXRlKG9wYXF1ZSwgb3AyLCByZWcsIGNybSwgdmFsdWUpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIDI6CisgICAgICAgIHN3aXRjaCAocmVnKSB7CisgICAgICAgIGNhc2UgQ1BQTU4w OgorICAgICAgICBjYXNlIENQUE1OMToKKyAgICAgICAgY2FzZSBDUFBNTjI6CisgICAgICAgIGNh c2UgQ1BQTU4zOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8qIEZh bGwgdGhyb3VnaCAqLworICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50ZigiJXM6IEJhZCByZWdp c3RlciAweCV4XG4iLCBfX0ZVTkNUSU9OX18sIHJlZyk7CisgICAgICAgIGJyZWFrOworICAgIH0K K30KKworI2RlZmluZSBNRENORkcJCTB4MDAJLyogU0RSQU0gQ29uZmlndXJhdGlvbiByZWdpc3Rl ciAqLworI2RlZmluZSBNRFJFRlIJCTB4MDQJLyogU0RSQU0gUmVmcmVzaCBDb250cm9sIHJlZ2lz dGVyICovCisjZGVmaW5lIE1TQzAJCTB4MDgJLyogU3RhdGljIE1lbW9yeSBDb250cm9sIHJlZ2lz dGVyIDAgKi8KKyNkZWZpbmUgTVNDMQkJMHgwYwkvKiBTdGF0aWMgTWVtb3J5IENvbnRyb2wgcmVn aXN0ZXIgMSAqLworI2RlZmluZSBNU0MyCQkweDEwCS8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbCBy ZWdpc3RlciAyICovCisjZGVmaW5lIE1FQ1IJCTB4MTQJLyogRXhwYW5zaW9uIE1lbW9yeSBCdXMg Q29uZmlnIHJlZ2lzdGVyICovCisjZGVmaW5lIFNYQ05GRwkJMHgxYwkvKiBTeW5jaHJvbm91cyBT dGF0aWMgTWVtb3J5IENvbmZpZyByZWdpc3RlciAqLworI2RlZmluZSBNQ01FTTAJCTB4MjgJLyog UEMgQ2FyZCBNZW1vcnkgU29ja2V0IDAgVGltaW5nIHJlZ2lzdGVyICovCisjZGVmaW5lIE1DTUVN MQkJMHgyYwkvKiBQQyBDYXJkIE1lbW9yeSBTb2NrZXQgMSBUaW1pbmcgcmVnaXN0ZXIgKi8KKyNk ZWZpbmUgTUNBVFQwCQkweDMwCS8qIFBDIENhcmQgQXR0cmlidXRlIFNvY2tldCAwIHJlZ2lzdGVy ICovCisjZGVmaW5lIE1DQVRUMQkJMHgzNAkvKiBQQyBDYXJkIEF0dHJpYnV0ZSBTb2NrZXQgMSBy ZWdpc3RlciAqLworI2RlZmluZSBNQ0lPMAkJMHgzOAkvKiBQQyBDYXJkIEkvTyBTb2NrZXQgMCBU aW1pbmcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUNJTzEJCTB4M2MJLyogUEMgQ2FyZCBJL08gU29j a2V0IDEgVGltaW5nIHJlZ2lzdGVyICovCisjZGVmaW5lIE1ETVJTCQkweDQwCS8qIFNEUkFNIE1v ZGUgUmVnaXN0ZXIgU2V0IENvbmZpZyByZWdpc3RlciAqLworI2RlZmluZSBCT09UX0RFRgkweDQ0 CS8qIEJvb3QtdGltZSBEZWZhdWx0IENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUg QVJCX0NOVEwJMHg0OAkvKiBBcmJpdGVyIENvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQlND TlRSMAkJMHg0YwkvKiBNZW1vcnkgQnVmZmVyIFN0cmVuZ3RoIENvbnRyb2wgcmVnaXN0ZXIgMCAq LworI2RlZmluZSBCU0NOVFIxCQkweDUwCS8qIE1lbW9yeSBCdWZmZXIgU3RyZW5ndGggQ29udHJv bCByZWdpc3RlciAxICovCisjZGVmaW5lIExDREJTQ05UUgkweDU0CS8qIExDRCBCdWZmZXIgU3Ry ZW5ndGggQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBNRE1SU0xQCQkweDU4CS8qIExvdyBQ b3dlciBTRFJBTSBNb2RlIFNldCBDb25maWcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQlNDTlRSMgkJ MHg1YwkvKiBNZW1vcnkgQnVmZmVyIFN0cmVuZ3RoIENvbnRyb2wgcmVnaXN0ZXIgMiAqLworI2Rl ZmluZSBCU0NOVFIzCQkweDYwCS8qIE1lbW9yeSBCdWZmZXIgU3RyZW5ndGggQ29udHJvbCByZWdp c3RlciAzICovCisjZGVmaW5lIFNBMTExMAkJMHg2NAkvKiBTQS0xMTEwIE1lbW9yeSBDb21wYXRp YmlsaXR5IHJlZ2lzdGVyICovCisKK3N0YXRpYyB1aW50MzJfdCBweGEyeHhfbW1fcmVhZCh2b2lk ICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyKQoreworICAgIHN0cnVjdCBweGEyeHhf c3RhdGVfcyAqcyA9IChzdHJ1Y3QgcHhhMnh4X3N0YXRlX3MgKikgb3BhcXVlOworICAgIGFkZHIg LT0gcy0+bW1fYmFzZTsKKworICAgIHN3aXRjaCAoYWRkcikgeworICAgIGNhc2UgTURDTkZHIC4u LiBTQTExMTA6CisgICAgICAgIGlmICgoYWRkciAmIDMpID09IDApCisgICAgICAgICAgICByZXR1 cm4gcy0+bW1fcmVnc1thZGRyID4+IDJdOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRm KCIlczogQmFkIHJlZ2lzdGVyICIgUkVHX0ZNVCAiXG4iLCBfX0ZVTkNUSU9OX18sIGFkZHIpOwor ICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHB4 YTJ4eF9tbV93cml0ZSh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLAorICAg ICAgICAgICAgICAgIHVpbnQzMl90IHZhbHVlKQoreworICAgIHN0cnVjdCBweGEyeHhfc3RhdGVf cyAqcyA9IChzdHJ1Y3QgcHhhMnh4X3N0YXRlX3MgKikgb3BhcXVlOworICAgIGFkZHIgLT0gcy0+ bW1fYmFzZTsKKworICAgIHN3aXRjaCAoYWRkcikgeworICAgIGNhc2UgTURDTkZHIC4uLiBTQTEx MTA6CisgICAgICAgIGlmICgoYWRkciAmIDMpID09IDApIHsKKyAgICAgICAgICAgIHMtPm1tX3Jl Z3NbYWRkciA+PiAyXSA9IHZhbHVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor ICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50ZigiJXM6IEJhZCByZWdpc3RlciAiIFJFR19GTVQg IlxuIiwgX19GVU5DVElPTl9fLCBhZGRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitz dGF0aWMgQ1BVUmVhZE1lbW9yeUZ1bmMgKnB4YTJ4eF9tbV9yZWFkZm5bXSA9IHsKKyAgICBweGEy eHhfbW1fcmVhZCwKKyAgICBweGEyeHhfbW1fcmVhZCwKKyAgICBweGEyeHhfbW1fcmVhZCwKK307 CisKK3N0YXRpYyBDUFVXcml0ZU1lbW9yeUZ1bmMgKnB4YTJ4eF9tbV93cml0ZWZuW10gPSB7Cisg ICAgcHhhMnh4X21tX3dyaXRlLAorICAgIHB4YTJ4eF9tbV93cml0ZSwKKyAgICBweGEyeHhfbW1f d3JpdGUsCit9OworCisvKiBTeW5jaHJvbm91cyBTZXJpYWwgUG9ydHMgKi8KK3N0cnVjdCBweGEy eHhfc3NwX3MgeworICAgIHRhcmdldF9waHlzX2FkZHJfdCBiYXNlOworICAgIGludCBpcnE7Cisg ICAgc3RydWN0IHB4YTJ4eF9waWNfc3RhdGVfcyAqcGljOworICAgIGludCBlbmFibGU7CisKKyAg ICB1aW50MzJfdCBzc2NyWzJdOworICAgIHVpbnQzMl90IHNzcHNwOworICAgIHVpbnQzMl90IHNz dG87CisgICAgdWludDMyX3Qgc3NpdHI7CisgICAgdWludDMyX3Qgc3NzcjsKKyAgICB1aW50OF90 IHNzdHNhOworICAgIHVpbnQ4X3Qgc3Nyc2E7CisgICAgdWludDhfdCBzc2FjZDsKKworICAgIHVp bnQzMl90IHJ4X2ZpZm9bMTZdOworICAgIGludCByeF9sZXZlbDsKKyAgICBpbnQgcnhfc3RhcnQ7 CisKKyAgICB1aW50MzJfdCAoKnJlYWRmbikodm9pZCAqb3BhcXVlKTsKKyAgICB2b2lkICgqd3Jp dGVmbikodm9pZCAqb3BhcXVlLCB1aW50MzJfdCB2YWx1ZSk7CisgICAgdm9pZCAqb3BhcXVlOwor fTsKKworI2RlZmluZSBTU0NSMAkweDAwCS8qIFNTUCBDb250cm9sIHJlZ2lzdGVyIDAgKi8KKyNk ZWZpbmUgU1NDUjEJMHgwNAkvKiBTU1AgQ29udHJvbCByZWdpc3RlciAxICovCisjZGVmaW5lIFNT U1IJMHgwOAkvKiBTU1AgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFNTSVRSCTB4MGMJLyog U1NQIEludGVycnVwdCBUZXN0IHJlZ2lzdGVyICovCisjZGVmaW5lIFNTRFIJMHgxMAkvKiBTU1Ag RGF0YSByZWdpc3RlciAqLworI2RlZmluZSBTU1RPCTB4MjgJLyogU1NQIFRpbWUtT3V0IHJlZ2lz dGVyICovCisjZGVmaW5lIFNTUFNQCTB4MmMJLyogU1NQIFByb2dyYW1tYWJsZSBTZXJpYWwgUHJv dG9jb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NUU0EJMHgzMAkvKiBTU1AgVFggVGltZSBTbG90 IEFjdGl2ZSByZWdpc3RlciAqLworI2RlZmluZSBTU1JTQQkweDM0CS8qIFNTUCBSWCBUaW1lIFNs b3QgQWN0aXZlIHJlZ2lzdGVyICovCisjZGVmaW5lIFNTVFNTCTB4MzgJLyogU1NQIFRpbWUgU2xv dCBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NBQ0QJMHgzYwkvKiBTU1AgQXVkaW8gQ2xv Y2sgRGl2aWRlciByZWdpc3RlciAqLworCisvKiBCaXRmaWVsZHMgZm9yIGFib3ZlIHJlZ2lzdGVy cyAqLworI2RlZmluZSBTU0NSMF9TUEkoeCkJKCgoeCkgJiAweDMwKSA9PSAweDAwKQorI2RlZmlu ZSBTU0NSMF9TU1AoeCkJKCgoeCkgJiAweDMwKSA9PSAweDEwKQorI2RlZmluZSBTU0NSMF9VV0lS RSh4KQkoKCh4KSAmIDB4MzApID09IDB4MjApCisjZGVmaW5lIFNTQ1IwX1BTUCh4KQkoKCh4KSAm IDB4MzApID09IDB4MzApCisjZGVmaW5lIFNTQ1IwX1NTRQkoMSA8PCA3KQorI2RlZmluZSBTU0NS MF9SSU0JKDEgPDwgMjIpCisjZGVmaW5lIFNTQ1IwX1RJTQkoMSA8PCAyMykKKyNkZWZpbmUgU1ND UjBfTU9ECSgxIDw8IDMxKQorI2RlZmluZSBTU0NSMF9EU1MoeCkJKCgoKCh4KSA+PiAxNikgJiAw eDEwKSB8ICgoeCkgJiAweGYpKSArIDEpCisjZGVmaW5lIFNTQ1IxX1JJRQkoMSA8PCAwKQorI2Rl ZmluZSBTU0NSMV9USUUJKDEgPDwgMSkKKyNkZWZpbmUgU1NDUjFfTEJNCSgxIDw8IDIpCisjZGVm aW5lIFNTQ1IxX01XRFMJKDEgPDwgNSkKKyNkZWZpbmUgU1NDUjFfVEZUKHgpCSgoKCh4KSA+PiA2 KSAmIDB4ZikgKyAxKQorI2RlZmluZSBTU0NSMV9SRlQoeCkJKCgoKHgpID4+IDEwKSAmIDB4Zikg KyAxKQorI2RlZmluZSBTU0NSMV9FRldSCSgxIDw8IDE0KQorI2RlZmluZSBTU0NSMV9QSU5URQko MSA8PCAxOCkKKyNkZWZpbmUgU1NDUjFfVElOVEUJKDEgPDwgMTkpCisjZGVmaW5lIFNTQ1IxX1JT UkUJKDEgPDwgMjApCisjZGVmaW5lIFNTQ1IxX1RTUkUJKDEgPDwgMjEpCisjZGVmaW5lIFNTQ1Ix X0VCQ0VJCSgxIDw8IDI5KQorI2RlZmluZSBTU0lUUl9JTlQJKDcgPDwgNSkKKyNkZWZpbmUgU1NT Ul9UTkYJKDEgPDwgMikKKyNkZWZpbmUgU1NTUl9STkUJKDEgPDwgMykKKyNkZWZpbmUgU1NTUl9U RlMJKDEgPDwgNSkKKyNkZWZpbmUgU1NTUl9SRlMJKDEgPDwgNikKKyNkZWZpbmUgU1NTUl9ST1IJ KDEgPDwgNykKKyNkZWZpbmUgU1NTUl9QSU5UCSgxIDw8IDE4KQorI2RlZmluZSBTU1NSX1RJTlQJ KDEgPDwgMTkpCisjZGVmaW5lIFNTU1JfRU9DCSgxIDw8IDIwKQorI2RlZmluZSBTU1NSX1RVUgko MSA8PCAyMSkKKyNkZWZpbmUgU1NTUl9CQ0UJKDEgPDwgMjMpCisjZGVmaW5lIFNTU1JfUlcJCTB4 MDBiYzAwODAKKworc3RhdGljIHZvaWQgcHhhMnh4X3NzcF9pbnRfdXBkYXRlKHN0cnVjdCBweGEy eHhfc3NwX3MgKnMpCit7CisgICAgaW50IGxldmVsID0gMDsKKworICAgIGxldmVsIHw9IHMtPnNz aXRyICYgU1NJVFJfSU5UOworICAgIGxldmVsIHw9IChzLT5zc3NyICYgU1NTUl9CQ0UpICAmJiAg KHMtPnNzY3JbMV0gJiBTU0NSMV9FQkNFSSk7CisgICAgbGV2ZWwgfD0gKHMtPnNzc3IgJiBTU1NS X1RVUikgICYmICEocy0+c3NjclswXSAmIFNTQ1IwX1RJTSk7CisgICAgbGV2ZWwgfD0gKHMtPnNz c3IgJiBTU1NSX0VPQykgICYmICAocy0+c3NzciAmIChTU1NSX1RJTlQgfCBTU1NSX1BJTlQpKTsK KyAgICBsZXZlbCB8PSAocy0+c3NzciAmIFNTU1JfVElOVCkgJiYgIChzLT5zc2NyWzFdICYgU1ND UjFfVElOVEUpOworICAgIGxldmVsIHw9IChzLT5zc3NyICYgU1NTUl9QSU5UKSAmJiAgKHMtPnNz Y3JbMV0gJiBTU0NSMV9QSU5URSk7CisgICAgbGV2ZWwgfD0gKHMtPnNzc3IgJiBTU1NSX1JPUikg ICYmICEocy0+c3NjclswXSAmIFNTQ1IwX1JJTSk7CisgICAgbGV2ZWwgfD0gKHMtPnNzc3IgJiBT U1NSX1JGUykgICYmICAocy0+c3NjclsxXSAmIFNTQ1IxX1JJRSk7CisgICAgbGV2ZWwgfD0gKHMt PnNzc3IgJiBTU1NSX1RGUykgICYmICAocy0+c3NjclsxXSAmIFNTQ1IxX1RJRSk7CisgICAgcGlj X3NldF9pcnFfbmV3KHMtPnBpYywgcy0+aXJxLCAhIWxldmVsKTsKK30KKworc3RhdGljIHZvaWQg cHhhMnh4X3NzcF9maWZvX3VwZGF0ZShzdHJ1Y3QgcHhhMnh4X3NzcF9zICpzKQoreworICAgIHMt PnNzc3IgJj0gfigweGYgPDwgMTIpOwkvKiBDbGVhciBSRkwgKi8KKyAgICBzLT5zc3NyICY9IH4o MHhmIDw8IDgpOwkvKiBDbGVhciBURkwgKi8KKyAgICBzLT5zc3NyICY9IH5TU1NSX1RORjsKKyAg ICBpZiAocy0+ZW5hYmxlKSB7CisgICAgICAgIHMtPnNzc3IgfD0gKChzLT5yeF9sZXZlbCAtIDEp ICYgMHhmKSA8PCAxMjsKKyAgICAgICAgaWYgKHMtPnJ4X2xldmVsID49IFNTQ1IxX1JGVChzLT5z c2NyWzFdKSkKKyAgICAgICAgICAgIHMtPnNzc3IgfD0gU1NTUl9SRlM7CisgICAgICAgIGVsc2UK KyAgICAgICAgICAgIHMtPnNzc3IgJj0gflNTU1JfUkZTOworICAgICAgICBpZiAoMCA8PSBTU0NS MV9URlQocy0+c3NjclsxXSkpCisgICAgICAgICAgICBzLT5zc3NyIHw9IFNTU1JfVEZTOworICAg ICAgICBlbHNlCisgICAgICAgICAgICBzLT5zc3NyICY9IH5TU1NSX1RGUzsKKyAgICAgICAgaWYg KHMtPnJ4X2xldmVsKQorICAgICAgICAgICAgcy0+c3NzciB8PSBTU1NSX1JORTsKKyAgICAgICAg ZWxzZQorICAgICAgICAgICAgcy0+c3NzciAmPSB+U1NTUl9STkU7CisgICAgICAgIHMtPnNzc3Ig fD0gU1NTUl9UTkY7CisgICAgfQorCisgICAgcHhhMnh4X3NzcF9pbnRfdXBkYXRlKHMpOworfQor CitzdGF0aWMgdWludDMyX3QgcHhhMnh4X3NzcF9yZWFkKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3Bo eXNfYWRkcl90IGFkZHIpCit7CisgICAgc3RydWN0IHB4YTJ4eF9zc3BfcyAqcyA9IChzdHJ1Y3Qg cHhhMnh4X3NzcF9zICopIG9wYXF1ZTsKKyAgICB1aW50MzJfdCByZXR2YWw7CisgICAgYWRkciAt PSBzLT5iYXNlOworCisgICAgc3dpdGNoIChhZGRyKSB7CisgICAgY2FzZSBTU0NSMDoKKyAgICAg ICAgcmV0dXJuIHMtPnNzY3JbMF07CisgICAgY2FzZSBTU0NSMToKKyAgICAgICAgcmV0dXJuIHMt PnNzY3JbMV07CisgICAgY2FzZSBTU1BTUDoKKyAgICAgICAgcmV0dXJuIHMtPnNzcHNwOworICAg IGNhc2UgU1NUTzoKKyAgICAgICAgcmV0dXJuIHMtPnNzdG87CisgICAgY2FzZSBTU0lUUjoKKyAg ICAgICAgcmV0dXJuIHMtPnNzaXRyOworICAgIGNhc2UgU1NTUjoKKyAgICAgICAgcmV0dXJuIHMt PnNzc3IgfCBzLT5zc2l0cjsKKyAgICBjYXNlIFNTRFI6CisgICAgICAgIGlmICghcy0+ZW5hYmxl KQorICAgICAgICAgICAgcmV0dXJuIDB4ZmZmZmZmZmY7CisgICAgICAgIGlmIChzLT5yeF9sZXZl bCA8IDEpIHsKKyAgICAgICAgICAgIHByaW50ZigiJXM6IFNTUCBSeCBVbmRlcnJ1blxuIiwgX19G VU5DVElPTl9fKTsKKyAgICAgICAgICAgIHJldHVybiAweGZmZmZmZmZmOworICAgICAgICB9Cisg ICAgICAgIHMtPnJ4X2xldmVsIC0tOworICAgICAgICByZXR2YWwgPSBzLT5yeF9maWZvW3MtPnJ4 X3N0YXJ0ICsrXTsKKyAgICAgICAgcy0+cnhfc3RhcnQgJj0gMHhmOworICAgICAgICBweGEyeHhf c3NwX2ZpZm9fdXBkYXRlKHMpOworICAgICAgICByZXR1cm4gcmV0dmFsOworICAgIGNhc2UgU1NU U0E6CisgICAgICAgIHJldHVybiBzLT5zc3RzYTsKKyAgICBjYXNlIFNTUlNBOgorICAgICAgICBy ZXR1cm4gcy0+c3Nyc2E7CisgICAgY2FzZSBTU1RTUzoKKyAgICAgICAgcmV0dXJuIDA7CisgICAg Y2FzZSBTU0FDRDoKKyAgICAgICAgcmV0dXJuIHMtPnNzYWNkOworICAgIGRlZmF1bHQ6CisgICAg ICAgIHByaW50ZigiJXM6IEJhZCByZWdpc3RlciAiIFJFR19GTVQgIlxuIiwgX19GVU5DVElPTl9f LCBhZGRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgdm9pZCBweGEyeHhfc3NwX3dyaXRlKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90 IGFkZHIsCisgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsdWUpCit7CisgICAgc3RydWN0IHB4 YTJ4eF9zc3BfcyAqcyA9IChzdHJ1Y3QgcHhhMnh4X3NzcF9zICopIG9wYXF1ZTsKKyAgICBhZGRy IC09IHMtPmJhc2U7CisKKyAgICBzd2l0Y2ggKGFkZHIpIHsKKyAgICBjYXNlIFNTQ1IwOgorICAg ICAgICBzLT5zc2NyWzBdID0gdmFsdWUgJiAweGM3ZmZmZmZmOworICAgICAgICBzLT5lbmFibGUg PSB2YWx1ZSAmIFNTQ1IwX1NTRTsKKyAgICAgICAgaWYgKHZhbHVlICYgU1NDUjBfTU9EKQorICAg ICAgICAgICAgcHJpbnRmKCIlczogQXR0ZW1wdCB0byB1c2UgbmV0d29yayBtb2RlXG4iLCBfX0ZV TkNUSU9OX18pOworICAgICAgICBpZiAocy0+ZW5hYmxlICYmIFNTQ1IwX0RTUyh2YWx1ZSkgPCA0 KQorICAgICAgICAgICAgcHJpbnRmKCIlczogV3JvbmcgZGF0YSBzaXplOiAlaSBiaXRzXG4iLCBf X0ZVTkNUSU9OX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NDUjBfRFNTKHZhbHVl KSk7CisgICAgICAgIGlmICghKHZhbHVlICYgU1NDUjBfU1NFKSkgeworICAgICAgICAgICAgcy0+ c3NzciA9IDA7CisgICAgICAgICAgICBzLT5zc2l0ciA9IDA7CisgICAgICAgICAgICBzLT5yeF9s ZXZlbCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcHhhMnh4X3NzcF9maWZvX3VwZGF0ZShzKTsK KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTQ1IxOgorICAgICAgICBzLT5zc2NyWzFdID0g dmFsdWU7CisgICAgICAgIGlmICh2YWx1ZSAmIChTU0NSMV9MQk0gfCBTU0NSMV9FRldSKSkKKyAg ICAgICAgICAgIHByaW50ZigiJXM6IEF0dGVtcHQgdG8gdXNlIFNTUCB0ZXN0IG1vZGVcbiIsIF9f RlVOQ1RJT05fXyk7CisgICAgICAgIHB4YTJ4eF9zc3BfZmlmb191cGRhdGUocyk7CisgICAgICAg IGJyZWFrOworCisgICAgY2FzZSBTU1BTUDoKKyAgICAgICAgcy0+c3Nwc3AgPSB2YWx1ZTsKKyAg ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTVE86CisgICAgICAgIHMtPnNzdG8gPSB2YWx1ZTsK KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSVRSOgorICAgICAgICBzLT5zc2l0ciA9IHZh bHVlICYgU1NJVFJfSU5UOworICAgICAgICBweGEyeHhfc3NwX2ludF91cGRhdGUocyk7CisgICAg ICAgIGJyZWFrOworCisgICAgY2FzZSBTU1NSOgorICAgICAgICBzLT5zc3NyICY9IH4odmFsdWUg JiBTU1NSX1JXKTsKKyAgICAgICAgcHhhMnh4X3NzcF9pbnRfdXBkYXRlKHMpOworICAgICAgICBi cmVhazsKKworICAgIGNhc2UgU1NEUjoKKyAgICAgICAgaWYgKFNTQ1IwX1VXSVJFKHMtPnNzY3Jb MF0pKSB7CisgICAgICAgICAgICBpZiAocy0+c3NjclsxXSAmIFNTQ1IxX01XRFMpCisgICAgICAg ICAgICAgICAgdmFsdWUgJj0gMHhmZmZmOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg ICAgIHZhbHVlICY9IDB4ZmY7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgLyogTm90ZSBo b3cgMzJiaXRzIG92ZXJmbG93IGRvZXMgbm8gaGFybSBoZXJlICovCisgICAgICAgICAgICB2YWx1 ZSAmPSAoMSA8PCBTU0NSMF9EU1Mocy0+c3NjclswXSkpIC0gMTsKKworICAgICAgICAvKiBEYXRh IGdvZXMgZnJvbSBoZXJlIHRvIHRoZSBUeCBGSUZPIGFuZCBpcyBzaGlmdGVkIG91dCBmcm9tCisg ICAgICAgICAqIHRoZXJlIGRpcmVjdGx5IHRvIHRoZSBzbGF2ZSwgbm8gbmVlZCB0byBidWZmZXIg aXQuCisgICAgICAgICAqLworICAgICAgICBpZiAocy0+ZW5hYmxlKSB7CisgICAgICAgICAgICBp ZiAocy0+d3JpdGVmbikKKyAgICAgICAgICAgICAgICBzLT53cml0ZWZuKHMtPm9wYXF1ZSwgdmFs dWUpOworCisgICAgICAgICAgICBpZiAocy0+cnhfbGV2ZWwgPCAweDEwKSB7CisgICAgICAgICAg ICAgICAgaWYgKHMtPnJlYWRmbikKKyAgICAgICAgICAgICAgICAgICAgcy0+cnhfZmlmb1socy0+ cnhfc3RhcnQgKyBzLT5yeF9sZXZlbCArKykgJiAweGZdID0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzLT5yZWFkZm4ocy0+b3BhcXVlKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgICAgIHMtPnJ4X2ZpZm9bKHMtPnJ4X3N0YXJ0ICsgcy0+cnhfbGV2ZWwgKysp ICYgMHhmXSA9IDB4MDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHMtPnNz c3IgfD0gU1NTUl9ST1I7CisgICAgICAgIH0KKyAgICAgICAgcHhhMnh4X3NzcF9maWZvX3VwZGF0 ZShzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTVFNBOgorICAgICAgICBzLT5zc3Rz YSA9IHZhbHVlOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1NSU0E6CisgICAgICAgIHMt PnNzcnNhID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0FDRDoKKyAgICAg ICAgcy0+c3NhY2QgPSB2YWx1ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAg ICAgICBwcmludGYoIiVzOiBCYWQgcmVnaXN0ZXIgIiBSRUdfRk1UICJcbiIsIF9fRlVOQ1RJT05f XywgYWRkcik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBweGEyeHhfc3NwX2F0 dGFjaChzdHJ1Y3QgcHhhMnh4X3NzcF9zICpwb3J0LAorICAgICAgICAgICAgICAgIHVpbnQzMl90 ICgqcmVhZGZuKSh2b2lkICpvcGFxdWUpLAorICAgICAgICAgICAgICAgIHZvaWQgKCp3cml0ZWZu KSh2b2lkICpvcGFxdWUsIHVpbnQzMl90IHZhbHVlKSwgdm9pZCAqb3BhcXVlKQoreworICAgIGlm ICghcG9ydCkgeworICAgICAgICBwcmludGYoIiVzOiBubyBzdWNoIFNTUFxuIiwgX19GVU5DVElP Tl9fKTsKKyAgICAgICAgZXhpdCgtMSk7CisgICAgfQorCisgICAgcG9ydC0+b3BhcXVlID0gb3Bh cXVlOworICAgIHBvcnQtPnJlYWRmbiA9IHJlYWRmbjsKKyAgICBwb3J0LT53cml0ZWZuID0gd3Jp dGVmbjsKK30KKworc3RhdGljIENQVVJlYWRNZW1vcnlGdW5jICpweGEyeHhfc3NwX3JlYWRmbltd ID0geworICAgIHB4YTJ4eF9zc3BfcmVhZCwKKyAgICBweGEyeHhfc3NwX3JlYWQsCisgICAgcHhh Mnh4X3NzcF9yZWFkLAorfTsKKworc3RhdGljIENQVVdyaXRlTWVtb3J5RnVuYyAqcHhhMnh4X3Nz cF93cml0ZWZuW10gPSB7CisgICAgcHhhMnh4X3NzcF93cml0ZSwKKyAgICBweGEyeHhfc3NwX3dy aXRlLAorICAgIHB4YTJ4eF9zc3Bfd3JpdGUsCit9OworCisvKiBSZWFsLVRpbWUgQ2xvY2sgKi8K KyNkZWZpbmUgUkNOUgkJMHgwMAkvKiBSVEMgQ291bnRlciByZWdpc3RlciAqLworI2RlZmluZSBS VEFSCQkweDA0CS8qIFJUQyBBbGFybSByZWdpc3RlciAqLworI2RlZmluZSBSVFNSCQkweDA4CS8q IFJUQyBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRUUgkJMHgwYwkvKiBSVEMgVGltZXIg VHJpbSByZWdpc3RlciAqLworI2RlZmluZSBSRENSCQkweDEwCS8qIFJUQyBEYXkgQ291bnRlciBy ZWdpc3RlciAqLworI2RlZmluZSBSWUNSCQkweDE0CS8qIFJUQyBZZWFyIENvdW50ZXIgcmVnaXN0 ZXIgKi8KKyNkZWZpbmUgUkRBUjEJCTB4MTgJLyogUlRDIFdyaXN0d2F0Y2ggRGF5IEFsYXJtIHJl Z2lzdGVyIDEgKi8KKyNkZWZpbmUgUllBUjEJCTB4MWMJLyogUlRDIFdyaXN0d2F0Y2ggWWVhciBB bGFybSByZWdpc3RlciAxICovCisjZGVmaW5lIFJEQVIyCQkweDIwCS8qIFJUQyBXcmlzdHdhdGNo IERheSBBbGFybSByZWdpc3RlciAyICovCisjZGVmaW5lIFJZQVIyCQkweDI0CS8qIFJUQyBXcmlz dHdhdGNoIFllYXIgQWxhcm0gcmVnaXN0ZXIgMiAqLworI2RlZmluZSBTV0NSCQkweDI4CS8qIFJU QyBTdG9wd2F0Y2ggQ291bnRlciByZWdpc3RlciAqLworI2RlZmluZSBTV0FSMQkJMHgyYwkvKiBS VEMgU3RvcHdhdGNoIEFsYXJtIHJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU1dBUjIJCTB4MzAJLyog UlRDIFN0b3B3YXRjaCBBbGFybSByZWdpc3RlciAyICovCisjZGVmaW5lIFJUQ1BJQ1IJCTB4MzQJ LyogUlRDIFBlcmlvZGljIEludGVycnVwdCBDb3VudGVyIHJlZ2lzdGVyICovCisjZGVmaW5lIFBJ QVIJCTB4MzgJLyogUlRDIFBlcmlvZGljIEludGVycnVwdCBBbGFybSByZWdpc3RlciAqLworCitz dGF0aWMgaW5saW5lIHZvaWQgcHhhMnh4X3J0Y19pbnRfdXBkYXRlKHN0cnVjdCBweGEyeHhfc3Rh dGVfcyAqcykKK3sKKyAgICBwaWNfc2V0X2lycV9uZXcocy0+cGljLCBQWEEyWFhfUElDX1JUQ0FM QVJNLCAhIShzLT5ydHNyICYgMHgyNTUzKSk7Cit9CisKK3N0YXRpYyB2b2lkIHB4YTJ4eF9ydGNf aHp1cGRhdGUoc3RydWN0IHB4YTJ4eF9zdGF0ZV9zICpzKQoreworICAgIGludDY0X3QgcnQgPSBx ZW11X2dldF9jbG9jayhydF9jbG9jayk7CisgICAgcy0+bGFzdF9yY25yICs9ICgocnQgLSBzLT5s YXN0X2h6KSA8PCAxNSkgLworICAgICAgICAgICAgKDEwMDAgKiAoKHMtPnJ0dHIgJiAweGZmZmYp ICsgMSkpOworICAgIHMtPmxhc3RfcmRjciArPSAoKHJ0IC0gcy0+bGFzdF9oeikgPDwgMTUpIC8K KyAgICAgICAgICAgICgxMDAwICogKChzLT5ydHRyICYgMHhmZmZmKSArIDEpKTsKKyAgICBzLT5s YXN0X2h6ID0gcnQ7Cit9CisKK3N0YXRpYyB2b2lkIHB4YTJ4eF9ydGNfc3d1cGRhdGUoc3RydWN0 IHB4YTJ4eF9zdGF0ZV9zICpzKQoreworICAgIGludDY0X3QgcnQgPSBxZW11X2dldF9jbG9jayhy dF9jbG9jayk7CisgICAgaWYgKHMtPnJ0c3IgJiAoMSA8PCAxMikpCisgICAgICAgIHMtPmxhc3Rf c3djciArPSAocnQgLSBzLT5sYXN0X3N3KSAvIDEwOworICAgIHMtPmxhc3Rfc3cgPSBydDsKK30K Kworc3RhdGljIHZvaWQgcHhhMnh4X3J0Y19waXVwZGF0ZShzdHJ1Y3QgcHhhMnh4X3N0YXRlX3Mg KnMpCit7CisgICAgaW50NjRfdCBydCA9IHFlbXVfZ2V0X2Nsb2NrKHJ0X2Nsb2NrKTsKKyAgICBp ZiAocy0+cnRzciAmICgxIDw8IDE1KSkKKyAgICAgICAgcy0+bGFzdF9zd2NyICs9IHJ0IC0gcy0+ bGFzdF9waTsKKyAgICBzLT5sYXN0X3BpID0gcnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBw eGEyeHhfcnRjX2FsYXJtX3VwZGF0ZShzdHJ1Y3QgcHhhMnh4X3N0YXRlX3MgKnMsCisgICAgICAg ICAgICAgICAgdWludDMyX3QgcnRzcikKK3sKKyAgICBpZiAoKHJ0c3IgJiAoMSA8PCAyKSkgJiYg IShydHNyICYgKDEgPDwgMCkpKQorICAgICAgICBxZW11X21vZF90aW1lcihzLT5ydGNfaHosIHMt Pmxhc3RfaHogKworICAgICAgICAgICAgICAgICgoKHMtPnJ0YXIgLSBzLT5sYXN0X3JjbnIpICog MTAwMCAqCisgICAgICAgICAgICAgICAgICAoKHMtPnJ0dHIgJiAweGZmZmYpICsgMSkpID4+IDE1 KSk7CisgICAgZWxzZQorICAgICAgICBxZW11X2RlbF90aW1lcihzLT5ydGNfaHopOworCisgICAg aWYgKChydHNyICYgKDEgPDwgNSkpICYmICEocnRzciAmICgxIDw8IDQpKSkKKyAgICAgICAgcWVt dV9tb2RfdGltZXIocy0+cnRjX3JkYWwxLCBzLT5sYXN0X2h6ICsKKyAgICAgICAgICAgICAgICAo KChzLT5yZGFyMSAtIHMtPmxhc3RfcmRjcikgKiAxMDAwICoKKyAgICAgICAgICAgICAgICAgICgo cy0+cnR0ciAmIDB4ZmZmZikgKyAxKSkgPj4gMTUpKTsgLyogVE9ETzogZml4dXAgKi8KKyAgICBl bHNlCisgICAgICAgIHFlbXVfZGVsX3RpbWVyKHMtPnJ0Y19yZGFsMSk7CisKKyAgICBpZiAoKHJ0 c3IgJiAoMSA8PCA3KSkgJiYgIShydHNyICYgKDEgPDwgNikpKQorICAgICAgICBxZW11X21vZF90 aW1lcihzLT5ydGNfcmRhbDIsIHMtPmxhc3RfaHogKworICAgICAgICAgICAgICAgICgoKHMtPnJk YXIyIC0gcy0+bGFzdF9yZGNyKSAqIDEwMDAgKgorICAgICAgICAgICAgICAgICAgKChzLT5ydHRy ICYgMHhmZmZmKSArIDEpKSA+PiAxNSkpOyAvKiBUT0RPOiBmaXh1cCAqLworICAgIGVsc2UKKyAg ICAgICAgcWVtdV9kZWxfdGltZXIocy0+cnRjX3JkYWwyKTsKKworICAgIGlmICgocnRzciAmIDB4 MTIwMCkgPT0gMHgxMjAwICYmICEocnRzciAmICgxIDw8IDgpKSkKKyAgICAgICAgcWVtdV9tb2Rf dGltZXIocy0+cnRjX3N3YWwxLCBzLT5sYXN0X3N3ICsKKyAgICAgICAgICAgICAgICAgICAgICAg IChzLT5zd2FyMSAtIHMtPmxhc3Rfc3djcikgKiAxMCk7IC8qIFRPRE86IGZpeHVwICovCisgICAg ZWxzZQorICAgICAgICBxZW11X2RlbF90aW1lcihzLT5ydGNfc3dhbDEpOworCisgICAgaWYgKChy dHNyICYgMHgxODAwKSA9PSAweDE4MDAgJiYgIShydHNyICYgKDEgPDwgMTApKSkKKyAgICAgICAg cWVtdV9tb2RfdGltZXIocy0+cnRjX3N3YWwyLCBzLT5sYXN0X3N3ICsKKyAgICAgICAgICAgICAg ICAgICAgICAgIChzLT5zd2FyMiAtIHMtPmxhc3Rfc3djcikgKiAxMCk7IC8qIFRPRE86IGZpeHVw ICovCisgICAgZWxzZQorICAgICAgICBxZW11X2RlbF90aW1lcihzLT5ydGNfc3dhbDIpOworCisg ICAgaWYgKChydHNyICYgMHhjMDAwKSA9PSAweGMwMDAgJiYgIShydHNyICYgKDEgPDwgMTMpKSkK KyAgICAgICAgcWVtdV9tb2RfdGltZXIocy0+cnRjX3BpLCBzLT5sYXN0X3BpICsKKyAgICAgICAg ICAgICAgICAgICAgICAgIChzLT5waWFyICYgMHhmZmZmKSAtIHMtPmxhc3RfcnRjcGljcik7Cisg ICAgZWxzZQorICAgICAgICBxZW11X2RlbF90aW1lcihzLT5ydGNfcGkpOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQgcHhhMnh4X3J0Y19oel90aWNrKHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBzdHJ1 Y3QgcHhhMnh4X3N0YXRlX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9zdGF0ZV9zICopIG9wYXF1ZTsK KyAgICBzLT5ydHNyIHw9ICgxIDw8IDApOworICAgIHB4YTJ4eF9ydGNfYWxhcm1fdXBkYXRlKHMs IHMtPnJ0c3IpOworICAgIHB4YTJ4eF9ydGNfaW50X3VwZGF0ZShzKTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkIHB4YTJ4eF9ydGNfcmRhbDFfdGljayh2b2lkICpvcGFxdWUpCit7CisgICAgc3Ry dWN0IHB4YTJ4eF9zdGF0ZV9zICpzID0gKHN0cnVjdCBweGEyeHhfc3RhdGVfcyAqKSBvcGFxdWU7 CisgICAgcy0+cnRzciB8PSAoMSA8PCA0KTsKKyAgICBweGEyeHhfcnRjX2FsYXJtX3VwZGF0ZShz LCBzLT5ydHNyKTsKKyAgICBweGEyeHhfcnRjX2ludF91cGRhdGUocyk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCBweGEyeHhfcnRjX3JkYWwyX3RpY2sodm9pZCAqb3BhcXVlKQoreworICAgIHN0 cnVjdCBweGEyeHhfc3RhdGVfcyAqcyA9IChzdHJ1Y3QgcHhhMnh4X3N0YXRlX3MgKikgb3BhcXVl OworICAgIHMtPnJ0c3IgfD0gKDEgPDwgNik7CisgICAgcHhhMnh4X3J0Y19hbGFybV91cGRhdGUo cywgcy0+cnRzcik7CisgICAgcHhhMnh4X3J0Y19pbnRfdXBkYXRlKHMpOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQgcHhhMnh4X3J0Y19zd2FsMV90aWNrKHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBz dHJ1Y3QgcHhhMnh4X3N0YXRlX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9zdGF0ZV9zICopIG9wYXF1 ZTsKKyAgICBzLT5ydHNyIHw9ICgxIDw8IDgpOworICAgIHB4YTJ4eF9ydGNfYWxhcm1fdXBkYXRl KHMsIHMtPnJ0c3IpOworICAgIHB4YTJ4eF9ydGNfaW50X3VwZGF0ZShzKTsKK30KKworc3RhdGlj IGlubGluZSB2b2lkIHB4YTJ4eF9ydGNfc3dhbDJfdGljayh2b2lkICpvcGFxdWUpCit7CisgICAg c3RydWN0IHB4YTJ4eF9zdGF0ZV9zICpzID0gKHN0cnVjdCBweGEyeHhfc3RhdGVfcyAqKSBvcGFx dWU7CisgICAgcy0+cnRzciB8PSAoMSA8PCAxMCk7CisgICAgcHhhMnh4X3J0Y19hbGFybV91cGRh dGUocywgcy0+cnRzcik7CisgICAgcHhhMnh4X3J0Y19pbnRfdXBkYXRlKHMpOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQgcHhhMnh4X3J0Y19waV90aWNrKHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBz dHJ1Y3QgcHhhMnh4X3N0YXRlX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9zdGF0ZV9zICopIG9wYXF1 ZTsKKyAgICBzLT5ydHNyIHw9ICgxIDw8IDEzKTsKKyAgICBweGEyeHhfcnRjX3BpdXBkYXRlKHMp OworICAgIHMtPmxhc3RfcnRjcGljciA9IDA7CisgICAgcHhhMnh4X3J0Y19hbGFybV91cGRhdGUo cywgcy0+cnRzcik7CisgICAgcHhhMnh4X3J0Y19pbnRfdXBkYXRlKHMpOworfQorCitzdGF0aWMg dWludDMyX3QgcHhhMnh4X3J0Y19yZWFkKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90 IGFkZHIpCit7CisgICAgc3RydWN0IHB4YTJ4eF9zdGF0ZV9zICpzID0gKHN0cnVjdCBweGEyeHhf c3RhdGVfcyAqKSBvcGFxdWU7CisgICAgYWRkciAtPSBzLT5ydGNfYmFzZTsKKworICAgIHN3aXRj aCAoYWRkcikgeworICAgIGNhc2UgUlRUUjoKKyAgICAgICAgcmV0dXJuIHMtPnJ0dHI7CisgICAg Y2FzZSBSVFNSOgorICAgICAgICByZXR1cm4gcy0+cnRzcjsKKyAgICBjYXNlIFJUQVI6CisgICAg ICAgIHJldHVybiBzLT5ydGFyOworICAgIGNhc2UgUkRBUjE6CisgICAgICAgIHJldHVybiBzLT5y ZGFyMTsKKyAgICBjYXNlIFJEQVIyOgorICAgICAgICByZXR1cm4gcy0+cmRhcjI7CisgICAgY2Fz ZSBSWUFSMToKKyAgICAgICAgcmV0dXJuIHMtPnJ5YXIxOworICAgIGNhc2UgUllBUjI6CisgICAg ICAgIHJldHVybiBzLT5yeWFyMjsKKyAgICBjYXNlIFNXQVIxOgorICAgICAgICByZXR1cm4gcy0+ c3dhcjE7CisgICAgY2FzZSBTV0FSMjoKKyAgICAgICAgcmV0dXJuIHMtPnN3YXIyOworICAgIGNh c2UgUElBUjoKKyAgICAgICAgcmV0dXJuIHMtPnBpYXI7CisgICAgY2FzZSBSQ05SOgorICAgICAg ICByZXR1cm4gcy0+bGFzdF9yY25yICsgKChxZW11X2dldF9jbG9jayhydF9jbG9jaykgLSBzLT5s YXN0X2h6KSA8PCAxNSkgLworICAgICAgICAgICAgICAgICgxMDAwICogKChzLT5ydHRyICYgMHhm ZmZmKSArIDEpKTsKKyAgICBjYXNlIFJEQ1I6CisgICAgICAgIHJldHVybiBzLT5sYXN0X3JkY3Ig KyAoKHFlbXVfZ2V0X2Nsb2NrKHJ0X2Nsb2NrKSAtIHMtPmxhc3RfaHopIDw8IDE1KSAvCisgICAg ICAgICAgICAgICAgKDEwMDAgKiAoKHMtPnJ0dHIgJiAweGZmZmYpICsgMSkpOworICAgIGNhc2Ug UllDUjoKKyAgICAgICAgcmV0dXJuIHMtPmxhc3RfcnljcjsKKyAgICBjYXNlIFNXQ1I6CisgICAg ICAgIGlmIChzLT5ydHNyICYgKDEgPDwgMTIpKQorICAgICAgICAgICAgcmV0dXJuIHMtPmxhc3Rf c3djciArIChxZW11X2dldF9jbG9jayhydF9jbG9jaykgLSBzLT5sYXN0X3N3KSAvIDEwOworICAg ICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gcy0+bGFzdF9zd2NyOworICAgIGRlZmF1bHQ6 CisgICAgICAgIHByaW50ZigiJXM6IEJhZCByZWdpc3RlciAiIFJFR19GTVQgIlxuIiwgX19GVU5D VElPTl9fLCBhZGRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiAwOworfQor CitzdGF0aWMgdm9pZCBweGEyeHhfcnRjX3dyaXRlKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNf YWRkcl90IGFkZHIsCisgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsdWUpCit7CisgICAgc3Ry dWN0IHB4YTJ4eF9zdGF0ZV9zICpzID0gKHN0cnVjdCBweGEyeHhfc3RhdGVfcyAqKSBvcGFxdWU7 CisgICAgYWRkciAtPSBzLT5ydGNfYmFzZTsKKworICAgIHN3aXRjaCAoYWRkcikgeworICAgIGNh c2UgUlRUUjoKKyAgICAgICAgaWYgKCEocy0+cnR0ciAmICgxIDw8IDMxKSkpIHsKKyAgICAgICAg ICAgIHB4YTJ4eF9ydGNfaHp1cGRhdGUocyk7CisgICAgICAgICAgICBzLT5ydHRyID0gdmFsdWU7 CisgICAgICAgICAgICBweGEyeHhfcnRjX2FsYXJtX3VwZGF0ZShzLCBzLT5ydHNyKTsKKyAgICAg ICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgUlRTUjoKKyAgICAgICAgaWYgKChzLT5y dHNyIF4gdmFsdWUpICYgKDEgPDwgMTUpKQorICAgICAgICAgICAgcHhhMnh4X3J0Y19waXVwZGF0 ZShzKTsKKworICAgICAgICBpZiAoKHMtPnJ0c3IgXiB2YWx1ZSkgJiAoMSA8PCAxMikpCisgICAg ICAgICAgICBweGEyeHhfcnRjX3N3dXBkYXRlKHMpOworCisgICAgICAgIGlmICgoKHMtPnJ0c3Ig XiB2YWx1ZSkgJiAweDRhYWMpIHwgKHZhbHVlICYgfjB4ZGFhYykpCisgICAgICAgICAgICBweGEy eHhfcnRjX2FsYXJtX3VwZGF0ZShzLCB2YWx1ZSk7CisKKyAgICAgICAgcy0+cnRzciA9ICh2YWx1 ZSAmIDB4ZGFhYykgfCAocy0+cnRzciAmIH4odmFsdWUgJiB+MHhkYWFjKSk7CisgICAgICAgIHB4 YTJ4eF9ydGNfaW50X3VwZGF0ZShzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJUQVI6 CisgICAgICAgIHMtPnJ0YXIgPSB2YWx1ZTsKKyAgICAgICAgcHhhMnh4X3J0Y19hbGFybV91cGRh dGUocywgcy0+cnRzcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSREFSMToKKyAgICAg ICAgcy0+cmRhcjEgPSB2YWx1ZTsKKyAgICAgICAgcHhhMnh4X3J0Y19hbGFybV91cGRhdGUocywg cy0+cnRzcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSREFSMjoKKyAgICAgICAgcy0+ cmRhcjIgPSB2YWx1ZTsKKyAgICAgICAgcHhhMnh4X3J0Y19hbGFybV91cGRhdGUocywgcy0+cnRz cik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSWUFSMToKKyAgICAgICAgcy0+cnlhcjEg PSB2YWx1ZTsKKyAgICAgICAgcHhhMnh4X3J0Y19hbGFybV91cGRhdGUocywgcy0+cnRzcik7Cisg ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSWUFSMjoKKyAgICAgICAgcy0+cnlhcjIgPSB2YWx1 ZTsKKyAgICAgICAgcHhhMnh4X3J0Y19hbGFybV91cGRhdGUocywgcy0+cnRzcik7CisgICAgICAg IGJyZWFrOworCisgICAgY2FzZSBTV0FSMToKKyAgICAgICAgcHhhMnh4X3J0Y19zd3VwZGF0ZShz KTsKKyAgICAgICAgcy0+c3dhcjEgPSB2YWx1ZTsKKyAgICAgICAgcy0+bGFzdF9zd2NyID0gMDsK KyAgICAgICAgcHhhMnh4X3J0Y19hbGFybV91cGRhdGUocywgcy0+cnRzcik7CisgICAgICAgIGJy ZWFrOworCisgICAgY2FzZSBTV0FSMjoKKyAgICAgICAgcy0+c3dhcjIgPSB2YWx1ZTsKKyAgICAg ICAgcHhhMnh4X3J0Y19hbGFybV91cGRhdGUocywgcy0+cnRzcik7CisgICAgICAgIGJyZWFrOwor CisgICAgY2FzZSBQSUFSOgorICAgICAgICBzLT5waWFyID0gdmFsdWU7CisgICAgICAgIHB4YTJ4 eF9ydGNfYWxhcm1fdXBkYXRlKHMsIHMtPnJ0c3IpOworICAgICAgICBicmVhazsKKworICAgIGNh c2UgUkNOUjoKKyAgICAgICAgcHhhMnh4X3J0Y19oenVwZGF0ZShzKTsKKyAgICAgICAgcy0+bGFz dF9yY25yID0gdmFsdWU7CisgICAgICAgIHB4YTJ4eF9ydGNfYWxhcm1fdXBkYXRlKHMsIHMtPnJ0 c3IpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgUkRDUjoKKyAgICAgICAgcHhhMnh4X3J0 Y19oenVwZGF0ZShzKTsKKyAgICAgICAgcy0+bGFzdF9yZGNyID0gdmFsdWU7CisgICAgICAgIHB4 YTJ4eF9ydGNfYWxhcm1fdXBkYXRlKHMsIHMtPnJ0c3IpOworICAgICAgICBicmVhazsKKworICAg IGNhc2UgUllDUjoKKyAgICAgICAgcy0+bGFzdF9yeWNyID0gdmFsdWU7CisgICAgICAgIGJyZWFr OworCisgICAgY2FzZSBTV0NSOgorICAgICAgICBweGEyeHhfcnRjX3N3dXBkYXRlKHMpOworICAg ICAgICBzLT5sYXN0X3N3Y3IgPSB2YWx1ZTsKKyAgICAgICAgcHhhMnh4X3J0Y19hbGFybV91cGRh dGUocywgcy0+cnRzcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSVENQSUNSOgorICAg ICAgICBweGEyeHhfcnRjX3BpdXBkYXRlKHMpOworICAgICAgICBzLT5sYXN0X3J0Y3BpY3IgPSB2 YWx1ZSAmIDB4ZmZmZjsKKyAgICAgICAgcHhhMnh4X3J0Y19hbGFybV91cGRhdGUocywgcy0+cnRz cik7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRmKCIlczog QmFkIHJlZ2lzdGVyICIgUkVHX0ZNVCAiXG4iLCBfX0ZVTkNUSU9OX18sIGFkZHIpOworICAgIH0K K30KKworc3RhdGljIHZvaWQgcHhhMnh4X3J0Y19yZXNldChzdHJ1Y3QgcHhhMnh4X3N0YXRlX3Mg KnMpCit7CisgICAgc3RydWN0IHRtICp0bTsKKyAgICB0aW1lX3QgdGk7CisgICAgaW50IHdvbTsK KworICAgIHMtPnJ0dHIgPSAweDdmZmY7CisgICAgcy0+cnRzciA9IDA7CisKKyAgICB0aW1lKCZ0 aSk7CisgICAgaWYgKHJ0Y191dGMpCisgICAgICAgIHRtID0gZ210aW1lKCZ0aSk7CisgICAgZWxz ZQorICAgICAgICB0bSA9IGxvY2FsdGltZSgmdGkpOworICAgIHdvbSA9ICgodG0tPnRtX21kYXkg LSAxKSAvIDcpICsgMTsKKworICAgIHMtPmxhc3RfcmNuciA9ICh1aW50MzJfdCkgdGk7CisgICAg cy0+bGFzdF9yZGNyID0gKHdvbSA8PCAyMCkgfCAoKHRtLT50bV93ZGF5ICsgMSkgPDwgMTcpIHwK KyAgICAgICAgICAgICh0bS0+dG1faG91ciA8PCAxMikgfCAodG0tPnRtX21pbiA8PCA2KSB8IHRt LT50bV9zZWM7CisgICAgcy0+bGFzdF9yeWNyID0gKCh0bS0+dG1feWVhciArIDE5MDApIDw8IDkp IHwKKyAgICAgICAgICAgICgodG0tPnRtX21vbiArIDEpIDw8IDUpIHwgdG0tPnRtX21kYXk7Cisg ICAgcy0+bGFzdF9zd2NyID0gKHRtLT50bV9ob3VyIDw8IDE5KSB8CisgICAgICAgICAgICAodG0t PnRtX21pbiA8PCAxMykgfCAodG0tPnRtX3NlYyA8PCA3KTsKKyAgICBzLT5sYXN0X3J0Y3BpY3Ig PSAwOworICAgIHMtPmxhc3RfaHogPSBzLT5sYXN0X3N3ID0gcy0+bGFzdF9waSA9IHFlbXVfZ2V0 X2Nsb2NrKHJ0X2Nsb2NrKTsKKworICAgIHMtPnJ0Y19oeiAgICA9IHFlbXVfbmV3X3RpbWVyKHJ0 X2Nsb2NrLCBweGEyeHhfcnRjX2h6X3RpY2ssICAgIHMpOworICAgIHMtPnJ0Y19yZGFsMSA9IHFl bXVfbmV3X3RpbWVyKHJ0X2Nsb2NrLCBweGEyeHhfcnRjX3JkYWwxX3RpY2ssIHMpOworICAgIHMt PnJ0Y19yZGFsMiA9IHFlbXVfbmV3X3RpbWVyKHJ0X2Nsb2NrLCBweGEyeHhfcnRjX3JkYWwyX3Rp Y2ssIHMpOworICAgIHMtPnJ0Y19zd2FsMSA9IHFlbXVfbmV3X3RpbWVyKHJ0X2Nsb2NrLCBweGEy eHhfcnRjX3N3YWwxX3RpY2ssIHMpOworICAgIHMtPnJ0Y19zd2FsMiA9IHFlbXVfbmV3X3RpbWVy KHJ0X2Nsb2NrLCBweGEyeHhfcnRjX3N3YWwyX3RpY2ssIHMpOworICAgIHMtPnJ0Y19waSAgICA9 IHFlbXVfbmV3X3RpbWVyKHJ0X2Nsb2NrLCBweGEyeHhfcnRjX3BpX3RpY2ssICAgIHMpOworfQor CitzdGF0aWMgQ1BVUmVhZE1lbW9yeUZ1bmMgKnB4YTJ4eF9ydGNfcmVhZGZuW10gPSB7CisgICAg cHhhMnh4X3J0Y19yZWFkLAorICAgIHB4YTJ4eF9ydGNfcmVhZCwKKyAgICBweGEyeHhfcnRjX3Jl YWQsCit9OworCitzdGF0aWMgQ1BVV3JpdGVNZW1vcnlGdW5jICpweGEyeHhfcnRjX3dyaXRlZm5b XSA9IHsKKyAgICBweGEyeHhfcnRjX3dyaXRlLAorICAgIHB4YTJ4eF9ydGNfd3JpdGUsCisgICAg cHhhMnh4X3J0Y193cml0ZSwKK307CisKKy8qIEkyQyBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUJN UgkweDgwCS8qIEkyQyBCdXMgTW9uaXRvciByZWdpc3RlciAqLworI2RlZmluZSBJREJSCTB4ODgJ LyogSTJDIERhdGEgQnVmZmVyIHJlZ2lzdGVyICovCisjZGVmaW5lIElDUgkweDkwCS8qIEkyQyBD b250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIElTUgkweDk4CS8qIEkyQyBTdGF0dXMgcmVnaXN0 ZXIgKi8KKyNkZWZpbmUgSVNBUgkweGEwCS8qIEkyQyBTbGF2ZSBBZGRyZXNzIHJlZ2lzdGVyICov CisKK3N0YXRpYyB2b2lkIHB4YTJ4eF9pMmNfdXBkYXRlKHN0cnVjdCBweGEyeHhfaTJjX3MgKnMp Cit7CisgICAgdWludDE2X3QgbGV2ZWwgPSAwOworICAgIGxldmVsIHw9IHMtPnN0YXR1cyAmIHMt PmNvbnRyb2wgJiAoMSA8PCAxMCk7CQkvKiBCRUQgKi8KKyAgICBsZXZlbCB8PSAocy0+c3RhdHVz ICYgKDEgPDwgNykpICYmIChzLT5jb250cm9sICYgKDEgPDwgOSkpOwkvKiBJUkYgKi8KKyAgICBs ZXZlbCB8PSAocy0+c3RhdHVzICYgKDEgPDwgNikpICYmIChzLT5jb250cm9sICYgKDEgPDwgOCkp OwkvKiBJVEUgKi8KKyAgICBsZXZlbCB8PSBzLT5zdGF0dXMgJiAoMSA8PCA5KTsJCQkJLyogU0FE ICovCisgICAgcGljX3NldF9pcnFfbmV3KHMtPnBpYywgcy0+aXJxLCAhIWxldmVsKTsKK30KKwor c3RhdGljIHZvaWQgcHhhMnh4X2kyY19zdGFydCh2b2lkICpvcGFxdWUsIGludCBkaXIpCit7Cisg ICAgc3RydWN0IHB4YTJ4eF9pMmNfcyAqcyA9IChzdHJ1Y3QgcHhhMnh4X2kyY19zICopIG9wYXF1 ZTsKKyAgICBzLT5zdGF0dXMgfD0gKDEgPDwgOSk7CQkJCS8qIHNldCBTQUQgKi8KKyAgICBpZiAo ZGlyKQorICAgICAgICBzLT5zdGF0dXMgfD0gMSA8PCAwOwkJCQkvKiBzZXQgUldNICovCisgICAg ZWxzZQorICAgICAgICBzLT5zdGF0dXMgJj0gfigxIDw8IDApOwkJCQkvKiBjbGVhciBSV00gKi8K K30KKworc3RhdGljIHZvaWQgcHhhMnh4X2kyY19zdG9wKHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBz dHJ1Y3QgcHhhMnh4X2kyY19zICpzID0gKHN0cnVjdCBweGEyeHhfaTJjX3MgKikgb3BhcXVlOwor ICAgIHMtPnN0YXR1cyB8PSAoMSA8PCA0KTsJCQkJLyogc2V0IFNTRCAqLworfQorCitzdGF0aWMg aW50IHB4YTJ4eF9pMmNfdHgodm9pZCAqb3BhcXVlLCB1aW50OF90ICptZXNzYWdlLCBpbnQgbGVu KQoreworICAgIHN0cnVjdCBweGEyeHhfaTJjX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9pMmNfcyAq KSBvcGFxdWU7CisgICAgaWYgKChzLT5jb250cm9sICYgKDEgPDwgMTQpKSB8fCAhKHMtPmNvbnRy b2wgJiAoMSA8PCA2KSkpCisgICAgICAgIHJldHVybiAxOworCisgICAgaWYgKGxlbikgeworICAg ICAgICBpZiAocy0+c3RhdHVzICYgKDEgPDwgMCkpIHsJCQkvKiBSV00gKi8KKyAgICAgICAgICAg IHMtPnN0YXR1cyB8PSAxIDw8IDY7CQkJLyogc2V0IElURSAqLworICAgICAgICAgICAgcy0+bWFz dGVyLmRhdGEgPSBtZXNzYWdlWzBdOwkJLyogVE9ETyAqLworCX0gZWxzZSB7CisgICAgICAgICAg ICBzLT5zdGF0dXMgfD0gMSA8PCA3OwkJCS8qIHNldCBJUkYgKi8KKyAgICAgICAgICAgIG1lc3Nh Z2VbMF0gPSBzLT5tYXN0ZXIuZGF0YTsJCS8qIFRPRE8gKi8KKyAgICAgICAgfQorICAgIH0KKyAg ICBweGEyeHhfaTJjX3VwZGF0ZShzKTsKKworICAgIHJldHVybiAhcy0+bWFzdGVyLmFjazsKK30K Kworc3RhdGljIHVpbnQzMl90IHB4YTJ4eF9pMmNfcmVhZCh2b2lkICpvcGFxdWUsIHRhcmdldF9w aHlzX2FkZHJfdCBhZGRyKQoreworICAgIHN0cnVjdCBweGEyeHhfaTJjX3MgKnMgPSAoc3RydWN0 IHB4YTJ4eF9pMmNfcyAqKSBvcGFxdWU7CisgICAgYWRkciAtPSBzLT5iYXNlOworCisgICAgc3dp dGNoIChhZGRyKSB7CisgICAgY2FzZSBJQ1I6CisgICAgICAgIHJldHVybiBzLT5jb250cm9sOwor ICAgIGNhc2UgSVNSOgorICAgICAgICByZXR1cm4gcy0+c3RhdHVzOworICAgIGNhc2UgSVNBUjoK KyAgICAgICAgcmV0dXJuIHMtPnNsYXZlLmFkZHJlc3M7CisgICAgY2FzZSBJREJSOgorICAgICAg ICByZXR1cm4gcy0+bWFzdGVyLmRhdGE7CisgICAgY2FzZSBJQk1SOgorICAgICAgICBpZiAocy0+ c3RhdHVzICYgKDEgPDwgMikpCisgICAgICAgICAgICBzLT5pYm1yIF49IDM7CS8qIEZha2UgU0NM IGFuZCBTREEgcGluIGNoYW5nZXMgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcy0+aWJt ciA9IDA7CisgICAgICAgIHJldHVybiBzLT5pYm1yOworICAgIGRlZmF1bHQ6CisgICAgICAgIHBy aW50ZigiJXM6IEJhZCByZWdpc3RlciAiIFJFR19GTVQgIlxuIiwgX19GVU5DVElPTl9fLCBhZGRy KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBweGEyeHhfaTJjX3dyaXRlKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIs CisgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsdWUpCit7CisgICAgc3RydWN0IHB4YTJ4eF9p MmNfcyAqcyA9IChzdHJ1Y3QgcHhhMnh4X2kyY19zICopIG9wYXF1ZTsKKyAgICBhZGRyIC09IHMt PmJhc2U7CisKKyAgICBzd2l0Y2ggKGFkZHIpIHsKKyAgICBjYXNlIElDUjoKKyAgICAgICAgcy0+ Y29udHJvbCA9IHZhbHVlICYgMHhmZmY3OworICAgICAgICBpZiAoKHZhbHVlICYgKDEgPDwgMykp ICYmICh2YWx1ZSAmICgxIDw8IDYpKSkgewkvKiBUQiBhbmQgSVVFICovCisgICAgICAgICAgICAv KiBUT0RPOiBzbGF2ZSBtb2RlICovCisgICAgICAgICAgICBpZiAodmFsdWUgJiAoMSA8PCAwKSkg ewkJCS8qIFNUQVJUIGNvbmRpdGlvbiAqLworICAgICAgICAgICAgICAgIGlmIChzLT5tYXN0ZXIu ZGF0YSAmIDEpCisgICAgICAgICAgICAgICAgICAgIHMtPnN0YXR1cyB8PSAxIDw8IDA7CQkvKiBz ZXQgUldNICovCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzLT5z dGF0dXMgJj0gfigxIDw8IDApOwkJLyogY2xlYXIgUldNICovCisgICAgICAgICAgICAgICAgcy0+ c3RhdHVzIHw9IDEgPDwgMjsJCQkvKiBzZXQgVUIgKi8KKyAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgaTJjX21hc3Rlcl9zdWJtaXQoJnMtPm1hc3RlciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAodmFsdWUgPj4gMCkgJiAxLAkJLyogU1RBUlQgY29uZGl0aW9uICovCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID4+IDEpICYgMSk7CQkvKiBTVE9QIGNvbmRpdGlv biAqLworCisgICAgICAgICAgICBpZiAocy0+bWFzdGVyLmFjaykgeworICAgICAgICAgICAgICAg IGlmIChzLT5zdGF0dXMgJiAoMSA8PCAwKSkJCS8qIFJXTSAqLworICAgICAgICAgICAgICAgICAg ICBzLT5zdGF0dXMgfD0gMSA8PCA3OwkJLyogc2V0IElSRiAqLworICAgICAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICAgICAgcy0+c3RhdHVzIHw9IDEgPDwgNjsJCS8qIHNldCBJVEUg Ki8KKyAgICAgICAgICAgICAgICBzLT5zdGF0dXMgJj0gfigxIDw8IDEpOwkJCS8qIGNsZWFyIEFD S05BSyAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzLT5zdGF0dXMg fD0gMSA8PCA2OwkJCS8qIHNldCBJVEUgKi8KKyAgICAgICAgICAgICAgICBzLT5zdGF0dXMgfD0g MSA8PCAxMDsJCQkvKiBzZXQgQkVEICovCisgICAgICAgICAgICAgICAgcy0+c3RhdHVzIHw9IDEg PDwgMTsJCQkvKiBzZXQgQUNLTkFLICovCisgICAgICAgICAgICAgICAgcy0+c3RhdHVzICY9IH4o MSA8PCAyKTsJCQkvKiBjbGVhciBVQiAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KHZhbHVlICYgKDEgPDwgMSkpCQkJLyogU1RPUCBjb25kaXRpb24gKi8KKyAgICAgICAgICAgICAg ICBzLT5zdGF0dXMgJj0gfigxIDw8IDIpOwkJCS8qIGNsZWFyIFVCICovCisgICAgICAgIH0KKyAg ICAgICAgaWYgKHZhbHVlICYgKDEgPDwgNCkpCQkJCS8qIE1BICovCisgICAgICAgICAgICBzLT5z dGF0dXMgJj0gfigxIDw8IDIpOwkJCS8qIGNsZWFyIFVCICovCisgICAgICAgIGlmICghKHZhbHVl ICYgKDEgPDwgMykpICYmICh2YWx1ZSAmICgxIDw8IDYpKSkJLyogIVRCIGFuZCBJVUUgKi8KKyAg ICAgICAgICAgIHMtPnN0YXR1cyAmPSB+KDEgPDwgMik7CQkJLyogY2xlYXIgVUIgKi8KKyAgICAg ICAgcHhhMnh4X2kyY191cGRhdGUocyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJU1I6 CisgICAgICAgIHMtPnN0YXR1cyAmPSB+KHZhbHVlICYgMHgwN2YwKTsKKyAgICAgICAgcHhhMnh4 X2kyY191cGRhdGUocyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJU0FSOgorICAgICAg ICBpZiAocy0+bWFzdGVyLmJ1cykKKyAgICAgICAgICAgIGkyY19zbGF2ZV9hdHRhY2gocy0+bWFz dGVyLmJ1cywgdmFsdWUgJiAweDdmLCAmcy0+c2xhdmUpOworICAgICAgICBicmVhazsKKworICAg IGNhc2UgSURCUjoKKyAgICAgICAgcy0+bWFzdGVyLmRhdGEgPSB2YWx1ZSAmIDB4ZmY7CisgICAg ICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRmKCIlczogQmFkIHJlZ2lz dGVyICIgUkVHX0ZNVCAiXG4iLCBfX0ZVTkNUSU9OX18sIGFkZHIpOworICAgIH0KK30KKworc3Rh dGljIENQVVJlYWRNZW1vcnlGdW5jICpweGEyeHhfaTJjX3JlYWRmbltdID0geworICAgIHB4YTJ4 eF9pMmNfcmVhZCwKKyAgICBweGEyeHhfaTJjX3JlYWQsCisgICAgcHhhMnh4X2kyY19yZWFkLAor fTsKKworc3RhdGljIENQVVdyaXRlTWVtb3J5RnVuYyAqcHhhMnh4X2kyY193cml0ZWZuW10gPSB7 CisgICAgcHhhMnh4X2kyY193cml0ZSwKKyAgICBweGEyeHhfaTJjX3dyaXRlLAorICAgIHB4YTJ4 eF9pMmNfd3JpdGUsCit9OworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9pMmNfcyAqcHhhMnh4X2ky Y19pbml0KHRhcmdldF9waHlzX2FkZHJfdCBiYXNlLCBpbnQgaXJxLAorICAgICAgICAgICAgICAg IHN0cnVjdCBweGEyeHhfcGljX3N0YXRlX3MgKnBpYykKK3sKKyAgICBpbnQgaW9tZW10eXBlOwor ICAgIHN0cnVjdCBweGEyeHhfaTJjX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9pMmNfcyAqKQorICAg ICAgICAgICAgcWVtdV9tYWxsb2N6KHNpemVvZihzdHJ1Y3QgcHhhMnh4X2kyY19zKSk7CisKKyAg ICBzLT5iYXNlID0gYmFzZTsKKyAgICBzLT5pcnEgPSBpcnE7CisgICAgcy0+cGljID0gcGljOwor ICAgIHMtPnNsYXZlLnR4ID0gcHhhMnh4X2kyY190eDsKKyAgICBzLT5zbGF2ZS5zdGFydCA9IHB4 YTJ4eF9pMmNfc3RhcnQ7CisgICAgcy0+c2xhdmUuc3RvcCA9IHB4YTJ4eF9pMmNfc3RvcDsKKyAg ICBzLT5zbGF2ZS5vcGFxdWUgPSBzOworCisgICAgaW9tZW10eXBlID0gY3B1X3JlZ2lzdGVyX2lv X21lbW9yeSgwLCBweGEyeHhfaTJjX3JlYWRmbiwKKyAgICAgICAgICAgICAgICAgICAgcHhhMnh4 X2kyY193cml0ZWZuLCBzKTsKKyAgICBjcHVfcmVnaXN0ZXJfcGh5c2ljYWxfbWVtb3J5KHMtPmJh c2UgJiAweGZmZmZmMDAwLCAweGZmZiwgaW9tZW10eXBlKTsKKworICAgIHJldHVybiBzOworfQor CisvKiBQWEEgSW50ZXItSUMgU291bmQgQ29udHJvbGxlciAqLworc3RhdGljIHZvaWQgcHhhMnh4 X2kyc19yZXNldChzdHJ1Y3QgcHhhMnh4X2kyc19zICppMnMpCit7CisgICAgaTJzLT5yeF9sZW4g PSAwOworICAgIGkycy0+dHhfbGVuID0gMDsKKyAgICBpMnMtPmZpZm9fbGVuID0gMDsKKyAgICBp MnMtPmNsayA9IDB4MWE7CisgICAgaTJzLT5jb250cm9sWzBdID0gMHgwMDsKKyAgICBpMnMtPmNv bnRyb2xbMV0gPSAweDAwOworICAgIGkycy0+c3RhdHVzID0gMHgwMDsKKyAgICBpMnMtPm1hc2sg PSAweDAwOworfQorCisjZGVmaW5lIFNBQ1JfVEZUSCh2YWwpCSgodmFsID4+IDgpICYgMHhmKQor I2RlZmluZSBTQUNSX1JGVEgodmFsKQkoKHZhbCA+PiAxMikgJiAweGYpCisjZGVmaW5lIFNBQ1Jf RFJFQyh2YWwpCSh2YWwgJiAoMSA8PCAzKSkKKyNkZWZpbmUgU0FDUl9EUFJMKHZhbCkJKHZhbCAm ICgxIDw8IDQpKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHhhMnh4X2kyc191cGRhdGUoc3RydWN0 IHB4YTJ4eF9pMnNfcyAqaTJzKQoreworICAgIGludCByZnMsIHRmczsKKyAgICByZnMgPSBTQUNS X1JGVEgoaTJzLT5jb250cm9sWzBdKSA8IGkycy0+cnhfbGVuICYmCisgICAgICAgICAgICAhU0FD Ul9EUkVDKGkycy0+Y29udHJvbFsxXSk7CisgICAgdGZzID0gKGkycy0+dHhfbGVuIHx8IGkycy0+ Zmlmb19sZW4gPCBTQUNSX1RGVEgoaTJzLT5jb250cm9sWzBdKSkgJiYKKyAgICAgICAgICAgIGky cy0+ZW5hYmxlICYmICFTQUNSX0RQUkwoaTJzLT5jb250cm9sWzFdKTsKKworICAgIHB4YTJ4eF9k bWFfcmVxdWVzdChpMnMtPmRtYSwgUFhBMlhYX1JYX1JRX0kyUywgcmZzKTsKKyAgICBweGEyeHhf ZG1hX3JlcXVlc3QoaTJzLT5kbWEsIFBYQTJYWF9UWF9SUV9JMlMsIHRmcyk7CisKKyAgICBpMnMt PnN0YXR1cyAmPSAweGUwOworICAgIGlmIChpMnMtPnJ4X2xlbikKKyAgICAgICAgaTJzLT5zdGF0 dXMgfD0gMSA8PCAxOwkJCS8qIFJORSAqLworICAgIGlmIChpMnMtPmVuYWJsZSkKKyAgICAgICAg aTJzLT5zdGF0dXMgfD0gMSA8PCAyOwkJCS8qIEJTWSAqLworICAgIGlmICh0ZnMpCisgICAgICAg IGkycy0+c3RhdHVzIHw9IDEgPDwgMzsJCQkvKiBURlMgKi8KKyAgICBpZiAocmZzKQorICAgICAg ICBpMnMtPnN0YXR1cyB8PSAxIDw8IDQ7CQkJLyogUkZTICovCisgICAgaWYgKCEoaTJzLT50eF9s ZW4gJiYgaTJzLT5lbmFibGUpKQorICAgICAgICBpMnMtPnN0YXR1cyB8PSBpMnMtPmZpZm9fbGVu IDw8IDg7CS8qIFRGTCAqLworICAgIGkycy0+c3RhdHVzIHw9IE1BWChpMnMtPnJ4X2xlbiwgMHhm KSA8PCAxMjsJLyogUkZMICovCisKKyAgICBwaWNfc2V0X2lycV9uZXcoaTJzLT5waWMsIGkycy0+ aXJxLCBpMnMtPnN0YXR1cyAmIGkycy0+bWFzayk7Cit9CisKKyNkZWZpbmUgU0FDUjAJMHgwMAkv KiBTZXJpYWwgQXVkaW8gR2xvYmFsIENvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0FDUjEJ MHgwNAkvKiBTZXJpYWwgQXVkaW8gSTJTL01TQi1KdXN0aWZpZWQgQ29udHJvbCByZWdpc3RlciAq LworI2RlZmluZSBTQVNSMAkweDBjCS8qIFNlcmlhbCBBdWRpbyBJbnRlcmZhY2UgYW5kIEZJRk8g U3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFNBSU1SCTB4MTQJLyogU2VyaWFsIEF1ZGlvIElu dGVycnVwdCBNYXNrIHJlZ2lzdGVyICovCisjZGVmaW5lIFNBSUNSCTB4MTgJLyogU2VyaWFsIEF1 ZGlvIEludGVycnVwdCBDbGVhciByZWdpc3RlciAqLworI2RlZmluZSBTQURJVgkweDYwCS8qIFNl cmlhbCBBdWRpbyBDbG9jayBEaXZpZGVyIHJlZ2lzdGVyICovCisjZGVmaW5lIFNBRFIJMHg4MAkv KiBTZXJpYWwgQXVkaW8gRGF0YSByZWdpc3RlciAqLworCitzdGF0aWMgdWludDMyX3QgcHhhMnh4 X2kyc19yZWFkKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpCit7CisgICAg c3RydWN0IHB4YTJ4eF9pMnNfcyAqcyA9IChzdHJ1Y3QgcHhhMnh4X2kyc19zICopIG9wYXF1ZTsK KyAgICBhZGRyIC09IHMtPmJhc2U7CisKKyAgICBzd2l0Y2ggKGFkZHIpIHsKKyAgICBjYXNlIFNB Q1IwOgorICAgICAgICByZXR1cm4gcy0+Y29udHJvbFswXTsKKyAgICBjYXNlIFNBQ1IxOgorICAg ICAgICByZXR1cm4gcy0+Y29udHJvbFsxXTsKKyAgICBjYXNlIFNBU1IwOgorICAgICAgICByZXR1 cm4gcy0+c3RhdHVzOworICAgIGNhc2UgU0FJTVI6CisgICAgICAgIHJldHVybiBzLT5tYXNrOwor ICAgIGNhc2UgU0FJQ1I6CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgU0FESVY6CisgICAg ICAgIHJldHVybiBzLT5jbGs7CisgICAgY2FzZSBTQURSOgorICAgICAgICBpZiAocy0+cnhfbGVu ID4gMCkgeworICAgICAgICAgICAgcy0+cnhfbGVuIC0tOworICAgICAgICAgICAgcHhhMnh4X2ky c191cGRhdGUocyk7CisgICAgICAgICAgICByZXR1cm4gcy0+Y29kZWNfaW4ocy0+b3BhcXVlKTsK KyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICBkZWZhdWx0OgorICAgICAgICBwcmlu dGYoIiVzOiBCYWQgcmVnaXN0ZXIgIiBSRUdfRk1UICJcbiIsIF9fRlVOQ1RJT05fXywgYWRkcik7 CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg cHhhMnh4X2kyc193cml0ZSh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLAor ICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhbHVlKQoreworICAgIHN0cnVjdCBweGEyeHhfaTJz X3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9pMnNfcyAqKSBvcGFxdWU7CisgICAgdWludDMyX3QgKnNh bXBsZTsKKyAgICBhZGRyIC09IHMtPmJhc2U7CisKKyAgICBzd2l0Y2ggKGFkZHIpIHsKKyAgICBj YXNlIFNBQ1IwOgorICAgICAgICBpZiAodmFsdWUgJiAoMSA8PCAzKSkJCQkJLyogUlNUICovCisg ICAgICAgICAgICBweGEyeHhfaTJzX3Jlc2V0KHMpOworICAgICAgICBzLT5jb250cm9sWzBdID0g dmFsdWUgJiAweGZmM2Q7CisgICAgICAgIGlmICghcy0+ZW5hYmxlICYmICh2YWx1ZSAmIDEpICYm IHMtPnR4X2xlbikgewkvKiBFTkIgKi8KKyAgICAgICAgICAgIGZvciAoc2FtcGxlID0gcy0+Zmlm bzsgcy0+Zmlmb19sZW4gPiAwOyBzLT5maWZvX2xlbiAtLSwgc2FtcGxlICsrKQorICAgICAgICAg ICAgICAgIHMtPmNvZGVjX291dChzLT5vcGFxdWUsICpzYW1wbGUpOworICAgICAgICAgICAgcy0+ c3RhdHVzICY9IH4oMSA8PCA3KTsJCQkvKiBJMlNPRkYgKi8KKyAgICAgICAgfQorICAgICAgICBp ZiAodmFsdWUgJiAoMSA8PCA0KSkJCQkJLyogRUZXUiAqLworICAgICAgICAgICAgcHJpbnRmKCIl czogQXR0ZW1wdCB0byB1c2Ugc3BlY2lhbCBmdW5jdGlvblxuIiwgX19GVU5DVElPTl9fKTsKKyAg ICAgICAgcy0+ZW5hYmxlID0gKCh2YWx1ZSBeIDQpICYgNSkgPT0gNTsJCS8qIEVOQiAmJiAhUlNU Ki8KKyAgICAgICAgcHhhMnh4X2kyc191cGRhdGUocyk7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgU0FDUjE6CisgICAgICAgIHMtPmNvbnRyb2xbMV0gPSB2YWx1ZSAmIDB4MDAzOTsKKyAgICAg ICAgaWYgKHZhbHVlICYgKDEgPDwgNSkpCQkJCS8qIEVOTEJGICovCisgICAgICAgICAgICBwcmlu dGYoIiVzOiBBdHRlbXB0IHRvIHVzZSBsb29wYmFjayBmdW5jdGlvblxuIiwgX19GVU5DVElPTl9f KTsKKyAgICAgICAgaWYgKHZhbHVlICYgKDEgPDwgNCkpCQkJCS8qIERQUkwgKi8KKyAgICAgICAg ICAgIHMtPmZpZm9fbGVuID0gMDsKKyAgICAgICAgcHhhMnh4X2kyc191cGRhdGUocyk7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgU0FJTVI6CisgICAgICAgIHMtPm1hc2sgPSB2YWx1ZSAmIDB4 MDA3ODsKKyAgICAgICAgcHhhMnh4X2kyc191cGRhdGUocyk7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgU0FJQ1I6CisgICAgICAgIHMtPnN0YXR1cyAmPSB+KHZhbHVlICYgKDMgPDwgNSkpOwor ICAgICAgICBweGEyeHhfaTJzX3VwZGF0ZShzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBT QURJVjoKKyAgICAgICAgcy0+Y2xrID0gdmFsdWUgJiAweDAwN2Y7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgU0FEUjoKKyAgICAgICAgaWYgKHMtPnR4X2xlbiAmJiBzLT5lbmFibGUpIHsKKyAg ICAgICAgICAgIHMtPnR4X2xlbiAtLTsKKyAgICAgICAgICAgIHB4YTJ4eF9pMnNfdXBkYXRlKHMp OworICAgICAgICAgICAgcy0+Y29kZWNfb3V0KHMtPm9wYXF1ZSwgdmFsdWUpOworICAgICAgICB9 IGVsc2UgaWYgKHMtPmZpZm9fbGVuIDwgMTYpIHsKKyAgICAgICAgICAgIHMtPmZpZm9bcy0+Zmlm b19sZW4gKytdID0gdmFsdWU7CisgICAgICAgICAgICBweGEyeHhfaTJzX3VwZGF0ZShzKTsKKyAg ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoIiVz OiBCYWQgcmVnaXN0ZXIgIiBSRUdfRk1UICJcbiIsIF9fRlVOQ1RJT05fXywgYWRkcik7CisgICAg fQorfQorCitzdGF0aWMgQ1BVUmVhZE1lbW9yeUZ1bmMgKnB4YTJ4eF9pMnNfcmVhZGZuW10gPSB7 CisgICAgcHhhMnh4X2kyc19yZWFkLAorICAgIHB4YTJ4eF9pMnNfcmVhZCwKKyAgICBweGEyeHhf aTJzX3JlYWQsCit9OworCitzdGF0aWMgQ1BVV3JpdGVNZW1vcnlGdW5jICpweGEyeHhfaTJzX3dy aXRlZm5bXSA9IHsKKyAgICBweGEyeHhfaTJzX3dyaXRlLAorICAgIHB4YTJ4eF9pMnNfd3JpdGUs CisgICAgcHhhMnh4X2kyc193cml0ZSwKK307CisKK3N0YXRpYyB2b2lkIHB4YTJ4eF9pMnNfZGF0 YV9yZXEodm9pZCAqb3BhcXVlLCBpbnQgdHgsIGludCByeCkKK3sKKyAgICBzdHJ1Y3QgcHhhMnh4 X2kyc19zICpzID0gKHN0cnVjdCBweGEyeHhfaTJzX3MgKikgb3BhcXVlOworICAgIHVpbnQzMl90 ICpzYW1wbGU7CisKKyAgICAvKiBTaWduYWwgRklGTyBlcnJvcnMgKi8KKyAgICBpZiAocy0+ZW5h YmxlICYmIHMtPnR4X2xlbikKKyAgICAgICAgcy0+c3RhdHVzIHw9IDEgPDwgNTsJCS8qIFRVUiAq LworICAgIGlmIChzLT5lbmFibGUgJiYgcy0+cnhfbGVuKQorICAgICAgICBzLT5zdGF0dXMgfD0g MSA8PCA2OwkJLyogUk9SICovCisKKyAgICAvKiBTaG91bGQgYmUgdHggLSBNSU4odHgsIHMtPmZp Zm9fbGVuKSBidXQgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8KKyAgICAgKiBoYW5kbGUgdGhlIGNh c2VzIHdoZXJlIGl0IG1ha2VzIGEgZGlmZmVyZW5jZS4gICovCisgICAgcy0+dHhfbGVuID0gdHgg LSBzLT5maWZvX2xlbjsKKyAgICBzLT5yeF9sZW4gPSByeDsKKyAgICAvKiBOb3RlIHRoYXQgaXMg cy0+Y29kZWNfb3V0IHdhc24ndCBzZXQsIHdlIHdvdWxkbid0IGdldCBjYWxsZWQuICAqLworICAg IGlmIChzLT5lbmFibGUpCisgICAgICAgIGZvciAoc2FtcGxlID0gcy0+Zmlmbzsgcy0+Zmlmb19s ZW47IHMtPmZpZm9fbGVuIC0tLCBzYW1wbGUgKyspCisgICAgICAgICAgICBzLT5jb2RlY19vdXQo cy0+b3BhcXVlLCAqc2FtcGxlKTsKKyAgICBweGEyeHhfaTJzX3VwZGF0ZShzKTsKK30KKworc3Rh dGljIHN0cnVjdCBweGEyeHhfaTJzX3MgKnB4YTJ4eF9pMnNfaW5pdCh0YXJnZXRfcGh5c19hZGRy X3QgYmFzZSwgaW50IGlycSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgcHhhMnh4X3BpY19zdGF0 ZV9zICpwaWMsIHN0cnVjdCBweGEyeHhfZG1hX3N0YXRlX3MgKmRtYSkKK3sKKyAgICBpbnQgaW9t ZW10eXBlOworICAgIHN0cnVjdCBweGEyeHhfaTJzX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9pMnNf cyAqKQorICAgICAgICAgICAgcWVtdV9tYWxsb2N6KHNpemVvZihzdHJ1Y3QgcHhhMnh4X2kyc19z KSk7CisKKyAgICBzLT5iYXNlID0gYmFzZTsKKyAgICBzLT5pcnEgPSBpcnE7CisgICAgcy0+cGlj ID0gcGljOworICAgIHMtPmRtYSA9IGRtYTsKKyAgICBzLT5kYXRhX3JlcSA9IHB4YTJ4eF9pMnNf ZGF0YV9yZXE7CisKKyAgICBweGEyeHhfaTJzX3Jlc2V0KHMpOworCisgICAgaW9tZW10eXBlID0g Y3B1X3JlZ2lzdGVyX2lvX21lbW9yeSgwLCBweGEyeHhfaTJzX3JlYWRmbiwKKyAgICAgICAgICAg ICAgICAgICAgcHhhMnh4X2kyc193cml0ZWZuLCBzKTsKKyAgICBjcHVfcmVnaXN0ZXJfcGh5c2lj YWxfbWVtb3J5KHMtPmJhc2UgJiAweGZmZjAwMDAwLCAweGZmZmZmLCBpb21lbXR5cGUpOworCisg ICAgcmV0dXJuIHM7Cit9CisKKy8qIFBYQSBGYXN0IEluZnJhLXJlZCBDb21tdW5pY2F0aW9ucyBQ b3J0ICovCitzdHJ1Y3QgcHhhMnh4X2Zpcl9zIHsKKyAgICB0YXJnZXRfcGh5c19hZGRyX3QgYmFz ZTsKKyAgICBpbnQgaXJxOworICAgIHN0cnVjdCBweGEyeHhfZG1hX3N0YXRlX3MgKmRtYTsKKyAg ICBzdHJ1Y3QgcHhhMnh4X3BpY19zdGF0ZV9zICpwaWM7CisgICAgaW50IGVuYWJsZTsKKyAgICBD aGFyRHJpdmVyU3RhdGUgKmNocjsKKworICAgIHVpbnQ4X3QgY29udHJvbFszXTsKKyAgICB1aW50 OF90IHN0YXR1c1syXTsKKworICAgIGludCByeF9sZW47CisgICAgaW50IHJ4X3N0YXJ0OworICAg IHVpbnQ4X3QgcnhfZmlmb1s2NF07Cit9OworCitzdGF0aWMgdm9pZCBweGEyeHhfZmlyX3Jlc2V0 KHN0cnVjdCBweGEyeHhfZmlyX3MgKnMpCit7CisgICAgcy0+Y29udHJvbFswXSA9IDB4MDA7Cisg ICAgcy0+Y29udHJvbFsxXSA9IDB4MDA7CisgICAgcy0+Y29udHJvbFsyXSA9IDB4MDA7CisgICAg cy0+c3RhdHVzWzBdID0gMHgwMDsKKyAgICBzLT5zdGF0dXNbMV0gPSAweDAwOworICAgIHMtPmVu YWJsZSA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBweGEyeHhfZmlyX3VwZGF0ZShzdHJ1 Y3QgcHhhMnh4X2Zpcl9zICpzKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQgdHJlc2hbNF0gPSB7 IDgsIDE2LCAzMiwgMCB9OworICAgIGludCBpbnRyID0gMDsKKyAgICBpZiAoKHMtPmNvbnRyb2xb MF0gJiAoMSA8PCA0KSkgJiYJCQkvKiBSWEUgKi8KKyAgICAgICAgICAgICAgICAgICAgcy0+cnhf bGVuID49IHRyZXNoW3MtPmNvbnRyb2xbMl0gJiAzXSkJLyogVFJJRyAqLworICAgICAgICBzLT5z dGF0dXNbMF0gfD0gMSA8PCA0OwkJCQkvKiBSRlMgKi8KKyAgICBlbHNlCisgICAgICAgIHMtPnN0 YXR1c1swXSAmPSB+KDEgPDwgNCk7CQkJLyogUkZTICovCisgICAgaWYgKHMtPmNvbnRyb2xbMF0g JiAoMSA8PCAzKSkJCQkvKiBUWEUgKi8KKyAgICAgICAgcy0+c3RhdHVzWzBdIHw9IDEgPDwgMzsJ CQkJLyogVEZTICovCisgICAgZWxzZQorICAgICAgICBzLT5zdGF0dXNbMF0gJj0gfigxIDw8IDMp OwkJCS8qIFRGUyAqLworICAgIGlmIChzLT5yeF9sZW4pCisgICAgICAgIHMtPnN0YXR1c1sxXSB8 PSAxIDw8IDI7CQkJCS8qIFJORSAqLworICAgIGVsc2UKKyAgICAgICAgcy0+c3RhdHVzWzFdICY9 IH4oMSA8PCAyKTsJCQkvKiBSTkUgKi8KKyAgICBpZiAocy0+Y29udHJvbFswXSAmICgxIDw8IDQp KQkJCS8qIFJYRSAqLworICAgICAgICBzLT5zdGF0dXNbMV0gfD0gMSA8PCAwOwkJCQkvKiBSU1kg Ki8KKyAgICBlbHNlCisgICAgICAgIHMtPnN0YXR1c1sxXSAmPSB+KDEgPDwgMCk7CQkJLyogUlNZ ICovCisKKyAgICBpbnRyIHw9IChzLT5jb250cm9sWzBdICYgKDEgPDwgNSkpICYmCQkvKiBSSUUg Ki8KKyAgICAgICAgICAgIChzLT5zdGF0dXNbMF0gJiAoMSA8PCA0KSk7CQkJLyogUkZTICovCisg ICAgaW50ciB8PSAocy0+Y29udHJvbFswXSAmICgxIDw8IDYpKSAmJgkJLyogVElFICovCisgICAg ICAgICAgICAocy0+c3RhdHVzWzBdICYgKDEgPDwgMykpOwkJCS8qIFRGUyAqLworICAgIGludHIg fD0gKHMtPmNvbnRyb2xbMl0gJiAoMSA8PCA0KSkgJiYJCS8qIFRSQUlMICovCisgICAgICAgICAg ICAocy0+c3RhdHVzWzBdICYgKDEgPDwgNikpOwkJCS8qIEVPQyAqLworICAgIGludHIgfD0gKHMt PmNvbnRyb2xbMF0gJiAoMSA8PCAyKSkgJiYJCS8qIFRVUyAqLworICAgICAgICAgICAgKHMtPnN0 YXR1c1swXSAmICgxIDw8IDEpKTsJCQkvKiBUVVIgKi8KKyAgICBpbnRyIHw9IHMtPnN0YXR1c1sw XSAmIDB4MjU7CQkJLyogRlJFLCBSQUIsIEVJRiAqLworCisgICAgcHhhMnh4X2RtYV9yZXF1ZXN0 KHMtPmRtYSwgUFhBMlhYX1JYX1JRX0lDUCwgKHMtPnN0YXR1c1swXSA+PiA0KSAmIDEpOworICAg IHB4YTJ4eF9kbWFfcmVxdWVzdChzLT5kbWEsIFBYQTJYWF9UWF9SUV9JQ1AsIChzLT5zdGF0dXNb MF0gPj4gMykgJiAxKTsKKworICAgIHBpY19zZXRfaXJxX25ldyhzLT5waWMsIHMtPmlycSwgaW50 ciAmJiBzLT5lbmFibGUpOworfQorCisjZGVmaW5lIElDQ1IwCTB4MDAJLyogRklDUCBDb250cm9s IHJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgSUNDUjEJMHgwNAkvKiBGSUNQIENvbnRyb2wgcmVnaXN0 ZXIgMSAqLworI2RlZmluZSBJQ0NSMgkweDA4CS8qIEZJQ1AgQ29udHJvbCByZWdpc3RlciAyICov CisjZGVmaW5lIElDRFIJMHgwYwkvKiBGSUNQIERhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUNT UjAJMHgxNAkvKiBGSUNQIFN0YXR1cyByZWdpc3RlciAwICovCisjZGVmaW5lIElDU1IxCTB4MTgJ LyogRklDUCBTdGF0dXMgcmVnaXN0ZXIgMSAqLworI2RlZmluZSBJQ0ZPUgkweDFjCS8qIEZJQ1Ag RklGTyBPY2N1cGFuY3kgU3RhdHVzIHJlZ2lzdGVyICovCisKK3N0YXRpYyB1aW50MzJfdCBweGEy eHhfZmlyX3JlYWQodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkcikKK3sKKyAg ICBzdHJ1Y3QgcHhhMnh4X2Zpcl9zICpzID0gKHN0cnVjdCBweGEyeHhfZmlyX3MgKikgb3BhcXVl OworICAgIHVpbnQ4X3QgcmV0OworICAgIGFkZHIgLT0gcy0+YmFzZTsKKworICAgIHN3aXRjaCAo YWRkcikgeworICAgIGNhc2UgSUNDUjA6CisgICAgICAgIHJldHVybiBzLT5jb250cm9sWzBdOwor ICAgIGNhc2UgSUNDUjE6CisgICAgICAgIHJldHVybiBzLT5jb250cm9sWzFdOworICAgIGNhc2Ug SUNDUjI6CisgICAgICAgIHJldHVybiBzLT5jb250cm9sWzJdOworICAgIGNhc2UgSUNEUjoKKyAg ICAgICAgcy0+c3RhdHVzWzBdICY9IH4weDAxOworICAgICAgICBzLT5zdGF0dXNbMV0gJj0gfjB4 NzI7CisgICAgICAgIGlmIChzLT5yeF9sZW4pIHsKKyAgICAgICAgICAgIHMtPnJ4X2xlbiAtLTsK KyAgICAgICAgICAgIHJldCA9IHMtPnJ4X2ZpZm9bcy0+cnhfc3RhcnQgKytdOworICAgICAgICAg ICAgcy0+cnhfc3RhcnQgJj0gNjM7CisgICAgICAgICAgICBweGEyeHhfZmlyX3VwZGF0ZShzKTsK KyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCIlczog UnggRklGTyB1bmRlcnJ1bi5cbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgSUNTUjA6CisgICAgICAgIHJldHVybiBzLT5zdGF0dXNbMF07CisgICAgY2FzZSBJQ1NS MToKKyAgICAgICAgcmV0dXJuIHMtPnN0YXR1c1sxXSB8ICgxIDw8IDMpOwkJCS8qIFRORiAqLwor ICAgIGNhc2UgSUNGT1I6CisgICAgICAgIHJldHVybiBzLT5yeF9sZW47CisgICAgZGVmYXVsdDoK KyAgICAgICAgcHJpbnRmKCIlczogQmFkIHJlZ2lzdGVyICIgUkVHX0ZNVCAiXG4iLCBfX0ZVTkNU SU9OX18sIGFkZHIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIHB4YTJ4eF9maXJfd3JpdGUodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19h ZGRyX3QgYWRkciwKKyAgICAgICAgICAgICAgICB1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBzdHJ1 Y3QgcHhhMnh4X2Zpcl9zICpzID0gKHN0cnVjdCBweGEyeHhfZmlyX3MgKikgb3BhcXVlOworICAg IHVpbnQ4X3QgY2g7CisgICAgYWRkciAtPSBzLT5iYXNlOworCisgICAgc3dpdGNoIChhZGRyKSB7 CisgICAgY2FzZSBJQ0NSMDoKKyAgICAgICAgcy0+Y29udHJvbFswXSA9IHZhbHVlOworICAgICAg ICBpZiAoISh2YWx1ZSAmICgxIDw8IDQpKSkJCQkvKiBSWEUgKi8KKyAgICAgICAgICAgIHMtPnJ4 X2xlbiA9IHMtPnJ4X3N0YXJ0ID0gMDsKKyAgICAgICAgaWYgKCEodmFsdWUgJiAoMSA8PCAzKSkp CQkJLyogVFhFICovCisgICAgICAgICAgICAvKiBOb3AgKi87CisgICAgICAgIHMtPmVuYWJsZSA9 IHZhbHVlICYgMTsJCQkJLyogSVRSICovCisgICAgICAgIGlmICghcy0+ZW5hYmxlKQorICAgICAg ICAgICAgcy0+c3RhdHVzWzBdID0gMDsKKyAgICAgICAgcHhhMnh4X2Zpcl91cGRhdGUocyk7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgSUNDUjE6CisgICAgICAgIHMtPmNvbnRyb2xbMV0gPSB2 YWx1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJQ0NSMjoKKyAgICAgICAgcy0+Y29udHJv bFsyXSA9IHZhbHVlICYgMHgzZjsKKyAgICAgICAgcHhhMnh4X2Zpcl91cGRhdGUocyk7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgSUNEUjoKKyAgICAgICAgaWYgKHMtPmNvbnRyb2xbMl0gJiAo MSA8PCAyKSkJCQkvKiBUWFAgKi8KKyAgICAgICAgICAgIGNoID0gdmFsdWU7CisgICAgICAgIGVs c2UKKyAgICAgICAgICAgIGNoID0gfnZhbHVlOworICAgICAgICBpZiAocy0+Y2hyICYmIHMtPmVu YWJsZSAmJiAocy0+Y29udHJvbFswXSAmICgxIDw8IDMpKSkJLyogVFhFICovCisgICAgICAgICAg ICBxZW11X2Nocl93cml0ZShzLT5jaHIsICZjaCwgMSk7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgSUNTUjA6CisgICAgICAgIHMtPnN0YXR1c1swXSAmPSB+KHZhbHVlICYgMHg2Nik7CisgICAg ICAgIHB4YTJ4eF9maXJfdXBkYXRlKHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElDRk9S OgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoIiVzOiBCYWQg cmVnaXN0ZXIgIiBSRUdfRk1UICJcbiIsIF9fRlVOQ1RJT05fXywgYWRkcik7CisgICAgfQorfQor CitzdGF0aWMgQ1BVUmVhZE1lbW9yeUZ1bmMgKnB4YTJ4eF9maXJfcmVhZGZuW10gPSB7CisgICAg cHhhMnh4X2Zpcl9yZWFkLAorICAgIHB4YTJ4eF9maXJfcmVhZCwKKyAgICBweGEyeHhfZmlyX3Jl YWQsCit9OworCitzdGF0aWMgQ1BVV3JpdGVNZW1vcnlGdW5jICpweGEyeHhfZmlyX3dyaXRlZm5b XSA9IHsKKyAgICBweGEyeHhfZmlyX3dyaXRlLAorICAgIHB4YTJ4eF9maXJfd3JpdGUsCisgICAg cHhhMnh4X2Zpcl93cml0ZSwKK307CisKK3N0YXRpYyBpbnQgcHhhMnh4X2Zpcl9pc19lbXB0eSh2 b2lkICpvcGFxdWUpCit7CisgICAgc3RydWN0IHB4YTJ4eF9maXJfcyAqcyA9IChzdHJ1Y3QgcHhh Mnh4X2Zpcl9zICopIG9wYXF1ZTsKKyAgICByZXR1cm4gKHMtPnJ4X2xlbiA8IDY0KTsKK30KKwor c3RhdGljIHZvaWQgcHhhMnh4X2Zpcl9yeCh2b2lkICpvcGFxdWUsIGNvbnN0IHVpbnQ4X3QgKmJ1 ZiwgaW50IHNpemUpCit7CisgICAgc3RydWN0IHB4YTJ4eF9maXJfcyAqcyA9IChzdHJ1Y3QgcHhh Mnh4X2Zpcl9zICopIG9wYXF1ZTsKKyAgICBpZiAoIShzLT5jb250cm9sWzBdICYgKDEgPDwgNCkp KQkJCS8qIFJYRSAqLworICAgICAgICByZXR1cm47CisKKyAgICB3aGlsZSAoc2l6ZSAtLSkgewor ICAgICAgICBzLT5zdGF0dXNbMV0gfD0gMSA8PCA0OwkJCQkvKiBFT0YgKi8KKyAgICAgICAgaWYg KHMtPnJ4X2xlbiA+PSA2NCkgeworICAgICAgICAgICAgcy0+c3RhdHVzWzFdIHw9IDEgPDwgNjsJ CQkvKiBST1IgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYg KHMtPmNvbnRyb2xbMl0gJiAoMSA8PCAzKSkJCQkvKiBSWFAgKi8KKyAgICAgICAgICAgIHMtPnJ4 X2ZpZm9bKHMtPnJ4X3N0YXJ0ICsgcy0+cnhfbGVuICsrKSAmIDYzXSA9ICooYnVmICsrKTsKKyAg ICAgICAgZWxzZQorICAgICAgICAgICAgcy0+cnhfZmlmb1socy0+cnhfc3RhcnQgKyBzLT5yeF9s ZW4gKyspICYgNjNdID0gfiooYnVmICsrKTsKKyAgICB9CisKKyAgICBweGEyeHhfZmlyX3VwZGF0 ZShzKTsKK30KKworc3RhdGljIHZvaWQgcHhhMnh4X2Zpcl9ldmVudCh2b2lkICpvcGFxdWUsIGlu dCBldmVudCkKK3sKK30KKworc3RhdGljIHN0cnVjdCBweGEyeHhfZmlyX3MgKnB4YTJ4eF9maXJf aW5pdCh0YXJnZXRfcGh5c19hZGRyX3QgYmFzZSwgaW50IGlycSwKKyAgICAgICAgICAgICAgICBz dHJ1Y3QgcHhhMnh4X3BpY19zdGF0ZV9zICpwaWMsIHN0cnVjdCBweGEyeHhfZG1hX3N0YXRlX3Mg KmRtYSwKKyAgICAgICAgICAgICAgICBDaGFyRHJpdmVyU3RhdGUgKmNocikKK3sKKyAgICBpbnQg aW9tZW10eXBlOworICAgIHN0cnVjdCBweGEyeHhfZmlyX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9m aXJfcyAqKQorICAgICAgICAgICAgcWVtdV9tYWxsb2N6KHNpemVvZihzdHJ1Y3QgcHhhMnh4X2Zp cl9zKSk7CisKKyAgICBzLT5iYXNlID0gYmFzZTsKKyAgICBzLT5pcnEgPSBpcnE7CisgICAgcy0+ cGljID0gcGljOworICAgIHMtPmRtYSA9IGRtYTsKKyAgICBzLT5jaHIgPSBjaHI7CisKKyAgICBw eGEyeHhfZmlyX3Jlc2V0KHMpOworCisgICAgaW9tZW10eXBlID0gY3B1X3JlZ2lzdGVyX2lvX21l bW9yeSgwLCBweGEyeHhfZmlyX3JlYWRmbiwKKyAgICAgICAgICAgICAgICAgICAgcHhhMnh4X2Zp cl93cml0ZWZuLCBzKTsKKyAgICBjcHVfcmVnaXN0ZXJfcGh5c2ljYWxfbWVtb3J5KHMtPmJhc2Us IDB4ZmZmLCBpb21lbXR5cGUpOworCisgICAgaWYgKGNocikKKyAgICAgICAgcWVtdV9jaHJfYWRk X2hhbmRsZXJzKGNociwgcHhhMnh4X2Zpcl9pc19lbXB0eSwKKyAgICAgICAgICAgICAgICAgICAg ICAgIHB4YTJ4eF9maXJfcngsIHB4YTJ4eF9maXJfZXZlbnQsIHMpOworCisgICAgcmV0dXJuIHM7 Cit9CisKK3ZvaWQgcHhhMnh4X3Jlc2V0KGludCBsaW5lLCBpbnQgbGV2ZWwsIHZvaWQgKm9wYXF1 ZSkKK3sKKyAgICBzdHJ1Y3QgcHhhMnh4X3N0YXRlX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9zdGF0 ZV9zICopIG9wYXF1ZTsKKyAgICBpZiAobGV2ZWwgJiYgKHMtPnBtX3JlZ3NbUENGUiA+PiAyXSAm IDB4MTApKSB7CS8qIEdQUl9FTiAqLworICAgICAgICBjcHVfcmVzZXQocy0+ZW52KTsKKyAgICAg ICAgLyogVE9ETzogcmVzZXQgcGVyaXBoZXJhbHMgKi8KKyAgICB9Cit9CisKKy8qIEluaXRpYWxp c2UgYSBQWEEyNzAgaW50ZWdyYXRlZCBjaGlwIChBUk0gYmFzZWQgY29yZSkuICAqLworc3RydWN0 IHB4YTJ4eF9zdGF0ZV9zICpweGEyNzBfaW5pdChEaXNwbGF5U3RhdGUgKmRzLCBjb25zdCBjaGFy ICpyZXZpc2lvbikKK3sKKyAgICBzdHJ1Y3QgcHhhMnh4X3N0YXRlX3MgKnM7CisgICAgc3RydWN0 IHB4YTJ4eF9zc3BfcyAqc3NwOworICAgIGNoYXIgKmNwdV9tb2RlbDsKKyAgICBpbnQgaW9tZW10 eXBlLCBpOworICAgIHMgPSAoc3RydWN0IHB4YTJ4eF9zdGF0ZV9zICopIHFlbXVfbWFsbG9jeihz aXplb2Yoc3RydWN0IHB4YTJ4eF9zdGF0ZV9zKSk7CisKKyAgICBzLT5lbnYgPSBjcHVfaW5pdCgp OworICAgIGFzcHJpbnRmKCZjcHVfbW9kZWwsICJweGEyNzAtJXMiLCByZXZpc2lvbik7CisgICAg Y3B1X2FybV9zZXRfbW9kZWwocy0+ZW52LCBjcHVfbW9kZWwpOworICAgIGZyZWUoY3B1X21vZGVs KTsKKworICAgIHMtPnBpYyA9IHB4YTJ4eF9waWNfaW5pdCgweDQwZDAwMDAwLCBzLT5lbnYpOwor CisgICAgcy0+ZG1hID0gcHhhMjd4X2RtYV9pbml0KDB4NDAwMDAwMDAsIHMtPnBpYywgUFhBMlhY X1BJQ19ETUEpOworCisgICAgcy0+Z3BpbyA9IHB4YTJ4eF9ncGlvX2luaXQoMHg0MGUwMDAwMCwg cy0+ZW52LCBzLT5waWMsIDEyMSk7CisKKyAgICBmb3IgKGkgPSAwOyBweGEyNzBfc2VyaWFsW2ld LmlvX2Jhc2U7IGkgKyspCisgICAgICAgIGlmIChzZXJpYWxfaGRzW2ldKQorICAgICAgICAgICAg c2VyaWFsX21tX2luaXQoKihTZXRJUlFGdW5jICoqKSBzLT5waWMsIHMtPnBpYywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBweGEyNzBfc2VyaWFsW2ldLmlvX2Jhc2UsIDIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHhhMjcwX3NlcmlhbFtpXS5pcnEsIHNlcmlhbF9oZHNbaV0p OworICAgIGlmIChzZXJpYWxfaGRzW2ldKQorICAgICAgICBzLT5maXIgPSBweGEyeHhfZmlyX2lu aXQoMHg0MDgwMDAwMCwgUFhBMlhYX1BJQ19JQ1AsCisgICAgICAgICAgICAgICAgICAgICAgICBz LT5waWMsIHMtPmRtYSwgc2VyaWFsX2hkc1tpXSk7CisKKyAgICBzLT5jbV9iYXNlID0gMHg0MTMw MDAwMDsKKyAgICBzLT5jbV9yZWdzW0NDQ1IgPj4gNF0gPSAweDAyMDAwMjEwOwkvKiA0MTYuMCBN SHogKi8KKyAgICBzLT5jbGtjZmcgPSAweDAwMDAwMDA5OwkJLyogVHVyYm8gbW9kZSBhY3RpdmUg Ki8KKyAgICBpb21lbXR5cGUgPSBjcHVfcmVnaXN0ZXJfaW9fbWVtb3J5KDAsIHB4YTJ4eF9jbV9y ZWFkZm4sCisgICAgICAgICAgICAgICAgICAgIHB4YTJ4eF9jbV93cml0ZWZuLCBzKTsKKyAgICBj cHVfcmVnaXN0ZXJfcGh5c2ljYWxfbWVtb3J5KHMtPmNtX2Jhc2UsIDB4ZmZmLCBpb21lbXR5cGUp OworCisgICAgY3B1X2FybV9zZXRfY3BfaW8ocy0+ZW52LCAxNCwgcHhhMnh4X2NwMTRfcmVhZCwg cHhhMnh4X2NwMTRfd3JpdGUsIHMpOworCisgICAgcy0+bW1fYmFzZSA9IDB4NDgwMDAwMDA7Cisg ICAgcy0+bW1fcmVnc1tNRE1SUyA+PiAyXSA9IDB4MDAwMjAwMDI7CisgICAgcy0+bW1fcmVnc1tN RFJFRlIgPj4gMl0gPSAweDAzY2E0MDAwOworICAgIHMtPm1tX3JlZ3NbTUVDUiA+PiAyXSA9IDB4 MDAwMDAwMDE7CS8qIFR3byBQQyBDYXJkIHNvY2tldHMgKi8KKyAgICBpb21lbXR5cGUgPSBjcHVf cmVnaXN0ZXJfaW9fbWVtb3J5KDAsIHB4YTJ4eF9tbV9yZWFkZm4sCisgICAgICAgICAgICAgICAg ICAgIHB4YTJ4eF9tbV93cml0ZWZuLCBzKTsKKyAgICBjcHVfcmVnaXN0ZXJfcGh5c2ljYWxfbWVt b3J5KHMtPm1tX2Jhc2UsIDB4ZmZmLCBpb21lbXR5cGUpOworCisgICAgZm9yIChpID0gMDsgcHhh Mjd4X3NzcFtpXS5pb19iYXNlOyBpICsrKTsKKyAgICBzLT5zc3AgPSAoc3RydWN0IHB4YTJ4eF9z c3BfcyAqKikKKyAgICAgICAgICAgIHFlbXVfbWFsbG9jeihzaXplb2Yoc3RydWN0IHB4YTJ4eF9z c3BfcyAqKSAqIGkpOworICAgIHNzcCA9IChzdHJ1Y3QgcHhhMnh4X3NzcF9zICopCisgICAgICAg ICAgICBxZW11X21hbGxvY3ooc2l6ZW9mKHN0cnVjdCBweGEyeHhfc3NwX3MpICogaSk7CisgICAg Zm9yIChpID0gMDsgcHhhMjd4X3NzcFtpXS5pb19iYXNlOyBpICsrKSB7CisgICAgICAgIHMtPnNz cFtpXSA9ICZzc3BbaV07CisgICAgICAgIHNzcFtpXS5iYXNlID0gcHhhMjd4X3NzcFtpXS5pb19i YXNlOworICAgICAgICBzc3BbaV0uaXJxID0gcHhhMjd4X3NzcFtpXS5pcnE7CisgICAgICAgIHNz cFtpXS5waWMgPSBzLT5waWM7CisKKyAgICAgICAgaW9tZW10eXBlID0gY3B1X3JlZ2lzdGVyX2lv X21lbW9yeSgwLCBweGEyeHhfc3NwX3JlYWRmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHB4 YTJ4eF9zc3Bfd3JpdGVmbiwgJnNzcFtpXSk7CisgICAgICAgIGNwdV9yZWdpc3Rlcl9waHlzaWNh bF9tZW1vcnkoc3NwW2ldLmJhc2UsIDB4ZmZmLCBpb21lbXR5cGUpOworICAgIH0KKworICAgIHMt PnJ0Y19iYXNlID0gMHg0MDkwMDAwMDsKKyAgICBpb21lbXR5cGUgPSBjcHVfcmVnaXN0ZXJfaW9f bWVtb3J5KDAsIHB4YTJ4eF9ydGNfcmVhZGZuLAorICAgICAgICAgICAgICAgICAgICBweGEyeHhf cnRjX3dyaXRlZm4sIHMpOworICAgIGNwdV9yZWdpc3Rlcl9waHlzaWNhbF9tZW1vcnkocy0+cnRj X2Jhc2UsIDB4ZmZmLCBpb21lbXR5cGUpOworICAgIHB4YTJ4eF9ydGNfcmVzZXQocyk7CisKKyAg ICBzLT5pMmNbMF0gPSBweGEyeHhfaTJjX2luaXQoMHg0MDMwMTYwMCwgUFhBMlhYX1BJQ19JMkMs IHMtPnBpYyk7CisgICAgcy0+aTJjWzFdID0gcHhhMnh4X2kyY19pbml0KDB4NDBmMDAxMDAsIFBY QTJYWF9QSUNfUFdSSTJDLCBzLT5waWMpOworCisgICAgLyogUmVnaXN0ZXIgUE0gYWZ0ZXIgUFdS STJDIHRvIGdldCB0aGUgcmVnaXN0ZXIgbWFwcGluZ3MgcmlnaHQuICAqLworICAgIHMtPnBtX2Jh c2UgPSAweDQwZjAwMDAwOworICAgIGlvbWVtdHlwZSA9IGNwdV9yZWdpc3Rlcl9pb19tZW1vcnko MCwgcHhhMnh4X3BtX3JlYWRmbiwKKyAgICAgICAgICAgICAgICAgICAgcHhhMnh4X3BtX3dyaXRl Zm4sIHMpOworICAgIGNwdV9yZWdpc3Rlcl9waHlzaWNhbF9tZW1vcnkocy0+cG1fYmFzZSwgMHhm ZmYsIGlvbWVtdHlwZSk7CisKKyAgICBzLT5pMnMgPSBweGEyeHhfaTJzX2luaXQoMHg0MDQwMDAw MCwgUFhBMlhYX1BJQ19JMlMsIHMtPnBpYywgcy0+ZG1hKTsKKworICAgIC8qIEdQSU8xIHJlc2V0 cyB0aGUgcHJvY2Vzc29yICovCisgICAgLyogVGhlIGhhbmRsZXIgY2FuIGJlIG92ZXJyaWRlbiBi eSBib2FyZC1zcGVjaWZpYyBjb2RlICovCisgICAgcHhhMnh4X2dwaW9faGFuZGxlcl9zZXQocy0+ Z3BpbywgMSwgcHhhMnh4X3Jlc2V0LCBzKTsKKyAgICByZXR1cm4gczsKK30KKworLyogSW5pdGlh bGlzZSBhIFBYQTI1NSBpbnRlZ3JhdGVkIGNoaXAgKEFSTSBiYXNlZCBjb3JlKS4gICovCitzdHJ1 Y3QgcHhhMnh4X3N0YXRlX3MgKnB4YTI1NV9pbml0KERpc3BsYXlTdGF0ZSAqZHMpCit7CisgICAg c3RydWN0IHB4YTJ4eF9zdGF0ZV9zICpzOworICAgIHN0cnVjdCBweGEyeHhfc3NwX3MgKnNzcDsK KyAgICBpbnQgaW9tZW10eXBlLCBpOworICAgIHMgPSAoc3RydWN0IHB4YTJ4eF9zdGF0ZV9zICop IHFlbXVfbWFsbG9jeihzaXplb2Yoc3RydWN0IHB4YTJ4eF9zdGF0ZV9zKSk7CisKKyAgICBzLT5l bnYgPSBjcHVfaW5pdCgpOworICAgIGNwdV9hcm1fc2V0X21vZGVsKHMtPmVudiwgInB4YTI1NSIp OworCisgICAgcy0+cGljID0gcHhhMnh4X3BpY19pbml0KDB4NDBkMDAwMDAsIHMtPmVudik7CisK KyAgICBzLT5kbWEgPSBweGEyNTVfZG1hX2luaXQoMHg0MDAwMDAwMCwgcy0+cGljLCBQWEEyWFhf UElDX0RNQSk7CisKKyAgICBzLT5ncGlvID0gcHhhMnh4X2dwaW9faW5pdCgweDQwZTAwMDAwLCBz LT5lbnYsIHMtPnBpYywgMTIxKTsKKworICAgIGZvciAoaSA9IDA7IHB4YTI1NV9zZXJpYWxbaV0u aW9fYmFzZTsgaSArKykKKyAgICAgICAgaWYgKHNlcmlhbF9oZHNbaV0pCisgICAgICAgICAgICBz ZXJpYWxfbW1faW5pdCgqKFNldElSUUZ1bmMgKiopIHMtPnBpYywgcy0+cGljLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHB4YTI1NV9zZXJpYWxbaV0uaW9fYmFzZSwgMiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBweGEyNTVfc2VyaWFsW2ldLmlycSwgc2VyaWFsX2hkc1tpXSk7 CisgICAgaWYgKHNlcmlhbF9oZHNbaV0pCisgICAgICAgIHMtPmZpciA9IHB4YTJ4eF9maXJfaW5p dCgweDQwODAwMDAwLCBQWEEyWFhfUElDX0lDUCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHMt PnBpYywgcy0+ZG1hLCBzZXJpYWxfaGRzW2ldKTsKKworICAgIHMtPmNtX2Jhc2UgPSAweDQxMzAw MDAwOworICAgIHMtPmNtX3JlZ3NbQ0NDUiA+PiA0XSA9IDB4MDIwMDAyMTA7CS8qIDQxNi4wIE1I eiAqLworICAgIHMtPmNsa2NmZyA9IDB4MDAwMDAwMDk7CQkvKiBUdXJibyBtb2RlIGFjdGl2ZSAq LworICAgIGlvbWVtdHlwZSA9IGNwdV9yZWdpc3Rlcl9pb19tZW1vcnkoMCwgcHhhMnh4X2NtX3Jl YWRmbiwKKyAgICAgICAgICAgICAgICAgICAgcHhhMnh4X2NtX3dyaXRlZm4sIHMpOworICAgIGNw dV9yZWdpc3Rlcl9waHlzaWNhbF9tZW1vcnkocy0+Y21fYmFzZSwgMHhmZmYsIGlvbWVtdHlwZSk7 CisKKyAgICBjcHVfYXJtX3NldF9jcF9pbyhzLT5lbnYsIDE0LCBweGEyeHhfY3AxNF9yZWFkLCBw eGEyeHhfY3AxNF93cml0ZSwgcyk7CisKKyAgICBzLT5tbV9iYXNlID0gMHg0ODAwMDAwMDsKKyAg ICBzLT5tbV9yZWdzW01ETVJTID4+IDJdID0gMHgwMDAyMDAwMjsKKyAgICBzLT5tbV9yZWdzW01E UkVGUiA+PiAyXSA9IDB4MDNjYTQwMDA7CisgICAgcy0+bW1fcmVnc1tNRUNSID4+IDJdID0gMHgw MDAwMDAwMTsJLyogVHdvIFBDIENhcmQgc29ja2V0cyAqLworICAgIGlvbWVtdHlwZSA9IGNwdV9y ZWdpc3Rlcl9pb19tZW1vcnkoMCwgcHhhMnh4X21tX3JlYWRmbiwKKyAgICAgICAgICAgICAgICAg ICAgcHhhMnh4X21tX3dyaXRlZm4sIHMpOworICAgIGNwdV9yZWdpc3Rlcl9waHlzaWNhbF9tZW1v cnkocy0+bW1fYmFzZSwgMHhmZmYsIGlvbWVtdHlwZSk7CisKKyAgICBmb3IgKGkgPSAwOyBweGEy NTVfc3NwW2ldLmlvX2Jhc2U7IGkgKyspOworICAgIHMtPnNzcCA9IChzdHJ1Y3QgcHhhMnh4X3Nz cF9zICoqKQorICAgICAgICAgICAgcWVtdV9tYWxsb2N6KHNpemVvZihzdHJ1Y3QgcHhhMnh4X3Nz cF9zICopICogaSk7CisgICAgc3NwID0gKHN0cnVjdCBweGEyeHhfc3NwX3MgKikKKyAgICAgICAg ICAgIHFlbXVfbWFsbG9jeihzaXplb2Yoc3RydWN0IHB4YTJ4eF9zc3BfcykgKiBpKTsKKyAgICBm b3IgKGkgPSAwOyBweGEyNTVfc3NwW2ldLmlvX2Jhc2U7IGkgKyspIHsKKyAgICAgICAgcy0+c3Nw W2ldID0gJnNzcFtpXTsKKyAgICAgICAgc3NwW2ldLmJhc2UgPSBweGEyNTVfc3NwW2ldLmlvX2Jh c2U7CisgICAgICAgIHNzcFtpXS5pcnEgPSBweGEyNTVfc3NwW2ldLmlycTsKKyAgICAgICAgc3Nw W2ldLnBpYyA9IHMtPnBpYzsKKworICAgICAgICBpb21lbXR5cGUgPSBjcHVfcmVnaXN0ZXJfaW9f bWVtb3J5KDAsIHB4YTJ4eF9zc3BfcmVhZGZuLAorICAgICAgICAgICAgICAgICAgICAgICAgcHhh Mnh4X3NzcF93cml0ZWZuLCAmc3NwW2ldKTsKKyAgICAgICAgY3B1X3JlZ2lzdGVyX3BoeXNpY2Fs X21lbW9yeShzc3BbaV0uYmFzZSwgMHhmZmYsIGlvbWVtdHlwZSk7CisgICAgfQorCisgICAgcy0+ cnRjX2Jhc2UgPSAweDQwOTAwMDAwOworICAgIGlvbWVtdHlwZSA9IGNwdV9yZWdpc3Rlcl9pb19t ZW1vcnkoMCwgcHhhMnh4X3J0Y19yZWFkZm4sCisgICAgICAgICAgICAgICAgICAgIHB4YTJ4eF9y dGNfd3JpdGVmbiwgcyk7CisgICAgY3B1X3JlZ2lzdGVyX3BoeXNpY2FsX21lbW9yeShzLT5ydGNf YmFzZSwgMHhmZmYsIGlvbWVtdHlwZSk7CisgICAgcHhhMnh4X3J0Y19yZXNldChzKTsKKworICAg IHMtPmkyY1swXSA9IHB4YTJ4eF9pMmNfaW5pdCgweDQwMzAxNjAwLCBQWEEyWFhfUElDX0kyQywg cy0+cGljKTsKKyAgICBzLT5pMmNbMV0gPSBweGEyeHhfaTJjX2luaXQoMHg0MGYwMDEwMCwgUFhB MlhYX1BJQ19QV1JJMkMsIHMtPnBpYyk7CisKKyAgICAvKiBSZWdpc3RlciBQTSBhZnRlciBQV1JJ MkMgdG8gZ2V0IHRoZSByZWdpc3RlciBtYXBwaW5ncyByaWdodC4gICovCisgICAgcy0+cG1fYmFz ZSA9IDB4NDBmMDAwMDA7CisgICAgaW9tZW10eXBlID0gY3B1X3JlZ2lzdGVyX2lvX21lbW9yeSgw LCBweGEyeHhfcG1fcmVhZGZuLAorICAgICAgICAgICAgICAgICAgICBweGEyeHhfcG1fd3JpdGVm biwgcyk7CisgICAgY3B1X3JlZ2lzdGVyX3BoeXNpY2FsX21lbW9yeShzLT5wbV9iYXNlLCAweGZm ZiwgaW9tZW10eXBlKTsKKworICAgIHMtPmkycyA9IHB4YTJ4eF9pMnNfaW5pdCgweDQwNDAwMDAw LCBQWEEyWFhfUElDX0kyUywgcy0+cGljLCBzLT5kbWEpOworCisgICAgLyogR1BJTzEgcmVzZXRz IHRoZSBwcm9jZXNzb3IgKi8KKyAgICAvKiBUaGUgaGFuZGxlciBjYW4gYmUgb3ZlcnJpZGVuIGJ5 IGJvYXJkLXNwZWNpZmljIGNvZGUgKi8KKyAgICBweGEyeHhfZ3Bpb19oYW5kbGVyX3NldChzLT5n cGlvLCAxLCBweGEyeHhfcmVzZXQsIHMpOworICAgIHJldHVybiBzOworfQpkaWZmIC0tZ2l0IGEv aHcvcHhhMnh4X2RtYS5jIGIvaHcvcHhhMnh4X2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjRiNDRkOGQKLS0tIC9kZXYvbnVsbAorKysgYi9ody9weGEyeHhfZG1hLmMK QEAgLTAsMCArMSw1MDAgQEAKKy8qCisgKiBJbnRlbCBYU2NhbGUgUFhBMjU1LzI3MCBETUEgY29u dHJvbGxlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3BlbmVkaGFuZCBMdGQuCisgKiBD b3B5cmlnaHQgKGMpIDIwMDYgVGhvcnN0ZW4gWml0dGVyZWxsCisgKiBXcml0dGVuIGJ5IEFuZHJ6 ZWogWmFib3Jvd3NraSA8YmFscm9nQHphYm9yLm9yZz4KKyAqCisgKiBUaGlzIGNvZGUgaXMgbGlj ZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSAidmwuaCIKKworc3RydWN0IHB4 YTJ4eF9kbWFfY2hhbm5lbF9zIHsKKyAgICB0YXJnZXRfcGh5c19hZGRyX3QgZGVzY3I7CisgICAg dGFyZ2V0X3BoeXNfYWRkcl90IHNyYzsKKyAgICB0YXJnZXRfcGh5c19hZGRyX3QgZGVzdDsKKyAg ICB1aW50MzJfdCBjbWQ7CisgICAgdWludDMyX3Qgc3RhdGU7CisgICAgaW50IHJlcXVlc3Q7Cit9 OworCisvKiBUaGUgZmlyc3QgZWxlbWVudCBvZiBhbiBpbmRpdmlkdWFsIFBJQyBzdGF0ZSBzdHJ1 Y3R1cmVzIHNob3VsZAorICogYmUgYSBwb2ludGVyIHRvIHRoZSBoYW5kbGVyIHJvdXRpbmUuICBX ZSBhbGxvdyB0aGUgRE1BIHRvIGJlIHVzZWQKKyAqIGFzIGEgUElDLiAqLwordHlwZWRlZiB2b2lk ICgqcHhhMnh4X2RtYV9oYW5kbGVyX3QpKHZvaWQgKm9wYXF1ZSwgaW50IGlycSwgaW50IGxldmVs KTsKKworc3RydWN0IHB4YTJ4eF9kbWFfc3RhdGVfcyB7CisgICAgcHhhMnh4X2RtYV9oYW5kbGVy X3QgaGFuZGxlcjsKKyAgICB0YXJnZXRfcGh5c19hZGRyX3QgYmFzZTsKKyAgICB2b2lkICpwaWM7 CisgICAgaW50IGlycTsKKworICAgIHVpbnQzMl90IHN0b3BpbnRyOworICAgIHVpbnQzMl90IGVv cmludHI7CisgICAgdWludDMyX3QgcmFzaW50cjsKKyAgICB1aW50MzJfdCBzdGFydGludHI7Cisg ICAgdWludDMyX3QgZW5kaW50cjsKKworICAgIHVpbnQzMl90IGFsaWduOworICAgIHVpbnQzMl90 IHBpbzsKKworICAgIGludCBjaGFubmVsczsKKyAgICBzdHJ1Y3QgcHhhMnh4X2RtYV9jaGFubmVs X3MgKmNoYW47CisKKyAgICB1aW50OF90ICpyZXE7CisKKyAgICAvKiBGbGFnIHRvIGF2b2lkIHJl Y3Vyc2l2ZSBETUEgaW52b2NhdGlvbnMuICAqLworICAgIGludCBydW5uaW5nOworfTsKKworI2Rl ZmluZSBQWEEyNTVfRE1BX05VTV9DSEFOTkVMUwkxNgorI2RlZmluZSBQWEEyN1hfRE1BX05VTV9D SEFOTkVMUwkzMgorCisjZGVmaW5lIFBYQTJYWF9ETUFfTlVNX1JFUVVFU1RTCTc1CisKKyNkZWZp bmUgRENTUjAJMHgwMDAwCS8qIERNQSBDb250cm9sIC8gU3RhdHVzIHJlZ2lzdGVyIGZvciBDaGFu bmVsIDAgKi8KKyNkZWZpbmUgRENTUjMxCTB4MDA3YwkvKiBETUEgQ29udHJvbCAvIFN0YXR1cyBy ZWdpc3RlciBmb3IgQ2hhbm5lbCAzMSAqLworI2RlZmluZSBEQUxHTgkweDAwYTAJLyogRE1BIEFs aWdubWVudCByZWdpc3RlciAqLworI2RlZmluZSBEUENTUgkweDAwYTQJLyogRE1BIFByb2dyYW1t ZWQgSS9PIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIERSUVNSMAkweDAwZTAJ LyogRE1BIERSRVE8MD4gU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIERSUVNSMQkweDAwZTQJ LyogRE1BIERSRVE8MT4gU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIERSUVNSMgkweDAwZTgJ LyogRE1BIERSRVE8Mj4gU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIERJTlQJMHgwMGYwCS8q IERNQSBJbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRFJDTVIwCTB4MDEwMAkvKiBSZXF1 ZXN0IHRvIENoYW5uZWwgTWFwIHJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgRFJDTVI2MwkweDAxZmMJ LyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCByZWdpc3RlciA2MyAqLworI2RlZmluZSBEX0NIMAkw eDAyMDAJLyogQ2hhbm5lbCAwIERlc2NyaXB0b3Igc3RhcnQgKi8KKyNkZWZpbmUgRFJDTVI2NAkw eDExMDAJLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCByZWdpc3RlciA2NCAqLworI2RlZmluZSBE UkNNUjc0CTB4MTEyOAkvKiBSZXF1ZXN0IHRvIENoYW5uZWwgTWFwIHJlZ2lzdGVyIDc0ICovCisK Ky8qIFBlci1jaGFubmVsIHJlZ2lzdGVyICovCisjZGVmaW5lIEREQURSCTB4MDAKKyNkZWZpbmUg RFNBRFIJMHgwMQorI2RlZmluZSBEVEFEUgkweDAyCisjZGVmaW5lIERDTUQJMHgwMworCisvKiBC aXQtZmllbGQgbWFza3MgKi8KKyNkZWZpbmUgRFJDTVJfQ0hMTlVNCQkweDFmCisjZGVmaW5lIERS Q01SX01BUFZMRAkJKDEgPDwgNykKKyNkZWZpbmUgRERBRFJfU1RPUAkJKDEgPDwgMCkKKyNkZWZp bmUgRERBRFJfQlJFTgkJKDEgPDwgMSkKKyNkZWZpbmUgRENNRF9MRU4JCTB4MWZmZgorI2RlZmlu ZSBEQ01EX1dJRFRIKHgpCQkoMSA8PCAoKCgoeCkgPj4gMTQpICYgMykgLSAxKSkKKyNkZWZpbmUg RENNRF9TSVpFKHgpCQkoNCA8PCAoKCh4KSA+PiAxNikgJiAzKSkKKyNkZWZpbmUgRENNRF9GTFlC WVQJCSgxIDw8IDE5KQorI2RlZmluZSBEQ01EX0ZMWUJZUwkJKDEgPDwgMjApCisjZGVmaW5lIERD TURfRU5ESVJRRU4JCSgxIDw8IDIxKQorI2RlZmluZSBEQ01EX1NUQVJUSVJRRU4JCSgxIDw8IDIy KQorI2RlZmluZSBEQ01EX0NNUEVOCQkoMSA8PCAyNSkKKyNkZWZpbmUgRENNRF9GTE9XVFJHCQko MSA8PCAyOCkKKyNkZWZpbmUgRENNRF9GTE9XU1JDCQkoMSA8PCAyOSkKKyNkZWZpbmUgRENNRF9J TkNUUkdBRERSCQkoMSA8PCAzMCkKKyNkZWZpbmUgRENNRF9JTkNTUkNBRERSCQkoMSA8PCAzMSkK KyNkZWZpbmUgRENTUl9CVVNFUlJJTlRSCQkoMSA8PCAwKQorI2RlZmluZSBEQ1NSX1NUQVJUSU5U UgkJKDEgPDwgMSkKKyNkZWZpbmUgRENTUl9FTkRJTlRSCQkoMSA8PCAyKQorI2RlZmluZSBEQ1NS X1NUT1BJTlRSCQkoMSA8PCAzKQorI2RlZmluZSBEQ1NSX1JBU0lOVFIJCSgxIDw8IDQpCisjZGVm aW5lIERDU1JfUkVRUEVORAkJKDEgPDwgOCkKKyNkZWZpbmUgRENTUl9FT1JJTlQJCSgxIDw8IDkp CisjZGVmaW5lIERDU1JfQ01QU1QJCSgxIDw8IDEwKQorI2RlZmluZSBEQ1NSX01BU0tSVU4JCSgx IDw8IDIyKQorI2RlZmluZSBEQ1NSX1JBU0lSUUVOCQkoMSA8PCAyMykKKyNkZWZpbmUgRENTUl9D TFJDTVBTVAkJKDEgPDwgMjQpCisjZGVmaW5lIERDU1JfU0VUQ01QU1QJCSgxIDw8IDI1KQorI2Rl ZmluZSBEQ1NSX0VPUlNUT1BFTgkJKDEgPDwgMjYpCisjZGVmaW5lIERDU1JfRU9SSk1QRU4JCSgx IDw8IDI3KQorI2RlZmluZSBEQ1NSX0VPUklSUUVOCQkoMSA8PCAyOCkKKyNkZWZpbmUgRENTUl9T VE9QSVJRRU4JCSgxIDw8IDI5KQorI2RlZmluZSBEQ1NSX05PREVTQ0ZFVENICSgxIDw8IDMwKQor I2RlZmluZSBEQ1NSX1JVTgkJKDEgPDwgMzEpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBweGEyeHhf ZG1hX3VwZGF0ZShzdHJ1Y3QgcHhhMnh4X2RtYV9zdGF0ZV9zICpzLCBpbnQgY2gpCit7CisgICAg aWYgKGNoID49IDApIHsKKyAgICAgICAgaWYgKChzLT5jaGFuW2NoXS5zdGF0ZSAmIERDU1JfU1RP UElSUUVOKSAmJgorICAgICAgICAgICAgICAgIChzLT5jaGFuW2NoXS5zdGF0ZSAmIERDU1JfU1RP UElOVFIpKQorICAgICAgICAgICAgcy0+c3RvcGludHIgfD0gMSA8PCBjaDsKKyAgICAgICAgZWxz ZQorICAgICAgICAgICAgcy0+c3RvcGludHIgJj0gfigxIDw8IGNoKTsKKworICAgICAgICBpZiAo KHMtPmNoYW5bY2hdLnN0YXRlICYgRENTUl9FT1JJUlFFTikgJiYKKyAgICAgICAgICAgICAgICAo cy0+Y2hhbltjaF0uc3RhdGUgJiBEQ1NSX0VPUklOVCkpCisgICAgICAgICAgICBzLT5lb3JpbnRy IHw9IDEgPDwgY2g7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHMtPmVvcmludHIgJj0gfigx IDw8IGNoKTsKKworICAgICAgICBpZiAoKHMtPmNoYW5bY2hdLnN0YXRlICYgRENTUl9SQVNJUlFF TikgJiYKKyAgICAgICAgICAgICAgICAocy0+Y2hhbltjaF0uc3RhdGUgJiBEQ1NSX1JBU0lOVFIp KQorICAgICAgICAgICAgcy0+cmFzaW50ciB8PSAxIDw8IGNoOworICAgICAgICBlbHNlCisgICAg ICAgICAgICBzLT5yYXNpbnRyICY9IH4oMSA8PCBjaCk7CisKKyAgICAgICAgaWYgKHMtPmNoYW5b Y2hdLnN0YXRlICYgRENTUl9TVEFSVElOVFIpCisgICAgICAgICAgICBzLT5zdGFydGludHIgfD0g MSA8PCBjaDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcy0+c3RhcnRpbnRyICY9IH4oMSA8 PCBjaCk7CisKKyAgICAgICAgaWYgKHMtPmNoYW5bY2hdLnN0YXRlICYgRENTUl9FTkRJTlRSKQor ICAgICAgICAgICAgcy0+ZW5kaW50ciB8PSAxIDw8IGNoOworICAgICAgICBlbHNlCisgICAgICAg ICAgICBzLT5lbmRpbnRyICY9IH4oMSA8PCBjaCk7CisgICAgfQorCisgICAgaWYgKHMtPnN0b3Bp bnRyIHwgcy0+ZW9yaW50ciB8IHMtPnJhc2ludHIgfCBzLT5zdGFydGludHIgfCBzLT5lbmRpbnRy KQorICAgICAgICBwaWNfc2V0X2lycV9uZXcocy0+cGljLCBzLT5pcnEsIDEpOworICAgIGVsc2UK KyAgICAgICAgcGljX3NldF9pcnFfbmV3KHMtPnBpYywgcy0+aXJxLCAwKTsKK30KKworc3RhdGlj IGlubGluZSB2b2lkIHB4YTJ4eF9kbWFfZGVzY3JpcHRvcl9mZXRjaCgKKyAgICAgICAgICAgICAg ICBzdHJ1Y3QgcHhhMnh4X2RtYV9zdGF0ZV9zICpzLCBpbnQgY2gpCit7CisgICAgdWludDMyX3Qg ZGVzY1s0XTsKKyAgICB0YXJnZXRfcGh5c19hZGRyX3QgZGFkZHIgPSBzLT5jaGFuW2NoXS5kZXNj ciAmIH4weGY7CisgICAgaWYgKChzLT5jaGFuW2NoXS5kZXNjciAmIEREQURSX0JSRU4pICYmIChz LT5jaGFuW2NoXS5zdGF0ZSAmIERDU1JfQ01QU1QpKQorICAgICAgICBkYWRkciArPSAzMjsKKwor ICAgIGNwdV9waHlzaWNhbF9tZW1vcnlfcmVhZChkYWRkciwgKHVpbnQ4X3QgKikgZGVzYywgMTYp OworICAgIHMtPmNoYW5bY2hdLmRlc2NyID0gZGVzY1tEREFEUl07CisgICAgcy0+Y2hhbltjaF0u c3JjID0gZGVzY1tEU0FEUl07CisgICAgcy0+Y2hhbltjaF0uZGVzdCA9IGRlc2NbRFRBRFJdOwor ICAgIHMtPmNoYW5bY2hdLmNtZCA9IGRlc2NbRENNRF07CisKKyAgICBpZiAocy0+Y2hhbltjaF0u Y21kICYgRENNRF9GTE9XU1JDKQorICAgICAgICBzLT5jaGFuW2NoXS5zcmMgJj0gfjM7CisgICAg aWYgKHMtPmNoYW5bY2hdLmNtZCAmIERDTURfRkxPV1RSRykKKyAgICAgICAgcy0+Y2hhbltjaF0u ZGVzdCAmPSB+MzsKKworICAgIGlmIChzLT5jaGFuW2NoXS5jbWQgJiAoRENNRF9DTVBFTiB8IERD TURfRkxZQllTIHwgRENNRF9GTFlCWVQpKQorICAgICAgICBwcmludGYoIiVzOiB1bnN1cHBvcnRl ZCBtb2RlIGluIGNoYW5uZWwgJWlcbiIsIF9fRlVOQ1RJT05fXywgY2gpOworCisgICAgaWYgKHMt PmNoYW5bY2hdLmNtZCAmIERDTURfU1RBUlRJUlFFTikKKyAgICAgICAgcy0+Y2hhbltjaF0uc3Rh dGUgfD0gRENTUl9TVEFSVElOVFI7Cit9CisKK3N0YXRpYyB2b2lkIHB4YTJ4eF9kbWFfcnVuKHN0 cnVjdCBweGEyeHhfZG1hX3N0YXRlX3MgKnMpCit7CisgICAgaW50IGMsIHNyY2luYywgZGVzdGlu YzsKKyAgICB1aW50MzJfdCBuLCBzaXplOworICAgIHVpbnQzMl90IHdpZHRoOworICAgIHVpbnQz Ml90IGxlbmd0aDsKKyAgICBjaGFyIGJ1ZmZlclszMl07CisgICAgc3RydWN0IHB4YTJ4eF9kbWFf Y2hhbm5lbF9zICpjaDsKKworICAgIGlmIChzLT5ydW5uaW5nICsrKQorICAgICAgICByZXR1cm47 CisKKyAgICB3aGlsZSAocy0+cnVubmluZykgeworICAgICAgICBzLT5ydW5uaW5nID0gMTsKKyAg ICAgICAgZm9yIChjID0gMDsgYyA8IHMtPmNoYW5uZWxzOyBjICsrKSB7CisgICAgICAgICAgICBj aCA9ICZzLT5jaGFuW2NdOworCisgICAgICAgICAgICB3aGlsZSAoKGNoLT5zdGF0ZSAmIERDU1Jf UlVOKSAmJiAhKGNoLT5zdGF0ZSAmIERDU1JfU1RPUElOVFIpKSB7CisgICAgICAgICAgICAgICAg LyogVGVzdCBmb3IgcGVuZGluZyByZXF1ZXN0cyAqLworICAgICAgICAgICAgICAgIGlmICgoY2gt PmNtZCAmIChEQ01EX0ZMT1dTUkMgfCBEQ01EX0ZMT1dUUkcpKSAmJiAhY2gtPnJlcXVlc3QpCisg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gY2gt PmNtZCAmIERDTURfTEVOOworICAgICAgICAgICAgICAgIHNpemUgPSBEQ01EX1NJWkUoY2gtPmNt ZCk7CisgICAgICAgICAgICAgICAgd2lkdGggPSBEQ01EX1dJRFRIKGNoLT5jbWQpOworCisgICAg ICAgICAgICAgICAgc3JjaW5jID0gKGNoLT5jbWQgJiBEQ01EX0lOQ1NSQ0FERFIpID8gd2lkdGgg OiAwOworICAgICAgICAgICAgICAgIGRlc3RpbmMgPSAoY2gtPmNtZCAmIERDTURfSU5DVFJHQURE UikgPyB3aWR0aCA6IDA7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAobGVuZ3RoKSB7CisgICAg ICAgICAgICAgICAgICAgIHNpemUgPSBNSU4obGVuZ3RoLCBzaXplKTsKKworICAgICAgICAgICAg ICAgICAgICBmb3IgKG4gPSAwOyBuIDwgc2l6ZTsgbiArPSB3aWR0aCkgeworICAgICAgICAgICAg ICAgICAgICAgICAgY3B1X3BoeXNpY2FsX21lbW9yeV9yZWFkKGNoLT5zcmMsIGJ1ZmZlciArIG4s IHdpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoLT5zcmMgKz0gc3JjaW5jOworICAg ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8 IHNpemU7IG4gKz0gd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNwdV9waHlzaWNh bF9tZW1vcnlfd3JpdGUoY2gtPmRlc3QsIGJ1ZmZlciArIG4sIHdpZHRoKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGNoLT5kZXN0ICs9IGRlc3RpbmM7CisgICAgICAgICAgICAgICAgICAgIH0K KworICAgICAgICAgICAgICAgICAgICBsZW5ndGggLT0gc2l6ZTsKKworICAgICAgICAgICAgICAg ICAgICBpZiAoKGNoLT5jbWQgJiAoRENNRF9GTE9XU1JDIHwgRENNRF9GTE9XVFJHKSkgJiYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAhY2gtPnJlcXVlc3QpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGNoLT5zdGF0ZSB8PSBEQ1NSX0VPUklOVDsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChjaC0+c3RhdGUgJiBEQ1NSX0VPUlNUT1BFTikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaC0+c3RhdGUgfD0gRENTUl9TVE9QSU5UUjsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmICgoY2gtPnN0YXRlICYgRENTUl9FT1JKTVBFTikgJiYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAhKGNoLT5zdGF0ZSAmIERDU1JfTk9ERVNDRkVUQ0gpKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB4YTJ4eF9kbWFfZGVzY3JpcHRvcl9mZXRjaChz LCBjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQkgICAgfQorICAgICAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNoLT5jbWQgPSAoY2gtPmNtZCAmIH5EQ01EX0xF TikgfCBsZW5ndGg7CisKKyAgICAgICAgICAgICAgICAvKiBJcyB0aGUgdHJhbnNmZXIgY29tcGxl dGUgbm93PyAqLworICAgICAgICAgICAgICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgICAgICAg ICAgICAgIGlmIChjaC0+Y21kICYgRENNRF9FTkRJUlFFTikKKyAgICAgICAgICAgICAgICAgICAg ICAgIGNoLT5zdGF0ZSB8PSBEQ1NSX0VORElOVFI7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg KChjaC0+c3RhdGUgJiBEQ1NSX05PREVTQ0ZFVENIKSB8fAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2gtPmRlc2NyICYgRERBRFJfU1RPUCkgfHwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNoLT5zdGF0ZSAmIERDU1JfRU9SU1RPUEVOKSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgY2gtPnN0YXRlIHw9IERDU1JfU1RPUElOVFI7CisgICAgICAgICAgICAg ICAgICAgICAgICBjaC0+c3RhdGUgJj0gfkRDU1JfUlVOOworCisgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg IGNoLT5zdGF0ZSB8PSBEQ1NSX1NUT1BJTlRSOworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBz LT5ydW5uaW5nIC0tOworICAgIH0KK30KKworc3RhdGljIHVpbnQzMl90IHB4YTJ4eF9kbWFfcmVh ZCh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBvZmZzZXQpCit7CisgICAgc3RydWN0 IHB4YTJ4eF9kbWFfc3RhdGVfcyAqcyA9IChzdHJ1Y3QgcHhhMnh4X2RtYV9zdGF0ZV9zICopIG9w YXF1ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbDsKKyAgICBvZmZzZXQgLT0gcy0+YmFzZTsK KworICAgIHN3aXRjaCAob2Zmc2V0KSB7CisgICAgY2FzZSBEUkNNUjY0IC4uLiBEUkNNUjc0Ogor ICAgICAgICBvZmZzZXQgLT0gRFJDTVI2NCAtIERSQ01SMCAtICg2NCA8PCAyKTsKKyAgICAgICAg LyogRmFsbCB0aHJvdWdoICovCisgICAgY2FzZSBEUkNNUjAgLi4uIERSQ01SNjM6CisgICAgICAg IGNoYW5uZWwgPSAob2Zmc2V0IC0gRFJDTVIwKSA+PiAyOworICAgICAgICByZXR1cm4gcy0+cmVx W2NoYW5uZWxdOworCisgICAgY2FzZSBEUlFTUjA6CisgICAgY2FzZSBEUlFTUjE6CisgICAgY2Fz ZSBEUlFTUjI6CisgICAgICAgIHJldHVybiAwOworCisgICAgY2FzZSBEQ1NSMCAuLi4gRENTUjMx OgorICAgICAgICBjaGFubmVsID0gb2Zmc2V0ID4+IDI7CisJaWYgKHMtPmNoYW5bY2hhbm5lbF0u cmVxdWVzdCkKKyAgICAgICAgICAgIHJldHVybiBzLT5jaGFuW2NoYW5uZWxdLnN0YXRlIHwgRENT Ul9SRVFQRU5EOworICAgICAgICByZXR1cm4gcy0+Y2hhbltjaGFubmVsXS5zdGF0ZTsKKworICAg IGNhc2UgRElOVDoKKyAgICAgICAgcmV0dXJuIHMtPnN0b3BpbnRyIHwgcy0+ZW9yaW50ciB8IHMt PnJhc2ludHIgfAorICAgICAgICAgICAgICAgIHMtPnN0YXJ0aW50ciB8IHMtPmVuZGludHI7CisK KyAgICBjYXNlIERBTEdOOgorICAgICAgICByZXR1cm4gcy0+YWxpZ247CisKKyAgICBjYXNlIERQ Q1NSOgorICAgICAgICByZXR1cm4gcy0+cGlvOworICAgIH0KKworICAgIGlmIChvZmZzZXQgPj0g RF9DSDAgJiYgb2Zmc2V0IDwgRF9DSDAgKyAocy0+Y2hhbm5lbHMgPDwgNCkpIHsKKyAgICAgICAg Y2hhbm5lbCA9IChvZmZzZXQgLSBEX0NIMCkgPj4gNDsKKyAgICAgICAgc3dpdGNoICgob2Zmc2V0 ICYgMHgwZikgPj4gMikgeworICAgICAgICBjYXNlIEREQURSOgorICAgICAgICAgICAgcmV0dXJu IHMtPmNoYW5bY2hhbm5lbF0uZGVzY3I7CisgICAgICAgIGNhc2UgRFNBRFI6CisgICAgICAgICAg ICByZXR1cm4gcy0+Y2hhbltjaGFubmVsXS5zcmM7CisgICAgICAgIGNhc2UgRFRBRFI6CisgICAg ICAgICAgICByZXR1cm4gcy0+Y2hhbltjaGFubmVsXS5kZXN0OworICAgICAgICBjYXNlIERDTUQ6 CisgICAgICAgICAgICByZXR1cm4gcy0+Y2hhbltjaGFubmVsXS5jbWQ7CisgICAgICAgIH0KKyAg ICB9CisKKyAgICBjcHVfYWJvcnQoY3B1X3NpbmdsZV9lbnYsCisgICAgICAgICAgICAgICAgICAg ICIlczogQmFkIG9mZnNldCAweCUwNGx4XG4iLCBfX0ZVTkNUSU9OX18sIG9mZnNldCk7CisgICAg cmV0dXJuIDc7Cit9CisKK3N0YXRpYyB2b2lkIHB4YTJ4eF9kbWFfd3JpdGUodm9pZCAqb3BhcXVl LAorICAgICAgICAgICAgICAgICB0YXJnZXRfcGh5c19hZGRyX3Qgb2Zmc2V0LCB1aW50MzJfdCB2 YWx1ZSkKK3sKKyAgICBzdHJ1Y3QgcHhhMnh4X2RtYV9zdGF0ZV9zICpzID0gKHN0cnVjdCBweGEy eHhfZG1hX3N0YXRlX3MgKikgb3BhcXVlOworICAgIHVuc2lnbmVkIGludCBjaGFubmVsOworICAg IG9mZnNldCAtPSBzLT5iYXNlOworCisgICAgc3dpdGNoIChvZmZzZXQpIHsKKyAgICBjYXNlIERS Q01SNjQgLi4uIERSQ01SNzQ6CisgICAgICAgIG9mZnNldCAtPSBEUkNNUjY0IC0gRFJDTVIwIC0g KDY0IDw8IDIpOworICAgICAgICAvKiBGYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIERSQ01SMCAu Li4gRFJDTVI2MzoKKyAgICAgICAgY2hhbm5lbCA9IChvZmZzZXQgLSBEUkNNUjApID4+IDI7CisK KyAgICAgICAgaWYgKHZhbHVlICYgRFJDTVJfTUFQVkxEKQorICAgICAgICAgICAgaWYgKCh2YWx1 ZSAmIERSQ01SX0NITE5VTSkgPiBzLT5jaGFubmVscykKKyAgICAgICAgICAgICAgICBjcHVfYWJv cnQoY3B1X3NpbmdsZV9lbnYsICIlczogQmFkIERNQSBjaGFubmVsICVpXG4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCB2YWx1ZSAmIERSQ01SX0NITE5VTSk7CisKKyAg ICAgICAgcy0+cmVxW2NoYW5uZWxdID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz ZSBEUlFTUjA6CisgICAgY2FzZSBEUlFTUjE6CisgICAgY2FzZSBEUlFTUjI6CisgICAgICAgIC8q IE5vdGhpbmcgdG8gZG8gKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERDU1IwIC4uLiBE Q1NSMzE6CisgICAgICAgIGNoYW5uZWwgPSBvZmZzZXQgPj4gMjsKKyAgICAgICAgcy0+Y2hhbltj aGFubmVsXS5zdGF0ZSAmPSAweDAwMDAwNzFmICYgfih2YWx1ZSAmCisgICAgICAgICAgICAgICAg ICAgICAgICAoRENTUl9FT1JJTlQgfCBEQ1NSX0VORElOVFIgfAorICAgICAgICAgICAgICAgICAg ICAgICAgIERDU1JfU1RBUlRJTlRSIHwgRENTUl9CVVNFUlJJTlRSKSk7CisgICAgICAgIHMtPmNo YW5bY2hhbm5lbF0uc3RhdGUgfD0gdmFsdWUgJiAweGZjODAwMDAwOworCisgICAgICAgIGlmIChz LT5jaGFuW2NoYW5uZWxdLnN0YXRlICYgRENTUl9TVE9QSVJRRU4pCisgICAgICAgICAgICBzLT5j aGFuW2NoYW5uZWxdLnN0YXRlICY9IH5EQ1NSX1NUT1BJTlRSOworCisgICAgICAgIGlmICh2YWx1 ZSAmIERDU1JfTk9ERVNDRkVUQ0gpIHsKKyAgICAgICAgICAgIC8qIE5vLWRlc2NyaXB0b3ItZmV0 Y2ggbW9kZSAqLworICAgICAgICAgICAgaWYgKHZhbHVlICYgRENTUl9SVU4pCisgICAgICAgICAg ICAgICAgcHhhMnh4X2RtYV9ydW4ocyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv KiBEZXNjcmlwdG9yLWZldGNoIG1vZGUgKi8KKyAgICAgICAgICAgIGlmICh2YWx1ZSAmIERDU1Jf UlVOKSB7CisgICAgICAgICAgICAgICAgcy0+Y2hhbltjaGFubmVsXS5zdGF0ZSAmPSB+RENTUl9T VE9QSU5UUjsKKyAgICAgICAgICAgICAgICBweGEyeHhfZG1hX2Rlc2NyaXB0b3JfZmV0Y2gocywg Y2hhbm5lbCk7CisgICAgICAgICAgICAgICAgcHhhMnh4X2RtYV9ydW4ocyk7CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBTaG91bGRuJ3QgbWF0dGVyIGFzIG91ciBETUEg aXMgc3luY2hyb25vdXMuICAqLworICAgICAgICBpZiAoISh2YWx1ZSAmIChEQ1NSX1JVTiB8IERD U1JfTUFTS1JVTikpKQorICAgICAgICAgICAgcy0+Y2hhbltjaGFubmVsXS5zdGF0ZSB8PSBEQ1NS X1NUT1BJTlRSOworCisgICAgICAgIGlmICh2YWx1ZSAmIERDU1JfQ0xSQ01QU1QpCisgICAgICAg ICAgICBzLT5jaGFuW2NoYW5uZWxdLnN0YXRlICY9IH5EQ1NSX0NNUFNUOworICAgICAgICBpZiAo dmFsdWUgJiBEQ1NSX1NFVENNUFNUKQorICAgICAgICAgICAgcy0+Y2hhbltjaGFubmVsXS5zdGF0 ZSB8PSBEQ1NSX0NNUFNUOworCisgICAgICAgIHB4YTJ4eF9kbWFfdXBkYXRlKHMsIGNoYW5uZWwp OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgREFMR046CisgICAgICAgIHMtPmFsaWduID0g dmFsdWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBEUENTUjoKKyAgICAgICAgcy0+cGlv ID0gdmFsdWUgJiAweDgwMDAwMDAxOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6Cisg ICAgICAgIGlmIChvZmZzZXQgPj0gRF9DSDAgJiYgb2Zmc2V0IDwgRF9DSDAgKyAocy0+Y2hhbm5l bHMgPDwgNCkpIHsKKyAgICAgICAgICAgIGNoYW5uZWwgPSAob2Zmc2V0IC0gRF9DSDApID4+IDQ7 CisgICAgICAgICAgICBzd2l0Y2ggKChvZmZzZXQgJiAweDBmKSA+PiAyKSB7CisgICAgICAgICAg ICBjYXNlIEREQURSOgorICAgICAgICAgICAgICAgIHMtPmNoYW5bY2hhbm5lbF0uZGVzY3IgPSB2 YWx1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRFNBRFI6Cisg ICAgICAgICAgICAgICAgcy0+Y2hhbltjaGFubmVsXS5zcmMgPSB2YWx1ZTsKKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRFRBRFI6CisgICAgICAgICAgICAgICAgcy0+ Y2hhbltjaGFubmVsXS5kZXN0ID0gdmFsdWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICBjYXNlIERDTUQ6CisgICAgICAgICAgICAgICAgcy0+Y2hhbltjaGFubmVsXS5jbWQg PSB2YWx1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg ICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgfQorICAgIGZhaWw6CisgICAgICAgIGNwdV9hYm9ydChjcHVfc2luZ2xl X2VudiwgIiVzOiBCYWQgb2Zmc2V0IDB4JTA0bHhcbiIsCisgICAgICAgICAgICAgICAgX19GVU5D VElPTl9fLCBvZmZzZXQpOworICAgIH0KK30KKworc3RhdGljIHVpbnQzMl90IHB4YTJ4eF9kbWFf cmVhZGJhZCh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBvZmZzZXQpCit7CisgICAg Y3B1X2Fib3J0KGNwdV9zaW5nbGVfZW52LCAiJXM6IEJhZCBhY2Nlc3Mgd2lkdGhcbiIsIF9fRlVO Q1RJT05fXyk7CisgICAgcmV0dXJuIDU7Cit9CisKK3N0YXRpYyB2b2lkIHB4YTJ4eF9kbWFfd3Jp dGViYWQodm9pZCAqb3BhcXVlLAorICAgICAgICAgICAgICAgICB0YXJnZXRfcGh5c19hZGRyX3Qg b2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBjcHVfYWJvcnQoY3B1X3NpbmdsZV9lbnYs ICIlczogQmFkIGFjY2VzcyB3aWR0aFxuIiwgX19GVU5DVElPTl9fKTsKK30KKworc3RhdGljIENQ VVJlYWRNZW1vcnlGdW5jICpweGEyeHhfZG1hX3JlYWRmbltdID0geworICAgIHB4YTJ4eF9kbWFf cmVhZGJhZCwKKyAgICBweGEyeHhfZG1hX3JlYWRiYWQsCisgICAgcHhhMnh4X2RtYV9yZWFkCit9 OworCitzdGF0aWMgQ1BVV3JpdGVNZW1vcnlGdW5jICpweGEyeHhfZG1hX3dyaXRlZm5bXSA9IHsK KyAgICBweGEyeHhfZG1hX3dyaXRlYmFkLAorICAgIHB4YTJ4eF9kbWFfd3JpdGViYWQsCisgICAg cHhhMnh4X2RtYV93cml0ZQorfTsKKworc3RhdGljIHN0cnVjdCBweGEyeHhfZG1hX3N0YXRlX3Mg KnB4YTJ4eF9kbWFfaW5pdCh0YXJnZXRfcGh5c19hZGRyX3QgYmFzZSwKKyAgICAgICAgICAgICAg ICB2b2lkICpwaWMsIGludCBpcnEsIGludCBjaGFubmVscykKK3sKKyAgICBpbnQgaSwgaW9tZW10 eXBlOworICAgIHN0cnVjdCBweGEyeHhfZG1hX3N0YXRlX3MgKnM7CisgICAgcyA9IChzdHJ1Y3Qg cHhhMnh4X2RtYV9zdGF0ZV9zICopCisgICAgICAgICAgICBxZW11X21hbGxvY3ooc2l6ZW9mKHN0 cnVjdCBweGEyeHhfZG1hX3N0YXRlX3MpKTsKKworICAgIHMtPmNoYW5uZWxzID0gY2hhbm5lbHM7 CisgICAgcy0+Y2hhbiA9IHFlbXVfbWFsbG9jeihzaXplb2Yoc3RydWN0IHB4YTJ4eF9kbWFfY2hh bm5lbF9zKSAqIHMtPmNoYW5uZWxzKTsKKyAgICBzLT5iYXNlID0gYmFzZTsKKyAgICBzLT5waWMg PSBwaWM7CisgICAgcy0+aXJxID0gaXJxOworICAgIHMtPmhhbmRsZXIgPSAocHhhMnh4X2RtYV9o YW5kbGVyX3QpIHB4YTJ4eF9kbWFfcmVxdWVzdDsKKyAgICBzLT5yZXEgPSBxZW11X21hbGxvY3oo c2l6ZW9mKGludCkgKiBQWEEyWFhfRE1BX05VTV9SRVFVRVNUUyk7CisKKyAgICBtZW1zZXQocy0+ Y2hhbiwgMCwgc2l6ZW9mKHN0cnVjdCBweGEyeHhfZG1hX2NoYW5uZWxfcykgKiBzLT5jaGFubmVs cyk7CisgICAgZm9yIChpID0gMDsgaSA8IHMtPmNoYW5uZWxzOyBpICsrKQorICAgICAgICBzLT5j aGFuW2ldLnN0YXRlID0gRENTUl9TVE9QSU5UUjsKKworICAgIG1lbXNldChzLT5yZXEsIDAsIHNp emVvZihpbnQpICogUFhBMlhYX0RNQV9OVU1fUkVRVUVTVFMpOworCisgICAgaW9tZW10eXBlID0g Y3B1X3JlZ2lzdGVyX2lvX21lbW9yeSgwLCBweGEyeHhfZG1hX3JlYWRmbiwKKyAgICAgICAgICAg ICAgICAgICBweGEyeHhfZG1hX3dyaXRlZm4sIHMpOworICAgIGNwdV9yZWdpc3Rlcl9waHlzaWNh bF9tZW1vcnkoYmFzZSwgMHgwMDAwZmZmZiwgaW9tZW10eXBlKTsKKworICAgIHJldHVybiBzOwor fQorCitzdHJ1Y3QgcHhhMnh4X2RtYV9zdGF0ZV9zICpweGEyN3hfZG1hX2luaXQodGFyZ2V0X3Bo eXNfYWRkcl90IGJhc2UsCisgICAgICAgICAgICAgICAgdm9pZCAqcGljLCBpbnQgaXJxKQorewor ICAgIHJldHVybiBweGEyeHhfZG1hX2luaXQoYmFzZSwgcGljLCBpcnEsIFBYQTI3WF9ETUFfTlVN X0NIQU5ORUxTKTsKK30KKworc3RydWN0IHB4YTJ4eF9kbWFfc3RhdGVfcyAqcHhhMjU1X2RtYV9p bml0KHRhcmdldF9waHlzX2FkZHJfdCBiYXNlLAorICAgICAgICAgICAgICAgIHZvaWQgKnBpYywg aW50IGlycSkKK3sKKyAgICByZXR1cm4gcHhhMnh4X2RtYV9pbml0KGJhc2UsIHBpYywgaXJxLCBQ WEEyNTVfRE1BX05VTV9DSEFOTkVMUyk7Cit9CisKK3ZvaWQgcHhhMnh4X2RtYV9yZXF1ZXN0KHN0 cnVjdCBweGEyeHhfZG1hX3N0YXRlX3MgKnMsIGludCByZXFfbnVtLCBpbnQgb24pCit7CisgICAg aW50IGNoOworICAgIGlmIChyZXFfbnVtIDwgMCB8fCByZXFfbnVtID49IFBYQTJYWF9ETUFfTlVN X1JFUVVFU1RTKQorICAgICAgICBjcHVfYWJvcnQoY3B1X3NpbmdsZV9lbnYsCisgICAgICAgICAg ICAgICIlczogQmFkIERNQSByZXF1ZXN0ICVpXG4iLCBfX0ZVTkNUSU9OX18sIHJlcV9udW0pOwor CisgICAgaWYgKCEocy0+cmVxW3JlcV9udW1dICYgRFJDTVJfTUFQVkxEKSkKKyAgICAgICAgcmV0 dXJuOworICAgIGNoID0gcy0+cmVxW3JlcV9udW1dICYgRFJDTVJfQ0hMTlVNOworCisgICAgaWYg KCFzLT5jaGFuW2NoXS5yZXF1ZXN0ICYmIG9uKQorICAgICAgICBzLT5jaGFuW2NoXS5zdGF0ZSB8 PSBEQ1NSX1JBU0lOVFI7CisgICAgZWxzZQorICAgICAgICBzLT5jaGFuW2NoXS5zdGF0ZSAmPSB+ RENTUl9SQVNJTlRSOworICAgIGlmIChzLT5jaGFuW2NoXS5yZXF1ZXN0ICYmICFvbikKKyAgICAg ICAgcy0+Y2hhbltjaF0uc3RhdGUgfD0gRENTUl9FT1JJTlQ7CisKKyAgICBzLT5jaGFuW2NoXS5y ZXF1ZXN0ID0gb247CisgICAgaWYgKG9uKSB7CisgICAgICAgIHB4YTJ4eF9kbWFfcnVuKHMpOwor ICAgICAgICBweGEyeHhfZG1hX3VwZGF0ZShzLCBjaCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEv aHcvcHhhMnh4X2dwaW8uYyBiL2h3L3B4YTJ4eF9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMGM1NmNmMQotLS0gL2Rldi9udWxsCisrKyBiL2h3L3B4YTJ4eF9ncGlv LmMKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiBJbnRlbCBYU2NhbGUgUFhBMjU1LzI3MCBHUElP IGNvbnRyb2xsZXIgZW11bGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcGVuZWRo YW5kIEx0ZC4KKyAqIFdyaXR0ZW4gYnkgQW5kcnplaiBaYWJvcm93c2tpIDxiYWxyb2dAemFib3Iu b3JnPgorICoKKyAqIFRoaXMgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgorICovCisK KyNpbmNsdWRlICJ2bC5oIgorCisjZGVmaW5lIFBYQTJYWF9HUElPX0JBTktTCTQKKworc3RydWN0 IHB4YTJ4eF9ncGlvX2luZm9fcyB7CisgICAgdGFyZ2V0X3BoeXNfYWRkcl90IGJhc2U7CisgICAg dm9pZCAqcGljOworICAgIGludCBsaW5lczsKKyAgICBDUFVTdGF0ZSAqY3B1X2VudjsKKworICAg IC8qIFhYWDogR05VIEMgdmVjdG9ycyBhcmUgbW9yZSBzdWl0YWJsZSAqLworICAgIHVpbnQzMl90 IGlsZXZlbFtQWEEyWFhfR1BJT19CQU5LU107CisgICAgdWludDMyX3Qgb2xldmVsW1BYQTJYWF9H UElPX0JBTktTXTsKKyAgICB1aW50MzJfdCBkaXJbUFhBMlhYX0dQSU9fQkFOS1NdOworICAgIHVp bnQzMl90IHJpc2luZ1tQWEEyWFhfR1BJT19CQU5LU107CisgICAgdWludDMyX3QgZmFsbGluZ1tQ WEEyWFhfR1BJT19CQU5LU107CisgICAgdWludDMyX3Qgc3RhdHVzW1BYQTJYWF9HUElPX0JBTktT XTsKKyAgICB1aW50MzJfdCBnYWZyW1BYQTJYWF9HUElPX0JBTktTICogMl07CisKKyAgICB1aW50 MzJfdCBwcmV2X2xldmVsW1BYQTJYWF9HUElPX0JBTktTXTsKKyAgICBzdHJ1Y3QgeworICAgICAg ICBncGlvX2hhbmRsZXJfdCBmbjsKKyAgICAgICAgdm9pZCAqb3BhcXVlOworICAgIH0gaGFuZGxl cltQWEEyWFhfR1BJT19CQU5LUyAqIDMyXTsKKworICAgIHZvaWQgKCpyZWFkX25vdGlmeSkodm9p ZCAqb3BhcXVlKTsKKyAgICB2b2lkICpvcGFxdWU7Cit9OworCitzdGF0aWMgc3RydWN0IHsKKyAg ICBlbnVtIHsKKyAgICAgICAgR1BJT19OT05FLAorICAgICAgICBHUExSLAorICAgICAgICBHUFNS LAorICAgICAgICBHUENSLAorICAgICAgICBHUERSLAorICAgICAgICBHUkVSLAorICAgICAgICBH RkVSLAorICAgICAgICBHRURSLAorICAgICAgICBHQUZSX0wsCisgICAgICAgIEdBRlJfVSwKKyAg ICB9IHJlZzsKKyAgICBpbnQgYmFuazsKK30gcHhhMnh4X2dwaW9fcmVnc1sweDIwMF0gPSB7Cisg ICAgWzAgLi4uIDB4MWZmXSA9IHsgR1BJT19OT05FLCAwIH0sCisjZGVmaW5lIFBYQTJYWF9SRUco cmVnLCBhMCwgYTEsIGEyLCBhMykJXAorICAgIFthMF0gPSB7IHJlZywgMCB9LCBbYTFdID0geyBy ZWcsIDEgfSwgW2EyXSA9IHsgcmVnLCAyIH0sIFthM10gPSB7IHJlZywgMyB9LCAKKworICAgIFBY QTJYWF9SRUcoR1BMUiwgMHgwMDAsIDB4MDA0LCAweDAwOCwgMHgxMDApCisgICAgUFhBMlhYX1JF RyhHUFNSLCAweDAxOCwgMHgwMWMsIDB4MDIwLCAweDExOCkKKyAgICBQWEEyWFhfUkVHKEdQQ1Is IDB4MDI0LCAweDAyOCwgMHgwMmMsIDB4MTI0KQorICAgIFBYQTJYWF9SRUcoR1BEUiwgMHgwMGMs IDB4MDEwLCAweDAxNCwgMHgxMGMpCisgICAgUFhBMlhYX1JFRyhHUkVSLCAweDAzMCwgMHgwMzQs IDB4MDM4LCAweDEzMCkKKyAgICBQWEEyWFhfUkVHKEdGRVIsIDB4MDNjLCAweDA0MCwgMHgwNDQs IDB4MTNjKQorICAgIFBYQTJYWF9SRUcoR0VEUiwgMHgwNDgsIDB4MDRjLCAweDA1MCwgMHgxNDgp CisgICAgUFhBMlhYX1JFRyhHQUZSX0wsIDB4MDU0LCAweDA1YywgMHgwNjQsIDB4MDZjKQorICAg IFBYQTJYWF9SRUcoR0FGUl9VLCAweDA1OCwgMHgwNjAsIDB4MDY4LCAweDA3MCkKK307CisKK3N0 YXRpYyB2b2lkIHB4YTJ4eF9ncGlvX2lycV91cGRhdGUoc3RydWN0IHB4YTJ4eF9ncGlvX2luZm9f cyAqcykKK3sKKyAgICBpZiAocy0+c3RhdHVzWzBdICYgKDEgPDwgMCkpCisgICAgICAgIHBpY19z ZXRfaXJxX25ldyhzLT5waWMsIFBYQTJYWF9QSUNfR1BJT18wLCAxKTsKKyAgICBlbHNlCisgICAg ICAgIHBpY19zZXRfaXJxX25ldyhzLT5waWMsIFBYQTJYWF9QSUNfR1BJT18wLCAwKTsKKworICAg IGlmIChzLT5zdGF0dXNbMF0gJiAoMSA8PCAxKSkKKyAgICAgICAgcGljX3NldF9pcnFfbmV3KHMt PnBpYywgUFhBMlhYX1BJQ19HUElPXzEsIDEpOworICAgIGVsc2UKKyAgICAgICAgcGljX3NldF9p cnFfbmV3KHMtPnBpYywgUFhBMlhYX1BJQ19HUElPXzEsIDApOworCisgICAgaWYgKChzLT5zdGF0 dXNbMF0gJiB+MykgfCBzLT5zdGF0dXNbMV0gfCBzLT5zdGF0dXNbMl0gfCBzLT5zdGF0dXNbM10p CisgICAgICAgIHBpY19zZXRfaXJxX25ldyhzLT5waWMsIFBYQTJYWF9QSUNfR1BJT19YLCAxKTsK KyAgICBlbHNlCisgICAgICAgIHBpY19zZXRfaXJxX25ldyhzLT5waWMsIFBYQTJYWF9QSUNfR1BJ T19YLCAwKTsKK30KKworLyogQml0bWFwIG9mIHBpbnMgdXNlZCBhcyBzdGFuZGJ5IGFuZCBzbGVl cCB3YWtlLXVwIHNvdXJjZXMuICAqLworY29uc3QgaW50IHB4YTJ4eF9ncGlvX3dha2VbUFhBMlhY X0dQSU9fQkFOS1NdID0geworICAgIDB4ODAwM2ZlMWIsIDB4MDAyMDAxZmMsIDB4ZWMwODAwMDAs IDB4MDAxMjAwN2YsCit9OworCit2b2lkIHB4YTJ4eF9ncGlvX3NldChzdHJ1Y3QgcHhhMnh4X2dw aW9faW5mb19zICpzLCBpbnQgbGluZSwgaW50IGxldmVsKQoreworICAgIGludCBiYW5rOworICAg IHVpbnQzMl90IG1hc2s7CisKKyAgICBpZiAobGluZSA+PSBzLT5saW5lcykgeworICAgICAgICBw cmludGYoIiVzOiBObyBHUElPIHBpbiAlaVxuIiwgX19GVU5DVElPTl9fLCBsaW5lKTsKKyAgICAg ICAgcmV0dXJuOworICAgIH0KKworICAgIGJhbmsgPSBsaW5lID4+IDU7CisgICAgbWFzayA9IDEg PDwgKGxpbmUgJiAzMSk7CisKKyAgICBpZiAobGV2ZWwpIHsKKyAgICAgICAgcy0+c3RhdHVzW2Jh bmtdIHw9IHMtPnJpc2luZ1tiYW5rXSAmIG1hc2sgJgorICAgICAgICAgICAgICAgIH5zLT5pbGV2 ZWxbYmFua10gJiB+cy0+ZGlyW2JhbmtdOworICAgICAgICBzLT5pbGV2ZWxbYmFua10gfD0gbWFz azsKKyAgICB9IGVsc2UgeworICAgICAgICBzLT5zdGF0dXNbYmFua10gfD0gcy0+ZmFsbGluZ1ti YW5rXSAmIG1hc2sgJgorICAgICAgICAgICAgICAgIHMtPmlsZXZlbFtiYW5rXSAmIH5zLT5kaXJb YmFua107CisgICAgICAgIHMtPmlsZXZlbFtiYW5rXSAmPSB+bWFzazsKKyAgICB9CisKKyAgICBp ZiAocy0+c3RhdHVzW2JhbmtdICYgbWFzaykKKyAgICAgICAgcHhhMnh4X2dwaW9faXJxX3VwZGF0 ZShzKTsKKworICAgIC8qIFdha2UtdXAgR1BJT3MgKi8KKyAgICBpZiAocy0+Y3B1X2Vudi0+aGFs dGVkICYmIChtYXNrICYgfnMtPmRpcltiYW5rXSAmIHB4YTJ4eF9ncGlvX3dha2VbYmFua10pKQor ICAgICAgICBjcHVfaW50ZXJydXB0KHMtPmNwdV9lbnYsIENQVV9JTlRFUlJVUFRfRVhJVFRCKTsK K30KKworc3RhdGljIHZvaWQgcHhhMnh4X2dwaW9faGFuZGxlcl91cGRhdGUoc3RydWN0IHB4YTJ4 eF9ncGlvX2luZm9fcyAqcykgeworICAgIHVpbnQzMl90IGxldmVsLCBkaWZmOworICAgIGludCBp LCBiaXQsIGxpbmU7CisgICAgZm9yIChpID0gMDsgaSA8IFBYQTJYWF9HUElPX0JBTktTOyBpICsr KSB7CisgICAgICAgIGxldmVsID0gcy0+b2xldmVsW2ldICYgcy0+ZGlyW2ldOworCisgICAgICAg IGZvciAoZGlmZiA9IHMtPnByZXZfbGV2ZWxbaV0gXiBsZXZlbDsgZGlmZjsgZGlmZiBePSAxIDw8 IGJpdCkgeworICAgICAgICAgICAgYml0ID0gZmZzKGRpZmYpIC0gMTsKKyAgICAgICAgICAgIGxp bmUgPSBiaXQgKyAzMiAqIGk7CisgICAgICAgICAgICBpZiAocy0+aGFuZGxlcltsaW5lXS5mbikK KyAgICAgICAgICAgICAgICBzLT5oYW5kbGVyW2xpbmVdLmZuKGxpbmUsIChsZXZlbCA+PiBiaXQp ICYgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aGFuZGxlcltsaW5lXS5v cGFxdWUpOworICAgICAgICB9CisKKyAgICAgICAgcy0+cHJldl9sZXZlbFtpXSA9IGxldmVsOwor ICAgIH0KK30KKworc3RhdGljIHVpbnQzMl90IHB4YTJ4eF9ncGlvX3JlYWQodm9pZCAqb3BhcXVl LCB0YXJnZXRfcGh5c19hZGRyX3Qgb2Zmc2V0KQoreworICAgIHN0cnVjdCBweGEyeHhfZ3Bpb19p bmZvX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9ncGlvX2luZm9fcyAqKSBvcGFxdWU7CisgICAgdWlu dDMyX3QgcmV0OworICAgIGludCBiYW5rOworICAgIG9mZnNldCAtPSBzLT5iYXNlOworICAgIGlm IChvZmZzZXQgPj0gMHgyMDApCisgICAgICAgIHJldHVybiAwOworCisgICAgYmFuayA9IHB4YTJ4 eF9ncGlvX3JlZ3Nbb2Zmc2V0XS5iYW5rOworICAgIHN3aXRjaCAocHhhMnh4X2dwaW9fcmVnc1tv ZmZzZXRdLnJlZykgeworICAgIGNhc2UgR1BEUjoJCS8qIEdQSU8gUGluLURpcmVjdGlvbiByZWdp c3RlcnMgKi8KKyAgICAgICAgcmV0dXJuIHMtPmRpcltiYW5rXTsKKworICAgIGNhc2UgR1JFUjoJ CS8qIEdQSU8gUmlzaW5nLUVkZ2UgRGV0ZWN0IEVuYWJsZSByZWdpc3RlcnMgKi8KKyAgICAgICAg cmV0dXJuIHMtPnJpc2luZ1tiYW5rXTsKKworICAgIGNhc2UgR0ZFUjoJCS8qIEdQSU8gRmFsbGlu Zy1FZGdlIERldGVjdCBFbmFibGUgcmVnaXN0ZXJzICovCisgICAgICAgIHJldHVybiBzLT5mYWxs aW5nW2JhbmtdOworCisgICAgY2FzZSBHQUZSX0w6CS8qIEdQSU8gQWx0ZXJuYXRlIEZ1bmN0aW9u IHJlZ2lzdGVycyAqLworICAgICAgICByZXR1cm4gcy0+Z2FmcltiYW5rICogMl07CisKKyAgICBj YXNlIEdBRlJfVToJLyogR1BJTyBBbHRlcm5hdGUgRnVuY3Rpb24gcmVnaXN0ZXJzICovCisgICAg ICAgIHJldHVybiBzLT5nYWZyW2JhbmsgKiAyICsgMV07CisKKyAgICBjYXNlIEdQTFI6CQkvKiBH UElPIFBpbi1MZXZlbCByZWdpc3RlcnMgKi8KKyAgICAgICAgcmV0ID0gKHMtPm9sZXZlbFtiYW5r XSAmIHMtPmRpcltiYW5rXSkgfAorICAgICAgICAgICAgICAgIChzLT5pbGV2ZWxbYmFua10gJiB+ cy0+ZGlyW2JhbmtdKTsKKyAgICAgICAgaWYgKHMtPnJlYWRfbm90aWZ5KQorICAgICAgICAgICAg cy0+cmVhZF9ub3RpZnkocy0+b3BhcXVlKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGNh c2UgR0VEUjoJCS8qIEdQSU8gRWRnZSBEZXRlY3QgU3RhdHVzIHJlZ2lzdGVycyAqLworICAgICAg ICByZXR1cm4gcy0+c3RhdHVzW2JhbmtdOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgY3B1X2Fi b3J0KGNwdV9zaW5nbGVfZW52LAorICAgICAgICAgICAgICAgICIlczogQmFkIG9mZnNldCAiIFJF R19GTVQgIlxuIiwgX19GVU5DVElPTl9fLCBvZmZzZXQpOworICAgIH0KKworICAgIHJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBweGEyeHhfZ3Bpb193cml0ZSh2b2lkICpvcGFxdWUsCisgICAg ICAgICAgICAgICAgdGFyZ2V0X3BoeXNfYWRkcl90IG9mZnNldCwgdWludDMyX3QgdmFsdWUpCit7 CisgICAgc3RydWN0IHB4YTJ4eF9ncGlvX2luZm9fcyAqcyA9IChzdHJ1Y3QgcHhhMnh4X2dwaW9f aW5mb19zICopIG9wYXF1ZTsKKyAgICBpbnQgYmFuazsKKyAgICBvZmZzZXQgLT0gcy0+YmFzZTsK KyAgICBpZiAob2Zmc2V0ID49IDB4MjAwKQorICAgICAgICByZXR1cm47CisKKyAgICBiYW5rID0g cHhhMnh4X2dwaW9fcmVnc1tvZmZzZXRdLmJhbms7CisgICAgc3dpdGNoIChweGEyeHhfZ3Bpb19y ZWdzW29mZnNldF0ucmVnKSB7CisgICAgY2FzZSBHUERSOgkJLyogR1BJTyBQaW4tRGlyZWN0aW9u IHJlZ2lzdGVycyAqLworICAgICAgICBzLT5kaXJbYmFua10gPSB2YWx1ZTsKKyAgICAgICAgcHhh Mnh4X2dwaW9faGFuZGxlcl91cGRhdGUocyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBH UFNSOgkJLyogR1BJTyBQaW4tT3V0cHV0IFNldCByZWdpc3RlcnMgKi8KKyAgICAgICAgcy0+b2xl dmVsW2JhbmtdIHw9IHZhbHVlOworICAgICAgICBweGEyeHhfZ3Bpb19oYW5kbGVyX3VwZGF0ZShz KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdQQ1I6CQkvKiBHUElPIFBpbi1PdXRwdXQg Q2xlYXIgcmVnaXN0ZXJzICovCisgICAgICAgIHMtPm9sZXZlbFtiYW5rXSAmPSB+dmFsdWU7Cisg ICAgICAgIHB4YTJ4eF9ncGlvX2hhbmRsZXJfdXBkYXRlKHMpOworICAgICAgICBicmVhazsKKwor ICAgIGNhc2UgR1JFUjoJCS8qIEdQSU8gUmlzaW5nLUVkZ2UgRGV0ZWN0IEVuYWJsZSByZWdpc3Rl cnMgKi8KKyAgICAgICAgcy0+cmlzaW5nW2JhbmtdID0gdmFsdWU7CisgICAgICAgIGJyZWFrOwor CisgICAgY2FzZSBHRkVSOgkJLyogR1BJTyBGYWxsaW5nLUVkZ2UgRGV0ZWN0IEVuYWJsZSByZWdp c3RlcnMgKi8KKyAgICAgICAgcy0+ZmFsbGluZ1tiYW5rXSA9IHZhbHVlOworICAgICAgICBicmVh azsKKworICAgIGNhc2UgR0FGUl9MOgkvKiBHUElPIEFsdGVybmF0ZSBGdW5jdGlvbiByZWdpc3Rl cnMgKi8KKyAgICAgICAgcy0+Z2FmcltiYW5rICogMl0gPSB2YWx1ZTsKKyAgICAgICAgYnJlYWs7 CisKKyAgICBjYXNlIEdBRlJfVToJLyogR1BJTyBBbHRlcm5hdGUgRnVuY3Rpb24gcmVnaXN0ZXJz ICovCisgICAgICAgIHMtPmdhZnJbYmFuayAqIDIgKyAxXSA9IHZhbHVlOworICAgICAgICBicmVh azsKKworICAgIGNhc2UgR0VEUjoJCS8qIEdQSU8gRWRnZSBEZXRlY3QgU3RhdHVzIHJlZ2lzdGVy cyAqLworICAgICAgICBzLT5zdGF0dXNbYmFua10gJj0gfnZhbHVlOworICAgICAgICBweGEyeHhf Z3Bpb19pcnFfdXBkYXRlKHMpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAg ICAgIGNwdV9hYm9ydChjcHVfc2luZ2xlX2VudiwKKyAgICAgICAgICAgICAgICAiJXM6IEJhZCBv ZmZzZXQgIiBSRUdfRk1UICJcbiIsIF9fRlVOQ1RJT05fXywgb2Zmc2V0KTsKKyAgICB9Cit9CisK K3N0YXRpYyBDUFVSZWFkTWVtb3J5RnVuYyAqcHhhMnh4X2dwaW9fcmVhZGZuW10gPSB7CisgICAg cHhhMnh4X2dwaW9fcmVhZCwKKyAgICBweGEyeHhfZ3Bpb19yZWFkLAorICAgIHB4YTJ4eF9ncGlv X3JlYWQKK307CisKK3N0YXRpYyBDUFVXcml0ZU1lbW9yeUZ1bmMgKnB4YTJ4eF9ncGlvX3dyaXRl Zm5bXSA9IHsKKyAgICBweGEyeHhfZ3Bpb193cml0ZSwKKyAgICBweGEyeHhfZ3Bpb193cml0ZSwK KyAgICBweGEyeHhfZ3Bpb193cml0ZQorfTsKKworc3RydWN0IHB4YTJ4eF9ncGlvX2luZm9fcyAq cHhhMnh4X2dwaW9faW5pdCh0YXJnZXRfcGh5c19hZGRyX3QgYmFzZSwKKyAgICAgICAgICAgICAg ICBDUFVTdGF0ZSAqZW52LCB2b2lkICpwaWMsIGludCBsaW5lcykKK3sKKyAgICBpbnQgaW9tZW10 eXBlOworICAgIHN0cnVjdCBweGEyeHhfZ3Bpb19pbmZvX3MgKnM7CisKKyAgICBzID0gKHN0cnVj dCBweGEyeHhfZ3Bpb19pbmZvX3MgKikKKyAgICAgICAgICAgIHFlbXVfbWFsbG9jeihzaXplb2Yo c3RydWN0IHB4YTJ4eF9ncGlvX2luZm9fcykpOworICAgIG1lbXNldChzLCAwLCBzaXplb2Yoc3Ry dWN0IHB4YTJ4eF9ncGlvX2luZm9fcykpOworICAgIHMtPmJhc2UgPSBiYXNlOworICAgIHMtPnBp YyA9IHBpYzsKKyAgICBzLT5saW5lcyA9IGxpbmVzOworICAgIHMtPmNwdV9lbnYgPSBlbnY7CisK KyAgICBpb21lbXR5cGUgPSBjcHVfcmVnaXN0ZXJfaW9fbWVtb3J5KDAsIHB4YTJ4eF9ncGlvX3Jl YWRmbiwKKyAgICAgICAgICAgICAgICAgICAgcHhhMnh4X2dwaW9fd3JpdGVmbiwgcyk7CisgICAg Y3B1X3JlZ2lzdGVyX3BoeXNpY2FsX21lbW9yeShiYXNlLCAweDAwMDAwZmZmLCBpb21lbXR5cGUp OworCisgICAgcmV0dXJuIHM7Cit9CisKK3ZvaWQgcHhhMnh4X2dwaW9faGFuZGxlcl9zZXQoc3Ry dWN0IHB4YTJ4eF9ncGlvX2luZm9fcyAqcywgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgZ3Bp b19oYW5kbGVyX3QgaGFuZGxlciwgdm9pZCAqb3BhcXVlKSB7CisgICAgaWYgKGxpbmUgPj0gcy0+ bGluZXMpIHsKKyAgICAgICAgcHJpbnRmKCIlczogTm8gR1BJTyBwaW4gJWlcbiIsIF9fRlVOQ1RJ T05fXywgbGluZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzLT5oYW5kbGVyW2xp bmVdLmZuID0gaGFuZGxlcjsKKyAgICBzLT5oYW5kbGVyW2xpbmVdLm9wYXF1ZSA9IG9wYXF1ZTsK K30KKworLyoKKyAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIHRvIG5vdGlmeSBvbiBHUExSIHJlYWRz LiAgVGhpcyBub3JtYWxseQorICogc2hvdWxkbid0IGJlIG5lZWRlZCBidXQgaXQgaXMgdXNlZCBm b3IgdGhlIGhhY2sgb24gU3BpdHogbWFjaGluZXMuCisgKi8KK3ZvaWQgcHhhMnh4X2dwaW9fcmVh ZF9ub3RpZmllcihzdHJ1Y3QgcHhhMnh4X2dwaW9faW5mb19zICpzLAorICAgICAgICAgICAgICAg IHZvaWQgKCpoYW5kbGVyKSh2b2lkICpvcGFxdWUpLCB2b2lkICpvcGFxdWUpIHsKKyAgICBzLT5y ZWFkX25vdGlmeSA9IGhhbmRsZXI7CisgICAgcy0+b3BhcXVlID0gb3BhcXVlOworfQpkaWZmIC0t Z2l0IGEvaHcvcHhhMnh4X3BpYy5jIGIvaHcvcHhhMnh4X3BpYy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjc1MmZlMzUKLS0tIC9kZXYvbnVsbAorKysgYi9ody9weGEyeHhf cGljLmMKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiBJbnRlbCBYU2NhbGUgUFhBIFByb2dyYW1t YWJsZSBJbnRlcnJ1cHQgQ29udHJvbGxlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3Bl bmVkaGFuZCBMdGQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgVGhvcnN0ZW4gWml0dGVyZWxsCisg KiBXcml0dGVuIGJ5IEFuZHJ6ZWogWmFib3Jvd3NraSA8YmFscm9nQHphYm9yLm9yZz4KKyAqCisg KiBUaGlzIGNvZGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSAi dmwuaCIKKworI2RlZmluZSBJQ0lQCTB4MDAJLyogSW50ZXJydXB0IENvbnRyb2xsZXIgSVJRIFBl bmRpbmcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUNNUgkweDA0CS8qIEludGVycnVwdCBDb250cm9s bGVyIE1hc2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUNMUgkweDA4CS8qIEludGVycnVwdCBDb250 cm9sbGVyIExldmVsIHJlZ2lzdGVyICovCisjZGVmaW5lIElDRlAJMHgwYwkvKiBJbnRlcnJ1cHQg Q29udHJvbGxlciBGSVEgUGVuZGluZyByZWdpc3RlciAqLworI2RlZmluZSBJQ1BSCTB4MTAJLyog SW50ZXJydXB0IENvbnRyb2xsZXIgUGVuZGluZyByZWdpc3RlciAqLworI2RlZmluZSBJQ0NSCTB4 MTQJLyogSW50ZXJydXB0IENvbnRyb2xsZXIgQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBJ Q0hQCTB4MTgJLyogSW50ZXJydXB0IENvbnRyb2xsZXIgSGlnaGVzdCBQcmlvcml0eSByZWdpc3Rl ciAqLworI2RlZmluZSBJUFIwCTB4MWMJLyogSW50ZXJydXB0IENvbnRyb2xsZXIgUHJpb3JpdHkg cmVnaXN0ZXIgMCAqLworI2RlZmluZSBJUFIzMQkweDk4CS8qIEludGVycnVwdCBDb250cm9sbGVy IFByaW9yaXR5IHJlZ2lzdGVyIDMxICovCisjZGVmaW5lIElDSVAyCTB4OWMJLyogSW50ZXJydXB0 IENvbnRyb2xsZXIgSVJRIFBlbmRpbmcgcmVnaXN0ZXIgMiAqLworI2RlZmluZSBJQ01SMgkweGEw CS8qIEludGVycnVwdCBDb250cm9sbGVyIE1hc2sgcmVnaXN0ZXIgMiAqLworI2RlZmluZSBJQ0xS MgkweGE0CS8qIEludGVycnVwdCBDb250cm9sbGVyIExldmVsIHJlZ2lzdGVyIDIgKi8KKyNkZWZp bmUgSUNGUDIJMHhhOAkvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBGSVEgUGVuZGluZyByZWdpc3Rl ciAyICovCisjZGVmaW5lIElDUFIyCTB4YWMJLyogSW50ZXJydXB0IENvbnRyb2xsZXIgUGVuZGlu ZyByZWdpc3RlciAyICovCisjZGVmaW5lIElQUjMyCTB4YjAJLyogSW50ZXJydXB0IENvbnRyb2xs ZXIgUHJpb3JpdHkgcmVnaXN0ZXIgMzIgKi8KKyNkZWZpbmUgSVBSMzkJMHhjYwkvKiBJbnRlcnJ1 cHQgQ29udHJvbGxlciBQcmlvcml0eSByZWdpc3RlciAzOSAqLworCisvKiBUaGUgZmlyc3QgZWxl bWVudCBvZiBhbiBpbmRpdmlkdWFsIFBJQyBzdGF0ZSBzdHJ1Y3R1cmVzIHNob3VsZAorICogYmUg YSBwb2ludGVyIHRvIHRoZSBoYW5kbGVyIHJvdXRpbmUuICAqLwordHlwZWRlZiB2b2lkICgqcHhh Mnh4X3BpY19oYW5kbGVyX3QpKHZvaWQgKm9wYXF1ZSwgaW50IGlycSwgaW50IGxldmVsKTsKKwor I2RlZmluZSBQWEEyWFhfUElDX1NSQ1MJNDAKKworc3RydWN0IHB4YTJ4eF9waWNfc3RhdGVfcyB7 CisgICAgcHhhMnh4X3BpY19oYW5kbGVyX3QgaGFuZGxlcjsKKyAgICB0YXJnZXRfcGh5c19hZGRy X3QgYmFzZTsKKyAgICBDUFVTdGF0ZSAqY3B1X2VudjsKKyAgICB1aW50MzJfdCBpbnRfZW5hYmxl ZFsyXTsKKyAgICB1aW50MzJfdCBpbnRfcGVuZGluZ1syXTsKKyAgICB1aW50MzJfdCBpc19maXFb Ml07CisgICAgdWludDMyX3QgaW50X2lkbGU7CisgICAgdWludDMyX3QgcHJpb3JpdHlbUFhBMlhY X1BJQ19TUkNTXTsKK307CisKK3N0YXRpYyB2b2lkIHB4YTJ4eF9waWNfdXBkYXRlKHZvaWQgKm9w YXF1ZSkKK3sKKyAgICB1aW50MzJfdCBtYXNrWzJdOworICAgIHN0cnVjdCBweGEyeHhfcGljX3N0 YXRlX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9waWNfc3RhdGVfcyAqKSBvcGFxdWU7CisKKyAgICBp ZiAocy0+Y3B1X2Vudi0+aGFsdGVkKSB7CisgICAgICAgIG1hc2tbMF0gPSBzLT5pbnRfcGVuZGlu Z1swXSAmIChzLT5pbnRfZW5hYmxlZFswXSB8IHMtPmludF9pZGxlKTsKKyAgICAgICAgbWFza1sx XSA9IHMtPmludF9wZW5kaW5nWzFdICYgKHMtPmludF9lbmFibGVkWzFdIHwgcy0+aW50X2lkbGUp OworICAgICAgICBpZiAobWFza1swXSB8fCBtYXNrWzFdKQorICAgICAgICAgICAgY3B1X2ludGVy cnVwdChzLT5jcHVfZW52LCBDUFVfSU5URVJSVVBUX0VYSVRUQik7CisgICAgfQorCisgICAgbWFz a1swXSA9IHMtPmludF9wZW5kaW5nWzBdICYgcy0+aW50X2VuYWJsZWRbMF07CisgICAgbWFza1sx XSA9IHMtPmludF9wZW5kaW5nWzFdICYgcy0+aW50X2VuYWJsZWRbMV07CisKKyAgICBpZiAoKG1h c2tbMF0gJiBzLT5pc19maXFbMF0pIHx8IChtYXNrWzFdICYgcy0+aXNfZmlxWzFdKSkKKyAgICAg ICAgY3B1X2ludGVycnVwdChzLT5jcHVfZW52LCBDUFVfSU5URVJSVVBUX0ZJUSk7CisgICAgZWxz ZQorICAgICAgICBjcHVfcmVzZXRfaW50ZXJydXB0KHMtPmNwdV9lbnYsIENQVV9JTlRFUlJVUFRf RklRKTsKKworICAgIGlmICgobWFza1swXSAmIH5zLT5pc19maXFbMF0pIHx8IChtYXNrWzFdICYg fnMtPmlzX2ZpcVsxXSkpCisgICAgICAgIGNwdV9pbnRlcnJ1cHQocy0+Y3B1X2VudiwgQ1BVX0lO VEVSUlVQVF9IQVJEKTsKKyAgICBlbHNlCisgICAgICAgIGNwdV9yZXNldF9pbnRlcnJ1cHQocy0+ Y3B1X2VudiwgQ1BVX0lOVEVSUlVQVF9IQVJEKTsKK30KKworLyogTm90ZTogSGVyZSBsZXZlbCBt ZWFucyBzdGF0ZSBvZiB0aGUgc2lnbmFsIG9uIGEgcGluLCBub3QKKyAqIElSUS9GSVEgZGlzdGlu Y3Rpb24gYXMgaW4gUFhBIERldmVsb3BlciBNYW51YWwuICAqLworc3RhdGljIHZvaWQgcHhhMnh4 X3BpY19zZXRfaXJxKHZvaWQgKm9wYXF1ZSwgaW50IGlycSwgaW50IGxldmVsKQoreworICAgIHN0 cnVjdCBweGEyeHhfcGljX3N0YXRlX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9waWNfc3RhdGVfcyAq KSBvcGFxdWU7CisgICAgaW50IGludF9zZXQgPSAoaXJxID49IDMyKTsKKyAgICBpcnEgJj0gMzE7 CisKKyAgICBpZiAobGV2ZWwpCisgICAgICAgIHMtPmludF9wZW5kaW5nW2ludF9zZXRdIHw9IDEg PDwgaXJxOworICAgIGVsc2UKKyAgICAgICAgcy0+aW50X3BlbmRpbmdbaW50X3NldF0gJj0gfigx IDw8IGlycSk7CisKKyAgICBweGEyeHhfcGljX3VwZGF0ZShvcGFxdWUpOworfQorCitzdGF0aWMg aW5saW5lIHVpbnQzMl90IHB4YTJ4eF9waWNfaGlnaGVzdChzdHJ1Y3QgcHhhMnh4X3BpY19zdGF0 ZV9zICpzKSB7CisgICAgaW50IGksIGludF9zZXQsIGlycTsKKyAgICB1aW50MzJfdCBiaXQsIG1h c2tbMl07CisgICAgdWludDMyX3QgaWNocCA9IDB4MDAzZjAwM2Y7CS8qIEJvdGggSURzIGludmFs aWQgKi8KKworICAgIG1hc2tbMF0gPSBzLT5pbnRfcGVuZGluZ1swXSAmIHMtPmludF9lbmFibGVk WzBdOworICAgIG1hc2tbMV0gPSBzLT5pbnRfcGVuZGluZ1sxXSAmIHMtPmludF9lbmFibGVkWzFd OworCisgICAgZm9yIChpID0gUFhBMlhYX1BJQ19TUkNTIC0gMTsgaSA+PSAwOyBpIC0tKSB7Cisg ICAgICAgIGlycSA9IHMtPnByaW9yaXR5W2ldICYgMHgzZjsKKyAgICAgICAgaWYgKChzLT5wcmlv cml0eVtpXSAmICgxIDw8IDMxKSkgJiYgaXJxIDwgUFhBMlhYX1BJQ19TUkNTKSB7CisgICAgICAg ICAgICAvKiBTb3VyY2UgcGVyaXBoZXJhbCBJRCBpcyB2YWxpZC4gICovCisgICAgICAgICAgICBi aXQgPSAxIDw8IChpcnEgJiAzMSk7CisgICAgICAgICAgICBpbnRfc2V0ID0gKGlycSA+PSAzMik7 CisKKyAgICAgICAgICAgIGlmIChtYXNrW2ludF9zZXRdICYgYml0ICYgcy0+aXNfZmlxW2ludF9z ZXRdKSB7CisgICAgICAgICAgICAgICAgLyogRklRIGFzc2VydGVkICovCisgICAgICAgICAgICAg ICAgaWNocCAmPSAweGZmZmYwMDAwOworICAgICAgICAgICAgICAgIGljaHAgfD0gKDEgPDwgMTUp IHwgaXJxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobWFza1tpbnRfc2V0XSAm IGJpdCAmIH5zLT5pc19maXFbaW50X3NldF0pIHsKKyAgICAgICAgICAgICAgICAvKiBJUlEgYXNz ZXJ0ZWQgKi8KKyAgICAgICAgICAgICAgICBpY2hwICY9IDB4MDAwMGZmZmY7CisgICAgICAgICAg ICAgICAgaWNocCB8PSAoMSA8PCAzMSkgfCAoaXJxIDw8IDE2KTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpY2hwOworfQorCitzdGF0aWMgdWludDMyX3Qg cHhhMnh4X3BpY19tZW1fcmVhZCh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBvZmZz ZXQpCit7CisgICAgc3RydWN0IHB4YTJ4eF9waWNfc3RhdGVfcyAqcyA9IChzdHJ1Y3QgcHhhMnh4 X3BpY19zdGF0ZV9zICopIG9wYXF1ZTsKKyAgICBvZmZzZXQgLT0gcy0+YmFzZTsKKworICAgIHN3 aXRjaCAob2Zmc2V0KSB7CisgICAgY2FzZSBJQ0lQOgkvKiBJUlEgUGVuZGluZyByZWdpc3RlciAq LworICAgICAgICByZXR1cm4gcy0+aW50X3BlbmRpbmdbMF0gJiB+cy0+aXNfZmlxWzBdICYgcy0+ aW50X2VuYWJsZWRbMF07CisgICAgY2FzZSBJQ0lQMjoJLyogSVJRIFBlbmRpbmcgcmVnaXN0ZXIg MiAqLworICAgICAgICByZXR1cm4gcy0+aW50X3BlbmRpbmdbMV0gJiB+cy0+aXNfZmlxWzFdICYg cy0+aW50X2VuYWJsZWRbMV07CisgICAgY2FzZSBJQ01SOgkvKiBNYXNrIHJlZ2lzdGVyICovCisg ICAgICAgIHJldHVybiBzLT5pbnRfZW5hYmxlZFswXTsKKyAgICBjYXNlIElDTVIyOgkvKiBNYXNr IHJlZ2lzdGVyIDIgKi8KKyAgICAgICAgcmV0dXJuIHMtPmludF9lbmFibGVkWzFdOworICAgIGNh c2UgSUNMUjoJLyogTGV2ZWwgcmVnaXN0ZXIgKi8KKyAgICAgICAgcmV0dXJuIHMtPmlzX2ZpcVsw XTsKKyAgICBjYXNlIElDTFIyOgkvKiBMZXZlbCByZWdpc3RlciAyICovCisgICAgICAgIHJldHVy biBzLT5pc19maXFbMV07CisgICAgY2FzZSBJQ0NSOgkvKiBJZGxlIG1hc2sgKi8KKyAgICAgICAg cmV0dXJuIChzLT5pbnRfaWRsZSA9PSAwKTsKKyAgICBjYXNlIElDRlA6CS8qIEZJUSBQZW5kaW5n IHJlZ2lzdGVyICovCisgICAgICAgIHJldHVybiBzLT5pbnRfcGVuZGluZ1swXSAmIHMtPmlzX2Zp cVswXSAmIHMtPmludF9lbmFibGVkWzBdOworICAgIGNhc2UgSUNGUDI6CS8qIEZJUSBQZW5kaW5n IHJlZ2lzdGVyIDIgKi8KKyAgICAgICAgcmV0dXJuIHMtPmludF9wZW5kaW5nWzFdICYgcy0+aXNf ZmlxWzFdICYgcy0+aW50X2VuYWJsZWRbMV07CisgICAgY2FzZSBJQ1BSOgkvKiBQZW5kaW5nIHJl Z2lzdGVyICovCisgICAgICAgIHJldHVybiBzLT5pbnRfcGVuZGluZ1swXTsKKyAgICBjYXNlIElD UFIyOgkvKiBQZW5kaW5nIHJlZ2lzdGVyIDIgKi8KKyAgICAgICAgcmV0dXJuIHMtPmludF9wZW5k aW5nWzFdOworICAgIGNhc2UgSVBSMCAgLi4uIElQUjMxOgorICAgICAgICByZXR1cm4gcy0+cHJp b3JpdHlbMCAgKyAoKG9mZnNldCAtIElQUjAgKSA+PiAyKV07CisgICAgY2FzZSBJUFIzMiAuLi4g SVBSMzk6CisgICAgICAgIHJldHVybiBzLT5wcmlvcml0eVszMiArICgob2Zmc2V0IC0gSVBSMzIp ID4+IDIpXTsKKyAgICBjYXNlIElDSFA6CS8qIEhpZ2hlc3QgUHJpb3JpdHkgcmVnaXN0ZXIgKi8K KyAgICAgICAgcmV0dXJuIHB4YTJ4eF9waWNfaGlnaGVzdChzKTsKKyAgICBkZWZhdWx0OgorICAg ICAgICBwcmludGYoIiVzOiBCYWQgcmVnaXN0ZXIgb2Zmc2V0ICIgUkVHX0ZNVCAiXG4iLCBfX0ZV TkNUSU9OX18sIG9mZnNldCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworc3RhdGlj IHZvaWQgcHhhMnh4X3BpY19tZW1fd3JpdGUodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRy X3Qgb2Zmc2V0LAorICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhbHVlKQoreworICAgIHN0cnVj dCBweGEyeHhfcGljX3N0YXRlX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9waWNfc3RhdGVfcyAqKSBv cGFxdWU7CisgICAgb2Zmc2V0IC09IHMtPmJhc2U7CisKKyAgICBzd2l0Y2ggKG9mZnNldCkgewor ICAgIGNhc2UgSUNNUjoJLyogTWFzayByZWdpc3RlciAqLworICAgICAgICBzLT5pbnRfZW5hYmxl ZFswXSA9IHZhbHVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElDTVIyOgkvKiBNYXNrIHJl Z2lzdGVyIDIgKi8KKyAgICAgICAgcy0+aW50X2VuYWJsZWRbMV0gPSB2YWx1ZTsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBJQ0xSOgkvKiBMZXZlbCByZWdpc3RlciAqLworICAgICAgICBzLT5p c19maXFbMF0gPSB2YWx1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJQ0xSMjoJLyogTGV2 ZWwgcmVnaXN0ZXIgMiAqLworICAgICAgICBzLT5pc19maXFbMV0gPSB2YWx1ZTsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBJQ0NSOgkvKiBJZGxlIG1hc2sgKi8KKyAgICAgICAgcy0+aW50X2lk bGUgPSAodmFsdWUgJiAxKSA/IDAgOiB+MDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJUFIw ICAuLi4gSVBSMzE6CisgICAgICAgIHMtPnByaW9yaXR5WzAgICsgKChvZmZzZXQgLSBJUFIwICkg Pj4gMildID0gdmFsdWUgJiAweDgwMDAwMDNmOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElQ UjMyIC4uLiBJUFIzOToKKyAgICAgICAgcy0+cHJpb3JpdHlbMzIgKyAoKG9mZnNldCAtIElQUjMy KSA+PiAyKV0gPSB2YWx1ZSAmIDB4ODAwMDAwM2Y7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1 bHQ6CisgICAgICAgIHByaW50ZigiJXM6IEJhZCByZWdpc3RlciBvZmZzZXQgIiBSRUdfRk1UICJc biIsIF9fRlVOQ1RJT05fXywgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBw eGEyeHhfcGljX3VwZGF0ZShvcGFxdWUpOworfQorCisvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBD b3Byb2Nlc3NvciBTcGFjZSBSZWdpc3RlciBNYXBwaW5nICovCitzdGF0aWMgY29uc3QgaW50IHB4 YTJ4eF9jcF9yZWdfbWFwWzB4MTBdID0geworICAgIFsweDAgLi4uIDB4Zl0gPSAtMSwKKyAgICBb MHgwXSA9IElDSVAsCisgICAgWzB4MV0gPSBJQ01SLAorICAgIFsweDJdID0gSUNMUiwKKyAgICBb MHgzXSA9IElDRlAsCisgICAgWzB4NF0gPSBJQ1BSLAorICAgIFsweDVdID0gSUNIUCwKKyAgICBb MHg2XSA9IElDSVAyLAorICAgIFsweDddID0gSUNNUjIsCisgICAgWzB4OF0gPSBJQ0xSMiwKKyAg ICBbMHg5XSA9IElDRlAyLAorICAgIFsweGFdID0gSUNQUjIsCit9OworCitzdGF0aWMgdWludDMy X3QgcHhhMnh4X3BpY19jcF9yZWFkKHZvaWQgKm9wYXF1ZSwgaW50IG9wMiwgaW50IHJlZywgaW50 IGNybSkKK3sKKyAgICBzdHJ1Y3QgcHhhMnh4X3BpY19zdGF0ZV9zICpzID0gKHN0cnVjdCBweGEy eHhfcGljX3N0YXRlX3MgKikgb3BhcXVlOworICAgIHRhcmdldF9waHlzX2FkZHJfdCBvZmZzZXQ7 CisKKyAgICBpZiAocHhhMnh4X2NwX3JlZ19tYXBbcmVnXSA9PSAtMSkgeworICAgICAgICBwcmlu dGYoIiVzOiBCYWQgcmVnaXN0ZXIgMHgleFxuIiwgX19GVU5DVElPTl9fLCByZWcpOworICAgICAg ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBvZmZzZXQgPSBzLT5iYXNlICsgcHhhMnh4X2NwX3Jl Z19tYXBbcmVnXTsKKyAgICByZXR1cm4gcHhhMnh4X3BpY19tZW1fcmVhZChvcGFxdWUsIG9mZnNl dCk7Cit9CisKK3N0YXRpYyB2b2lkIHB4YTJ4eF9waWNfY3Bfd3JpdGUodm9pZCAqb3BhcXVlLCBp bnQgb3AyLCBpbnQgcmVnLCBpbnQgY3JtLAorICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhbHVl KQoreworICAgIHN0cnVjdCBweGEyeHhfcGljX3N0YXRlX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9w aWNfc3RhdGVfcyAqKSBvcGFxdWU7CisgICAgdGFyZ2V0X3BoeXNfYWRkcl90IG9mZnNldDsKKwor ICAgIGlmIChweGEyeHhfY3BfcmVnX21hcFtyZWddID09IC0xKSB7CisgICAgICAgIHByaW50Zigi JXM6IEJhZCByZWdpc3RlciAweCV4XG4iLCBfX0ZVTkNUSU9OX18sIHJlZyk7CisgICAgICAgIHJl dHVybjsKKyAgICB9CisKKyAgICBvZmZzZXQgPSBzLT5iYXNlICsgcHhhMnh4X2NwX3JlZ19tYXBb cmVnXTsKKyAgICBweGEyeHhfcGljX21lbV93cml0ZShvcGFxdWUsIG9mZnNldCwgdmFsdWUpOwor fQorCitzdGF0aWMgQ1BVUmVhZE1lbW9yeUZ1bmMgKnB4YTJ4eF9waWNfcmVhZGZuW10gPSB7Cisg ICAgcHhhMnh4X3BpY19tZW1fcmVhZCwKKyAgICBweGEyeHhfcGljX21lbV9yZWFkLAorICAgIHB4 YTJ4eF9waWNfbWVtX3JlYWQsCit9OworCitzdGF0aWMgQ1BVV3JpdGVNZW1vcnlGdW5jICpweGEy eHhfcGljX3dyaXRlZm5bXSA9IHsKKyAgICBweGEyeHhfcGljX21lbV93cml0ZSwKKyAgICBweGEy eHhfcGljX21lbV93cml0ZSwKKyAgICBweGEyeHhfcGljX21lbV93cml0ZSwKK307CisKK3N0cnVj dCBweGEyeHhfcGljX3N0YXRlX3MgKnB4YTJ4eF9waWNfaW5pdCh0YXJnZXRfcGh5c19hZGRyX3Qg YmFzZSwKKyAgICAgICAgICAgICAgICBDUFVTdGF0ZSAqZW52KQoreworICAgIHN0cnVjdCBweGEy eHhfcGljX3N0YXRlX3MgKnM7CisgICAgaW50IGlvbWVtdHlwZTsKKworICAgIHMgPSAoc3RydWN0 IHB4YTJ4eF9waWNfc3RhdGVfcyAqKQorICAgICAgICAgICAgcWVtdV9tYWxsb2N6KHNpemVvZihz dHJ1Y3QgcHhhMnh4X3BpY19zdGF0ZV9zKSk7CisgICAgaWYgKCFzKQorICAgICAgICByZXR1cm4g TlVMTDsKKworICAgIHMtPmNwdV9lbnYgPSBlbnY7CisgICAgcy0+YmFzZSA9IGJhc2U7CisKKyAg ICBzLT5pbnRfcGVuZGluZ1swXSA9IDA7CisgICAgcy0+aW50X3BlbmRpbmdbMV0gPSAwOworICAg IHMtPmludF9lbmFibGVkWzBdID0gMDsKKyAgICBzLT5pbnRfZW5hYmxlZFsxXSA9IDA7CisgICAg cy0+aXNfZmlxWzBdID0gMDsKKyAgICBzLT5pc19maXFbMV0gPSAwOworICAgIHMtPmhhbmRsZXIg PSBweGEyeHhfcGljX3NldF9pcnE7CisKKyAgICAvKiBFbmFibGUgSUMgbWVtb3J5LW1hcHBlZCBy ZWdpc3RlcnMgYWNjZXNzLiAgKi8KKyAgICBpb21lbXR5cGUgPSBjcHVfcmVnaXN0ZXJfaW9fbWVt b3J5KDAsIHB4YTJ4eF9waWNfcmVhZGZuLAorICAgICAgICAgICAgICAgICAgICBweGEyeHhfcGlj X3dyaXRlZm4sIHMpOworICAgIGNwdV9yZWdpc3Rlcl9waHlzaWNhbF9tZW1vcnkoYmFzZSwgMHgw MDBmZmZmZiwgaW9tZW10eXBlKTsKKworICAgIC8qIEVuYWJsZSBJQyBjb3Byb2Nlc3NvciBhY2Nl c3MuICAqLworICAgIGNwdV9hcm1fc2V0X2NwX2lvKGVudiwgNiwgcHhhMnh4X3BpY19jcF9yZWFk LCBweGEyeHhfcGljX2NwX3dyaXRlLCBzKTsKKworICAgIHJldHVybiBzOworfQpkaWZmIC0tZ2l0 IGEvdGFyZ2V0LWFybS9jcHUuaCBiL3RhcmdldC1hcm0vY3B1LmgKaW5kZXggNjhiZjNmZC4uNzM4 YmIzYSAxMDA2NDQKLS0tIGEvdGFyZ2V0LWFybS9jcHUuaAorKysgYi90YXJnZXQtYXJtL2NwdS5o CkBAIC0zOCw2ICszOCwxMCBAQAogI2RlZmluZSBFWENQX0ZJUSAgICAgICAgICAgICA2CiAjZGVm aW5lIEVYQ1BfQktQVCAgICAgICAgICAgIDcKIAordHlwZWRlZiB2b2lkIEFSTVdyaXRlQ1BGdW5j KHZvaWQgKm9wYXF1ZSwKKyAgICAgICAgICAgICAgICBpbnQgb3AyLCBpbnQgcmVnLCBpbnQgY3Jt LCB1aW50MzJfdCB2YWx1ZSk7Cit0eXBlZGVmIHVpbnQzMl90IEFSTVJlYWRDUEZ1bmModm9pZCAq b3BhcXVlLCBpbnQgb3AyLCBpbnQgcmVnLCBpbnQgY3JtKTsKKwogLyogV2UgY3VycmVudGx5IGFz c3VtZSBmbG9hdCBhbmQgZG91YmxlIGFyZSBJRUVFIHNpbmdsZSBhbmQgZG91YmxlCiAgICBwcmVj aXNpb24gcmVzcGVjdGl2ZWx5LgogICAgRG9pbmcgcnVudGltZSBjb252ZXJzaW9ucyBpcyB0cmlj a3kgYmVjYXVzZSBWRlAgcmVnaXN0ZXJzIG1heSBjb250YWluCkBAIC03NSw2ICs3OSw3IEBAIHR5 cGVkZWYgc3RydWN0IENQVUFSTVN0YXRlIHsKICAgICAvKiBTeXN0ZW0gY29udHJvbCBjb3Byb2Nl c3NvciAoY3AxNSkgKi8KICAgICBzdHJ1Y3QgewogICAgICAgICB1aW50MzJfdCBjMF9jcHVpZDsK KyAgICAgICAgdWludDMyX3QgYzBfY2FjaGV0eXBlOwogICAgICAgICB1aW50MzJfdCBjMV9zeXM7 IC8qIFN5c3RlbSBjb250cm9sIHJlZ2lzdGVyLiAgKi8KICAgICAgICAgdWludDMyX3QgYzFfY29w cm9jOyAvKiBDb3Byb2Nlc3NvciBhY2Nlc3MgcmVnaXN0ZXIuICAqLwogICAgICAgICB1aW50MzJf dCBjMjsgLyogTU1VIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UuICAqLwpAQCAtODcsOCArOTIsMTYg QEAgdHlwZWRlZiBzdHJ1Y3QgQ1BVQVJNU3RhdGUgewogICAgICAgICB1aW50MzJfdCBjOV9kYXRh OwogICAgICAgICB1aW50MzJfdCBjMTNfZmNzZTsgLyogRkNTRSBQSUQuICAqLwogICAgICAgICB1 aW50MzJfdCBjMTNfY29udGV4dDsgLyogQ29udGV4dCBJRC4gICovCisgICAgICAgIHVpbnQzMl90 IGMxNV9jcGFyOyAvKiBYU2NhbGUgQ29wcm9jZXNzb3IgQWNjZXNzIFJlZ2lzdGVyICovCiAgICAg fSBjcDE1OwogCisgICAgLyogQ29wcm9jZXNzb3IgSU8gdXNlZCBieSBwZXJpcGhlcmFscyAqLwor ICAgIHN0cnVjdCB7CisgICAgICAgIEFSTVJlYWRDUEZ1bmMgKmNwX3JlYWQ7CisgICAgICAgIEFS TVdyaXRlQ1BGdW5jICpjcF93cml0ZTsKKyAgICAgICAgdm9pZCAqb3BhcXVlOworICAgIH0gY3Bb MTVdOworCiAgICAgLyogSW50ZXJuYWwgQ1BVIGZlYXR1cmUgZmxhZ3MuICAqLwogICAgIHVpbnQz Ml90IGZlYXR1cmVzOwogCkBAIC0yMDQsMTAgKzIxNywxMCBAQCBlbnVtIGFybV9jcHVfbW9kZSB7 CiAjZGVmaW5lIEFSTV9WRlBfRlBJTlNUICA5CiAjZGVmaW5lIEFSTV9WRlBfRlBJTlNUMiAxMAog Ci0KIGVudW0gYXJtX2ZlYXR1cmVzIHsKICAgICBBUk1fRkVBVFVSRV9WRlAsCi0gICAgQVJNX0ZF QVRVUkVfQVVYQ1IgLyogQVJNMTAyNiBBdXhpbGlhcnkgY29udHJvbCByZWdpc3Rlci4gICovCisg ICAgQVJNX0ZFQVRVUkVfQVVYQ1IsICAvKiBBUk0xMDI2IEF1eGlsaWFyeSBjb250cm9sIHJlZ2lz dGVyLiAgKi8KKyAgICBBUk1fRkVBVFVSRV9YU0NBTEUsIC8qIEludGVsIFhTY2FsZSBleHRlbnNp b25zLiAgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGFybV9mZWF0dXJlKENQVUFSTVN0YXRl ICplbnYsIGludCBmZWF0dXJlKQpAQCAtMjE4LDggKzIzMSwyNCBAQCBzdGF0aWMgaW5saW5lIGlu dCBhcm1fZmVhdHVyZShDUFVBUk1TdGF0ZSAqZW52LCBpbnQgZmVhdHVyZSkKIHZvaWQgYXJtX2Nw dV9saXN0KHZvaWQpOwogdm9pZCBjcHVfYXJtX3NldF9tb2RlbChDUFVBUk1TdGF0ZSAqZW52LCBj b25zdCBjaGFyICpuYW1lKTsKIAotI2RlZmluZSBBUk1fQ1BVSURfQVJNMTAyNiAweDQxMDZhMjYy Ci0jZGVmaW5lIEFSTV9DUFVJRF9BUk05MjYgIDB4NDEwNjkyNjUKK3ZvaWQgY3B1X2FybV9zZXRf Y3BfaW8oQ1BVQVJNU3RhdGUgKmVudiwgaW50IGNwbnVtLAorICAgICAgICAgICAgICAgIEFSTVJl YWRDUEZ1bmMgKmNwX3JlYWQsIEFSTVdyaXRlQ1BGdW5jICpjcF93cml0ZSwKKyAgICAgICAgICAg ICAgICB2b2lkICpvcGFxdWUpOworCisjZGVmaW5lIEFSTV9DUFVJRF9BUk0xMDI2ICAgMHg0MTA2 YTI2MgorI2RlZmluZSBBUk1fQ1BVSURfQVJNOTI2ICAgIDB4NDEwNjkyNjUKKyNkZWZpbmUgQVJN X0NQVUlEX1BYQTI1MCAgICAweDY5MDUyMTAwCisjZGVmaW5lIEFSTV9DUFVJRF9QWEEyNTUgICAg MHg2OTA1MmQwMAorI2RlZmluZSBBUk1fQ1BVSURfUFhBMjYwICAgIDB4NjkwNTI5MDMKKyNkZWZp bmUgQVJNX0NQVUlEX1BYQTI2MSAgICAweDY5MDUyZDA1CisjZGVmaW5lIEFSTV9DUFVJRF9QWEEy NjIgICAgMHg2OTA1MmQwNgorI2RlZmluZSBBUk1fQ1BVSURfUFhBMjcwICAgIDB4NjkwNTQxMTAK KyNkZWZpbmUgQVJNX0NQVUlEX1BYQTI3MF9BMCAweDY5MDU0MTEwCisjZGVmaW5lIEFSTV9DUFVJ RF9QWEEyNzBfQTEgMHg2OTA1NDExMQorI2RlZmluZSBBUk1fQ1BVSURfUFhBMjcwX0IwIDB4Njkw NTQxMTIKKyNkZWZpbmUgQVJNX0NQVUlEX1BYQTI3MF9CMSAweDY5MDU0MTEzCisjZGVmaW5lIEFS TV9DUFVJRF9QWEEyNzBfQzAgMHg2OTA1NDExNAorI2RlZmluZSBBUk1fQ1BVSURfUFhBMjcwX0M1 IDB4NjkwNTQxMTcKIAogI2lmIGRlZmluZWQoQ09ORklHX1VTRVJfT05MWSkKICNkZWZpbmUgVEFS R0VUX1BBR0VfQklUUyAxMgpkaWZmIC0tZ2l0IGEvdGFyZ2V0LWFybS9leGVjLmggYi90YXJnZXQt YXJtL2V4ZWMuaAppbmRleCBkZWJhODkzLi5hZjA2ZjQ4IDEwMDY0NAotLS0gYS90YXJnZXQtYXJt L2V4ZWMuaAorKysgYi90YXJnZXQtYXJtL2V4ZWMuaApAQCAtNjAsNiArNjAsOCBAQCBpbnQgY3B1 X2FybV9oYW5kbGVfbW11X2ZhdWx0IChDUFVTdGF0ZSAqZW52LCB0YXJnZXRfdWxvbmcgYWRkcmVz cywgaW50IHJ3LAogCiB2b2lkIGNwdV9sb2NrKHZvaWQpOwogdm9pZCBjcHVfdW5sb2NrKHZvaWQp Owordm9pZCBoZWxwZXJfc2V0X2NwKENQVVN0YXRlICosIHVpbnQzMl90LCB1aW50MzJfdCk7Cit1 aW50MzJfdCBoZWxwZXJfZ2V0X2NwKENQVVN0YXRlICosIHVpbnQzMl90KTsKIHZvaWQgaGVscGVy X3NldF9jcDE1KENQVVN0YXRlICosIHVpbnQzMl90LCB1aW50MzJfdCk7CiB1aW50MzJfdCBoZWxw ZXJfZ2V0X2NwMTUoQ1BVU3RhdGUgKiwgdWludDMyX3QpOwogCmRpZmYgLS1naXQgYS90YXJnZXQt YXJtL2hlbHBlci5jIGIvdGFyZ2V0LWFybS9oZWxwZXIuYwppbmRleCAyNDJkZDI4Li5hMmViNjQ2 IDEwMDY0NAotLS0gYS90YXJnZXQtYXJtL2hlbHBlci5jCisrKyBiL3RhcmdldC1hcm0vaGVscGVy LmMKQEAgLTE3LDExICsxNywzMiBAQCBzdGF0aWMgdm9pZCBjcHVfcmVzZXRfbW9kZWxfaWQoQ1BV QVJNU3RhdGUgKmVudiwgdWludDMyX3QgaWQpCiAgICAgY2FzZSBBUk1fQ1BVSURfQVJNOTI2Ogog ICAgICAgICBzZXRfZmVhdHVyZShlbnYsIEFSTV9GRUFUVVJFX1ZGUCk7CiAgICAgICAgIGVudi0+ dmZwLnhyZWdzW0FSTV9WRlBfRlBTSURdID0gMHg0MTAxMTA5MDsKKyAgICAgICAgZW52LT5jcDE1 LmMwX2NhY2hldHlwZSA9IDB4MWRkMjBkMjsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBUk1f Q1BVSURfQVJNMTAyNjoKICAgICAgICAgc2V0X2ZlYXR1cmUoZW52LCBBUk1fRkVBVFVSRV9WRlAp OwogICAgICAgICBzZXRfZmVhdHVyZShlbnYsIEFSTV9GRUFUVVJFX0FVWENSKTsKICAgICAgICAg ZW52LT52ZnAueHJlZ3NbQVJNX1ZGUF9GUFNJRF0gPSAweDQxMDExMGEwOworICAgICAgICBlbnYt PmNwMTUuYzBfY2FjaGV0eXBlID0gMHgxZGQyMGQyOworICAgICAgICBicmVhazsKKyAgICBjYXNl IEFSTV9DUFVJRF9QWEEyNTA6CisgICAgY2FzZSBBUk1fQ1BVSURfUFhBMjU1OgorICAgIGNhc2Ug QVJNX0NQVUlEX1BYQTI2MDoKKyAgICBjYXNlIEFSTV9DUFVJRF9QWEEyNjE6CisgICAgY2FzZSBB Uk1fQ1BVSURfUFhBMjYyOgorICAgICAgICBzZXRfZmVhdHVyZShlbnYsIEFSTV9GRUFUVVJFX1hT Q0FMRSk7CisgICAgICAgIC8qIEpUQUdfSUQgaXMgKChpZCA8PCAyOCkgfCAweDA5MjY1MDEzKSAq LworICAgICAgICBlbnYtPmNwMTUuYzBfY2FjaGV0eXBlID0gMHhkMTcyMTcyOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIEFSTV9DUFVJRF9QWEEyNzBfQTA6CisgICAgY2FzZSBBUk1fQ1BVSURf UFhBMjcwX0ExOgorICAgIGNhc2UgQVJNX0NQVUlEX1BYQTI3MF9CMDoKKyAgICBjYXNlIEFSTV9D UFVJRF9QWEEyNzBfQjE6CisgICAgY2FzZSBBUk1fQ1BVSURfUFhBMjcwX0MwOgorICAgIGNhc2Ug QVJNX0NQVUlEX1BYQTI3MF9DNToKKyAgICAgICAgc2V0X2ZlYXR1cmUoZW52LCBBUk1fRkVBVFVS RV9YU0NBTEUpOworICAgICAgICAvKiBKVEFHX0lEIGlzICgoaWQgPDwgMjgpIHwgMHgwOTI2NTAx MykgKi8KKyAgICAgICAgZW52LT5jcDE1LmMwX2NhY2hldHlwZSA9IDB4ZDE3MjE3MjsKICAgICAg ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgY3B1X2Fib3J0KGVudiwgIkJhZCBDUFUg SUQ6ICV4XG4iLCBpZCk7CkBAIC02OCw2ICs4OSwxOCBAQCBzdHJ1Y3QgYXJtX2NwdV90IHsKIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX2NwdV90IGFybV9jcHVfbmFtZXNbXSA9IHsKICAgICB7IEFS TV9DUFVJRF9BUk05MjYsICJhcm05MjYifSwKICAgICB7IEFSTV9DUFVJRF9BUk0xMDI2LCAiYXJt MTAyNiJ9LAorICAgIHsgQVJNX0NQVUlEX1BYQTI1MCwgInB4YTI1MCIgfSwKKyAgICB7IEFSTV9D UFVJRF9QWEEyNTUsICJweGEyNTUiIH0sCisgICAgeyBBUk1fQ1BVSURfUFhBMjYwLCAicHhhMjYw IiB9LAorICAgIHsgQVJNX0NQVUlEX1BYQTI2MSwgInB4YTI2MSIgfSwKKyAgICB7IEFSTV9DUFVJ RF9QWEEyNjIsICJweGEyNjIiIH0sCisgICAgeyBBUk1fQ1BVSURfUFhBMjcwLCAicHhhMjcwIiB9 LAorICAgIHsgQVJNX0NQVUlEX1BYQTI3MF9BMCwgInB4YTI3MC1hMCIgfSwKKyAgICB7IEFSTV9D UFVJRF9QWEEyNzBfQTEsICJweGEyNzAtYTEiIH0sCisgICAgeyBBUk1fQ1BVSURfUFhBMjcwX0Iw LCAicHhhMjcwLWIwIiB9LAorICAgIHsgQVJNX0NQVUlEX1BYQTI3MF9CMSwgInB4YTI3MC1iMSIg fSwKKyAgICB7IEFSTV9DUFVJRF9QWEEyNzBfQzAsICJweGEyNzAtYzAiIH0sCisgICAgeyBBUk1f Q1BVSURfUFhBMjcwX0M1LCAicHhhMjcwLWM1IiB9LAogICAgIHsgMCwgTlVMTH0KIH07CiAKQEAg LTEzMiw2ICsxNjUsMTkgQEAgdGFyZ2V0X3Vsb25nIGNwdV9nZXRfcGh5c19wYWdlX2RlYnVnKENQ VVN0YXRlICplbnYsIHRhcmdldF91bG9uZyBhZGRyKQogfQogCiAvKiBUaGVzZSBzaG91bGQgcHJv YmFibHkgcmFpc2UgdW5kZWZpbmVkIGluc24gZXhjZXB0aW9ucy4gICovCit2b2lkIGhlbHBlcl9z ZXRfY3AoQ1BVU3RhdGUgKmVudiwgdWludDMyX3QgaW5zbiwgdWludDMyX3QgdmFsKQoreworICAg IGludCBvcDEgPSAoaW5zbiA+PiA4KSAmIDB4ZjsKKyAgICBjcHVfYWJvcnQoZW52LCAiY3AlaSBp bnNuICUwOHhcbiIsIG9wMSwgaW5zbik7Cit9CisKK3VpbnQzMl90IGhlbHBlcl9nZXRfY3AoQ1BV U3RhdGUgKmVudiwgdWludDMyX3QgaW5zbikKK3sKKyAgICBpbnQgb3AxID0gKGluc24gPj4gOCkg JiAweGY7CisgICAgY3B1X2Fib3J0KGVudiwgImNwJWkgaW5zbiAlMDh4XG4iLCBvcDEsIGluc24p OworICAgIHJldHVybiAwOworfQorCiB2b2lkIGhlbHBlcl9zZXRfY3AxNShDUFVTdGF0ZSAqZW52 LCB1aW50MzJfdCBpbnNuLCB1aW50MzJfdCB2YWwpCiB7CiAgICAgY3B1X2Fib3J0KGVudiwgImNw MTUgaW5zbiAlMDh4XG4iLCBpbnNuKTsKQEAgLTM3MCw3ICs0MTcsNyBAQCBzdGF0aWMgaW50IGdl dF9waHlzX2FkZHIoQ1BVU3RhdGUgKmVudiwgdWludDMyX3QgYWRkcmVzcywgaW50IGFjY2Vzc190 eXBlLAogICAgICAgICAgICAgcGh5c19hZGRyID0gKGRlc2MgJiAweGZmZjAwMDAwKSB8IChhZGRy ZXNzICYgMHgwMDBmZmZmZik7CiAgICAgICAgICAgICBhcCA9IChkZXNjID4+IDEwKSAmIDM7CiAg ICAgICAgICAgICBjb2RlID0gMTM7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0gZWxzZSBp ZiAodHlwZSA9PSAxKSB7CiAgICAgICAgICAgICAvKiBMb29rdXAgbDIgZW50cnkuICAqLwogICAg ICAgICAgICAgdGFibGUgPSAoZGVzYyAmIDB4ZmZmZmZjMDApIHwgKChhZGRyZXNzID4+IDEwKSAm IDB4M2ZjKTsKICAgICAgICAgICAgIGRlc2MgPSBsZGxfcGh5cyh0YWJsZSk7CkBAIC0zODcsMTIg KzQzNCwxNiBAQCBzdGF0aWMgaW50IGdldF9waHlzX2FkZHIoQ1BVU3RhdGUgKmVudiwgdWludDMy X3QgYWRkcmVzcywgaW50IGFjY2Vzc190eXBlLAogICAgICAgICAgICAgICAgIGFwID0gKGRlc2Mg Pj4gKDQgKyAoKGFkZHJlc3MgPj4gMTMpICYgNikpKSAmIDM7CiAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICBjYXNlIDM6IC8qIDFrIHBhZ2UuICAqLwotICAgICAgICAgICAgICAg IGlmICh0eXBlID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogUGFnZSB0cmFuc2xhdGlv biBmYXVsdC4gICovCi0gICAgICAgICAgICAgICAgICAgIGNvZGUgPSA3OwotICAgICAgICAgICAg ICAgICAgICBnb3RvIGRvX2ZhdWx0OworICAgICAgICAgICAgICAgIGlmIChhcm1fZmVhdHVyZShl bnYsIEFSTV9GRUFUVVJFX1hTQ0FMRSkpCisgICAgICAgICAgICAgICAgICAgIHBoeXNfYWRkciA9 IChkZXNjICYgMHhmZmZmZjAwMCkgfCAoYWRkcmVzcyAmIDB4ZmZmKTsKKyAgICAgICAgICAgICAg ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gMSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgLyogUGFnZSB0cmFuc2xhdGlvbiBmYXVsdC4gICovCisgICAgICAgICAg ICAgICAgICAgICAgICBjb2RlID0gNzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9f ZmF1bHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGh5c19h ZGRyID0gKGRlc2MgJiAweGZmZmZmYzAwKSB8IChhZGRyZXNzICYgMHgzZmYpOwogICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBwaHlzX2FkZHIgPSAoZGVzYyAmIDB4ZmZmZmZjMDAp IHwgKGFkZHJlc3MgJiAweDNmZik7CiAgICAgICAgICAgICAgICAgYXAgPSAoZGVzYyA+PiA0KSAm IDM7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNDAw LDcgKzQ1MSwxMSBAQCBzdGF0aWMgaW50IGdldF9waHlzX2FkZHIoQ1BVU3RhdGUgKmVudiwgdWlu dDMyX3QgYWRkcmVzcywgaW50IGFjY2Vzc190eXBlLAogICAgICAgICAgICAgICAgIGFib3J0KCk7 CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb2RlID0gMTU7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBjb2RlID0gMTU7CisgICAgICAgICAgICBnb3RvIGRvX2ZhdWx0OwogICAg ICAgICB9CisKICAgICAgICAgKnByb3QgPSBjaGVja19hcChlbnYsIGFwLCBkb21haW4sIGFjY2Vz c190eXBlLCBpc191c2VyKTsKICAgICAgICAgaWYgKCEqcHJvdCkgewogICAgICAgICAgICAgLyog QWNjZXNzIHBlcm1pc3Npb24gZmF1bHQuICAqLwpAQCAtNDU1LDYgKzUxMCw0MSBAQCB0YXJnZXRf dWxvbmcgY3B1X2dldF9waHlzX3BhZ2VfZGVidWcoQ1BVU3RhdGUgKmVudiwgdGFyZ2V0X3Vsb25n IGFkZHIpCiAgICAgcmV0dXJuIHBoeXNfYWRkcjsKIH0KIAordm9pZCBoZWxwZXJfc2V0X2NwKENQ VVN0YXRlICplbnYsIHVpbnQzMl90IGluc24sIHVpbnQzMl90IHZhbCkKK3sKKyAgICBpbnQgb3Ax ID0gKGluc24gPj4gOCkgJiAweGY7CisgICAgaW50IG9wMiA9IChpbnNuID4+IDUpICYgNzsKKyAg ICBpbnQgcmVnID0gKGluc24gPj4gMTYpICYgMHhmOworICAgIGludCBjcm0gPSBpbnNuICYgMHhm OworCisgICAgLyogT24gWFNjYWxlIGNvcHJvY2Vzc29ycyBbMCwgMTNdIGhhdmUgdG8gYmUgZW5h YmxlZCBpbiBDUEFSLiAgKi8KKyAgICBpZiAoYXJtX2ZlYXR1cmUoZW52LCBBUk1fRkVBVFVSRV9Y U0NBTEUpKSB7CisgICAgICAgIGlmIChvcDEgPD0gMTMgJiYgKGVudi0+Y3AxNS5jMTVfY3BhciAm ICgxIDw8IG9wMSkpID09IDApCisgICAgICAgICAgICByZXR1cm47CS8qIFBlcm1pc3Npb24gRGVu aWVkICovCisgICAgfQorCisgICAgaWYgKGVudi0+Y3Bbb3AxXS5jcF93cml0ZSkKKyAgICAgICAg ZW52LT5jcFtvcDFdLmNwX3dyaXRlKGVudi0+Y3Bbb3AxXS5vcGFxdWUsIG9wMiwgcmVnLCBjcm0s IHZhbCk7Cit9CisKK3VpbnQzMl90IGhlbHBlcl9nZXRfY3AoQ1BVU3RhdGUgKmVudiwgdWludDMy X3QgaW5zbikKK3sKKyAgICBpbnQgb3AxID0gKGluc24gPj4gOCkgJiAweGY7CisgICAgaW50IG9w MiA9IChpbnNuID4+IDUpICYgNzsKKyAgICBpbnQgcmVnID0gKGluc24gPj4gMTYpICYgMHhmOwor ICAgIGludCBjcm0gPSBpbnNuICYgMHhmOworCisgICAgLyogT24gWFNjYWxlIGNvcHJvY2Vzc29y cyBbMCwgMTNdIGhhdmUgdG8gYmUgZW5hYmxlZCBpbiBDUEFSLiAgKi8KKyAgICBpZiAoYXJtX2Zl YXR1cmUoZW52LCBBUk1fRkVBVFVSRV9YU0NBTEUpKSB7CisgICAgICAgIGlmIChvcDEgPD0gMTMg JiYgKGVudi0+Y3AxNS5jMTVfY3BhciAmICgxIDw8IG9wMSkpID09IDApCisgICAgICAgICAgICBy ZXR1cm4gMDsJLyogUGVybWlzc2lvbiBEZW5pZWQgKi8KKyAgICB9CisKKyAgICBpZiAoZW52LT5j cFtvcDFdLmNwX3JlYWQpCisgICAgICAgIHJldHVybiBlbnYtPmNwW29wMV0uY3BfcmVhZChlbnYt PmNwW29wMV0ub3BhcXVlLCBvcDIsIHJlZywgY3JtKTsKKyAgICByZXR1cm4gMDsKK30KKwogdm9p ZCBoZWxwZXJfc2V0X2NwMTUoQ1BVU3RhdGUgKmVudiwgdWludDMyX3QgaW5zbiwgdWludDMyX3Qg dmFsKQogewogICAgIHVpbnQzMl90IG9wMjsKQEAgLTQ2NiwxNSArNTU2LDIzIEBAIHZvaWQgaGVs cGVyX3NldF9jcDE1KENQVVN0YXRlICplbnYsIHVpbnQzMl90IGluc24sIHVpbnQzMl90IHZhbCkK ICAgICBjYXNlIDE6IC8qIFN5c3RlbSBjb25maWd1cmF0aW9uLiAgKi8KICAgICAgICAgc3dpdGNo IChvcDIpIHsKICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgZW52LT5jcDE1LmMxX3N5cyA9 IHZhbDsKKyAgICAgICAgICAgIGlmICghYXJtX2ZlYXR1cmUoZW52LCBBUk1fRkVBVFVSRV9YU0NB TEUpIHx8IChpbnNuICYgMHhmKSA9PSAwKQorICAgICAgICAgICAgICAgIGVudi0+Y3AxNS5jMV9z eXMgPSB2YWw7CiAgICAgICAgICAgICAvKiA/Pz8gTG90cyBvZiB0aGVzZSBiaXRzIGFyZSBub3Qg aW1wbGVtZW50ZWQuICAqLwogICAgICAgICAgICAgLyogVGhpcyBtYXkgZW5hYmxlL2Rpc2FibGUg dGhlIE1NVSwgc28gZG8gYSBUTEIgZmx1c2guICAqLwogICAgICAgICAgICAgdGxiX2ZsdXNoKGVu diwgMSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAg LyogWFNjYWxlIGRvZXNuJ3QgaW1wbGVtZW50IEFVWCBDUiAoUC1CaXQpIGJ1dCBhbGxvd3MKKyAg ICAgICAgICAgICAqIHdyaXRpbmcgd2l0aCB6ZXJvIGFuZCByZWFkaW5nLiAgKi8KKyAgICAgICAg ICAgIGlmIChhcm1fZmVhdHVyZShlbnYsIEFSTV9GRUFUVVJFX1hTQ0FMRSkpCisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvIGJhZF9yZWc7CiAgICAgICAgIGNhc2UgMjoK ICAgICAgICAgICAgIGVudi0+Y3AxNS5jMV9jb3Byb2MgPSB2YWw7CiAgICAgICAgICAgICAvKiA/ Pz8gSXMgdGhpcyBzYWZlIHdoZW4gY2FsbGVkIGZyb20gd2l0aGluIGEgVEI/ICAqLwogICAgICAg ICAgICAgdGJfZmx1c2goZW52KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0 OgogICAgICAgICAgICAgZ290byBiYWRfcmVnOwogICAgICAgICB9CkBAIC01NzgsMTMgKzY3Niwy MSBAQCB2b2lkIGhlbHBlcl9zZXRfY3AxNShDUFVTdGF0ZSAqZW52LCB1aW50MzJfdCBpbnNuLCB1 aW50MzJfdCB2YWwpCiAgICAgY2FzZSAxNDogLyogUmVzZXJ2ZWQuICAqLwogICAgICAgICBnb3Rv IGJhZF9yZWc7CiAgICAgY2FzZSAxNTogLyogSW1wbGVtZW50YXRpb24gc3BlY2lmaWMuICAqLwot ICAgICAgICAvKiA/Pz8gSW50ZXJuYWwgcmVnaXN0ZXJzIG5vdCBpbXBsZW1lbnRlZC4gICovCisg ICAgICAgIGlmIChhcm1fZmVhdHVyZShlbnYsIEFSTV9GRUFUVVJFX1hTQ0FMRSkpIHsKKyAgICAg ICAgICAgIGlmIChvcDIgPT0gMCAmJiAoaW5zbiAmIDB4ZikgPT0gMSkgeworICAgICAgICAgICAg ICAgIC8qIENoYW5nZXMgY3AwIHRvIGNwMTMgYmVoYXZpb3IsIHNvIG5lZWRzIGEgVEIgZmx1c2gu ICAqLworICAgICAgICAgICAgICAgIHRiX2ZsdXNoKGVudik7CisgICAgICAgICAgICAgICAgZW52 LT5jcDE1LmMxNV9jcGFyID0gKHZhbCAmIDB4M2ZmZikgfCAyOworICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ290byBiYWRfcmVnOworICAgICAgICB9 CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm47CiBiYWRfcmVnOgogICAgIC8qID8/ PyBGb3IgZGVidWdnaW5nIG9ubHkuICBTaG91bGQgcmFpc2UgaWxsZWdhbCBpbnN0cnVjdGlvbiBl eGNlcHRpb24uICAqLwotICAgIGNwdV9hYm9ydChlbnYsICJVbmltcGxlbWVudGVkIGNwMTUgcmVn aXN0ZXIgcmVhZFxuIik7CisgICAgY3B1X2Fib3J0KGVudiwgIlVuaW1wbGVtZW50ZWQgY3AxNSBy ZWdpc3RlciB3cml0ZVxuIik7CiB9CiAKIHVpbnQzMl90IGhlbHBlcl9nZXRfY3AxNShDUFVTdGF0 ZSAqZW52LCB1aW50MzJfdCBpbnNuKQpAQCAtNTk4LDcgKzcwNCw3IEBAIHVpbnQzMl90IGhlbHBl cl9nZXRfY3AxNShDUFVTdGF0ZSAqZW52LCB1aW50MzJfdCBpbnNuKQogICAgICAgICBkZWZhdWx0 OiAvKiBEZXZpY2UgSUQuICAqLwogICAgICAgICAgICAgcmV0dXJuIGVudi0+Y3AxNS5jMF9jcHVp ZDsKICAgICAgICAgY2FzZSAxOiAvKiBDYWNoZSBUeXBlLiAgKi8KLSAgICAgICAgICAgIHJldHVy biAweDFkZDIwZDI7CisgICAgICAgICAgICByZXR1cm4gZW52LT5jcDE1LmMwX2NhY2hldHlwZTsK ICAgICAgICAgY2FzZSAyOiAvKiBUQ00gc3RhdHVzLiAgKi8KICAgICAgICAgICAgIHJldHVybiAw OwogICAgICAgICB9CkBAIC02MDksNiArNzE1LDggQEAgdWludDMyX3QgaGVscGVyX2dldF9jcDE1 KENQVVN0YXRlICplbnYsIHVpbnQzMl90IGluc24pCiAgICAgICAgIGNhc2UgMTogLyogQXV4aWxp YXJ5IGNvbnRyb2wgcmVnaXN0ZXIuICAqLwogICAgICAgICAgICAgaWYgKGFybV9mZWF0dXJlKGVu diwgQVJNX0ZFQVRVUkVfQVVYQ1IpKQogICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAg ICAgICAgaWYgKGFybV9mZWF0dXJlKGVudiwgQVJNX0ZFQVRVUkVfWFNDQUxFKSkKKyAgICAgICAg ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIGdvdG8gYmFkX3JlZzsKICAgICAgICAgY2Fz ZSAyOiAvKiBDb3Byb2Nlc3NvciBhY2Nlc3MgcmVnaXN0ZXIuICAqLwogICAgICAgICAgICAgcmV0 dXJuIGVudi0+Y3AxNS5jMV9jb3Byb2M7CkBAIC02NDMsNyArNzUxLDcgQEAgdWludDMyX3QgaGVs cGVyX2dldF9jcDE1KENQVVN0YXRlICplbnYsIHVpbnQzMl90IGluc24pCiAgICAgICAgIH0KICAg ICBjYXNlIDc6IC8qIENhY2hlIGNvbnRyb2wuICAqLwogICAgICAgICAvKiA/Pz8gVGhpcyBpcyBm b3IgdGVzdCwgY2xlYW4gYW5kIGludmFpZGF0ZSBvcGVyYXRpb25zIHRoYXQgc2V0IHRoZQotICAg ICAgICAgICBaIGZsYWcuICBXZSBjYW4ndCByZXByZXNlbnQgTiA9IFogPSAxLCBzbyBpdCBhbHNv IGNsZWFycyBjbGVhcnMKKyAgICAgICAgICAgWiBmbGFnLiAgV2UgY2FuJ3QgcmVwcmVzZW50IE4g PSBaID0gMSwgc28gaXQgYWxzbyBjbGVhcnMKICAgICAgICAgICAgdGhlIE4gZmxhZy4gIE9oIHdl bGwuICAqLwogICAgICAgICBlbnYtPk5aRiA9IDA7CiAgICAgICAgIHJldHVybiAwOwpAQCAtNjc2 LDcgKzc4NCwxMiBAQCB1aW50MzJfdCBoZWxwZXJfZ2V0X2NwMTUoQ1BVU3RhdGUgKmVudiwgdWlu dDMyX3QgaW5zbikKICAgICBjYXNlIDE0OiAvKiBSZXNlcnZlZC4gICovCiAgICAgICAgIGdvdG8g YmFkX3JlZzsKICAgICBjYXNlIDE1OiAvKiBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYy4gICovCi0g ICAgICAgIC8qID8/PyBJbnRlcm5hbCByZWdpc3RlcnMgbm90IGltcGxlbWVudGVkLiAgKi8KKyAg ICAgICAgaWYgKGFybV9mZWF0dXJlKGVudiwgQVJNX0ZFQVRVUkVfWFNDQUxFKSkgeworICAgICAg ICAgICAgaWYgKG9wMiA9PSAwICYmIChpbnNuICYgMHhmKSA9PSAxKQorICAgICAgICAgICAgICAg IHJldHVybiBlbnYtPmNwMTUuYzE1X2NwYXI7CisKKyAgICAgICAgICAgIGdvdG8gYmFkX3JlZzsK KyAgICAgICAgfQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiBiYWRfcmVnOgpAQCAtNjg1LDQg Kzc5OCwxOCBAQCBiYWRfcmVnOgogICAgIHJldHVybiAwOwogfQogCit2b2lkIGNwdV9hcm1fc2V0 X2NwX2lvKENQVUFSTVN0YXRlICplbnYsIGludCBjcG51bSwKKyAgICAgICAgICAgICAgICBBUk1S ZWFkQ1BGdW5jICpjcF9yZWFkLCBBUk1Xcml0ZUNQRnVuYyAqY3Bfd3JpdGUsCisgICAgICAgICAg ICAgICAgdm9pZCAqb3BhcXVlKQoreworICAgIGlmIChjcG51bSA8IDAgfHwgY3BudW0gPiAxNCkg eworICAgICAgICBjcHVfYWJvcnQoZW52LCAiQmFkIGNvcHJvY2Vzc29yIG51bWJlcjogJWlcbiIs IGNwbnVtKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVudi0+Y3BbY3BudW1dLmNw X3JlYWQgPSBjcF9yZWFkOworICAgIGVudi0+Y3BbY3BudW1dLmNwX3dyaXRlID0gY3Bfd3JpdGU7 CisgICAgZW52LT5jcFtjcG51bV0ub3BhcXVlID0gb3BhcXVlOworfQorCiAjZW5kaWYKZGlmZiAt LWdpdCBhL3RhcmdldC1hcm0vb3AuYyBiL3RhcmdldC1hcm0vb3AuYwppbmRleCBmMTdiODEyLi45 Y2ZiNDYyIDEwMDY0NAotLS0gYS90YXJnZXQtYXJtL29wLmMKKysrIGIvdGFyZ2V0LWFybS9vcC5j CkBAIC0xMTQyLDEyICsxMTQyLDI0IEBAIHZvaWQgT1BQUk9UTyBvcF92ZnBfbWRycih2b2lkKQog ICAgIEZUMGQgPSB1LmQ7CiB9CiAKLS8qIENvcHkgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHRv IFQwIHRvIGFsbCBiaXRzIG9mIFQxLiAgKi8KKy8qIENvcHkgdGhlIG1vc3Qgc2lnbmlmaWNhbnQg Yml0IG9mIFQwIHRvIGFsbCBiaXRzIG9mIFQxLiAgKi8KIHZvaWQgT1BQUk9UTyBvcF9zaWduYml0 X1QxX1QwKHZvaWQpCiB7CiAgICAgVDEgPSAoaW50MzJfdClUMCA+PiAzMTsKIH0KIAordm9pZCBP UFBST1RPIG9wX21vdmxfY3BfVDAodm9pZCkKK3sKKyAgICBoZWxwZXJfc2V0X2NwKGVudiwgUEFS QU0xLCBUMCk7CisgICAgRk9SQ0VfUkVUKCk7Cit9CisKK3ZvaWQgT1BQUk9UTyBvcF9tb3ZsX1Qw X2NwKHZvaWQpCit7CisgICAgVDAgPSBoZWxwZXJfZ2V0X2NwKGVudiwgUEFSQU0xKTsKKyAgICBG T1JDRV9SRVQoKTsKK30KKwogdm9pZCBPUFBST1RPIG9wX21vdmxfY3AxNV9UMCh2b2lkKQogewog ICAgIGhlbHBlcl9zZXRfY3AxNShlbnYsIFBBUkFNMSwgVDApOwpkaWZmIC0tZ2l0IGEvdGFyZ2V0 LWFybS90cmFuc2xhdGUuYyBiL3RhcmdldC1hcm0vdHJhbnNsYXRlLmMKaW5kZXggMDU1Y2NmYS4u MjRlOGVlZSAxMDA2NDQKLS0tIGEvdGFyZ2V0LWFybS90cmFuc2xhdGUuYworKysgYi90YXJnZXQt YXJtL3RyYW5zbGF0ZS5jCkBAIC00OTIsNiArNDkyLDI5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBn ZW5fbW92X3ZyZWdfRjAoaW50IGRwLCBpbnQgcmVnKQogICAgICAgICBnZW5fb3BfdmZwX3NldHJl Z19GMHModmZwX3JlZ19vZmZzZXQoZHAsIHJlZykpOwogfQogCisvKiBEaXNhc3NlbWJsZSBzeXN0 ZW0gY29wcm9jZXNzb3IgaW5zdHJ1Y3Rpb24uICBSZXR1cm4gbm9uemVybyBpZgorICAgaW5zdHJ1 Y3Rpb24gaXMgbm90IGRlZmluZWQuICAqLworc3RhdGljIGludCBkaXNhc19jcF9pbnNuKERpc2Fz Q29udGV4dCAqcywgdWludDMyX3QgaW5zbikKK3sKKyAgICB1aW50MzJfdCByZCA9IChpbnNuID4+ IDEyKSAmIDB4ZjsKKyAgICBpZiAoSVNfVVNFUihzKSkgeworICAgICAgICByZXR1cm4gMTsKKyAg ICB9CisKKyAgICBpZiAoaW5zbiAmICgxIDw8IDIwKSkgeworICAgICAgICBnZW5fb3BfbW92bF9U MF9jcChpbnNuKTsKKyAgICAgICAgZ2VuX21vdmxfcmVnX1QwKHMsIHJkKTsKKyAgICB9IGVsc2Ug eworICAgICAgICBnZW5fb3BfbW92bF9UMF9pbSgodWludDMyX3QpIHMtPnBjKTsKKyAgICAgICAg Z2VuX29wX21vdmxfcmVnX1ROWzBdWzE1XSgpOworICAgICAgICBnZW5fbW92bF9UMF9yZWcocywg cmQpOworICAgICAgICBnZW5fb3BfbW92bF9jcF9UMChpbnNuKTsKKyAgICAgICAgcy0+aXNfam1w ID0gRElTQVNfVVBEQVRFOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCiAvKiBEaXNhc3Nl bWJsZSBzeXN0ZW0gY29wcm9jZXNzb3IgKGNwMTUpIGluc3RydWN0aW9uLiAgUmV0dXJuIG5vbnpl cm8gaWYKICAgIGluc3RydWN0aW9uIGlzIG5vdCBkZWZpbmVkLiAgKi8KIHN0YXRpYyBpbnQgZGlz YXNfY3AxNV9pbnNuKERpc2FzQ29udGV4dCAqcywgdWludDMyX3QgaW5zbikKQEAgLTE3OTcsNyAr MTgyMCwxNiBAQCBzdGF0aWMgdm9pZCBkaXNhc19hcm1faW5zbihDUFVTdGF0ZSAqIGVudiwgRGlz YXNDb250ZXh0ICpzKQogICAgICAgICBjYXNlIDB4ZToKICAgICAgICAgICAgIC8qIENvcHJvY2Vz c29yLiAgKi8KICAgICAgICAgICAgIG9wMSA9IChpbnNuID4+IDgpICYgMHhmOworICAgICAgICAg ICAgaWYgKGFybV9mZWF0dXJlKGVudiwgQVJNX0ZFQVRVUkVfWFNDQUxFKSAmJgorICAgICAgICAg ICAgICAgICAgICAoKGVudi0+Y3AxNS5jMTVfY3BhciBeIDB4M2ZmZikgJiAoMSA8PCBvcDEpKSkK KyAgICAgICAgICAgICAgICBnb3RvIGlsbGVnYWxfb3A7CiAgICAgICAgICAgICBzd2l0Y2ggKG9w MSkgeworICAgICAgICAgICAgY2FzZSAwIC4uLiAxOgorICAgICAgICAgICAgY2FzZSAyIC4uLiA5 OgorICAgICAgICAgICAgY2FzZSAxMiAuLi4gMTQ6CisgICAgICAgICAgICAgICAgaWYgKGRpc2Fz X2NwX2luc24ocywgaW5zbikpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gaWxsZWdhbF9vcDsK KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgMTA6CiAgICAgICAgICAg ICBjYXNlIDExOgogICAgICAgICAgICAgICAgIGlmIChkaXNhc192ZnBfaW5zbiAoZW52LCBzLCBp bnNuKSkKZGlmZiAtLWdpdCBhL3ZsLmggYi92bC5oCmluZGV4IGIzMGZiODcuLjU2M2Y0MzcgMTAw NjQ0Ci0tLSBhL3ZsLmgKKysrIGIvdmwuaApAQCAtMTQ0Miw2ICsxNDQyLDggQEAgdHlwZWRlZiB2 b2lkICgqZ3Bpb19oYW5kbGVyX3QpKGludCBsaW5lLCBpbnQgbGV2ZWwsIHZvaWQgKm9wYXF1ZSk7 CiAKICNpbmNsdWRlICJody9pMmMuaCIKIAorI2luY2x1ZGUgImh3L3B4YS5oIgorCiAjaW5jbHVk ZSAiZ2Ric3R1Yi5oIgogCiAjZW5kaWYgLyogZGVmaW5lZChRRU1VX1RPT0wpICovCi0tIAoxLjQu NC4zCgo= ------=_Part_98970_33123966.1174078473447--