From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JtPMi-0005x3-7s for qemu-devel@nongnu.org; Tue, 06 May 2008 11:46:04 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JtPMf-0005rO-6T for qemu-devel@nongnu.org; Tue, 06 May 2008 11:46:03 -0400 Received: from [199.232.76.173] (port=59040 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JtPMe-0005r5-UE for qemu-devel@nongnu.org; Tue, 06 May 2008 11:46:01 -0400 Received: from ug-out-1314.google.com ([66.249.92.168]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1JtPMd-0001yn-EQ for qemu-devel@nongnu.org; Tue, 06 May 2008 11:46:00 -0400 Received: by ug-out-1314.google.com with SMTP id j40so168516ugd.4 for ; Tue, 06 May 2008 08:45:58 -0700 (PDT) Message-ID: Date: Tue, 6 May 2008 17:45:58 +0200 From: "andrzej zaborowski" In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_5685_27271684.1210088758171" References: Subject: [Qemu-devel] Re: [PATCH] ARM host (TCG only) Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Qemu mailing list ------=_Part_5685_27271684.1210088758171 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline Here's a second version with some fixes and less in TODO. * Now uses the tlb cache, Linux decompressor is about two times faster (caching read addresses had this effect, caching write addresses is not noticeable speed-wise). * Added user-mode support, tested with a busybox static OABI binary (on EABI host). * Implemented division ops. * Calling the generated code now uses the same convention as dyngen used, saving a couple of registers. * Removes dyngen HOST_ARM code as suggested by Paul. This has the advantage that a non-tcg target will (hopefully) give a readable error message when you try to run it. * Still no constant pools. I use USE_DIRECT_JUMP for goto_tb, but it could also work without it - I'm not sure what is the advantage or disadvantage of that. -- Please do not print this email unless absolutely necessary. Spread environmental awareness. ------=_Part_5685_27271684.1210088758171 Content-Type: text/x-patch; name=qemu-arm-host.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_ffwnbtcz Content-Disposition: attachment; filename=qemu-arm-host.patch ZGlmZiAtLWdpdCBhL2NwdS1leGVjLmMgYi9jcHUtZXhlYy5jCmluZGV4IGZlYTQ3Y2IuLmE3ZTc3 YTUgMTAwNjQ0Ci0tLSBhL2NwdS1leGVjLmMKKysrIGIvY3B1LWV4ZWMuYwpAQCAtNjc5LDcgKzY3 OSw4IEBAIGludCBjcHVfZXhlYyhDUFVTdGF0ZSAqZW52MSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJleGVjX2xvb3A6XG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDogLyogbm8gb3V0cHV0cyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiciIg KGdlbl9mdW5jKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAicjEiLCAicjIiLCAi cjMiLCAicjgiLCAicjkiLCAicjEwIiwgInIxMiIsICJyMTQiKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogInIxIiwgInIyIiwgInIzIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgInI4IiwgInI5IiwgInIxMCIsICJyMTEiLCAicjEyIiwgInIxNCIpOwogI2VsaWYg ZGVmaW5lZChfX2lhNjQpCiAJCXN0cnVjdCBmcHRyIHsKIAkJCXZvaWQgKmlwOwpkaWZmIC0tZ2l0 IGEvZHluZ2VuLmMgYi9keW5nZW4uYwppbmRleCAzNjlkODE5Li5mM2I5NjM4IDEwMDY0NAotLS0g YS9keW5nZW4uYworKysgYi9keW5nZW4uYwpAQCAtMTI4NCwxNjEgKzEyODQsNiBAQCBnZXRfcGx0 X2luZGV4IChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGFkZGVuZCkKIAogI2VuZGlm CiAKLSNpZmRlZiBIT1NUX0FSTQotCi1pbnQgYXJtX2VtaXRfbGRyX2luZm8oY29uc3QgY2hhciAq bmFtZSwgdW5zaWduZWQgbG9uZyBzdGFydF9vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAg RklMRSAqb3V0ZmlsZSwgdWludDhfdCAqcF9zdGFydCwgdWludDhfdCAqcF9lbmQsCi0gICAgICAg ICAgICAgICAgICAgICAgRUxGX1JFTE9DICpyZWxvY3MsIGludCBuYl9yZWxvY3MpCi17Ci0gICAg dWludDhfdCAqcDsKLSAgICB1aW50MzJfdCBpbnNuOwotICAgIGludCBvZmZzZXQsIG1pbl9vZmZz ZXQsIHBjX29mZnNldCwgZGF0YV9zaXplLCBzcGFyZSwgbWF4X3Bvb2w7Ci0gICAgdWludDhfdCBk YXRhX2FsbG9jYXRlZFsxMDI0XTsKLSAgICB1bnNpZ25lZCBpbnQgZGF0YV9pbmRleDsKLSAgICBp bnQgdHlwZTsKLQotICAgIG1lbXNldChkYXRhX2FsbG9jYXRlZCwgMCwgc2l6ZW9mKGRhdGFfYWxs b2NhdGVkKSk7Ci0KLSAgICBwID0gcF9zdGFydDsKLSAgICBtaW5fb2Zmc2V0ID0gcF9lbmQgLSBw X3N0YXJ0OwotICAgIHNwYXJlID0gMHg3ZmZmZmZmZjsKLSAgICB3aGlsZSAocCA8IHBfc3RhcnQg KyBtaW5fb2Zmc2V0KSB7Ci0gICAgICAgIGluc24gPSBnZXQzMigodWludDMyX3QgKilwKTsKLSAg ICAgICAgLyogVE9ETzogQXJtdjVlIGxkcmQuICAqLwotICAgICAgICAvKiBUT0RPOiBWRlAgbG9h ZC4gICovCi0gICAgICAgIGlmICgoaW5zbiAmIDB4MGQ1ZjAwMDApID09IDB4MDUxZjAwMDApIHsK LSAgICAgICAgICAgIC8qIGxkciByZWcsIFtwYywgI2ltXSAqLwotICAgICAgICAgICAgb2Zmc2V0 ID0gaW5zbiAmIDB4ZmZmOwotICAgICAgICAgICAgaWYgKCEoaW5zbiAmIDB4MDA4MDAwMDApKQot ICAgICAgICAgICAgICAgIG9mZnNldCA9IC1vZmZzZXQ7Ci0gICAgICAgICAgICBtYXhfcG9vbCA9 IDQwOTY7Ci0gICAgICAgICAgICB0eXBlID0gMDsKLSAgICAgICAgfSBlbHNlIGlmICgoaW5zbiAm IDB4MGU1ZjBmMDApID09IDB4MGMxZjAxMDApIHsKLSAgICAgICAgICAgIC8qIEZQQSBsZGYuICAq LwotICAgICAgICAgICAgb2Zmc2V0ID0gKGluc24gJiAweGZmKSA8PCAyOwotICAgICAgICAgICAg aWYgKCEoaW5zbiAmIDB4MDA4MDAwMDApKQotICAgICAgICAgICAgICAgIG9mZnNldCA9IC1vZmZz ZXQ7Ci0gICAgICAgICAgICBtYXhfcG9vbCA9IDEwMjQ7Ci0gICAgICAgICAgICB0eXBlID0gMTsK LSAgICAgICAgfSBlbHNlIGlmICgoaW5zbiAmIDB4MGZmZjAwMDApID09IDB4MDI4ZjAwMDApIHsK LSAgICAgICAgICAgIC8qIFNvbWUgZ2NjIGxvYWQgYSBkb3VibGV3b3JkIGltbWVkaWF0ZSB3aXRo Ci0gICAgICAgICAgICAgICBhZGQgcmVnTiwgcGMsICNpbW0KLSAgICAgICAgICAgICAgIGxkbWlh IHJlZ04sIHtyZWdOLCByZWdNfQotICAgICAgICAgICAgICAgSG9wZSBhbmQgcHJheSB0aGUgY29t cGlsZXIgbmV2ZXIgZ2VuZXJhdGVzIHNvbWV0aGluIGxpa2UKLSAgICAgICAgICAgICAgIGFkZCBy ZWcsIHBjLCAjaW1tMTsgbGRyIHJlZywgW3JlZywgIy1pbW0yXTsgKi8KLSAgICAgICAgICAgIGlu dCByOwotCi0gICAgICAgICAgICByID0gKGluc24gJiAweGYwMCkgPj4gNzsKLSAgICAgICAgICAg IG9mZnNldCA9ICgoaW5zbiAmIDB4ZmYpID4+IHIpIHwgKChpbnNuICYgMHhmZikgPDwgKDMyIC0g cikpOwotICAgICAgICAgICAgbWF4X3Bvb2wgPSAxMDI0OwotICAgICAgICAgICAgdHlwZSA9IDI7 Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtYXhfcG9vbCA9IDA7Ci0gICAgICAgICAg ICB0eXBlID0gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGUgPj0gMCkgewotICAgICAg ICAgICAgLyogUEMtcmVsYXRpdmUgbG9hZCBuZWVkcyBmaXhpbmcgdXAuICAqLwotICAgICAgICAg ICAgaWYgKHNwYXJlID4gbWF4X3Bvb2wgLSBvZmZzZXQpCi0gICAgICAgICAgICAgICAgc3BhcmUg PSBtYXhfcG9vbCAtIG9mZnNldDsKLSAgICAgICAgICAgIGlmICgob2Zmc2V0ICYgMykgIT0wKQot ICAgICAgICAgICAgICAgIGVycm9yKCIlczolMDR4OiBwYyBvZmZzZXQgbXVzdCBiZSAzMiBiaXQg YWxpZ25lZCIsCi0gICAgICAgICAgICAgICAgICAgICAgbmFtZSwgc3RhcnRfb2Zmc2V0ICsgcCAt IHBfc3RhcnQpOwotICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApCi0gICAgICAgICAgICAgICAg ZXJyb3IoIiVzOiUwNHg6IEVtYmVkZGVkIGxpdGVyYWwgdmFsdWUiLAotICAgICAgICAgICAgICAg ICAgICAgIG5hbWUsIHN0YXJ0X29mZnNldCArIHAgLSBwX3N0YXJ0KTsKLSAgICAgICAgICAgIHBj X29mZnNldCA9IHAgLSBwX3N0YXJ0ICsgb2Zmc2V0ICsgODsKLSAgICAgICAgICAgIGlmIChwY19v ZmZzZXQgPD0gKHAgLSBwX3N0YXJ0KSB8fAotICAgICAgICAgICAgICAgIHBjX29mZnNldCA+PSAo cF9lbmQgLSBwX3N0YXJ0KSkKLSAgICAgICAgICAgICAgICBlcnJvcigiJXM6JTA0eDogcGMgb2Zm c2V0IG11c3QgcG9pbnQgaW5zaWRlIHRoZSBmdW5jdGlvbiBjb2RlIiwKLSAgICAgICAgICAgICAg ICAgICAgICBuYW1lLCBzdGFydF9vZmZzZXQgKyBwIC0gcF9zdGFydCk7Ci0gICAgICAgICAgICBp ZiAocGNfb2Zmc2V0IDwgbWluX29mZnNldCkKLSAgICAgICAgICAgICAgICBtaW5fb2Zmc2V0ID0g cGNfb2Zmc2V0OwotICAgICAgICAgICAgaWYgKG91dGZpbGUpIHsKLSAgICAgICAgICAgICAgICAv KiBUaGUgaW50cnVjdGlvbiBwb3NpdGlvbiAqLwotICAgICAgICAgICAgICAgIGZwcmludGYob3V0 ZmlsZSwgIiAgICBhcm1fbGRyX3B0ci0+cHRyID0gZ2VuX2NvZGVfcHRyICsgJWQ7XG4iLAotICAg ICAgICAgICAgICAgICAgICAgICAgcCAtIHBfc3RhcnQpOwotICAgICAgICAgICAgICAgIC8qIFRo ZSBwb3NpdGlvbiBvZiB0aGUgY29uc3RhbnQgcG9vbCBkYXRhLiAgKi8KLSAgICAgICAgICAgICAg ICBkYXRhX2luZGV4ID0gKChwX2VuZCAtIHBfc3RhcnQpIC0gcGNfb2Zmc2V0KSA+PiAyOwotICAg ICAgICAgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIiAgICBhcm1fbGRyX3B0ci0+ZGF0YV9wdHIg PSBhcm1fZGF0YV9wdHIgLSAlZDtcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2lu ZGV4KTsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIgICAgYXJtX2xkcl9wdHIt PnR5cGUgPSAlZDtcbiIsIHR5cGUpOwotICAgICAgICAgICAgICAgIGZwcmludGYob3V0ZmlsZSwg IiAgICBhcm1fbGRyX3B0cisrO1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg ICAgcCArPSA0OwotICAgIH0KLQotICAgIC8qIENvcHkgYW5kIHJlbG9jYXRlIHRoZSBjb25zdGFu dCBwb29sIGRhdGEuICAqLwotICAgIGRhdGFfc2l6ZSA9IChwX2VuZCAtIHBfc3RhcnQpIC0gbWlu X29mZnNldDsKLSAgICBpZiAoZGF0YV9zaXplID4gMCAmJiBvdXRmaWxlKSB7Ci0gICAgICAgIHNw YXJlICs9IG1pbl9vZmZzZXQ7Ci0gICAgICAgIGZwcmludGYob3V0ZmlsZSwgIiAgICBhcm1fZGF0 YV9wdHIgLT0gJWQ7XG4iLCBkYXRhX3NpemUgPj4gMik7Ci0gICAgICAgIGZwcmludGYob3V0Zmls ZSwgIiAgICBhcm1fcG9vbF9wdHIgLT0gJWQ7XG4iLCBkYXRhX3NpemUpOwotICAgICAgICBmcHJp bnRmKG91dGZpbGUsICIgICAgaWYgKGFybV9wb29sX3B0ciA+IGdlbl9jb2RlX3B0ciArICVkKVxu IgotICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIGFybV9wb29sX3B0ciA9IGdlbl9j b2RlX3B0ciArICVkO1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzcGFyZSwgc3BhcmUp OwotCi0gICAgICAgIGRhdGFfaW5kZXggPSAwOwotICAgICAgICBmb3IgKHBjX29mZnNldCA9IG1p bl9vZmZzZXQ7Ci0gICAgICAgICAgICAgcGNfb2Zmc2V0IDwgcF9lbmQgLSBwX3N0YXJ0OwotICAg ICAgICAgICAgIHBjX29mZnNldCArPSA0KSB7Ci0KLSAgICAgICAgICAgIEVMRl9SRUxPQyAqcmVs OwotICAgICAgICAgICAgaW50IGksIGFkZGVuZCwgdHlwZTsKLSAgICAgICAgICAgIGNvbnN0IGNo YXIgKnN5bV9uYW1lOwotICAgICAgICAgICAgY2hhciByZWxuYW1lWzEwMjRdOwotCi0gICAgICAg ICAgICAvKiBkYXRhIHZhbHVlICovCi0gICAgICAgICAgICBhZGRlbmQgPSBnZXQzMigodWludDMy X3QgKikocF9zdGFydCArIHBjX29mZnNldCkpOwotICAgICAgICAgICAgcmVsbmFtZVswXSA9ICdc MCc7Ci0gICAgICAgICAgICBmb3IoaSA9IDAsIHJlbCA9IHJlbG9jcztpIDwgbmJfcmVsb2NzOyBp KyssIHJlbCsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlbC0+cl9vZmZzZXQgPT0gKHBjX29m ZnNldCArIHN0YXJ0X29mZnNldCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3ltX25hbWUgPSBn ZXRfcmVsX3N5bV9uYW1lKHJlbCk7Ci0gICAgICAgICAgICAgICAgICAgIC8qIHRoZSBjb21waWxl ciBsZWF2ZSBzb21lIHVubmVjZXNzYXJ5IHJlZmVyZW5jZXMgdG8gdGhlIGNvZGUgKi8KLSAgICAg ICAgICAgICAgICAgICAgZ2V0X3JlbG9jX2V4cHIocmVsbmFtZSwgc2l6ZW9mKHJlbG5hbWUpLCBz eW1fbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBFTEYzMl9SX1RZUEUocmVsLT5y X2luZm8pOwotICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSAhPSBSX0FSTV9BQlMzMikKLSAg ICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCIlczogdW5zdXBwb3J0ZWQgZGF0YSByZWxvY2F0 aW9uIiwgbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIiAgICBhcm1f ZGF0YV9wdHJbJWRdID0gMHgleCIsCi0gICAgICAgICAgICAgICAgICAgIGRhdGFfaW5kZXgsIGFk ZGVuZCk7Ci0gICAgICAgICAgICBpZiAocmVsbmFtZVswXSAhPSAnXDAnKQotICAgICAgICAgICAg ICAgIGZwcmludGYob3V0ZmlsZSwgIiArICVzIiwgcmVsbmFtZSk7Ci0gICAgICAgICAgICBmcHJp bnRmKG91dGZpbGUsICI7XG4iKTsKLQotICAgICAgICAgICAgZGF0YV9pbmRleCsrOwotICAgICAg ICB9Ci0gICAgfQotCi0gICAgaWYgKHAgPT0gcF9zdGFydCkKLSAgICAgICAgZ290byBhcm1fcmV0 X2Vycm9yOwotICAgIHAgLT0gNDsKLSAgICBpbnNuID0gZ2V0MzIoKHVpbnQzMl90ICopcCk7Ci0g ICAgLyogVGhlIGxhc3QgaW5zdHJ1Y3Rpb24gbXVzdCBiZSBhbiBsZG0gaW5zdHJ1Y3Rpb24uICBU aGVyZSBhcmUgc2V2ZXJhbAotICAgICAgIGZvcm1zIGdlbmVyYXRlZCBieSBnY2M6Ci0gICAgICAg IGxkbWliIHNwLCB7Li4uLCBwY30gIChpbXBsaWVzIGEgc3AgYWRqdXN0bWVudCBvZiArNCkKLSAg ICAgICAgbGRtaWEgc3AsIHsuLi4sIHBjfQotICAgICAgICBsZG1lYSBmcCwgey4uLiwgcGN9ICov Ci0gICAgaWYgKChpbnNuICYgMHhmZmZmODAwMCkgPT0gMHhlOTlkODAwMCkgewotICAgICAgICBp ZiAob3V0ZmlsZSkgewotICAgICAgICAgICAgZnByaW50ZihvdXRmaWxlLAotICAgICAgICAgICAg ICAgICAgICAiICAgICoodWludDMyX3QgKikoZ2VuX2NvZGVfcHRyICsgJWQpID0gMHhlMjhkZDAw NDtcbiIsCi0gICAgICAgICAgICAgICAgICAgIHAgLSBwX3N0YXJ0KTsKLSAgICAgICAgfQotICAg ICAgICBwICs9IDQ7Ci0gICAgfSBlbHNlIGlmICgoaW5zbiAmIDB4ZmZmZjgwMDApICE9IDB4ZTg5 ZDgwMDAKLSAgICAgICAgJiYgKGluc24gJiAweGZmZmY4MDAwKSAhPSAweGU5MWI4MDAwKSB7Ci0g ICAgYXJtX3JldF9lcnJvcjoKLSAgICAgICAgaWYgKCFvdXRmaWxlKQotICAgICAgICAgICAgcHJp bnRmKCIlczogaW52YWxpZCBlcGlsb2dcbiIsIG5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gcCAt IHBfc3RhcnQ7Ci19Ci0jZW5kaWYKLQotCiAjZGVmaW5lIE1BWF9BUkdTIDMKIAogLyogZ2VuZXJh dGUgb3AgY29kZSAqLwpAQCAtMTYzMywyNyArMTQ3OCw2IEBAIHZvaWQgZ2VuX2NvZGUoY29uc3Qg Y2hhciAqbmFtZSwgaG9zdF91bG9uZyBvZmZzZXQsIGhvc3RfdWxvbmcgc2l6ZSwKIAogICAgICAg ICBjb3B5X3NpemUgPSBwIC0gcF9zdGFydDsKICAgICB9Ci0jZWxpZiBkZWZpbmVkKEhPU1RfQVJN KQotICAgIHsKLSAgICAgICAgdWludDMyX3QgaW5zbjsKLQotICAgICAgICBpZiAoKHBfZW5kIC0g cF9zdGFydCkgPD0gMTYpCi0gICAgICAgICAgICBlcnJvcigiJXM6IGZ1bmN0aW9uIHRvbyBzbWFs bCIsIG5hbWUpOwotICAgICAgICBpZiAoZ2V0MzIoKHVpbnQzMl90ICopcF9zdGFydCkgIT0gMHhl MWEwYzAwZCB8fAotICAgICAgICAgICAgKGdldDMyKCh1aW50MzJfdCAqKShwX3N0YXJ0ICsgNCkp ICYgMHhmZmZmMDAwMCkgIT0gMHhlOTJkMDAwMCB8fAotICAgICAgICAgICAgZ2V0MzIoKHVpbnQz Ml90ICopKHBfc3RhcnQgKyA4KSkgIT0gMHhlMjRjYjAwNCkKLSAgICAgICAgICAgIGVycm9yKCIl czogaW52YWxpZCBwcm9sb2ciLCBuYW1lKTsKLSAgICAgICAgcF9zdGFydCArPSAxMjsKLSAgICAg ICAgc3RhcnRfb2Zmc2V0ICs9IDEyOwotICAgICAgICBpbnNuID0gZ2V0MzIoKHVpbnQzMl90ICop cF9zdGFydCk7Ci0gICAgICAgIGlmICgoaW5zbiAmIDB4ZmZmZmZmMDApID09IDB4ZTI0ZGQwMDAp IHsKLSAgICAgICAgICAgIC8qIFN0YWNrIGFkanVzdG1lbnQuICBBc3N1bWUgb3AgdXNlcyB0aGUg ZnJhbWUgcG9pbnRlci4gICovCi0gICAgICAgICAgICBwX3N0YXJ0IC09IDQ7Ci0gICAgICAgICAg ICBzdGFydF9vZmZzZXQgLT0gNDsKLSAgICAgICAgfQotICAgICAgICBjb3B5X3NpemUgPSBhcm1f ZW1pdF9sZHJfaW5mbyhuYW1lLCBzdGFydF9vZmZzZXQsIE5VTEwsIHBfc3RhcnQsIHBfZW5kLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxvY3MsIG5iX3JlbG9jcyk7 Ci0gICAgfQogI2VsaWYgZGVmaW5lZChIT1NUX002OEspCiAgICAgewogICAgICAgICB1aW50OF90 ICpwOwpAQCAtMTcyNSw2ICsxNTQ5LDggQEAgdm9pZCBnZW5fY29kZShjb25zdCBjaGFyICpuYW1l LCBob3N0X3Vsb25nIG9mZnNldCwgaG9zdF91bG9uZyBzaXplLAogICAgICAgICB9CiAgICAgICAg IGNvcHlfc2l6ZSA9IHAgLSBwX3N0YXJ0OwogICAgIH0KKyNlbGlmIGRlZmluZWQoSE9TVF9BUk0p CisgICAgZXJyb3IoImR5bmdlbiB0YXJnZXRzIG5vdCBzdXBwb3J0ZWQgb24gQVJNIik7CiAjZWxz ZQogI2Vycm9yIHVuc3VwcG9ydGVkIENQVQogI2VuZGlmCkBAIC0yNTU4LDc0ICsyMzg0LDYgQEAg dm9pZCBnZW5fY29kZShjb25zdCBjaGFyICpuYW1lLCBob3N0X3Vsb25nIG9mZnNldCwgaG9zdF91 bG9uZyBzaXplLAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgfQotI2VsaWYgZGVmaW5lZChIT1NUX0FSTSkKLSAgICAgICAgICAgIHsKLSAgICAg ICAgICAgICAgICBjaGFyIHJlbG5hbWVbMjU2XTsKLSAgICAgICAgICAgICAgICBpbnQgdHlwZTsK LSAgICAgICAgICAgICAgICBpbnQgYWRkZW5kOwotICAgICAgICAgICAgICAgIGludCByZWxvY19v ZmZzZXQ7Ci0gICAgICAgICAgICAgICAgdWludDMyX3QgaW5zbjsKLQotICAgICAgICAgICAgICAg IGluc24gPSBnZXQzMigodWludDMyX3QgKikocF9zdGFydCArIDQpKTsKLSAgICAgICAgICAgICAg ICAvKiBJZiBwcm9sb2d1ZSBlbmRzIGluIHN1YiBzcCwgc3AsICNjb25zdCB0aGVuIGFzc3VtZQot ICAgICAgICAgICAgICAgICAgIG9wIGhhcyBhIHN0YWNrIGZyYW1lIGFuZCBuZWVkcyB0aGUgZnJh bWUgcG9pbnRlci4gICovCi0gICAgICAgICAgICAgICAgaWYgKChpbnNuICYgMHhmZmZmZmYwMCkg PT0gMHhlMjRkZDAwMCkgewotICAgICAgICAgICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAg ICAgICAgICAgdWludDMyX3Qgb3Bjb2RlOwotICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSAw eGUyOGRiMDAwOyAvKiBhZGQgZnAsIHNwLCAjMC4gICovCi0jaWYgMAotLyogPz8/IE5lZWQgdG8g dW5kbyB0aGUgZXh0cmEgc3RhY2sgYWRqdXN0bWVudCBhdCB0aGUgZW5kIG9mIHRoZSBvcC4KLSAg IEZvciBub3cganVzdCBsZWF2ZSB0aGUgc3RhY2sgbWlzYWxpZ25lZCBhbmQgaG9wZSBpdCBkb2Vz bid0IGJyZWFrIGFueXRoaW5nCi0gICB0b28gaW1wb3J0YW50LiAgKi8KLSAgICAgICAgICAgICAg ICAgICAgaWYgKChpbnNuICYgNCkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyog UHJlc2VydmUgZG91Ymxld29yZCBzdGFjayBhbGlnbm1lbnQuICAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgZnByaW50ZihvdXRmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiICAgICoodWludDMyX3QgKikoZ2VuX2NvZGVfcHRyICsgNCk9IDB4JXg7XG4iLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNuICsgNCk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBvcGNvZGUgLT0gNDsKLSAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAg ICAgICAgICAgICAgIGluc24gPSBnZXQzMigodWludDMyX3QgKikocF9zdGFydCAtIDQpKTsKLSAg ICAgICAgICAgICAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBzYXZlZCByZWdp c3RlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGluZyBwYy4gICovCi0gICAgICAg ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBpZiAoaW5zbiAmICgxIDw8IGkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg IG9wY29kZSArPSA0OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg IGZwcmludGYob3V0ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICoodWlu dDMyX3QgKilnZW5fY29kZV9wdHIgPSAweCV4O1xuIiwgb3Bjb2RlKTsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgYXJtX2VtaXRfbGRyX2luZm8ocmVsbmFtZSwgc3RhcnRfb2Zm c2V0LCBvdXRmaWxlLCBwX3N0YXJ0LCBwX2VuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZWxvY3MsIG5iX3JlbG9jcyk7Ci0KLSAgICAgICAgICAgICAgICBmb3IoaSA9IDAs IHJlbCA9IHJlbG9jcztpIDwgbmJfcmVsb2NzOyBpKyssIHJlbCsrKSB7Ci0gICAgICAgICAgICAg ICAgaWYgKHJlbC0+cl9vZmZzZXQgPj0gc3RhcnRfb2Zmc2V0ICYmCi0JCSAgICByZWwtPnJfb2Zm c2V0IDwgc3RhcnRfb2Zmc2V0ICsgY29weV9zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5 bV9uYW1lID0gc3RydGFiICsgc3ltdGFiW0VMRlcoUl9TWU0pKHJlbC0+cl9pbmZvKV0uc3RfbmFt ZTsKLSAgICAgICAgICAgICAgICAgICAgLyogdGhlIGNvbXBpbGVyIGxlYXZlIHNvbWUgdW5uZWNl c3NhcnkgcmVmZXJlbmNlcyB0byB0aGUgY29kZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAo c3ltX25hbWVbMF0gPT0gJ1wwJykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot ICAgICAgICAgICAgICAgICAgICBnZXRfcmVsb2NfZXhwcihyZWxuYW1lLCBzaXplb2YocmVsbmFt ZSksIHN5bV9uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEVMRjMyX1JfVFlQRShy ZWwtPnJfaW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZGVuZCA9IGdldDMyKCh1aW50MzJf dCAqKSh0ZXh0ICsgcmVsLT5yX29mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICByZWxvY19v ZmZzZXQgPSByZWwtPnJfb2Zmc2V0IC0gc3RhcnRfb2Zmc2V0OwotICAgICAgICAgICAgICAgICAg ICBzd2l0Y2godHlwZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFJfQVJNX0FCUzMyOgot ICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiICAgICoodWludDMyX3Qg KikoZ2VuX2NvZGVfcHRyICsgJWQpID0gJXMgKyAlZDtcbiIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlbG9jX29mZnNldCwgcmVsbmFtZSwgYWRkZW5kKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFJfQVJNX1BDMjQ6 Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgUl9BUk1fSlVNUDI0OgotICAgICAgICAgICAgICAg ICAgICBjYXNlIFJfQVJNX0NBTEw6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91 dGZpbGUsICIgICAgYXJtX3JlbG9jX3BjMjQoKHVpbnQzMl90ICopKGdlbl9jb2RlX3B0ciArICVk KSwgMHgleCwgJXMpO1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsb2Nf b2Zmc2V0LCBhZGRlbmQsIHJlbG5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBl cnJvcigidW5zdXBwb3J0ZWQgYXJtIHJlbG9jYXRpb24gKCVkKSIsIHR5cGUpOwotICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIH0KICNlbGlmIGRlZmluZWQoSE9TVF9NNjhLKQogICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgIGNoYXIgcmVsbmFtZVsyNTZdOwpAQCAtMjgxMCw2ICsyNTY4LDggQEAgdm9pZCBn ZW5fY29kZShjb25zdCBjaGFyICpuYW1lLCBob3N0X3Vsb25nIG9mZnNldCwgaG9zdF91bG9uZyBz aXplLAogCQkgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyNlbGlmIGRl ZmluZWQoSE9TVF9BUk0pCisgICAgZXJyb3IoImR5bmdlbiB0YXJnZXRzIG5vdCBzdXBwb3J0ZWQg b24gQVJNIik7CiAjZWxzZQogI2Vycm9yIHVuc3VwcG9ydGVkIENQVQogI2VuZGlmCkBAIC0yODY4 LDU5ICsyNjI4LDcgQEAgaW50IGdlbl9maWxlKEZJTEUgKm91dGZpbGUsIGludCBvdXRfdHlwZSkK ICAgICAgICAgLyogZ2VuZXJhdGUgYmlnIGNvZGUgZ2VuZXJhdGlvbiBzd2l0Y2ggKi8KIAogI2lm ZGVmIEhPU1RfQVJNCi0jZXJyb3IgYnJva2VuCi0gICAgICAgIC8qIFdlIG5lZWQgdG8ga25vdyB0 aGUgc2l6ZSBvZiBhbGwgdGhlIG9wcyBzbyB3ZSBjYW4gZmlndXJlIG91dCB3aGVuCi0gICAgICAg ICAgIHRvIGVtaXQgY29uc3RhbnQgcG9vbHMuICBUaGlzIG11c3QgYmUgY29uc2lzdGVudCB3aXRo IG9wYy5oLiAgKi8KLWZwcmludGYob3V0ZmlsZSwKLSJzdGF0aWMgY29uc3QgdWludDMyX3QgYXJt X29wY19zaXplW10gPSB7XG4iCi0iICAwLFxuIiAvKiBlbmQgKi8KLSIgIDAsXG4iIC8qIG5vcCAq LwotIiAgMCxcbiIgLyogbm9wMSAqLwotIiAgMCxcbiIgLyogbm9wMiAqLwotIiAgMCxcbiIpOyAv KiBub3AzICovCi0gICAgICAgIGZvcihpID0gMCwgc3ltID0gc3ltdGFiOyBpIDwgbmJfc3ltczsg aSsrLCBzeW0rKykgewotICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKLSAgICAgICAgICAg IG5hbWUgPSBnZXRfc3ltX25hbWUoc3ltKTsKLSAgICAgICAgICAgIGlmIChzdHJzdGFydChuYW1l LCBPUF9QUkVGSVgsIE5VTEwpKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihvdXRmaWxlLCAi ICAlZCxcbiIsIHN5bS0+c3Rfc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0JfQotZnByaW50ZihvdXRm aWxlLAotIn07XG4iKTsKLSNlbmRpZgotCi0jaWZkZWYgSE9TVF9BUk0KLSNlcnJvciBicm9rZW4K LS8qIEFybSBpcyB0cmlja3kgYmVjYXVzZSBpdCB1c2VzIGNvbnN0YW50IHBvb2xzIGZvciBsb2Fk aW5nIGltbWVkaWF0ZSB2YWx1ZXMuCi0gICBXZSBhc3N1bWUgKGFuZCByZXF1aXJlKSBlYWNoIGZ1 bmN0aW9uIGlzIGNvZGUgZm9sbG93ZWQgYnkgYSBjb25zdGFudCBwb29sLgotICAgQWxsIHRoZSBv cHMgYXJlIHNtYWxsIHNvIHRoaXMgc2hvdWxkIGJlIG9rLiAgRm9yIGVhY2ggb3Agd2UgZmlndXJl Ci0gICBvdXQgaG93IG11Y2ggInNwYXJlIiByYW5nZSB3ZSBoYXZlIGluIHRoZSBsb2FkIGluc3Ry dWN0aW9ucy4gIFRoaXMgYWxsb3dzCi0gICB1cyB0byBpbnNlcnQgc3Vic2VxdWVudCBvcHMgaW4g YmV0d2VlbiB0aGUgb3AgYW5kIHRoZSBjb25zdGFudCBwb29sLAotICAgZWxpbWluYXRpbmcgdGhl IG5lZWVkIHRvIGp1bXAgYXJvdW5kIHRoZSBwb29sLgotCi0gICBXZSBjdXJyZW50bHkgZ2VuZXJh dGU6Ci0KLSAgIFsgRm9yIHRoaXMgZXhhbXBsZSB3ZSBhc3N1bWUgbWVyZ2luZyB3b3VsZCBtb3Zl IG9wMV9wb29sIG91dCBvZiByYW5nZS4KLSAgICAgSW4gcHJhY3RpY2Ugd2Ugc2hvdWxkIGJlIGFi bGUgdG8gY29tYmluZSBtYW55IG9wcyBiZWZvcmUgdGhlIG9mZnNldAotICAgICBsaW1pdHMgYXJl IHJlYWNoZWQuIF0KLSAgIG9wMV9jb2RlOwotICAgb3AyX2NvZGU7Ci0gICBnb3RvIG9wMzsKLSAg IG9wMl9wb29sOwotICAgb3AxX3Bvb2w7Ci1vcDM6Ci0gICBvcDNfY29kZTsKLSAgIHJldDsKLSAg IG9wM19wb29sOwotCi0gICBJZGVhbGx5IHdlJ2QgcHV0IG9wMV9wb29sIGJlZm9yZSBvcDJfcG9v bCwgYnV0IHRoYXQgcmVxdWlyZXMgdHdvIHBhc3Nlcy4KLSAqLwotZnByaW50ZihvdXRmaWxlLAot IiAgICB1aW50OF90ICpsYXN0X2dlbl9jb2RlX3B0ciA9IGdlbl9jb2RlX2J1ZjtcbiIKLSIgICAg TERSRW50cnkgKmFybV9sZHJfcHRyID0gYXJtX2xkcl90YWJsZTtcbiIKLSIgICAgdWludDMyX3Qg KmFybV9kYXRhX3B0ciA9IGFybV9kYXRhX3RhYmxlICsgQVJNX0xEUl9UQUJMRV9TSVpFO1xuIgot LyogSW5pdGlhbGlzZSB0aGUgcGFybWlzc2libGUgcG9vbCBvZmZzZXQgdG8gYW4gYXJiaXRhcnkg bGFyZ2UgdmFsdWUuICAqLwotIiAgICB1aW50OF90ICphcm1fcG9vbF9wdHIgPSBnZW5fY29kZV9i dWYgKyAweDEwMDAwMDA7XG4iKTsKKyAgICBlcnJvcigiZHluZ2VuIHRhcmdldHMgbm90IHN1cHBv cnRlZCBvbiBBUk0iKTsKICNlbmRpZgogI2lmZGVmIEhPU1RfSUE2NAogI2Vycm9yIGJyb2tlbgpA QCAtMjk4MSwyMCArMjY4OSw2IEBAIGZwcmludGYob3V0ZmlsZSwKICAgICB9CiAjZW5kaWYKIAot I2lmZGVmIEhPU1RfQVJNCi0jZXJyb3IgYnJva2VuCi0vKiBHZW5lcmF0ZSBjb25zdGFudCBwb29s IGlmIG5lZWRlZCAqLwotZnByaW50ZihvdXRmaWxlLAotIiAgICAgICAgICAgIGlmIChnZW5fY29k ZV9wdHIgKyBhcm1fb3BjX3NpemVbKm9wY19wdHJdID49IGFybV9wb29sX3B0cikge1xuIgotIiAg ICAgICAgICAgICAgICBnZW5fY29kZV9wdHIgPSBhcm1fZmx1c2hfbGRyKGdlbl9jb2RlX3B0ciwg YXJtX2xkcl90YWJsZSwgIgotImFybV9sZHJfcHRyLCBhcm1fZGF0YV9wdHIsIGFybV9kYXRhX3Rh YmxlICsgQVJNX0xEUl9UQUJMRV9TSVpFLCAxKTtcbiIKLSIgICAgICAgICAgICAgICAgbGFzdF9n ZW5fY29kZV9wdHIgPSBnZW5fY29kZV9wdHI7XG4iCi0iICAgICAgICAgICAgICAgIGFybV9sZHJf cHRyID0gYXJtX2xkcl90YWJsZTtcbiIKLSIgICAgICAgICAgICAgICAgYXJtX2RhdGFfcHRyID0g YXJtX2RhdGFfdGFibGUgKyBBUk1fTERSX1RBQkxFX1NJWkU7XG4iCi0iICAgICAgICAgICAgICAg IGFybV9wb29sX3B0ciA9IGdlbl9jb2RlX3B0ciArIDB4MTAwMDAwMDtcbiIKLSIgICAgICAgICAg ICB9XG4iKTsKLSNlbmRpZgotCiAgICAgICAgIGZvcihpID0gMCwgc3ltID0gc3ltdGFiOyBpIDwg bmJfc3ltczsgaSsrLCBzeW0rKykgewogICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKICAg ICAgICAgICAgIG5hbWUgPSBnZXRfc3ltX25hbWUoc3ltKTsKZGlmZiAtLWdpdCBhL2V4ZWMtYWxs LmggYi9leGVjLWFsbC5oCmluZGV4IGQ0ZGVhMWQuLmJiYTIxNzggMTAwNjQ0Ci0tLSBhL2V4ZWMt YWxsLmgKKysrIGIvZXhlYy1hbGwuaApAQCAtMTQ0LDcgKzE0NCw3IEBAIHN0YXRpYyBpbmxpbmUg aW50IHRsYl9zZXRfcGFnZShDUFVTdGF0ZSAqZW52LCB0YXJnZXRfdWxvbmcgdmFkZHIsCiAKICNk ZWZpbmUgQ09ERV9HRU5fTUFYX0JMT0NLUyAgICAoQ09ERV9HRU5fQlVGRkVSX1NJWkUgLyBDT0RF X0dFTl9BVkdfQkxPQ0tfU0laRSkKIAotI2lmIGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmlu ZWQoX194ODZfNjRfXykKKyNpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9feDg2 XzY0X18pIHx8IGRlZmluZWQoX19hcm1fXykKICNkZWZpbmUgVVNFX0RJUkVDVF9KVU1QCiAjZW5k aWYKICNpZiBkZWZpbmVkKF9faTM4Nl9fKSAmJiAhZGVmaW5lZChfV0lOMzIpCkBAIC0yNDMsNiAr MjQzLDIyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0Yl9zZXRfam1wX3RhcmdldDEodW5zaWduZWQg bG9uZyBqbXBfYWRkciwgdW5zaWduZWQgbG9uZyBhZGRyCiAgICAgKih1aW50MzJfdCAqKWptcF9h ZGRyID0gYWRkciAtIChqbXBfYWRkciArIDQpOwogICAgIC8qIG5vIG5lZWQgdG8gZmx1c2ggaWNh Y2hlIGV4cGxpY2l0ZWx5ICovCiB9CisjZWxpZiBkZWZpbmVkKF9fYXJtX18pCitzdGF0aWMgaW5s aW5lIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVk IGxvbmcgc3RvcCkKK3sKKyAgICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9iZWcgX19hc20gKCJh MSIpID0gc3RhcnQ7CisgICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfZW5kIF9fYXNtICgiYTIi KSA9IHN0b3A7CisgICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfZmxnIF9fYXNtICgiYTMiKSA9 IDA7CisgICAgX19hc20gX192b2xhdGlsZV9fICgic3dpIDB4OWYwMDAyIiA6IDogInIiIChfYmVn KSwgInIiIChfZW5kKSwgInIiIChfZmxnKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Yl9z ZXRfam1wX3RhcmdldDEodW5zaWduZWQgbG9uZyBqbXBfYWRkciwgdW5zaWduZWQgbG9uZyBhZGRy KQoreworICAgIC8qIHdlIGNvdWxkIHVzZSBhIGxkciBwYywgW3BjLCAjLTRdIGtpbmQgb2YgYnJh bmNoIGFuZCBhdm9pZCB0aGUgZmx1c2ggKi8KKyAgICAqKHVpbnQzMl90ICopam1wX2FkZHIgfD0g KChhZGRyIC0gKGptcF9hZGRyICsgOCkpID4+IDIpICYgMHhmZmZmZmY7CisgICAgLyogZmx1c2gg aWNhY2hlICovCisgICAgZmx1c2hfaWNhY2hlX3JhbmdlKGptcF9hZGRyLCBqbXBfYWRkciArIDQp OworfQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0Yl9zZXRfam1wX3RhcmdldChUcmFu c2xhdGlvbkJsb2NrICp0YiwKZGlmZiAtLWdpdCBhL3RjZy9SRUFETUUgYi90Y2cvUkVBRE1FCmlu ZGV4IGMyN2M1YWIuLjUxNzA5YTEgMTAwNjQ0Ci0tLSBhL3RjZy9SRUFETUUKKysrIGIvdGNnL1JF QURNRQpAQCAtNzUsNyArNzUsNyBAQCBkZXBlbmRpbmcgb24gdGhlaXIgZGVjbGFyYXRpb25zKS4K ICogSGVscGVyczoKIAogVXNpbmcgdGhlIHRjZ19nZW5faGVscGVyX3hfeSBpdCBpcyBwb3NzaWJs ZSB0byBjYWxsIGFueSBmdW5jdGlvbgotdGFraW5nIGkzMiwgaTY0IG9yIHBvaW50ZXIgdHlwZXMg dHlwZXMuIEJlZm9yZSBjYWxsaW5nIGFuIGhlbHBlciwgYWxsCit0YWtpbmcgaTMyLCBpNjQgb3Ig cG9pbnRlciB0eXBlcy4gQmVmb3JlIGNhbGxpbmcgYW4gaGVscGVyLCBhbGwKIGdsb2JhbHMgYXJl IHN0b3JlZCBhdCB0aGVpciBjYW5vbmljYWwgbG9jYXRpb24gYW5kIGl0IGlzIGFzc3VtZWQgdGhh dAogdGhlIGZ1bmN0aW9uIGNhbiBtb2RpZnkgdGhlbS4gSW4gdGhlIGZ1dHVyZSwgZnVuY3Rpb24g bW9kaWZpZXJzIHdpbGwKIGJlIGFsbG93ZWQgdG8gdGVsbCB0aGF0IHRoZSBoZWxwZXIgZG9lcyBu b3QgcmVhZCBvciB3cml0ZSBzb21lIGdsb2JhbHMuCmRpZmYgLS1naXQgYS90Y2cvYXJtL3RjZy10 YXJnZXQuYyBiL3RjZy9hcm0vdGNnLXRhcmdldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjc0MjAxOWQKLS0tIC9kZXYvbnVsbAorKysgYi90Y2cvYXJtL3RjZy10YXJnZXQu YwpAQCAtMCwwICsxLDE1MjQgQEAKKy8qCisgKiBUaW55IENvZGUgR2VuZXJhdG9yIGZvciBRRU1V CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFuZHJ6ZWogWmFib3Jvd3NraQorICoKKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0 aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgor ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug c2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4K KyAqLworY29uc3QgY2hhciAqdGNnX3RhcmdldF9yZWdfbmFtZXNbVENHX1RBUkdFVF9OQl9SRUdT XSA9IHsKKyAgICAiJXIwIiwKKyAgICAiJXIxIiwKKyAgICAiJXIyIiwKKyAgICAiJXIzIiwKKyAg ICAiJXI0IiwKKyAgICAiJXI1IiwKKyAgICAiJXI2IiwKKyAgICAiJXI3IiwKKyAgICAiJXI4IiwK KyAgICAiJXI5IiwKKyAgICAiJXIxMCIsCisgICAgIiVyMTEiLAorICAgICIlcjEyIiwKKyAgICAi JXIxMyIsCit9OworCitpbnQgdGNnX3RhcmdldF9yZWdfYWxsb2Nfb3JkZXJbXSA9IHsKKyAgICBU Q0dfUkVHX1IwLAorICAgIFRDR19SRUdfUjEsCisgICAgVENHX1JFR19SMiwKKyAgICBUQ0dfUkVH X1IzLAorICAgIFRDR19SRUdfUjQsCisgICAgVENHX1JFR19SNSwKKyAgICBUQ0dfUkVHX1I2LAor ICAgIFRDR19SRUdfUjcsCisgICAgVENHX1JFR19SOCwKKyAgICBUQ0dfUkVHX1I5LAorICAgIFRD R19SRUdfUjEwLAorICAgIFRDR19SRUdfUjExLAorICAgIFRDR19SRUdfUjEyLAorICAgIFRDR19S RUdfUjEzLAorfTsKKworY29uc3QgaW50IHRjZ190YXJnZXRfY2FsbF9pYXJnX3JlZ3NbNF0gPSB7 CisgICAgVENHX1JFR19SMCwgVENHX1JFR19SMSwgVENHX1JFR19SMiwgVENHX1JFR19SMworfTsK K2NvbnN0IGludCB0Y2dfdGFyZ2V0X2NhbGxfb2FyZ19yZWdzWzJdID0geworICAgIFRDR19SRUdf UjAsIFRDR19SRUdfUjEKK307CisKK3N0YXRpYyB2b2lkIHBhdGNoX3JlbG9jKHVpbnQ4X3QgKmNv ZGVfcHRyLCBpbnQgdHlwZSwgCisgICAgICAgICAgICAgICAgdGNnX3RhcmdldF9sb25nIHZhbHVl LCB0Y2dfdGFyZ2V0X2xvbmcgYWRkZW5kKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh c2UgUl9BUk1fQUJTMzI6CisgICAgICAgICoodWludDMyX3QgKikgY29kZV9wdHIgPSB2YWx1ZTsK KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJfQVJNX0NBTEw6CisgICAgY2FzZSBSX0FSTV9K VU1QMjQ6CisgICAgZGVmYXVsdDoKKyAgICAgICAgdGNnX2Fib3J0KCk7CisKKyAgICBjYXNlIFJf QVJNX1BDMjQ6CisgICAgICAgICoodWludDMyX3QgKikgY29kZV9wdHIgfD0KKyAgICAgICAgICAg ICAgICAoKHZhbHVlIC0gKCh0Y2dfdGFyZ2V0X2xvbmcpIGNvZGVfcHRyICsgOCkpID4+IDIpICYg MHhmZmZmZmY7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworLyogbWF4aW11bSBudW1iZXIg b2YgcmVnaXN0ZXIgdXNlZCBmb3IgaW5wdXQgZnVuY3Rpb24gYXJndW1lbnRzICovCitzdGF0aWMg aW5saW5lIGludCB0Y2dfdGFyZ2V0X2dldF9jYWxsX2lhcmdfcmVnc19jb3VudChpbnQgZmxhZ3Mp Cit7CisgICAgcmV0dXJuIDQ7Cit9CisKKyNkZWZpbmUgVVNFX1RMQgorCisvKiBwYXJzZSB0YXJn ZXQgc3BlY2lmaWMgY29uc3RyYWludHMgKi8KK2ludCB0YXJnZXRfcGFyc2VfY29uc3RyYWludChU Q0dBcmdDb25zdHJhaW50ICpjdCwgY29uc3QgY2hhciAqKnBjdF9zdHIpCit7CisgICAgY29uc3Qg Y2hhciAqY3Rfc3RyOworCisgICAgY3Rfc3RyID0gKnBjdF9zdHI7CisgICAgc3dpdGNoIChjdF9z dHJbMF0pIHsKKyAgICBjYXNlICdyJzoKKyNpZm5kZWYgQ09ORklHX1NPRlRNTVUKKyAgICBjYXNl ICdkJzoKKyAgICBjYXNlICdEJzoKKyAgICBjYXNlICd4JzoKKyAgICBjYXNlICdYJzoKKyNlbmRp ZgorICAgICAgICBjdC0+Y3QgfD0gVENHX0NUX1JFRzsKKyAgICAgICAgdGNnX3JlZ3NldF9zZXQz MihjdC0+dS5yZWdzLCAwLCAoMSA8PCBUQ0dfVEFSR0VUX05CX1JFR1MpIC0gMSk7CisgICAgICAg IGJyZWFrOworCisjaWZkZWYgQ09ORklHX1NPRlRNTVUKKyAgICBjYXNlICd4JzoKKyAgICAgICAg Y3QtPmN0IHw9IFRDR19DVF9SRUc7CisgICAgICAgIHRjZ19yZWdzZXRfc2V0MzIoY3QtPnUucmVn cywgMCwgKDEgPDwgVENHX1RBUkdFVF9OQl9SRUdTKSAtIDEpOworIyBpZmRlZiBVU0VfVExCCisg ICAgICAgIHRjZ19yZWdzZXRfcmVzZXRfcmVnKGN0LT51LnJlZ3MsIFRDR19SRUdfUjApOworICAg ICAgICB0Y2dfcmVnc2V0X3Jlc2V0X3JlZyhjdC0+dS5yZWdzLCBUQ0dfUkVHX1IxKTsKKyMgZW5k aWYKKyAgICAgICAgYnJlYWs7CisKKyAgICAvKiBxZW11X2xkL3N0IGRhdGFfcmVnICovCisgICAg Y2FzZSAnZCc6CisgICAgICAgIGN0LT5jdCB8PSBUQ0dfQ1RfUkVHOworICAgICAgICB0Y2dfcmVn c2V0X3NldDMyKGN0LT51LnJlZ3MsIDAsICgxIDw8IFRDR19UQVJHRVRfTkJfUkVHUykgLSAxKTsK KyAgICAgICAgLyogcjAgYW5kIG9wdGlvbmFsbHkgcjEgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0 aGUgYWRkcmVzcworICAgICAgICAgKiBzbyBkb24ndCB1c2UgdGhlc2UuICAqLworICAgICAgICB0 Y2dfcmVnc2V0X3Jlc2V0X3JlZyhjdC0+dS5yZWdzLCBUQ0dfUkVHX1IwKTsKKyMgaWYgVEFSR0VU X0xPTkdfQklUUyA9PSA2NCB8fCBkZWZpbmVkKFVTRV9UTEIpCisgICAgICAgIHRjZ19yZWdzZXRf cmVzZXRfcmVnKGN0LT51LnJlZ3MsIFRDR19SRUdfUjEpOworIyBlbmRpZgorICAgICAgICBicmVh azsKKworICAgIC8qIHFlbXVfbGQvc3Q2NCBkYXRhX3JlZzIgKi8KKyAgICBjYXNlICdEJzoKKyAg ICAgICAgY3QtPmN0IHw9IFRDR19DVF9SRUc7CisgICAgICAgIHRjZ19yZWdzZXRfc2V0MzIoY3Qt PnUucmVncywgMCwgKDEgPDwgVENHX1RBUkdFVF9OQl9SRUdTKSAtIDEpOworICAgICAgICAvKiBy MCwgcjEgYW5kIG9wdGlvbmFsbHkgcjIgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgYWRkcmVz cworICAgICAgICAgKiBhbmQgdGhlIGxvdyB3b3JkIG9mIGRhdGEsIHNvIGRvbid0IHVzZSB0aGVz ZS4gICovCisgICAgICAgIHRjZ19yZWdzZXRfcmVzZXRfcmVnKGN0LT51LnJlZ3MsIFRDR19SRUdf UjApOworICAgICAgICB0Y2dfcmVnc2V0X3Jlc2V0X3JlZyhjdC0+dS5yZWdzLCBUQ0dfUkVHX1Ix KTsKKyMgaWYgVEFSR0VUX0xPTkdfQklUUyA9PSA2NAorICAgICAgICB0Y2dfcmVnc2V0X3Jlc2V0 X3JlZyhjdC0+dS5yZWdzLCBUQ0dfUkVHX1IyKTsKKyMgZW5kaWYKKyAgICAgICAgYnJlYWs7CisK KyMgaWYgVEFSR0VUX0xPTkdfQklUUyA9PSA2NAorICAgIC8qIHFlbXVfbGQvc3QgYWRkcl9yZWcy ICovCisgICAgY2FzZSAnWCc6CisgICAgICAgIGN0LT5jdCB8PSBUQ0dfQ1RfUkVHOworICAgICAg ICB0Y2dfcmVnc2V0X3NldDMyKGN0LT51LnJlZ3MsIDAsICgxIDw8IFRDR19UQVJHRVRfTkJfUkVH UykgLSAxKTsKKyAgICAgICAgLyogcjAgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgbG93IHdv cmQgb2YgYmFzZSwgc28gZG9uJ3QgdXNlIGl0LiAgKi8KKyAgICAgICAgdGNnX3JlZ3NldF9yZXNl dF9yZWcoY3QtPnUucmVncywgVENHX1JFR19SMCk7CisjICBpZmRlZiBVU0VfVExCCisgICAgICAg IHRjZ19yZWdzZXRfcmVzZXRfcmVnKGN0LT51LnJlZ3MsIFRDR19SRUdfUjEpOworIyAgZW5kaWYK KyAgICAgICAgYnJlYWs7CisjIGVuZGlmCisjZW5kaWYKKworICAgIGNhc2UgJzEnOgorICAgICAg ICBjdC0+Y3QgfD0gVENHX0NUX1JFRzsKKyAgICAgICAgdGNnX3JlZ3NldF9zZXQzMihjdC0+dS5y ZWdzLCAwLCAoMSA8PCBUQ0dfVEFSR0VUX05CX1JFR1MpIC0gMSk7CisgICAgICAgIHRjZ19yZWdz ZXRfcmVzZXRfcmVnKGN0LT51LnJlZ3MsIFRDR19SRUdfUjApOworICAgICAgICBicmVhazsKKwor ICAgIGNhc2UgJzInOgorICAgICAgICBjdC0+Y3QgfD0gVENHX0NUX1JFRzsKKyAgICAgICAgdGNn X3JlZ3NldF9zZXQzMihjdC0+dS5yZWdzLCAwLCAoMSA8PCBUQ0dfVEFSR0VUX05CX1JFR1MpIC0g MSk7CisgICAgICAgIHRjZ19yZWdzZXRfcmVzZXRfcmVnKGN0LT51LnJlZ3MsIFRDR19SRUdfUjAp OworICAgICAgICB0Y2dfcmVnc2V0X3Jlc2V0X3JlZyhjdC0+dS5yZWdzLCBUQ0dfUkVHX1IxKTsK KyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gLTE7CisgICAg fQorICAgIGN0X3N0cisrOworICAgICpwY3Rfc3RyID0gY3Rfc3RyOworCisgICAgcmV0dXJuIDA7 Cit9CisKKy8qIHRlc3QgaWYgYSBjb25zdGFudCBtYXRjaGVzIHRoZSBjb25zdHJhaW50ICovCitz dGF0aWMgaW5saW5lIGludCB0Y2dfdGFyZ2V0X2NvbnN0X21hdGNoKHRjZ190YXJnZXRfbG9uZyB2 YWwsCisgICAgICAgICAgICAgICAgY29uc3QgVENHQXJnQ29uc3RyYWludCAqYXJnX2N0KQorewor ICAgIGludCBjdDsKKyAgICBjdCA9IGFyZ19jdC0+Y3Q7CisgICAgaWYgKGN0ICYgVENHX0NUX0NP TlNUKQorICAgICAgICByZXR1cm4gMTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQor CitlbnVtIGFybV9kYXRhX29wY19lIHsKKyAgICBBUklUSF9BTkQgPSAweDAsCisgICAgQVJJVEhf RU9SID0gMHgxLAorICAgIEFSSVRIX1NVQiA9IDB4MiwKKyAgICBBUklUSF9SU0IgPSAweDMsCisg ICAgQVJJVEhfQUREID0gMHg0LAorICAgIEFSSVRIX0FEQyA9IDB4NSwKKyAgICBBUklUSF9TQkMg PSAweDYsCisgICAgQVJJVEhfUlNDID0gMHg3LAorICAgIEFSSVRIX0NNUCA9IDB4YSwKKyAgICBB UklUSF9DTU4gPSAweGIsCisgICAgQVJJVEhfT1JSID0gMHhjLAorICAgIEFSSVRIX01PViA9IDB4 ZCwKKyAgICBBUklUSF9CSUMgPSAweGUsCisgICAgQVJJVEhfTVZOID0gMHhmLAorfTsKKworI2Rl ZmluZSBUT19DUFNSKG9wYykJCSgob3BjID09IEFSSVRIX0NNUCB8fCBvcGMgPT0gQVJJVEhfQ01O KSA8PCAyMCkKKworI2RlZmluZSBTSElGVF9JTU1fTFNMKGltKQkoKChpbSkgPDwgNykgfCAweDAw KQorI2RlZmluZSBTSElGVF9JTU1fTFNSKGltKQkoKChpbSkgPDwgNykgfCAweDIwKQorI2RlZmlu ZSBTSElGVF9JTU1fQVNSKGltKQkoKChpbSkgPDwgNykgfCAweDQwKQorI2RlZmluZSBTSElGVF9J TU1fUk9SKGltKQkoKChpbSkgPDwgNykgfCAweDYwKQorI2RlZmluZSBTSElGVF9SRUdfTFNMKHJz KQkoKChycykgPDwgOCkgfCAweDEwKQorI2RlZmluZSBTSElGVF9SRUdfTFNSKHJzKQkoKChycykg PDwgOCkgfCAweDMwKQorI2RlZmluZSBTSElGVF9SRUdfQVNSKHJzKQkoKChycykgPDwgOCkgfCAw eDUwKQorI2RlZmluZSBTSElGVF9SRUdfUk9SKHJzKQkoKChycykgPDwgOCkgfCAweDcwKQorCitl bnVtIGFybV9jb25kX2NvZGVfZSB7CisgICAgQ09ORF9FUSA9IDB4MCwKKyAgICBDT05EX05FID0g MHgxLAorICAgIENPTkRfQ1MgPSAweDIsCS8qIFVuc2lnbmVkIGdyZWF0ZXIgb3IgZXF1YWwgKi8K KyAgICBDT05EX0NDID0gMHgzLAkvKiBVbnNpZ25lZCBsZXNzIHRoYW4gKi8KKyAgICBDT05EX01J ID0gMHg0LAkvKiBOZWdhdGl2ZSAqLworICAgIENPTkRfUEwgPSAweDUsCS8qIFplcm8gb3IgZ3Jl YXRlciAqLworICAgIENPTkRfVlMgPSAweDYsCS8qIE92ZXJmbG93ICovCisgICAgQ09ORF9WQyA9 IDB4NywJLyogTm8gb3ZlcmZsb3cgKi8KKyAgICBDT05EX0hJID0gMHg4LAkvKiBVbnNpZ25lZCBn cmVhdGVyIHRoYW4gKi8KKyAgICBDT05EX0xTID0gMHg5LAkvKiBVbnNpZ25lZCBsZXNzIG9yIGVx dWFsICovCisgICAgQ09ORF9HRSA9IDB4YSwKKyAgICBDT05EX0xUID0gMHhiLAorICAgIENPTkRf R1QgPSAweGMsCisgICAgQ09ORF9MRSA9IDB4ZCwKKyAgICBDT05EX0FMID0gMHhlLAorfTsKKwor c3RhdGljIGNvbnN0IHVpbnQ4X3QgdGNnX2NvbmRfdG9fYXJtX2NvbmRbMTBdID0geworICAgIFtU Q0dfQ09ORF9FUV0gPSBDT05EX0VRLAorICAgIFtUQ0dfQ09ORF9ORV0gPSBDT05EX05FLAorICAg IFtUQ0dfQ09ORF9MVF0gPSBDT05EX0xULAorICAgIFtUQ0dfQ09ORF9HRV0gPSBDT05EX0dFLAor ICAgIFtUQ0dfQ09ORF9MRV0gPSBDT05EX0xFLAorICAgIFtUQ0dfQ09ORF9HVF0gPSBDT05EX0dU LAorICAgIC8qIHVuc2lnbmVkICovCisgICAgW1RDR19DT05EX0xUVV0gPSBDT05EX0NDLAorICAg IFtUQ0dfQ09ORF9HRVVdID0gQ09ORF9DUywKKyAgICBbVENHX0NPTkRfTEVVXSA9IENPTkRfTFMs CisgICAgW1RDR19DT05EX0dUVV0gPSBDT05EX0hJLAorfTsKKworc3RhdGljIGlubGluZSB2b2lk IHRjZ19vdXRfYngoVENHQ29udGV4dCAqcywgaW50IGNvbmQsIGludCBybikKK3sKKyAgICB0Y2df b3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHgwMTJmZmYxMCB8IHJuKTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkIHRjZ19vdXRfYihUQ0dDb250ZXh0ICpzLCBpbnQgY29uZCwgaW50MzJfdCBvZmZz ZXQpCit7CisgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MGEwMDAwMDAgfAorICAg ICAgICAgICAgICAgICAgICAoKChvZmZzZXQgLSA4KSA+PiAyKSAmIDB4MDBmZmZmZmYpKTsKK30K Kworc3RhdGljIGlubGluZSB2b2lkIHRjZ19vdXRfYmwoVENHQ29udGV4dCAqcywgaW50IGNvbmQs IGludDMyX3Qgb2Zmc2V0KQoreworICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAweDBi MDAwMDAwIHwKKyAgICAgICAgICAgICAgICAgICAgKCgob2Zmc2V0IC0gOCkgPj4gMikgJiAweDAw ZmZmZmZmKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0X2RhdF9yZWcoVENHQ29u dGV4dCAqcywKKyAgICAgICAgICAgICAgICBpbnQgY29uZCwgaW50IG9wYywgaW50IHJkLCBpbnQg cm4sIGludCBybSwgaW50IHNoaWZ0KQoreworICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkg fCAoMCA8PCAyNSkgfCAob3BjIDw8IDIxKSB8IFRPX0NQU1Iob3BjKSB8CisgICAgICAgICAgICAg ICAgICAgIChybiA8PCAxNikgfCAocmQgPDwgMTIpIHwgc2hpZnQgfCBybSk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCB0Y2dfb3V0X2RhdF9yZWcyKFRDR0NvbnRleHQgKnMsCisgICAgICAgICAg ICAgICAgaW50IGNvbmQsIGludCBvcGMwLCBpbnQgb3BjMSwgaW50IHJkMCwgaW50IHJkMSwKKyAg ICAgICAgICAgICAgICBpbnQgcm4wLCBpbnQgcm4xLCBpbnQgcm0wLCBpbnQgcm0xLCBpbnQgc2hp ZnQpCit7CisgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8ICgwIDw8IDI1KSB8IChvcGMw IDw8IDIxKSB8ICgxIDw8IDIwKSB8CisgICAgICAgICAgICAgICAgICAgIChybjAgPDwgMTYpIHwg KHJkMCA8PCAxMikgfCBzaGlmdCB8IHJtMCk7CisgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4 KSB8ICgwIDw8IDI1KSB8IChvcGMxIDw8IDIxKSB8CisgICAgICAgICAgICAgICAgICAgIChybjEg PDwgMTYpIHwgKHJkMSA8PCAxMikgfCBzaGlmdCB8IHJtMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZCB0Y2dfb3V0X2RhdF9pbW0oVENHQ29udGV4dCAqcywKKyAgICAgICAgICAgICAgICBpbnQg Y29uZCwgaW50IG9wYywgaW50IHJkLCBpbnQgcm4sIGludCBpbSkKK3sKKyAgICB0Y2dfb3V0MzIo cywgKGNvbmQgPDwgMjgpIHwgKDEgPDwgMjUpIHwgKG9wYyA8PCAyMSkgfAorICAgICAgICAgICAg ICAgICAgICAocm4gPDwgMTYpIHwgKHJkIDw8IDEyKSB8IGltKTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIHRjZ19vdXRfbW92aTMyKFRDR0NvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgaW50 IGNvbmQsIGludCByZCwgaW50MzJfdCBhcmcpCit7CisgICAgaW50IG9mZnNldCA9ICh1aW50MzJf dCkgYXJnIC0gKCh1aW50MzJfdCkgcy0+Y29kZV9wdHIgKyA4KTsKKworICAgIC8qIFRPRE86IFRo aXMgaXMgdmVyeSBzdWJvcHRpbWFsLCB3ZSBjYW4gZWFzaWx5IGhhdmUgYSBjb25zdGFudAorICAg ICAqIHBvb2wgc29tZXdoZXJlIGFmdGVyIGFsbCB0aGUgaW5zdHJ1Y3Rpb25zLiAgKi8KKworICAg IGlmIChhcmcgPCAwICYmIGFyZyA+IC0weDEwMCkKKyAgICAgICAgcmV0dXJuIHRjZ19vdXRfZGF0 X2ltbShzLCBjb25kLCBBUklUSF9NVk4sIHJkLCAwLCAofmFyZykgJiAweGZmKTsKKworICAgIGlm IChvZmZzZXQgPCAweDEwMCAmJiBvZmZzZXQgPiAtMHgxMDApCisgICAgICAgIHJldHVybiBvZmZz ZXQgPj0gMCA/CisgICAgICAgICAgICAgICAgdGNnX291dF9kYXRfaW1tKHMsIGNvbmQsIEFSSVRI X0FERCwgcmQsIDE1LCBvZmZzZXQpIDoKKyAgICAgICAgICAgICAgICB0Y2dfb3V0X2RhdF9pbW0o cywgY29uZCwgQVJJVEhfU1VCLCByZCwgMTUsIC1vZmZzZXQpOworCisgICAgdGNnX291dF9kYXRf aW1tKHMsIGNvbmQsIEFSSVRIX01PViwgcmQsIDAsIGFyZyAmIDB4ZmYpOworICAgIGlmIChhcmcg JiAweDAwMDBmZjAwKQorICAgICAgICB0Y2dfb3V0X2RhdF9pbW0ocywgY29uZCwgQVJJVEhfT1JS LCByZCwgcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAoKGFyZyA+PiAgOCkgJiAweGZmKSB8 IDB4YzAwKTsKKyAgICBpZiAoYXJnICYgMHgwMGZmMDAwMCkKKyAgICAgICAgdGNnX291dF9kYXRf aW1tKHMsIGNvbmQsIEFSSVRIX09SUiwgcmQsIHJkLAorICAgICAgICAgICAgICAgICAgICAgICAg KChhcmcgPj4gMTYpICYgMHhmZikgfCAweDgwMCk7CisgICAgaWYgKGFyZyAmIDB4ZmYwMDAwMDAp CisgICAgICAgIHRjZ19vdXRfZGF0X2ltbShzLCBjb25kLCBBUklUSF9PUlIsIHJkLCByZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICgoYXJnID4+IDI0KSAmIDB4ZmYpIHwgMHg0MDApOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9tdWwzMihUQ0dDb250ZXh0ICpzLAorICAgICAg ICAgICAgICAgIGludCBjb25kLCBpbnQgcmQsIGludCBycywgaW50IHJtKQoreworICAgIGlmIChy ZCAhPSBybSkKKyAgICAgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IChyZCA8PCAxNikg fCAoMCA8PCAxMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgKHJzIDw8IDgpIHwgMHg5MCB8 IHJtKTsKKyAgICBlbHNlIGlmIChyZCAhPSBycykKKyAgICAgICAgdGNnX291dDMyKHMsIChjb25k IDw8IDI4KSB8IChyZCA8PCAxNikgfCAoMCA8PCAxMikgfAorICAgICAgICAgICAgICAgICAgICAg ICAgKHJtIDw8IDgpIHwgMHg5MCB8IHJzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGNnX291dF9k YXRfcmVnKHMsIGNvbmQsIEFSSVRIX01PViwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRDR19S RUdfUjgsIDAsIHJtLCBTSElGVF9JTU1fTFNMKDApKTsKKyAgICAgICAgdGNnX291dDMyKHMsIChj b25kIDw8IDI4KSB8IChyZCA8PCAxNikgfCAoMCA8PCAxMikgfAorICAgICAgICAgICAgICAgICAg ICAgICAgKHJzIDw8IDgpIHwgMHg5OCk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQg dGNnX291dF91bXVsbDMyKFRDR0NvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgaW50IGNvbmQs IGludCByZDAsIGludCByZDEsIGludCBycywgaW50IHJtKQoreworICAgIGlmIChyZDAgIT0gcm0g JiYgcmQxICE9IHJtKQorICAgICAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHg4MDAw OTAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKHJkMSA8PCAxNikgfCAocmQwIDw8IDEyKSB8 IChycyA8PCA4KSB8IHJtKTsKKyAgICBlbHNlIGlmIChyZDAgIT0gcnMgJiYgcmQxICE9IHJzKQor ICAgICAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHg4MDAwOTAgfAorICAgICAgICAg ICAgICAgICAgICAgICAgKHJkMSA8PCAxNikgfCAocmQwIDw8IDEyKSB8IChybSA8PCA4KSB8IHJz KTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGNnX291dF9kYXRfcmVnKHMsIGNvbmQsIEFSSVRIX01P ViwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRDR19SRUdfUjgsIDAsIHJtLCBTSElGVF9JTU1f TFNMKDApKTsKKyAgICAgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4ODAwMDk4IHwK KyAgICAgICAgICAgICAgICAgICAgICAgIChyZDEgPDwgMTYpIHwgKHJkMCA8PCAxMikgfCAocnMg PDwgOCkpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZ19vdXRfc211bGwzMihU Q0dDb250ZXh0ICpzLAorICAgICAgICAgICAgICAgIGludCBjb25kLCBpbnQgcmQwLCBpbnQgcmQx LCBpbnQgcnMsIGludCBybSkKK3sKKyAgICBpZiAocmQwICE9IHJtICYmIHJkMSAhPSBybSkKKyAg ICAgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4YzAwMDkwIHwKKyAgICAgICAgICAg ICAgICAgICAgICAgIChyZDEgPDwgMTYpIHwgKHJkMCA8PCAxMikgfCAocnMgPDwgOCkgfCBybSk7 CisgICAgZWxzZSBpZiAocmQwICE9IHJzICYmIHJkMSAhPSBycykKKyAgICAgICAgdGNnX291dDMy KHMsIChjb25kIDw8IDI4KSB8IDB4YzAwMDkwIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChy ZDEgPDwgMTYpIHwgKHJkMCA8PCAxMikgfCAocm0gPDwgOCkgfCBycyk7CisgICAgZWxzZSB7Cisg ICAgICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBjb25kLCBBUklUSF9NT1YsCisgICAgICAgICAgICAg ICAgICAgICAgICBUQ0dfUkVHX1I4LCAwLCBybSwgU0hJRlRfSU1NX0xTTCgwKSk7CisgICAgICAg IHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAweGMwMDA5OCB8CisgICAgICAgICAgICAgICAg ICAgICAgICAocmQxIDw8IDE2KSB8IChyZDAgPDwgMTIpIHwgKHJzIDw8IDgpKTsKKyAgICB9Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0X2xkMzJfMTIoVENHQ29udGV4dCAqcywgaW50 IGNvbmQsCisgICAgICAgICAgICAgICAgaW50IHJkLCBpbnQgcm4sIHRjZ190YXJnZXRfbG9uZyBp bSkKK3sKKyAgICBpZiAoaW0gPj0gMCkKKyAgICAgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4 KSB8IDB4MDU5MDAwMDAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKHJuIDw8IDE2KSB8IChy ZCA8PCAxMikgfCAoaW0gJiAweGZmZikpOworICAgIGVsc2UKKyAgICAgICAgdGNnX291dDMyKHMs IChjb25kIDw8IDI4KSB8IDB4MDUxMDAwMDAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKHJu IDw8IDE2KSB8IChyZCA8PCAxMikgfCAoKC1pbSkgJiAweGZmZikpOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgdGNnX291dF9zdDMyXzEyKFRDR0NvbnRleHQgKnMsIGludCBjb25kLAorICAgICAg ICAgICAgICAgIGludCByZCwgaW50IHJuLCB0Y2dfdGFyZ2V0X2xvbmcgaW0pCit7CisgICAgaWYg KGltID49IDApCisgICAgICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAweDA1ODAwMDAw IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChybiA8PCAxNikgfCAocmQgPDwgMTIpIHwgKGlt ICYgMHhmZmYpKTsKKyAgICBlbHNlCisgICAgICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkg fCAweDA1MDAwMDAwIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChybiA8PCAxNikgfCAocmQg PDwgMTIpIHwgKCgtaW0pICYgMHhmZmYpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZ19v dXRfbGQzMl9yKFRDR0NvbnRleHQgKnMsIGludCBjb25kLAorICAgICAgICAgICAgICAgIGludCBy ZCwgaW50IHJuLCBpbnQgcm0pCit7CisgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4 MDc5MDAwMDAgfAorICAgICAgICAgICAgICAgICAgICAocm4gPDwgMTYpIHwgKHJkIDw8IDEyKSB8 IHJtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZ19vdXRfc3QzMl9yKFRDR0NvbnRleHQg KnMsIGludCBjb25kLAorICAgICAgICAgICAgICAgIGludCByZCwgaW50IHJuLCBpbnQgcm0pCit7 CisgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MDc4MDAwMDAgfAorICAgICAgICAg ICAgICAgICAgICAocm4gPDwgMTYpIHwgKHJkIDw8IDEyKSB8IHJtKTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkIHRjZ19vdXRfbGQxNnVfOChUQ0dDb250ZXh0ICpzLCBpbnQgY29uZCwKKyAgICAg ICAgICAgICAgICBpbnQgcmQsIGludCBybiwgdGNnX3RhcmdldF9sb25nIGltKQoreworICAgIGlm IChpbSA+PSAwKQorICAgICAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHgwMWQwMDBi MCB8CisgICAgICAgICAgICAgICAgICAgICAgICAocm4gPDwgMTYpIHwgKHJkIDw8IDEyKSB8Cisg ICAgICAgICAgICAgICAgICAgICAgICAoKGltICYgMHhmMCkgPDwgNCkgfCAoaW0gJiAweGYpKTsK KyAgICBlbHNlCisgICAgICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAweDAxNTAwMGIw IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChybiA8PCAxNikgfCAocmQgPDwgMTIpIHwKKyAg ICAgICAgICAgICAgICAgICAgICAgICgoKC1pbSkgJiAweGYwKSA8PCA0KSB8ICgoLWltKSAmIDB4 ZikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9zdDE2dV84KFRDR0NvbnRleHQg KnMsIGludCBjb25kLAorICAgICAgICAgICAgICAgIGludCByZCwgaW50IHJuLCB0Y2dfdGFyZ2V0 X2xvbmcgaW0pCit7CisgICAgaWYgKGltID49IDApCisgICAgICAgIHRjZ19vdXQzMihzLCAoY29u ZCA8PCAyOCkgfCAweDAxYzAwMGIwIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChybiA8PCAx NikgfCAocmQgPDwgMTIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgoaW0gJiAweGYwKSA8 PCA0KSB8IChpbSAmIDB4ZikpOworICAgIGVsc2UKKyAgICAgICAgdGNnX291dDMyKHMsIChjb25k IDw8IDI4KSB8IDB4MDE0MDAwYjAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKHJuIDw8IDE2 KSB8IChyZCA8PCAxMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCgoLWltKSAmIDB4ZjAp IDw8IDQpIHwgKCgtaW0pICYgMHhmKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0 X2xkMTZ1X3IoVENHQ29udGV4dCAqcywgaW50IGNvbmQsCisgICAgICAgICAgICAgICAgaW50IHJk LCBpbnQgcm4sIGludCBybSkKK3sKKyAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHgw MTkwMDBiMCB8CisgICAgICAgICAgICAgICAgICAgIChybiA8PCAxNikgfCAocmQgPDwgMTIpIHwg cm0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9zdDE2dV9yKFRDR0NvbnRleHQg KnMsIGludCBjb25kLAorICAgICAgICAgICAgICAgIGludCByZCwgaW50IHJuLCBpbnQgcm0pCit7 CisgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MDE4MDAwYjAgfAorICAgICAgICAg ICAgICAgICAgICAocm4gPDwgMTYpIHwgKHJkIDw8IDEyKSB8IHJtKTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkIHRjZ19vdXRfbGQxNnNfOChUQ0dDb250ZXh0ICpzLCBpbnQgY29uZCwKKyAgICAg ICAgICAgICAgICBpbnQgcmQsIGludCBybiwgdGNnX3RhcmdldF9sb25nIGltKQoreworICAgIGlm IChpbSA+PSAwKQorICAgICAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHgwMWQwMDBm MCB8CisgICAgICAgICAgICAgICAgICAgICAgICAocm4gPDwgMTYpIHwgKHJkIDw8IDEyKSB8Cisg ICAgICAgICAgICAgICAgICAgICAgICAoKGltICYgMHhmMCkgPDwgNCkgfCAoaW0gJiAweGYpKTsK KyAgICBlbHNlCisgICAgICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAweDAxNTAwMGYw IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChybiA8PCAxNikgfCAocmQgPDwgMTIpIHwKKyAg ICAgICAgICAgICAgICAgICAgICAgICgoKC1pbSkgJiAweGYwKSA8PCA0KSB8ICgoLWltKSAmIDB4 ZikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9zdDE2c184KFRDR0NvbnRleHQg KnMsIGludCBjb25kLAorICAgICAgICAgICAgICAgIGludCByZCwgaW50IHJuLCB0Y2dfdGFyZ2V0 X2xvbmcgaW0pCit7CisgICAgaWYgKGltID49IDApCisgICAgICAgIHRjZ19vdXQzMihzLCAoY29u ZCA8PCAyOCkgfCAweDAxYzAwMGYwIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChybiA8PCAx NikgfCAocmQgPDwgMTIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgoaW0gJiAweGYwKSA8 PCA0KSB8IChpbSAmIDB4ZikpOworICAgIGVsc2UKKyAgICAgICAgdGNnX291dDMyKHMsIChjb25k IDw8IDI4KSB8IDB4MDE0MDAwZjAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKHJuIDw8IDE2 KSB8IChyZCA8PCAxMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCgoLWltKSAmIDB4ZjAp IDw8IDQpIHwgKCgtaW0pICYgMHhmKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0 X2xkMTZzX3IoVENHQ29udGV4dCAqcywgaW50IGNvbmQsCisgICAgICAgICAgICAgICAgaW50IHJk LCBpbnQgcm4sIGludCBybSkKK3sKKyAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHgw MTkwMDBmMCB8CisgICAgICAgICAgICAgICAgICAgIChybiA8PCAxNikgfCAocmQgPDwgMTIpIHwg cm0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9zdDE2c19yKFRDR0NvbnRleHQg KnMsIGludCBjb25kLAorICAgICAgICAgICAgICAgIGludCByZCwgaW50IHJuLCBpbnQgcm0pCit7 CisgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MDE4MDAwZjAgfAorICAgICAgICAg ICAgICAgICAgICAocm4gPDwgMTYpIHwgKHJkIDw8IDEyKSB8IHJtKTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkIHRjZ19vdXRfbGQ4XzEyKFRDR0NvbnRleHQgKnMsIGludCBjb25kLAorICAgICAg ICAgICAgICAgIGludCByZCwgaW50IHJuLCB0Y2dfdGFyZ2V0X2xvbmcgaW0pCit7CisgICAgaWYg KGltID49IDApCisgICAgICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAweDA1ZDAwMDAw IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChybiA8PCAxNikgfCAocmQgPDwgMTIpIHwgKGlt ICYgMHhmZmYpKTsKKyAgICBlbHNlCisgICAgICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkg fCAweDA1NTAwMDAwIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChybiA8PCAxNikgfCAocmQg PDwgMTIpIHwgKCgtaW0pICYgMHhmZmYpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZ19v dXRfc3Q4XzEyKFRDR0NvbnRleHQgKnMsIGludCBjb25kLAorICAgICAgICAgICAgICAgIGludCBy ZCwgaW50IHJuLCB0Y2dfdGFyZ2V0X2xvbmcgaW0pCit7CisgICAgaWYgKGltID49IDApCisgICAg ICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAweDA1YzAwMDAwIHwKKyAgICAgICAgICAg ICAgICAgICAgICAgIChybiA8PCAxNikgfCAocmQgPDwgMTIpIHwgKGltICYgMHhmZmYpKTsKKyAg ICBlbHNlCisgICAgICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAweDA1NDAwMDAwIHwK KyAgICAgICAgICAgICAgICAgICAgICAgIChybiA8PCAxNikgfCAocmQgPDwgMTIpIHwgKCgtaW0p ICYgMHhmZmYpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZ19vdXRfbGQ4X3IoVENHQ29u dGV4dCAqcywgaW50IGNvbmQsCisgICAgICAgICAgICAgICAgaW50IHJkLCBpbnQgcm4sIGludCBy bSkKK3sKKyAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHgwN2QwMDAwMCB8CisgICAg ICAgICAgICAgICAgICAgIChybiA8PCAxNikgfCAocmQgPDwgMTIpIHwgcm0pOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQgdGNnX291dF9zdDhfcihUQ0dDb250ZXh0ICpzLCBpbnQgY29uZCwKKyAg ICAgICAgICAgICAgICBpbnQgcmQsIGludCBybiwgaW50IHJtKQoreworICAgIHRjZ19vdXQzMihz LCAoY29uZCA8PCAyOCkgfCAweDA3YzAwMDAwIHwKKyAgICAgICAgICAgICAgICAgICAgKHJuIDw8 IDE2KSB8IChyZCA8PCAxMikgfCBybSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0 X2xkOHNfOChUQ0dDb250ZXh0ICpzLCBpbnQgY29uZCwKKyAgICAgICAgICAgICAgICBpbnQgcmQs IGludCBybiwgdGNnX3RhcmdldF9sb25nIGltKQoreworICAgIGlmIChpbSA+PSAwKQorICAgICAg ICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHgwMWQwMDBkMCB8CisgICAgICAgICAgICAg ICAgICAgICAgICAocm4gPDwgMTYpIHwgKHJkIDw8IDEyKSB8CisgICAgICAgICAgICAgICAgICAg ICAgICAoKGltICYgMHhmMCkgPDwgNCkgfCAoaW0gJiAweGYpKTsKKyAgICBlbHNlCisgICAgICAg IHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAweDAxNTAwMGQwIHwKKyAgICAgICAgICAgICAg ICAgICAgICAgIChybiA8PCAxNikgfCAocmQgPDwgMTIpIHwKKyAgICAgICAgICAgICAgICAgICAg ICAgICgoKC1pbSkgJiAweGYwKSA8PCA0KSB8ICgoLWltKSAmIDB4ZikpOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQgdGNnX291dF9zdDhzXzgoVENHQ29udGV4dCAqcywgaW50IGNvbmQsCisgICAg ICAgICAgICAgICAgaW50IHJkLCBpbnQgcm4sIHRjZ190YXJnZXRfbG9uZyBpbSkKK3sKKyAgICBp ZiAoaW0gPj0gMCkKKyAgICAgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MDFjMDAw ZDAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKHJuIDw8IDE2KSB8IChyZCA8PCAxMikgfAor ICAgICAgICAgICAgICAgICAgICAgICAgKChpbSAmIDB4ZjApIDw8IDQpIHwgKGltICYgMHhmKSk7 CisgICAgZWxzZQorICAgICAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHgwMTQwMDBk MCB8CisgICAgICAgICAgICAgICAgICAgICAgICAocm4gPDwgMTYpIHwgKHJkIDw8IDEyKSB8Cisg ICAgICAgICAgICAgICAgICAgICAgICAoKCgtaW0pICYgMHhmMCkgPDwgNCkgfCAoKC1pbSkgJiAw eGYpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZ19vdXRfbGQ4c19yKFRDR0NvbnRleHQg KnMsIGludCBjb25kLAorICAgICAgICAgICAgICAgIGludCByZCwgaW50IHJuLCBpbnQgcm0pCit7 CisgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MDE5MDAwZjAgfAorICAgICAgICAg ICAgICAgICAgICAocm4gPDwgMTYpIHwgKHJkIDw8IDEyKSB8IHJtKTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkIHRjZ19vdXRfc3Q4c19yKFRDR0NvbnRleHQgKnMsIGludCBjb25kLAorICAgICAg ICAgICAgICAgIGludCByZCwgaW50IHJuLCBpbnQgcm0pCit7CisgICAgdGNnX291dDMyKHMsIChj b25kIDw8IDI4KSB8IDB4MDE4MDAwZjAgfAorICAgICAgICAgICAgICAgICAgICAocm4gPDwgMTYp IHwgKHJkIDw8IDEyKSB8IHJtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZ19vdXRfbGQz MnUoVENHQ29udGV4dCAqcywgaW50IGNvbmQsCisgICAgICAgICAgICAgICAgaW50IHJkLCBpbnQg cm4sIGludDMyX3Qgb2Zmc2V0KQoreworICAgIGlmIChvZmZzZXQgPiAweGZmZiB8fCBvZmZzZXQg PCAtMHhmZmYpIHsKKyAgICAgICAgdGNnX291dF9tb3ZpMzIocywgY29uZCwgVENHX1JFR19SOCwg b2Zmc2V0KTsKKyAgICAgICAgdGNnX291dF9sZDMyX3IocywgY29uZCwgcmQsIHJuLCBUQ0dfUkVH X1I4KTsKKyAgICB9IGVsc2UKKyAgICAgICAgdGNnX291dF9sZDMyXzEyKHMsIGNvbmQsIHJkLCBy biwgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZ19vdXRfc3QzMihUQ0dDb250 ZXh0ICpzLCBpbnQgY29uZCwKKyAgICAgICAgICAgICAgICBpbnQgcmQsIGludCBybiwgaW50MzJf dCBvZmZzZXQpCit7CisgICAgaWYgKG9mZnNldCA+IDB4ZmZmIHx8IG9mZnNldCA8IC0weGZmZikg eworICAgICAgICB0Y2dfb3V0X21vdmkzMihzLCBjb25kLCBUQ0dfUkVHX1I4LCBvZmZzZXQpOwor ICAgICAgICB0Y2dfb3V0X3N0MzJfcihzLCBjb25kLCByZCwgcm4sIFRDR19SRUdfUjgpOworICAg IH0gZWxzZQorICAgICAgICB0Y2dfb3V0X3N0MzJfMTIocywgY29uZCwgcmQsIHJuLCBvZmZzZXQp OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9sZDE2dShUQ0dDb250ZXh0ICpzLCBp bnQgY29uZCwKKyAgICAgICAgICAgICAgICBpbnQgcmQsIGludCBybiwgaW50MzJfdCBvZmZzZXQp Cit7CisgICAgaWYgKG9mZnNldCA+IDB4ZmYgfHwgb2Zmc2V0IDwgLTB4ZmYpIHsKKyAgICAgICAg dGNnX291dF9tb3ZpMzIocywgY29uZCwgVENHX1JFR19SOCwgb2Zmc2V0KTsKKyAgICAgICAgdGNn X291dF9sZDE2dV9yKHMsIGNvbmQsIHJkLCBybiwgVENHX1JFR19SOCk7CisgICAgfSBlbHNlCisg ICAgICAgIHRjZ19vdXRfbGQxNnVfOChzLCBjb25kLCByZCwgcm4sIG9mZnNldCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0X2xkMTZzKFRDR0NvbnRleHQgKnMsIGludCBjb25kLAor ICAgICAgICAgICAgICAgIGludCByZCwgaW50IHJuLCBpbnQzMl90IG9mZnNldCkKK3sKKyAgICBp ZiAob2Zmc2V0ID4gMHhmZiB8fCBvZmZzZXQgPCAtMHhmZikgeworICAgICAgICB0Y2dfb3V0X21v dmkzMihzLCBjb25kLCBUQ0dfUkVHX1I4LCBvZmZzZXQpOworICAgICAgICB0Y2dfb3V0X2xkMTZz X3IocywgY29uZCwgcmQsIHJuLCBUQ0dfUkVHX1I4KTsKKyAgICB9IGVsc2UKKyAgICAgICAgdGNn X291dF9sZDE2c184KHMsIGNvbmQsIHJkLCBybiwgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIHRjZ19vdXRfc3QxNnUoVENHQ29udGV4dCAqcywgaW50IGNvbmQsCisgICAgICAgICAg ICAgICAgaW50IHJkLCBpbnQgcm4sIGludDMyX3Qgb2Zmc2V0KQoreworICAgIGlmIChvZmZzZXQg PiAweGZmIHx8IG9mZnNldCA8IC0weGZmKSB7CisgICAgICAgIHRjZ19vdXRfbW92aTMyKHMsIGNv bmQsIFRDR19SRUdfUjgsIG9mZnNldCk7CisgICAgICAgIHRjZ19vdXRfc3QxNnVfcihzLCBjb25k LCByZCwgcm4sIFRDR19SRUdfUjgpOworICAgIH0gZWxzZQorICAgICAgICB0Y2dfb3V0X3N0MTZ1 XzgocywgY29uZCwgcmQsIHJuLCBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNn X291dF9sZDh1KFRDR0NvbnRleHQgKnMsIGludCBjb25kLAorICAgICAgICAgICAgICAgIGludCBy ZCwgaW50IHJuLCBpbnQzMl90IG9mZnNldCkKK3sKKyAgICBpZiAob2Zmc2V0ID4gMHhmZmYgfHwg b2Zmc2V0IDwgLTB4ZmZmKSB7CisgICAgICAgIHRjZ19vdXRfbW92aTMyKHMsIGNvbmQsIFRDR19S RUdfUjgsIG9mZnNldCk7CisgICAgICAgIHRjZ19vdXRfbGQ4X3IocywgY29uZCwgcmQsIHJuLCBU Q0dfUkVHX1I4KTsKKyAgICB9IGVsc2UKKyAgICAgICAgdGNnX291dF9sZDhfMTIocywgY29uZCwg cmQsIHJuLCBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9sZDhzKFRD R0NvbnRleHQgKnMsIGludCBjb25kLAorICAgICAgICAgICAgICAgIGludCByZCwgaW50IHJuLCBp bnQzMl90IG9mZnNldCkKK3sKKyAgICBpZiAob2Zmc2V0ID4gMHhmZiB8fCBvZmZzZXQgPCAtMHhm ZikgeworICAgICAgICB0Y2dfb3V0X21vdmkzMihzLCBjb25kLCBUQ0dfUkVHX1I4LCBvZmZzZXQp OworICAgICAgICB0Y2dfb3V0X2xkOHNfcihzLCBjb25kLCByZCwgcm4sIFRDR19SRUdfUjgpOwor ICAgIH0gZWxzZQorICAgICAgICB0Y2dfb3V0X2xkOHNfOChzLCBjb25kLCByZCwgcm4sIG9mZnNl dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0X3N0OHUoVENHQ29udGV4dCAqcywg aW50IGNvbmQsCisgICAgICAgICAgICAgICAgaW50IHJkLCBpbnQgcm4sIGludDMyX3Qgb2Zmc2V0 KQoreworICAgIGlmIChvZmZzZXQgPiAweGZmZiB8fCBvZmZzZXQgPCAtMHhmZmYpIHsKKyAgICAg ICAgdGNnX291dF9tb3ZpMzIocywgY29uZCwgVENHX1JFR19SOCwgb2Zmc2V0KTsKKyAgICAgICAg dGNnX291dF9zdDhfcihzLCBjb25kLCByZCwgcm4sIFRDR19SRUdfUjgpOworICAgIH0gZWxzZQor ICAgICAgICB0Y2dfb3V0X3N0OF8xMihzLCBjb25kLCByZCwgcm4sIG9mZnNldCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0X2dvdG8oVENHQ29udGV4dCAqcywgaW50IGNvbmQsIHVp bnQzMl90IGFkZHIpCit7CisgICAgaW50MzJfdCB2YWw7CisKKyAgICB2YWwgPSBhZGRyIC0gKHRj Z190YXJnZXRfbG9uZykgcy0+Y29kZV9wdHI7CisgICAgaWYgKHZhbCAtIDggPCAweDAxZmZmZmZk ICYmIHZhbCAtIDggPiAtMHgwMWZmZmZmZCkKKyAgICAgICAgdGNnX291dF9iKHMsIGNvbmQsIHZh bCk7CisgICAgZWxzZSB7CisjaWYgMQorICAgICAgICB0Y2dfYWJvcnQoKTsKKyNlbHNlCisgICAg ICAgIGlmIChjb25kID09IENPTkRfQUwpIHsKKyAgICAgICAgICAgIHRjZ19vdXRfbGQzMl8xMihz LCBDT05EX0FMLCAxNSwgMTUsIC00KTsKKyAgICAgICAgICAgIHRjZ19vdXQzMihzLCBhZGRyKTsg LyogWFhYOiBUaGlzIGlzIGwtPnUudmFsdWUsIGNhbiB3ZSB1c2UgaXQ/ICovCisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICB0Y2dfb3V0X21vdmkzMihzLCBjb25kLCBUQ0dfUkVHX1I4LCB2 YWwgLSA4KTsKKyAgICAgICAgICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBjb25kLCBBUklUSF9BREQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUsIDE1LCBUQ0dfUkVHX1I4LCBTSElGVF9J TU1fTFNMKDApKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorfQorCitzdGF0aWMgaW5saW5l IHZvaWQgdGNnX291dF9jYWxsKFRDR0NvbnRleHQgKnMsIGludCBjb25kLCB1aW50MzJfdCBhZGRy KQoreworICAgIGludDMyX3QgdmFsOworCisgICAgLyogVE9ETzogd2Uga2luZG9mIGNsb2JiZXIg cjgsIHI5IC0gZG8gd2UgY2FyZT8gICovCisjaWZkZWYgU0FWRV9MUgorICAgIHRjZ19vdXRfZGF0 X3JlZyhzLCBjb25kLCBBUklUSF9NT1YsIFRDR19SRUdfUjgsIDAsIDE0LCBTSElGVF9JTU1fTFNM KDApKTsKKyNlbmRpZgorCisgICAgdmFsID0gYWRkciAtICh0Y2dfdGFyZ2V0X2xvbmcpIHMtPmNv ZGVfcHRyOworICAgIGlmICh2YWwgPCAweDAxZmZmZmZkICYmIHZhbCA+IC0weDAxZmZmZmZkKQor ICAgICAgICB0Y2dfb3V0X2JsKHMsIGNvbmQsIHZhbCk7CisgICAgZWxzZSB7CisjaWYgMQorICAg ICAgICB0Y2dfYWJvcnQoKTsKKyNlbHNlCisgICAgICAgIGlmIChjb25kID09IENPTkRfQUwpIHsK KyAgICAgICAgICAgIHRjZ19vdXRfZGF0X2ltbShzLCBjb25kLCBBUklUSF9BREQsIDE0LCAxNSwg NCk7CisgICAgICAgICAgICB0Y2dfb3V0X2xkMzJfMTIocywgQ09ORF9BTCwgMTUsIDE1LCAtNCk7 CisgICAgICAgICAgICB0Y2dfb3V0MzIocywgYWRkcik7IC8qIFhYWDogVGhpcyBpcyBsLT51LnZh bHVlLCBjYW4gd2UgdXNlIGl0PyAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGNn X291dF9tb3ZpMzIocywgY29uZCwgVENHX1JFR19SOSwgYWRkcik7CisgICAgICAgICAgICB0Y2df b3V0X2RhdF9pbW0ocywgY29uZCwgQVJJVEhfTU9WLCAxNCwgMCwgMTUpOworICAgICAgICAgICAg dGNnX291dF9ieChzLCBjb25kLCBUQ0dfUkVHX1I5KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAg fQorCisjaWZkZWYgU0FWRV9MUgorICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBjb25kLCBBUklUSF9N T1YsIDE0LCAwLCBUQ0dfUkVHX1I4LCBTSElGVF9JTU1fTFNMKDApKTsKKyNlbmRpZgorfQorCitz dGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9jYWxscihUQ0dDb250ZXh0ICpzLCBpbnQgY29uZCwg aW50IGFyZykKK3sKKyAgICAvKiBUT0RPOiB3ZSBraW5kb2YgY2xvYmJlciByOCAtIGRvIHdlIGNh cmU/ICAqLworI2lmZGVmIFNBVkVfTFIKKyAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJ VEhfTU9WLCBUQ0dfUkVHX1I4LCAwLCAxNCwgU0hJRlRfSU1NX0xTTCgwKSk7CisjZW5kaWYKKyAg ICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLCAxNCwgMCwgMTUsIFNISUZUX0lN TV9MU0woMCkpOworICAgIHRjZ19vdXRfYngocywgY29uZCwgYXJnKTsKKyNpZmRlZiBTQVZFX0xS CisgICAgdGNnX291dF9kYXRfcmVnKHMsIGNvbmQsIEFSSVRIX01PViwgMTQsIDAsIFRDR19SRUdf UjgsIFNISUZUX0lNTV9MU0woMCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0 Y2dfb3V0X2dvdG9fbGFiZWwoVENHQ29udGV4dCAqcywgaW50IGNvbmQsIGludCBsYWJlbF9pbmRl eCkKK3sKKyAgICBUQ0dMYWJlbCAqbCA9ICZzLT5sYWJlbHNbbGFiZWxfaW5kZXhdOworCisgICAg aWYgKGwtPmhhc192YWx1ZSkKKyAgICAgICAgdGNnX291dF9nb3RvKHMsIGNvbmQsIGwtPnUudmFs dWUpOworICAgIGVsc2UgaWYgKGNvbmQgPT0gQ09ORF9BTCkgeworICAgICAgICB0Y2dfb3V0X2xk MzJfMTIocywgQ09ORF9BTCwgMTUsIDE1LCAtNCk7CisgICAgICAgIHRjZ19vdXRfcmVsb2Mocywg cy0+Y29kZV9wdHIsIFJfQVJNX0FCUzMyLCBsYWJlbF9pbmRleCwgMzEzMzcpOworICAgICAgICBz LT5jb2RlX3B0ciArPSA0OworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIFByb2JhYmx5IHRoaXMg c2hvdWxkIGJlIHByZWZlcnJlZCBldmVuIGZvciBDT05EX0FMLi4uICovCisgICAgICAgIHRjZ19v dXRfcmVsb2Mocywgcy0+Y29kZV9wdHIsIFJfQVJNX1BDMjQsIGxhYmVsX2luZGV4LCAzMTMzNyk7 CisgICAgICAgIHRjZ19vdXRfYihzLCBjb25kLCA4KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IHRjZ19vdXRfZGl2X2hlbHBlcihUQ0dDb250ZXh0ICpzLCBpbnQgY29uZCwgY29uc3QgVENHQXJn ICphcmdzLAorICAgICAgICAgICAgICAgIHZvaWQgKmhlbHBlcl9kaXYsIHZvaWQgKmhlbHBlcl9y ZW0sIGludCBzaGlmdCkKK3sKKyAgICBpbnQgZGl2X3JlZyA9IGFyZ3NbMF07CisgICAgaW50IHJl bV9yZWcgPSBhcmdzWzFdOworCisgICAgLyogc3RtZGIgc3AhLCB7IHIwLCByMSwgcjIsIHIzIH0g Ki8KKyAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHgwOTJkMDAwZik7CisKKyAgICB0 Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLCAwLCAwLCBhcmdzWzJdLCBTSElGVF9J TU1fTFNMKDApKTsKKyAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLCAxLCAw LCBhcmdzWzNdLCBTSElGVF9JTU1fTFNMKDApKTsKKyAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29u ZCwgQVJJVEhfTU9WLCAyLCAwLCBhcmdzWzRdLCBTSElGVF9JTU1fTFNMKDApKTsKKyAgICB0Y2df b3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLCAzLCAwLCAyLCBzaGlmdCk7CisKKyAgICB0 Y2dfb3V0X2NhbGwocywgY29uZCwgKHVpbnQzMl90KSBoZWxwZXJfZGl2KTsKKyAgICB0Y2dfb3V0 X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLCA4LCAwLCAwLCBTSElGVF9JTU1fTFNMKDApKTsK KworICAgIC8qIGxkbWlhIHNwLCB7IHIwLCByMSwgcjIsIHIzIH0gKi8KKyAgICB0Y2dfb3V0MzIo cywgKGNvbmQgPDwgMjgpIHwgMHgwODlkMDAwZik7CisKKyAgICB0Y2dfb3V0X2RhdF9yZWcocywg Y29uZCwgQVJJVEhfTU9WLCAwLCAwLCBhcmdzWzJdLCBTSElGVF9JTU1fTFNMKDApKTsKKyAgICB0 Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLCAxLCAwLCBhcmdzWzNdLCBTSElGVF9J TU1fTFNMKDApKTsKKyAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLCAyLCAw LCBhcmdzWzRdLCBTSElGVF9JTU1fTFNMKDApKTsKKyAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29u ZCwgQVJJVEhfTU9WLCAzLCAwLCAyLCBzaGlmdCk7CisKKyAgICB0Y2dfb3V0X2NhbGwocywgY29u ZCwgKHVpbnQzMl90KSBoZWxwZXJfcmVtKTsKKworICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBjb25k LCBBUklUSF9NT1YsIHJlbV9yZWcsIDAsIDAsIFNISUZUX0lNTV9MU0woMCkpOworICAgIHRjZ19v dXRfZGF0X3JlZyhzLCBjb25kLCBBUklUSF9NT1YsIGRpdl9yZWcsIDAsIDgsIFNISUZUX0lNTV9M U0woMCkpOworCisgICAgLyogbGRyIHIwLCBbc3BdLCAjNCAqLworICAgIGlmIChyZW1fcmVnICE9 IDAgJiYgZGl2X3JlZyAhPSAwKQorICAgICAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwg MHgwNGJkMDAwNCk7CisKKyAgICAvKiBsZHIgcjEsIFtzcF0sICM0ICovCisgICAgaWYgKHJlbV9y ZWcgIT0gMSAmJiBkaXZfcmVnICE9IDEpCisgICAgICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAy OCkgfCAweDA0YmQwMDA0KTsKKworICAgIC8qIGxkciByMiwgW3NwXSwgIzQgKi8KKyAgICBpZiAo cmVtX3JlZyAhPSAyICYmIGRpdl9yZWcgIT0gMikKKyAgICAgICAgdGNnX291dDMyKHMsIChjb25k IDw8IDI4KSB8IDB4MDRiZDAwMDQpOworCisgICAgLyogbGRyIHIzLCBbc3BdLCAjNCAqLworICAg IGlmIChyZW1fcmVnICE9IDMgJiYgZGl2X3JlZyAhPSAzKQorICAgICAgICB0Y2dfb3V0MzIocywg KGNvbmQgPDwgMjgpIHwgMHgwNGJkMDAwNCk7Cit9CisKKyNpZmRlZiBDT05GSUdfU09GVE1NVQor ZXh0ZXJuIHZvaWQgX19sZGJfbW11KHZvaWQpOworZXh0ZXJuIHZvaWQgX19sZHdfbW11KHZvaWQp OworZXh0ZXJuIHZvaWQgX19sZGxfbW11KHZvaWQpOworZXh0ZXJuIHZvaWQgX19sZHFfbW11KHZv aWQpOworCitleHRlcm4gdm9pZCBfX3N0Yl9tbXUodm9pZCk7CitleHRlcm4gdm9pZCBfX3N0d19t bXUodm9pZCk7CitleHRlcm4gdm9pZCBfX3N0bF9tbXUodm9pZCk7CitleHRlcm4gdm9pZCBfX3N0 cV9tbXUodm9pZCk7CisKK3N0YXRpYyB2b2lkICpxZW11X2xkX2hlbHBlcnNbNF0gPSB7CisgICAg X19sZGJfbW11LAorICAgIF9fbGR3X21tdSwKKyAgICBfX2xkbF9tbXUsCisgICAgX19sZHFfbW11 LAorfTsKKworc3RhdGljIHZvaWQgKnFlbXVfc3RfaGVscGVyc1s0XSA9IHsKKyAgICBfX3N0Yl9t bXUsCisgICAgX19zdHdfbW11LAorICAgIF9fc3RsX21tdSwKKyAgICBfX3N0cV9tbXUsCit9Owor I2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0X3FlbXVfbGQoVENHQ29udGV4dCAq cywgaW50IGNvbmQsCisgICAgICAgICAgICAgICAgY29uc3QgVENHQXJnICphcmdzLCBpbnQgb3Bj KQoreworICAgIGludCBhZGRyX3JlZywgZGF0YV9yZWcsIGRhdGFfcmVnMjsKKyNpZmRlZiBDT05G SUdfU09GVE1NVQorICAgIGludCBtZW1faW5kZXgsIHNfYml0czsKKyMgaWYgVEFSR0VUX0xPTkdf QklUUyA9PSA2NAorICAgIGludCBhZGRyX3JlZzI7CisjIGVuZGlmCisjIGlmZGVmIFVTRV9UTEIK KyAgICB1aW50MzJfdCAqbGFiZWxfcHRyOworIyBlbmRpZgorI2VuZGlmCisKKyAgICBkYXRhX3Jl ZyA9ICphcmdzKys7CisgICAgaWYgKG9wYyA9PSAzKQorICAgICAgICBkYXRhX3JlZzIgPSAqYXJn cysrOworICAgIGVsc2UKKyAgICAgICAgZGF0YV9yZWcyID0gMDsgLyogc3VycHJlc3Mgd2Fybmlu ZyAqLworICAgIGFkZHJfcmVnID0gKmFyZ3MrKzsKKyNpZiBUQVJHRVRfTE9OR19CSVRTID09IDY0 CisgICAgYWRkcl9yZWcyID0gKmFyZ3MrKzsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TT0ZUTU1V CisgICAgbWVtX2luZGV4ID0gKmFyZ3M7CisgICAgc19iaXRzID0gb3BjICYgMzsKKworIyBpZmRl ZiBVU0VfVExCCisgICAgdGNnX291dF9kYXRfcmVnKHMsIENPTkRfQUwsIEFSSVRIX01PViwKKyAg ICAgICAgICAgICAgICAgICAgOCwgMCwgYWRkcl9yZWcsIFNISUZUX0lNTV9ST1IoVEFSR0VUX1BB R0VfQklUUykpOworICAgIHRjZ19vdXRfZGF0X2ltbShzLCBDT05EX0FMLCBBUklUSF9BTkQsCisg ICAgICAgICAgICAgICAgICAgIDAsIDgsIENQVV9UTEJfU0laRSAtIDEpOworICAgIHRjZ19vdXRf ZGF0X3JlZyhzLCBDT05EX0FMLCBBUklUSF9BREQsCisgICAgICAgICAgICAgICAgICAgIDAsIFRD R19BUkVHMCwgMCwgU0hJRlRfSU1NX0xTTChDUFVfVExCX0VOVFJZX0JJVFMpKTsKKyAgICB0Y2df b3V0X2xkMzJfMTIocywgQ09ORF9BTCwgMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0 b2YoQ1BVU3RhdGUsIHRsYl90YWJsZVttZW1faW5kZXhdWzBdLmFkZHJfcmVhZCkpOworICAgIHRj Z19vdXRfZGF0X3JlZyhzLCBDT05EX0FMLCBBUklUSF9DTVAsCisgICAgICAgICAgICAgICAgICAg IDAsIDEsIDgsIFNISUZUX0lNTV9MU0woVEFSR0VUX1BBR0VfQklUUykpOworICAgIC8qIFRPRE86 IGFsaWdubWVudCBjaGVjaz8KKyAgICAgKiBpZiAoc19iaXRzKQorICAgICAqIHRjZ19vdXRfZGF0 YV9yZWcocywgQ09ORF9FUSwgQVJJVEhfRU9SLAorICAgICAqICAgICAgICAgICAgICAgICAgMCwg MSwgOCwgU0hJRlRfSU1NX0xTUigzMiAtIHNfYml0cykpOworICAgICAqLworIyAgaWYgVEFSR0VU X0xPTkdfQklUUyA9PSA2NAorICAgIC8qIFhYWDogcG9zc2libHkgd2UgY291bGQgdXNlIGEgYmxv Y2sgZGF0YSBsb2FkIG9yIHdyaXRlYmFjayBpbgorICAgICAqIHRoZSBmaXJzdCBhY2Nlc3MuICAq LworICAgIHRjZ19vdXRfbGQzMl8xMihzLCBDT05EX0VRLCAxLCAwLAorICAgICAgICAgICAgICAg ICAgICBvZmZzZXRvZihDUFVTdGF0ZSwgdGxiX3RhYmxlW21lbV9pbmRleF1bMF0uYWRkcl9yZWFk KSArIDQpOworICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBDT05EX0VRLCBBUklUSF9DTVAsCisgICAg ICAgICAgICAgICAgICAgIDAsIDEsIGFkZHJfcmVnMiwgU0hJRlRfSU1NX0xTTCgwKSk7CisjICBl bmRpZgorICAgIHRjZ19vdXRfbGQzMl8xMihzLCBDT05EX0VRLCAxLCAwLAorICAgICAgICAgICAg ICAgICAgICBvZmZzZXRvZihDUFVTdGF0ZSwgdGxiX3RhYmxlW21lbV9pbmRleF1bMF0uYWRkZW5k KSk7CisKKyAgICBzd2l0Y2ggKG9wYykgeworICAgIGNhc2UgMDoKKyAgICAgICAgdGNnX291dF9s ZDhfcihzLCBDT05EX0VRLCBkYXRhX3JlZywgYWRkcl9yZWcsIDEpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIDAgfCA0OgorICAgICAgICB0Y2dfb3V0X2xkOHNfcihzLCBDT05EX0VRLCBkYXRh X3JlZywgYWRkcl9yZWcsIDEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAg IHRjZ19vdXRfbGQxNnVfcihzLCBDT05EX0VRLCBkYXRhX3JlZywgYWRkcl9yZWcsIDEpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIDEgfCA0OgorICAgICAgICB0Y2dfb3V0X2xkMTZzX3Iocywg Q09ORF9FUSwgZGF0YV9yZWcsIGFkZHJfcmVnLCAxKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSAyOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHRjZ19vdXRfbGQzMl9yKHMsIENPTkRfRVEsIGRh dGFfcmVnLCBhZGRyX3JlZywgMSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAg ICAgLyogVE9ETzogbXVzdCB3cml0ZSBiYWNrICovCisgICAgICAgIHRjZ19vdXRfbGQzMl9yKHMs IENPTkRfRVEsIGRhdGFfcmVnLCAxLCBhZGRyX3JlZyk7CisgICAgICAgIHRjZ19vdXRfbGQzMl8x MihzLCBDT05EX0VRLCBkYXRhX3JlZzIsIDEsIDQpOworICAgICAgICBicmVhazsKKyAgICB9CisK KyAgICBsYWJlbF9wdHIgPSAodm9pZCAqKSBzLT5jb2RlX3B0cjsKKyAgICB0Y2dfb3V0X2Iocywg Q09ORF9FUSwgOCk7CisjIGVuZGlmCisKKyMgaWZkZWYgU0FWRV9MUgorICAgIHRjZ19vdXRfZGF0 X3JlZyhzLCBjb25kLCBBUklUSF9NT1YsIDgsIDAsIDE0LCBTSElGVF9JTU1fTFNMKDApKTsKKyMg ZW5kaWYKKworICAgIC8qIFRPRE86IG1vdmUgdGhpcyBjb2RlIHRvIHdoZXJlIHRoZSBjb25zdGFu dHMgcG9vbCB3aWxsIGJlICovCisgICAgaWYgKGFkZHJfcmVnKQorICAgICAgICB0Y2dfb3V0X2Rh dF9yZWcocywgY29uZCwgQVJJVEhfTU9WLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwg YWRkcl9yZWcsIFNISUZUX0lNTV9MU0woMCkpOworIyBpZiBUQVJHRVRfTE9OR19CSVRTID09IDMy CisgICAgdGNnX291dF9kYXRfaW1tKHMsIGNvbmQsIEFSSVRIX01PViwgMSwgMCwgbWVtX2luZGV4 KTsKKyMgZWxzZQorICAgIGlmIChhZGRyX3JlZzIgIT0gMSkKKyAgICAgICAgdGNnX291dF9kYXRf cmVnKHMsIGNvbmQsIEFSSVRIX01PViwKKyAgICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIGFk ZHJfcmVnMiwgU0hJRlRfSU1NX0xTTCgwKSk7CisgICAgdGNnX291dF9kYXRfaW1tKHMsIGNvbmQs IEFSSVRIX01PViwgMiwgMCwgbWVtX2luZGV4KTsKKyMgZW5kaWYKKyAgICB0Y2dfb3V0X2JsKHMs IGNvbmQsICh0Y2dfdGFyZ2V0X2xvbmcpIHFlbXVfbGRfaGVscGVyc1tzX2JpdHNdIC0gCisgICAg ICAgICAgICAgICAgICAgICh0Y2dfdGFyZ2V0X2xvbmcpIHMtPmNvZGVfcHRyKTsKKworICAgIHN3 aXRjaCAob3BjKSB7CisgICAgY2FzZSAwIHwgNDoKKyAgICAgICAgdGNnX291dF9kYXRfcmVnKHMs IGNvbmQsIEFSSVRIX01PViwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIFNISUZU X0lNTV9MU0woMjQpKTsKKyAgICAgICAgdGNnX291dF9kYXRfcmVnKHMsIGNvbmQsIEFSSVRIX01P ViwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfcmVnLCAwLCAwLCBTSElGVF9JTU1fQVNS KDI0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMSB8IDQ6CisgICAgICAgIHRjZ19vdXRf ZGF0X3JlZyhzLCBjb25kLCBBUklUSF9NT1YsCisgICAgICAgICAgICAgICAgICAgICAgICAwLCAw LCAwLCBTSElGVF9JTU1fTFNMKDE2KSk7CisgICAgICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBjb25k LCBBUklUSF9NT1YsCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3JlZywgMCwgMCwgU0hJ RlRfSU1NX0FTUigxNikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAx OgorICAgIGNhc2UgMjoKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoZGF0YV9yZWcpCisgICAg ICAgICAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRhdGFfcmVnLCAwLCAwLCBTSElGVF9JTU1fTFNMKDApKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgICBpZiAoZGF0YV9yZWcyICE9IDEpCisgICAg ICAgICAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRhdGFfcmVnMiwgMCwgMSwgU0hJRlRfSU1NX0xTTCgwKSk7CisgICAg ICAgIGlmIChkYXRhX3JlZyAhPSAwKQorICAgICAgICAgICAgdGNnX291dF9kYXRfcmVnKHMsIGNv bmQsIEFSSVRIX01PViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3JlZywgMCwg MCwgU0hJRlRfSU1NX0xTTCgwKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworIyBpZmRlZiBT QVZFX0xSCisgICAgdGNnX291dF9kYXRfcmVnKHMsIGNvbmQsIEFSSVRIX01PViwgMTQsIDAsIDgs IFNISUZUX0lNTV9MU0woMCkpOworIyBlbmRpZgorCisjIGlmZGVmIFVTRV9UTEIKKyAgICAqbGFi ZWxfcHRyICs9ICgodm9pZCAqKSBzLT5jb2RlX3B0ciAtICh2b2lkICopIGxhYmVsX3B0ciAtIDgp ID4+IDI7CisjIGVuZGlmCisjZWxzZQorICAgIHN3aXRjaCAob3BjKSB7CisgICAgY2FzZSAwOgor ICAgICAgICB0Y2dfb3V0X2xkOF8xMihzLCBDT05EX0FMLCBkYXRhX3JlZywgYWRkcl9yZWcsIDAp OworICAgICAgICBicmVhazsKKyAgICBjYXNlIDAgfCA0OgorICAgICAgICB0Y2dfb3V0X2xkOHNf OChzLCBDT05EX0FMLCBkYXRhX3JlZywgYWRkcl9yZWcsIDApOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIDE6CisgICAgICAgIHRjZ19vdXRfbGQxNnVfOChzLCBDT05EX0FMLCBkYXRhX3JlZywg YWRkcl9yZWcsIDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDEgfCA0OgorICAgICAgICB0 Y2dfb3V0X2xkMTZzXzgocywgQ09ORF9BTCwgZGF0YV9yZWcsIGFkZHJfcmVnLCAwKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHRjZ19vdXRfbGQz Ml8xMihzLCBDT05EX0FMLCBkYXRhX3JlZywgYWRkcl9yZWcsIDApOworICAgICAgICBicmVhazsK KyAgICBjYXNlIDM6CisgICAgICAgIC8qIFRPRE86IHVzZSBibG9jayBsb2FkICovCisgICAgICAg IHRjZ19vdXRfbGQzMl8xMihzLCBDT05EX0FMLCBkYXRhX3JlZywgYWRkcl9yZWcsIDApOworICAg ICAgICB0Y2dfb3V0X2xkMzJfMTIocywgQ09ORF9BTCwgZGF0YV9yZWcyLCBhZGRyX3JlZywgNCk7 CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQg dGNnX291dF9xZW11X3N0KFRDR0NvbnRleHQgKnMsIGludCBjb25kLAorICAgICAgICAgICAgICAg IGNvbnN0IFRDR0FyZyAqYXJncywgaW50IG9wYykKK3sKKyAgICBpbnQgYWRkcl9yZWcsIGRhdGFf cmVnLCBkYXRhX3JlZzI7CisjaWZkZWYgQ09ORklHX1NPRlRNTVUKKyAgICBpbnQgbWVtX2luZGV4 LCBzX2JpdHM7CisjIGlmIFRBUkdFVF9MT05HX0JJVFMgPT0gNjQKKyAgICBpbnQgYWRkcl9yZWcy OworIyBlbmRpZgorIyBpZmRlZiBVU0VfVExCCisgICAgdWludDMyX3QgKmxhYmVsX3B0cjsKKyMg ZW5kaWYKKyNlbmRpZgorCisgICAgZGF0YV9yZWcgPSAqYXJncysrOworICAgIGlmIChvcGMgPT0g MykKKyAgICAgICAgZGF0YV9yZWcyID0gKmFyZ3MrKzsKKyAgICBlbHNlCisgICAgICAgIGRhdGFf cmVnMiA9IDA7IC8qIHN1cnByZXNzIHdhcm5pbmcgKi8KKyAgICBhZGRyX3JlZyA9ICphcmdzKys7 CisjaWYgVEFSR0VUX0xPTkdfQklUUyA9PSA2NAorICAgIGFkZHJfcmVnMiA9ICphcmdzKys7Cisj ZW5kaWYKKyNpZmRlZiBDT05GSUdfU09GVE1NVQorICAgIG1lbV9pbmRleCA9ICphcmdzOworICAg IHNfYml0cyA9IG9wYyAmIDM7CisKKyMgaWZkZWYgVVNFX1RMQgorICAgIHRjZ19vdXRfZGF0X3Jl ZyhzLCBDT05EX0FMLCBBUklUSF9NT1YsCisgICAgICAgICAgICAgICAgICAgIDgsIDAsIGFkZHJf cmVnLCBTSElGVF9JTU1fUk9SKFRBUkdFVF9QQUdFX0JJVFMpKTsKKyAgICB0Y2dfb3V0X2RhdF9p bW0ocywgQ09ORF9BTCwgQVJJVEhfQU5ELAorICAgICAgICAgICAgICAgICAgICAwLCA4LCBDUFVf VExCX1NJWkUgLSAxKTsKKyAgICB0Y2dfb3V0X2RhdF9yZWcocywgQ09ORF9BTCwgQVJJVEhfQURE LAorICAgICAgICAgICAgICAgICAgICAwLCBUQ0dfQVJFRzAsIDAsIFNISUZUX0lNTV9MU0woQ1BV X1RMQl9FTlRSWV9CSVRTKSk7CisgICAgdGNnX291dF9sZDMyXzEyKHMsIENPTkRfQUwsIDEsIDAs CisgICAgICAgICAgICAgICAgICAgIG9mZnNldG9mKENQVVN0YXRlLCB0bGJfdGFibGVbbWVtX2lu ZGV4XVswXS5hZGRyX3dyaXRlKSk7CisgICAgdGNnX291dF9kYXRfcmVnKHMsIENPTkRfQUwsIEFS SVRIX0NNUCwKKyAgICAgICAgICAgICAgICAgICAgMCwgMSwgOCwgU0hJRlRfSU1NX0xTTChUQVJH RVRfUEFHRV9CSVRTKSk7CisgICAgLyogVE9ETzogYWxpZ25tZW50IGNoZWNrPworICAgICAqIGlm IChzX2JpdHMpCisgICAgICogdGNnX291dF9kYXRhX3JlZyhzLCBDT05EX0VRLCBBUklUSF9FT1Is CisgICAgICogICAgICAgICAgICAgICAgICAwLCAxLCA4LCBTSElGVF9JTU1fTFNSKDMyIC0gc19i aXRzKSk7CisgICAgICovCisjICBpZiBUQVJHRVRfTE9OR19CSVRTID09IDY0CisgICAgLyogWFhY OiBwb3NzaWJseSB3ZSBjb3VsZCB1c2UgYSBibG9jayBkYXRhIGxvYWQgb3Igd3JpdGViYWNrIGlu CisgICAgICogdGhlIGZpcnN0IGFjY2Vzcy4gICovCisgICAgdGNnX291dF9sZDMyXzEyKHMsIENP TkRfRVEsIDEsIDAsCisgICAgICAgICAgICAgICAgICAgIG9mZnNldG9mKENQVVN0YXRlLCB0bGJf dGFibGVbbWVtX2luZGV4XVswXS5hZGRyX3dyaXRlKQorICAgICAgICAgICAgICAgICAgICArIDQp OworICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBDT05EX0VRLCBBUklUSF9DTVAsCisgICAgICAgICAg ICAgICAgICAgIDAsIDEsIGFkZHJfcmVnMiwgU0hJRlRfSU1NX0xTTCgwKSk7CisjICBlbmRpZgor ICAgIHRjZ19vdXRfbGQzMl8xMihzLCBDT05EX0VRLCAxLCAwLAorICAgICAgICAgICAgICAgICAg ICBvZmZzZXRvZihDUFVTdGF0ZSwgdGxiX3RhYmxlW21lbV9pbmRleF1bMF0uYWRkZW5kKSk7CisK KyAgICBzd2l0Y2ggKG9wYykgeworICAgIGNhc2UgMDoKKyAgICAgICAgdGNnX291dF9zdDhfcihz LCBDT05EX0VRLCBkYXRhX3JlZywgYWRkcl9yZWcsIDEpOworICAgICAgICBicmVhazsKKyAgICBj YXNlIDAgfCA0OgorICAgICAgICB0Y2dfb3V0X3N0OHNfcihzLCBDT05EX0VRLCBkYXRhX3JlZywg YWRkcl9yZWcsIDEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIHRjZ19v dXRfc3QxNnVfcihzLCBDT05EX0VRLCBkYXRhX3JlZywgYWRkcl9yZWcsIDEpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIDEgfCA0OgorICAgICAgICB0Y2dfb3V0X3N0MTZzX3IocywgQ09ORF9F USwgZGF0YV9yZWcsIGFkZHJfcmVnLCAxKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgor ICAgIGRlZmF1bHQ6CisgICAgICAgIHRjZ19vdXRfc3QzMl9yKHMsIENPTkRfRVEsIGRhdGFfcmVn LCBhZGRyX3JlZywgMSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgICAgLyog VE9ETzogbXVzdCB3cml0ZSBiYWNrICovCisgICAgICAgIHRjZ19vdXRfc3QzMl9yKHMsIENPTkRf RVEsIGRhdGFfcmVnLCAxLCBhZGRyX3JlZyk7CisgICAgICAgIHRjZ19vdXRfc3QzMl8xMihzLCBD T05EX0VRLCBkYXRhX3JlZzIsIDEsIDQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBs YWJlbF9wdHIgPSAodm9pZCAqKSBzLT5jb2RlX3B0cjsKKyAgICB0Y2dfb3V0X2IocywgQ09ORF9F USwgOCk7CisjIGVuZGlmCisKKyMgaWZkZWYgU0FWRV9MUgorICAgIHRjZ19vdXRfZGF0X3JlZyhz LCBjb25kLCBBUklUSF9NT1YsIDgsIDAsIDE0LCBTSElGVF9JTU1fTFNMKDApKTsKKyMgZW5kaWYK KworICAgIC8qIFRPRE86IG1vdmUgdGhpcyBjb2RlIHRvIHdoZXJlIHRoZSBjb25zdGFudHMgcG9v bCB3aWxsIGJlICovCisgICAgaWYgKGFkZHJfcmVnKQorICAgICAgICB0Y2dfb3V0X2RhdF9yZWco cywgY29uZCwgQVJJVEhfTU9WLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgYWRkcl9y ZWcsIFNISUZUX0lNTV9MU0woMCkpOworIyBpZiBUQVJHRVRfTE9OR19CSVRTID09IDMyCisgICAg c3dpdGNoIChvcGMpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIHRjZ19vdXRfZGF0X2ltbShzLCBj b25kLCBBUklUSF9BTkQsIDEsIGRhdGFfcmVnLCAweGZmKTsKKyAgICAgICAgdGNnX291dF9kYXRf aW1tKHMsIGNvbmQsIEFSSVRIX01PViwgMiwgMCwgbWVtX2luZGV4KTsKKyAgICAgICAgYnJlYWs7 CisgICAgY2FzZSAxOgorICAgICAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9W LAorICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgZGF0YV9yZWcsIFNISUZUX0lNTV9MU0wo MTYpKTsKKyAgICAgICAgdGNnX291dF9kYXRfcmVnKHMsIGNvbmQsIEFSSVRIX01PViwKKyAgICAg ICAgICAgICAgICAgICAgICAgIDEsIDAsIDEsIFNISUZUX0lNTV9MU1IoMTYpKTsKKyAgICAgICAg dGNnX291dF9kYXRfaW1tKHMsIGNvbmQsIEFSSVRIX01PViwgMiwgMCwgbWVtX2luZGV4KTsKKyAg ICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICBpZiAoZGF0YV9yZWcgIT0gMSkKKyAg ICAgICAgICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBjb25kLCBBUklUSF9NT1YsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMSwgMCwgZGF0YV9yZWcsIFNISUZUX0lNTV9MU0woMCkpOworICAg ICAgICB0Y2dfb3V0X2RhdF9pbW0ocywgY29uZCwgQVJJVEhfTU9WLCAyLCAwLCBtZW1faW5kZXgp OworICAgICAgICBicmVhazsKKyAgICBjYXNlIDM6CisgICAgICAgIGlmIChkYXRhX3JlZyAhPSAx KQorICAgICAgICAgICAgdGNnX291dF9kYXRfcmVnKHMsIGNvbmQsIEFSSVRIX01PViwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxLCAwLCBkYXRhX3JlZywgU0hJRlRfSU1NX0xTTCgwKSk7 CisgICAgICAgIGlmIChkYXRhX3JlZzIgIT0gMikKKyAgICAgICAgICAgIHRjZ19vdXRfZGF0X3Jl ZyhzLCBjb25kLCBBUklUSF9NT1YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgMCwg ZGF0YV9yZWcyLCBTSElGVF9JTU1fTFNMKDApKTsKKyAgICAgICAgdGNnX291dF9kYXRfaW1tKHMs IGNvbmQsIEFSSVRIX01PViwgMywgMCwgbWVtX2luZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAg fQorIyBlbHNlCisgICAgaWYgKGFkZHJfcmVnMiAhPSAxKQorICAgICAgICB0Y2dfb3V0X2RhdF9y ZWcocywgY29uZCwgQVJJVEhfTU9WLAorICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgYWRk cl9yZWcyLCBTSElGVF9JTU1fTFNMKDApKTsKKyAgICBzd2l0Y2ggKG9wYykgeworICAgIGNhc2Ug MDoKKyAgICAgICAgdGNnX291dF9kYXRfaW1tKHMsIGNvbmQsIEFSSVRIX0FORCwgMiwgZGF0YV9y ZWcsIDB4ZmYpOworICAgICAgICB0Y2dfb3V0X2RhdF9pbW0ocywgY29uZCwgQVJJVEhfTU9WLCAz LCAwLCBtZW1faW5kZXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIHRj Z19vdXRfZGF0X3JlZyhzLCBjb25kLCBBUklUSF9NT1YsCisgICAgICAgICAgICAgICAgICAgICAg ICAyLCAwLCBkYXRhX3JlZywgU0hJRlRfSU1NX0xTTCgxNikpOworICAgICAgICB0Y2dfb3V0X2Rh dF9yZWcocywgY29uZCwgQVJJVEhfTU9WLAorICAgICAgICAgICAgICAgICAgICAgICAgMiwgMCwg MiwgU0hJRlRfSU1NX0xTUigxNikpOworICAgICAgICB0Y2dfb3V0X2RhdF9pbW0ocywgY29uZCwg QVJJVEhfTU9WLCAzLCAwLCBtZW1faW5kZXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6 CisgICAgICAgIGlmIChkYXRhX3JlZyAhPSAyKQorICAgICAgICAgICAgdGNnX291dF9kYXRfcmVn KHMsIGNvbmQsIEFSSVRIX01PViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAwLCBk YXRhX3JlZywgU0hJRlRfSU1NX0xTTCgwKSk7CisgICAgICAgIHRjZ19vdXRfZGF0X2ltbShzLCBj b25kLCBBUklUSF9NT1YsIDMsIDAsIG1lbV9pbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgMzoKKyAgICAgICAgdGNnX291dF9kYXRfaW1tKHMsIGNvbmQsIEFSSVRIX01PViwgMywgMCwg bWVtX2luZGV4KTsKKyAgICAgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MDUyZDMw MTApOyAvKiBzdHIgcjMsIFtzcCwgIy0weDEwXSEgKi8KKyAgICAgICAgaWYgKGRhdGFfcmVnICE9 IDIpCisgICAgICAgICAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDIsIDAsIGRhdGFfcmVnLCBTSElGVF9JTU1fTFNMKDAp KTsKKyAgICAgICAgaWYgKGRhdGFfcmVnMiAhPSAzKQorICAgICAgICAgICAgdGNnX291dF9kYXRf cmVnKHMsIGNvbmQsIEFSSVRIX01PViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLCAw LCBkYXRhX3JlZzIsIFNISUZUX0lNTV9MU0woMCkpOworICAgICAgICBicmVhazsKKyAgICB9Cisj IGVuZGlmCisKKyAgICB0Y2dfb3V0X2JsKHMsIGNvbmQsICh0Y2dfdGFyZ2V0X2xvbmcpIHFlbXVf c3RfaGVscGVyc1tzX2JpdHNdIC0gCisgICAgICAgICAgICAgICAgICAgICh0Y2dfdGFyZ2V0X2xv bmcpIHMtPmNvZGVfcHRyKTsKKworIyBpZiBUQVJHRVRfTE9OR19CSVRTID09IDY0CisgICAgaWYg KG9wYyA9PSAzKQorICAgICAgICB0Y2dfb3V0X2RhdF9pbW0ocywgY29uZCwgQVJJVEhfQURELCAx MywgMTMsIDB4MTApOworIyBlbmRpZgorCisjIGlmZGVmIFNBVkVfTFIKKyAgICB0Y2dfb3V0X2Rh dF9yZWcocywgY29uZCwgQVJJVEhfTU9WLCAxNCwgMCwgOCwgU0hJRlRfSU1NX0xTTCgwKSk7Cisj IGVuZGlmCisKKyMgaWZkZWYgVVNFX1RMQgorICAgICpsYWJlbF9wdHIgKz0gKCh2b2lkICopIHMt PmNvZGVfcHRyIC0gKHZvaWQgKikgbGFiZWxfcHRyIC0gOCkgPj4gMjsKKyMgZW5kaWYKKyNlbHNl CisgICAgc3dpdGNoIChvcGMpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIHRjZ19vdXRfc3Q4XzEy KHMsIENPTkRfQUwsIGRhdGFfcmVnLCBhZGRyX3JlZywgMCk7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgMCB8IDQ6CisgICAgICAgIHRjZ19vdXRfbGQ4c184KHMsIENPTkRfQUwsIGRhdGFfcmVn LCBhZGRyX3JlZywgMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgdGNn X291dF9zdDE2dV84KHMsIENPTkRfQUwsIGRhdGFfcmVnLCBhZGRyX3JlZywgMCk7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgMSB8IDQ6CisgICAgICAgIHRjZ19vdXRfc3QxNnNfOChzLCBDT05E X0FMLCBkYXRhX3JlZywgYWRkcl9yZWcsIDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6 CisgICAgZGVmYXVsdDoKKyAgICAgICAgdGNnX291dF9zdDMyXzEyKHMsIENPTkRfQUwsIGRhdGFf cmVnLCBhZGRyX3JlZywgMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgICAg LyogVE9ETzogdXNlIGJsb2NrIGxvYWQgKi8KKyAgICAgICAgdGNnX291dF9zdDMyXzEyKHMsIENP TkRfQUwsIGRhdGFfcmVnLCBhZGRyX3JlZywgMCk7CisgICAgICAgIHRjZ19vdXRfc3QzMl8xMihz LCBDT05EX0FMLCBkYXRhX3JlZzIsIGFkZHJfcmVnLCA0KTsKKyAgICAgICAgYnJlYWs7CisgICAg fQorI2VuZGlmCit9CisKK2V4dGVybiB2b2lkIGV4ZWNfbG9vcDsKKworc3RhdGljIGlubGluZSB2 b2lkIHRjZ19vdXRfb3AoVENHQ29udGV4dCAqcywgaW50IG9wYywgCisgICAgICAgICAgICAgICAg Y29uc3QgVENHQXJnICphcmdzLCBjb25zdCBpbnQgKmNvbnN0X2FyZ3MpCit7CisgICAgaW50IGM7 CisKKyAgICBzd2l0Y2ggKG9wYykgeworICAgIGNhc2UgSU5ERVhfb3BfZXhpdF90YjoKKyNpZmRl ZiBTQVZFX0xSCisgICAgICAgIGlmIChhcmdzWzBdKQorICAgICAgICAgICAgdGNnX291dF9sZDMy XzEyKHMsIENPTkRfQUwsIFRDR19SRUdfUjAsIDE1LCAwKTsKKyAgICAgICAgZWxzZQorICAgICAg ICAgICAgdGNnX291dF9kYXRfaW1tKHMsIENPTkRfQUwsIEFSSVRIX01PViwgVENHX1JFR19SMCwg MCwgYXJnc1swXSk7CisgICAgICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBDT05EX0FMLCBBUklUSF9N T1YsIDE1LCAwLCAxNCwgU0hJRlRfSU1NX0xTTCgwKSk7CisgICAgICAgIGlmIChhcmdzWzBdKQor ICAgICAgICAgICAgdGNnX291dDMyKHMsIGFyZ3NbMF0pOworI2Vsc2UKKyAgICAgICAgaWYgKGFy Z3NbMF0pCisgICAgICAgICAgICB0Y2dfb3V0X2xkMzJfMTIocywgQ09ORF9BTCwgVENHX0FSRUcx LCAxNSwgMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRjZ19vdXRfZGF0X2ltbShzLCBD T05EX0FMLCBBUklUSF9NT1YsIFRDR19BUkVHMSwgMCwgYXJnc1swXSk7CisgICAgICAgIHRjZ19v dXRfZ290byhzLCBDT05EX0FMLCAodGNnX3RhcmdldF91bG9uZykgJmV4ZWNfbG9vcCk7CisgICAg ICAgIGlmIChhcmdzWzBdKQorICAgICAgICAgICAgdGNnX291dDMyKHMsIGFyZ3NbMF0pOworI2Vu ZGlmCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5ERVhfb3BfZ290b190YjoKKyAgICAgICAg aWYgKHMtPnRiX2ptcF9vZmZzZXQpIHsKKyAgICAgICAgICAgIC8qIERpcmVjdCBqdW1wIG1ldGhv ZCAqLworI2lmIDEKKyAgICAgICAgICAgIHMtPnRiX2ptcF9vZmZzZXRbYXJnc1swXV0gPSBzLT5j b2RlX3B0ciAtIHMtPmNvZGVfYnVmOworICAgICAgICAgICAgdGNnX291dF9iKHMsIENPTkRfQUws IDgpOworI2Vsc2UKKyAgICAgICAgICAgIHRjZ19vdXRfbGQzMl8xMihzLCBDT05EX0FMLCAxNSwg MTUsIC00KTsKKyAgICAgICAgICAgIHMtPnRiX2ptcF9vZmZzZXRbYXJnc1swXV0gPSBzLT5jb2Rl X3B0ciAtIHMtPmNvZGVfYnVmOworICAgICAgICAgICAgdGNnX291dDMyKHMsIDApOworI2VuZGlm CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBJbmRpcmVjdCBqdW1wIG1ldGhvZCAq LworI2lmIDEKKyAgICAgICAgICAgIGMgPSAoaW50KSAocy0+dGJfbmV4dCArIGFyZ3NbMF0pIC0g KChpbnQpIHMtPmNvZGVfcHRyICsgOCk7CisgICAgICAgICAgICBpZiAoYyA+IDB4ZmZmIHx8IGMg PCAtMHhmZmYpIHsKKyAgICAgICAgICAgICAgICB0Y2dfb3V0X21vdmkzMihzLCBDT05EX0FMLCBU Q0dfUkVHX1IwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGNnX3RhcmdldF9s b25nKSAocy0+dGJfbmV4dCArIGFyZ3NbMF0pKTsKKyAgICAgICAgICAgICAgICB0Y2dfb3V0X2xk MzJfMTIocywgQ09ORF9BTCwgMTUsIFRDR19SRUdfUjAsIDApOworICAgICAgICAgICAgfSBlbHNl CisgICAgICAgICAgICAgICAgdGNnX291dF9sZDMyXzEyKHMsIENPTkRfQUwsIDE1LCAxNSwgYyk7 CisjZWxzZQorICAgICAgICAgICAgdGNnX291dF9sZDMyXzEyKHMsIENPTkRfQUwsIFRDR19SRUdf UjAsIDE1LCAwKTsKKyAgICAgICAgICAgIHRjZ19vdXRfbGQzMl8xMihzLCBDT05EX0FMLCAxNSwg VENHX1JFR19SMCwgMCk7CisgICAgICAgICAgICB0Y2dfb3V0MzIocywgKHRjZ190YXJnZXRfbG9u ZykgKHMtPnRiX25leHQgKyBhcmdzWzBdKSk7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBz LT50Yl9uZXh0X29mZnNldFthcmdzWzBdXSA9IHMtPmNvZGVfcHRyIC0gcy0+Y29kZV9idWY7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5ERVhfb3BfY2FsbDoKKyAgICAgICAgaWYgKGNvbnN0 X2FyZ3NbMF0pCisgICAgICAgICAgICB0Y2dfb3V0X2NhbGwocywgQ09ORF9BTCwgYXJnc1swXSk7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRjZ19vdXRfY2FsbHIocywgQ09ORF9BTCwgYXJn c1swXSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5ERVhfb3Bfam1wOgorICAgICAgICBp ZiAoY29uc3RfYXJnc1swXSkKKyAgICAgICAgICAgIHRjZ19vdXRfZ290byhzLCBDT05EX0FMLCBh cmdzWzBdKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGNnX291dF9ieChzLCBDT05EX0FM LCBhcmdzWzBdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTkRFWF9vcF9icjoKKyAgICAg ICAgdGNnX291dF9nb3RvX2xhYmVsKHMsIENPTkRfQUwsIGFyZ3NbMF0pOworICAgICAgICBicmVh azsKKworICAgIGNhc2UgSU5ERVhfb3BfbGQ4dV9pMzI6CisgICAgICAgIHRjZ19vdXRfbGQ4dShz LCBDT05EX0FMLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBJTkRFWF9vcF9sZDhzX2kzMjoKKyAgICAgICAgdGNnX291dF9sZDhzKHMsIENPTkRf QUwsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pOworICAgICAgICBicmVhazsKKyAgICBjYXNl IElOREVYX29wX2xkMTZ1X2kzMjoKKyAgICAgICAgdGNnX291dF9sZDE2dShzLCBDT05EX0FMLCBh cmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTkRF WF9vcF9sZDE2c19pMzI6CisgICAgICAgIHRjZ19vdXRfbGQxNnMocywgQ09ORF9BTCwgYXJnc1sw XSwgYXJnc1sxXSwgYXJnc1syXSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5ERVhfb3Bf bGRfaTMyOgorICAgICAgICB0Y2dfb3V0X2xkMzJ1KHMsIENPTkRfQUwsIGFyZ3NbMF0sIGFyZ3Nb MV0sIGFyZ3NbMl0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElOREVYX29wX3N0OF9pMzI6 CisgICAgICAgIHRjZ19vdXRfc3Q4dShzLCBDT05EX0FMLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdz WzJdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTkRFWF9vcF9zdDE2X2kzMjoKKyAgICAg ICAgdGNnX291dF9zdDE2dShzLCBDT05EX0FMLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTkRFWF9vcF9zdF9pMzI6CisgICAgICAgIHRjZ19v dXRfc3QzMihzLCBDT05EX0FMLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTsKKyAgICAgICAg YnJlYWs7CisKKyAgICBjYXNlIElOREVYX29wX21vdl9pMzI6CisgICAgICAgIHRjZ19vdXRfZGF0 X3JlZyhzLCBDT05EX0FMLCBBUklUSF9NT1YsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdz WzBdLCAwLCBhcmdzWzFdLCBTSElGVF9JTU1fTFNMKDApKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBJTkRFWF9vcF9tb3ZpX2kzMjoKKyAgICAgICAgdGNnX291dF9tb3ZpMzIocywgQ09ORF9B TCwgYXJnc1swXSwgYXJnc1sxXSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5ERVhfb3Bf YWRkX2kzMjoKKyAgICAgICAgYyA9IEFSSVRIX0FERDsKKyAgICAgICAgZ290byBnZW5fYXJpdGg7 CisgICAgY2FzZSBJTkRFWF9vcF9zdWJfaTMyOgorICAgICAgICBjID0gQVJJVEhfU1VCOworICAg ICAgICBnb3RvIGdlbl9hcml0aDsKKyAgICBjYXNlIElOREVYX29wX2FuZF9pMzI6CisgICAgICAg IGMgPSBBUklUSF9BTkQ7CisgICAgICAgIGdvdG8gZ2VuX2FyaXRoOworICAgIGNhc2UgSU5ERVhf b3Bfb3JfaTMyOgorICAgICAgICBjID0gQVJJVEhfT1JSOworICAgICAgICBnb3RvIGdlbl9hcml0 aDsKKyAgICBjYXNlIElOREVYX29wX3hvcl9pMzI6CisgICAgICAgIGMgPSBBUklUSF9FT1I7Cisg ICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisgICAgZ2VuX2FyaXRoOgorICAgICAgICB0Y2df b3V0X2RhdF9yZWcocywgQ09ORF9BTCwgYywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Nb MF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIFNISUZUX0lNTV9MU0woMCkpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIElOREVYX29wX2FkZDJfaTMyOgorICAgICAgICB0Y2dfb3V0X2RhdF9yZWcyKHMs IENPTkRfQUwsIEFSSVRIX0FERCwgQVJJVEhfQURDLAorICAgICAgICAgICAgICAgICAgICAgICAg YXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwKKyAgICAgICAgICAgICAgICAgICAg ICAgIGFyZ3NbNF0sIGFyZ3NbNV0sIFNISUZUX0lNTV9MU0woMCkpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIElOREVYX29wX3N1YjJfaTMyOgorICAgICAgICB0Y2dfb3V0X2RhdF9yZWcyKHMs IENPTkRfQUwsIEFSSVRIX1NVQiwgQVJJVEhfU0JDLAorICAgICAgICAgICAgICAgICAgICAgICAg YXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwKKyAgICAgICAgICAgICAgICAgICAg ICAgIGFyZ3NbNF0sIGFyZ3NbNV0sIFNISUZUX0lNTV9MU0woMCkpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIElOREVYX29wX211bF9pMzI6CisgICAgICAgIHRjZ19vdXRfbXVsMzIocywgQ09O RF9BTCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgSU5ERVhfb3BfbXVsdTJfaTMyOgorICAgICAgICB0Y2dfb3V0X3VtdWxsMzIocywgQ09ORF9B TCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgSU5ERVhfb3BfZGl2Ml9pMzI6CisgICAgICAgIHRjZ19vdXRfZGl2X2hlbHBlcihz LCBDT05EX0FMLCBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgdGNnX2hlbHBlcl9kaXZf aTY0LCB0Y2dfaGVscGVyX3JlbV9pNjQsCisgICAgICAgICAgICAgICAgICAgICAgICBTSElGVF9J TU1fQVNSKDMxKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5ERVhfb3BfZGl2dTJfaTMy OgorICAgICAgICB0Y2dfb3V0X2Rpdl9oZWxwZXIocywgQ09ORF9BTCwgYXJncywKKyAgICAgICAg ICAgICAgICAgICAgICAgIHRjZ19oZWxwZXJfZGl2dV9pNjQsIHRjZ19oZWxwZXJfcmVtdV9pNjQs CisgICAgICAgICAgICAgICAgICAgICAgICBTSElGVF9JTU1fTFNSKDMxKSk7CisgICAgICAgIGJy ZWFrOworICAgIC8qIFhYWDogUGVyaGFwcyBhcmdzWzJdICYgMHgxZiBpcyB3cm9uZyAqLworICAg IGNhc2UgSU5ERVhfb3Bfc2hsX2kzMjoKKyAgICAgICAgYyA9IGNvbnN0X2FyZ3NbMl0gPworICAg ICAgICAgICAgICAgIFNISUZUX0lNTV9MU0woYXJnc1syXSAmIDB4MWYpIDogU0hJRlRfUkVHX0xT TChhcmdzWzJdKTsKKyAgICAgICAgZ290byBnZW5fc2hpZnQzMjsKKyAgICBjYXNlIElOREVYX29w X3Nocl9pMzI6CisgICAgICAgIGMgPSBjb25zdF9hcmdzWzJdID8gKGFyZ3NbMl0gJiAweDFmKSA/ IFNISUZUX0lNTV9MU1IoYXJnc1syXSAmIDB4MWYpIDoKKyAgICAgICAgICAgICAgICBTSElGVF9J TU1fTFNMKDApIDogU0hJRlRfUkVHX0xTUihhcmdzWzJdKTsKKyAgICAgICAgZ290byBnZW5fc2hp ZnQzMjsKKyAgICBjYXNlIElOREVYX29wX3Nhcl9pMzI6CisgICAgICAgIGMgPSBjb25zdF9hcmdz WzJdID8gKGFyZ3NbMl0gJiAweDFmKSA/IFNISUZUX0lNTV9BU1IoYXJnc1syXSAmIDB4MWYpIDoK KyAgICAgICAgICAgICAgICBTSElGVF9JTU1fTFNMKDApIDogU0hJRlRfUkVHX0FTUihhcmdzWzJd KTsKKyAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyAgICBnZW5fc2hpZnQzMjoKKyAgICAg ICAgdGNnX291dF9kYXRfcmVnKHMsIENPTkRfQUwsIEFSSVRIX01PViwgYXJnc1swXSwgMCwgYXJn c1sxXSwgYyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJTkRFWF9vcF9icmNvbmRfaTMy OgorICAgICAgICB0Y2dfb3V0X2RhdF9yZWcocywgQ09ORF9BTCwgQVJJVEhfQ01QLCAwLAorICAg ICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSwgYXJnc1sxXSwgU0hJRlRfSU1NX0xTTCgwKSk7 CisgICAgICAgIHRjZ19vdXRfZ290b19sYWJlbChzLCB0Y2dfY29uZF90b19hcm1fY29uZFthcmdz WzJdXSwgYXJnc1szXSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5ERVhfb3BfYnJjb25k Ml9pMzI6CisgICAgICAgIC8qIFRoZSByZXN1bHRpbmcgY29uZGl0aW9ucyBhcmU6CisgICAgICAg ICAqIFRDR19DT05EX0VRICAgIC0tPiAgYTAgPT0gYTIgJiYgYTEgPT0gYTMsCisgICAgICAgICAq IFRDR19DT05EX05FICAgIC0tPiAoYTAgIT0gYTIgJiYgYTEgPT0gYTMpIHx8ICBhMSAhPSBhMywK KyAgICAgICAgICogVENHX0NPTkRfTFQoVSkgLS0+IChhMCA8ICBhMiAmJiBhMSA9PSBhMykgfHwg IGExIDwgIGEzLAorICAgICAgICAgKiBUQ0dfQ09ORF9HRShVKSAtLT4gKGEwID49IGEyICYmIGEx ID09IGEzKSB8fCAoYTEgPj0gYTMgJiYgYTEgIT0gYTMpLAorICAgICAgICAgKiBUQ0dfQ09ORF9M RShVKSAtLT4gKGEwIDw9IGEyICYmIGExID09IGEzKSB8fCAoYTEgPD0gYTMgJiYgYTEgIT0gYTMp LAorICAgICAgICAgKiBUQ0dfQ09ORF9HVChVKSAtLT4gKGEwID4gIGEyICYmIGExID09IGEzKSB8 fCAgYTEgPiAgYTMsCisgICAgICAgICAqLworICAgICAgICB0Y2dfb3V0X2RhdF9yZWcocywgQ09O RF9BTCwgQVJJVEhfQ01QLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sxXSwgYXJn c1szXSwgU0hJRlRfSU1NX0xTTCgwKSk7CisgICAgICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBDT05E X0VRLCBBUklUSF9DTVAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzBdLCBhcmdz WzJdLCBTSElGVF9JTU1fTFNMKDApKTsKKyAgICAgICAgdGNnX291dF9nb3RvX2xhYmVsKHMsIHRj Z19jb25kX3RvX2FybV9jb25kW2FyZ3NbNF1dLCBhcmdzWzVdKTsKKyAgICAgICAgYnJlYWs7CisK KyAgICBjYXNlIElOREVYX29wX3FlbXVfbGQ4dToKKyAgICAgICAgdGNnX291dF9xZW11X2xkKHMs IENPTkRfQUwsIGFyZ3MsIDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElOREVYX29wX3Fl bXVfbGQ4czoKKyAgICAgICAgdGNnX291dF9xZW11X2xkKHMsIENPTkRfQUwsIGFyZ3MsIDAgfCA0 KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTkRFWF9vcF9xZW11X2xkMTZ1OgorICAgICAg ICB0Y2dfb3V0X3FlbXVfbGQocywgQ09ORF9BTCwgYXJncywgMSk7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgSU5ERVhfb3BfcWVtdV9sZDE2czoKKyAgICAgICAgdGNnX291dF9xZW11X2xkKHMs IENPTkRfQUwsIGFyZ3MsIDEgfCA0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTkRFWF9v cF9xZW11X2xkMzJ1OgorICAgICAgICB0Y2dfb3V0X3FlbXVfbGQocywgQ09ORF9BTCwgYXJncywg Mik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5ERVhfb3BfcWVtdV9sZDY0OgorICAgICAg ICB0Y2dfb3V0X3FlbXVfbGQocywgQ09ORF9BTCwgYXJncywgMyk7CisgICAgICAgIGJyZWFrOwor ICAgICAgICAKKyAgICBjYXNlIElOREVYX29wX3FlbXVfc3Q4OgorICAgICAgICB0Y2dfb3V0X3Fl bXVfc3QocywgQ09ORF9BTCwgYXJncywgMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5E RVhfb3BfcWVtdV9zdDE2OgorICAgICAgICB0Y2dfb3V0X3FlbXVfc3QocywgQ09ORF9BTCwgYXJn cywgMSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5ERVhfb3BfcWVtdV9zdDMyOgorICAg ICAgICB0Y2dfb3V0X3FlbXVfc3QocywgQ09ORF9BTCwgYXJncywgMik7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgSU5ERVhfb3BfcWVtdV9zdDY0OgorICAgICAgICB0Y2dfb3V0X3FlbXVfc3Qo cywgQ09ORF9BTCwgYXJncywgMyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJTkRFWF9v cF9leHQ4c19pMzI6CisgICAgICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBDT05EX0FMLCBBUklUSF9N T1YsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzBdLCAwLCBhcmdzWzFdLCBTSElGVF9J TU1fTFNMKDI0KSk7CisgICAgICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBDT05EX0FMLCBBUklUSF9N T1YsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzBdLCAwLCBhcmdzWzBdLCBTSElGVF9J TU1fQVNSKDI0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5ERVhfb3BfZXh0MTZzX2kz MjoKKyAgICAgICAgdGNnX291dF9kYXRfcmVnKHMsIENPTkRfQUwsIEFSSVRIX01PViwKKyAgICAg ICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0sIDAsIGFyZ3NbMV0sIFNISUZUX0lNTV9MU0woMTYp KTsKKyAgICAgICAgdGNnX291dF9kYXRfcmVnKHMsIENPTkRfQUwsIEFSSVRIX01PViwKKyAgICAg ICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0sIDAsIGFyZ3NbMF0sIFNISUZUX0lNTV9BU1IoMTYp KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICB0Y2dfYWJvcnQoKTsK KyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCBUQ0dUYXJnZXRPcERlZiBhcm1fb3BfZGVmc1tdID0g eworICAgIHsgSU5ERVhfb3BfZXhpdF90YiwgeyB9IH0sCisgICAgeyBJTkRFWF9vcF9nb3RvX3Ri LCB7IH0gfSwKKyAgICB7IElOREVYX29wX2NhbGwsIHsgInJpIiB9IH0sCisgICAgeyBJTkRFWF9v cF9qbXAsIHsgInJpIiB9IH0sCisgICAgeyBJTkRFWF9vcF9iciwgeyB9IH0sCisKKyAgICB7IElO REVYX29wX21vdl9pMzIsIHsgInIiLCAiciIgfSB9LAorICAgIHsgSU5ERVhfb3BfbW92aV9pMzIs IHsgInIiIH0gfSwKKworICAgIHsgSU5ERVhfb3BfbGQ4dV9pMzIsIHsgInIiLCAiciIgfSB9LAor ICAgIHsgSU5ERVhfb3BfbGQ4c19pMzIsIHsgInIiLCAiciIgfSB9LAorICAgIHsgSU5ERVhfb3Bf bGQxNnVfaTMyLCB7ICJyIiwgInIiIH0gfSwKKyAgICB7IElOREVYX29wX2xkMTZzX2kzMiwgeyAi ciIsICJyIiB9IH0sCisgICAgeyBJTkRFWF9vcF9sZF9pMzIsIHsgInIiLCAiciIgfSB9LAorICAg IHsgSU5ERVhfb3Bfc3Q4X2kzMiwgeyAiciIsICJyIiB9IH0sCisgICAgeyBJTkRFWF9vcF9zdDE2 X2kzMiwgeyAiciIsICJyIiB9IH0sCisgICAgeyBJTkRFWF9vcF9zdF9pMzIsIHsgInIiLCAiciIg fSB9LAorCisgICAgLyogVE9ETzogInIiLCAiciIsICJyaSIgKi8KKyAgICB7IElOREVYX29wX2Fk ZF9pMzIsIHsgInIiLCAiciIsICJyIiB9IH0sCisgICAgeyBJTkRFWF9vcF9zdWJfaTMyLCB7ICJy IiwgInIiLCAiciIgfSB9LAorICAgIHsgSU5ERVhfb3BfbXVsX2kzMiwgeyAiciIsICJyIiwgInIi IH0gfSwKKyAgICB7IElOREVYX29wX211bHUyX2kzMiwgeyAiciIsICJyIiwgInIiLCAiciIgfSB9 LAorICAgIHsgSU5ERVhfb3BfZGl2Ml9pMzIsIHsgInIiLCAiciIsICJyIiwgIjEiLCAiMiIgfSB9 LAorICAgIHsgSU5ERVhfb3BfZGl2dTJfaTMyLCB7ICJyIiwgInIiLCAiciIsICIxIiwgIjIiIH0g fSwKKyAgICB7IElOREVYX29wX2FuZF9pMzIsIHsgInIiLCAiciIsICJyIiB9IH0sCisgICAgeyBJ TkRFWF9vcF9vcl9pMzIsIHsgInIiLCAiciIsICJyIiB9IH0sCisgICAgeyBJTkRFWF9vcF94b3Jf aTMyLCB7ICJyIiwgInIiLCAiciIgfSB9LAorCisgICAgeyBJTkRFWF9vcF9zaGxfaTMyLCB7ICJy IiwgInIiLCAicmkiIH0gfSwKKyAgICB7IElOREVYX29wX3Nocl9pMzIsIHsgInIiLCAiciIsICJy aSIgfSB9LAorICAgIHsgSU5ERVhfb3Bfc2FyX2kzMiwgeyAiciIsICJyIiwgInJpIiB9IH0sCisK KyAgICB7IElOREVYX29wX2JyY29uZF9pMzIsIHsgInIiLCAiciIgfSB9LAorCisgICAgLyogVE9E TzogInIiLCAiciIsICJyIiwgInIiLCAicmkiLCAicmkiICovCisgICAgeyBJTkRFWF9vcF9hZGQy X2kzMiwgeyAiciIsICJyIiwgInIiLCAiciIsICJyIiwgInIiIH0gfSwKKyAgICB7IElOREVYX29w X3N1YjJfaTMyLCB7ICJyIiwgInIiLCAiciIsICJyIiwgInIiLCAiciIgfSB9LAorICAgIHsgSU5E RVhfb3BfYnJjb25kMl9pMzIsIHsgInIiLCAiciIsICJyIiwgInIiIH0gfSwKKworICAgIHsgSU5E RVhfb3BfcWVtdV9sZDh1LCB7ICJyIiwgIngiLCAiWCIgfSB9LAorICAgIHsgSU5ERVhfb3BfcWVt dV9sZDhzLCB7ICJyIiwgIngiLCAiWCIgfSB9LAorICAgIHsgSU5ERVhfb3BfcWVtdV9sZDE2dSwg eyAiciIsICJ4IiwgIlgiIH0gfSwKKyAgICB7IElOREVYX29wX3FlbXVfbGQxNnMsIHsgInIiLCAi eCIsICJYIiB9IH0sCisgICAgeyBJTkRFWF9vcF9xZW11X2xkMzJ1LCB7ICJyIiwgIngiLCAiWCIg fSB9LAorICAgIHsgSU5ERVhfb3BfcWVtdV9sZDY0LCB7ICJyIiwgImQiLCAieCIsICJYIiB9IH0s CisKKyAgICB7IElOREVYX29wX3FlbXVfc3Q4LCB7ICJkIiwgIngiLCAiWCIgfSB9LAorICAgIHsg SU5ERVhfb3BfcWVtdV9zdDE2LCB7ICJkIiwgIngiLCAiWCIgfSB9LAorICAgIHsgSU5ERVhfb3Bf cWVtdV9zdDMyLCB7ICJkIiwgIngiLCAiWCIgfSB9LAorICAgIHsgSU5ERVhfb3BfcWVtdV9zdDY0 LCB7ICJkIiwgIkQiLCAieCIsICJYIiB9IH0sCisKKyAgICB7IElOREVYX29wX2V4dDhzX2kzMiwg eyAiciIsICJyIiB9IH0sCisgICAgeyBJTkRFWF9vcF9leHQxNnNfaTMyLCB7ICJyIiwgInIiIH0g fSwKKworICAgIHsgLTEgfSwKK307CisKK3ZvaWQgdGNnX3RhcmdldF9pbml0KFRDR0NvbnRleHQg KnMpCit7CisgICAgLyogZmFpbCBzYWZlICovCisgICAgaWYgKCgxIDw8IENQVV9UTEJfRU5UUllf QklUUykgIT0gc2l6ZW9mKENQVVRMQkVudHJ5KSkKKyAgICAgICAgdGNnX2Fib3J0KCk7CisKKyAg ICB0Y2dfcmVnc2V0X3NldDMyKHRjZ190YXJnZXRfYXZhaWxhYmxlX3JlZ3NbVENHX1RZUEVfSTMy XSwgMCwKKyAgICAgICAgICAgICAgICAgICAgKCgxIDw8IFRDR19SRUdfUjE0KSAtIDEpICYgfigx IDw8IFRDR19SRUdfUjgpKTsKKyAgICB0Y2dfcmVnc2V0X3NldDMyKHRjZ190YXJnZXRfY2FsbF9j bG9iYmVyX3JlZ3MsIDAsCisgICAgICAgICAgICAgICAgICAgICgoMSA8PCBUQ0dfUkVHX1I0KSAt IDEpIHwgKDEgPDwgVENHX1JFR19SMTIpKTsKKworICAgIHRjZ19yZWdzZXRfY2xlYXIocy0+cmVz ZXJ2ZWRfcmVncyk7CisjaWZkZWYgU0FWRV9MUgorICAgIHRjZ19yZWdzZXRfc2V0X3JlZyhzLT5y ZXNlcnZlZF9yZWdzLCBUQ0dfUkVHX1IxNCk7CisjZW5kaWYKKyAgICB0Y2dfcmVnc2V0X3NldF9y ZWcocy0+cmVzZXJ2ZWRfcmVncywgVENHX1JFR19DQUxMX1NUQUNLKTsKKyAgICB0Y2dfcmVnc2V0 X3NldF9yZWcocy0+cmVzZXJ2ZWRfcmVncywgVENHX1JFR19SOCk7CisjaWZkZWYgU0FWRV9MUgor ICAgIHRjZ19yZWdzZXRfc2V0X3JlZyhzLT5yZXNlcnZlZF9yZWdzLCBUQ0dfUkVHX1IxMik7Cisj ZW5kaWYKKworICAgIHRjZ19hZGRfdGFyZ2V0X2FkZF9vcF9kZWZzKGFybV9vcF9kZWZzKTsKK30K Kworc3RhdGljIGlubGluZSB2b2lkIHRjZ19vdXRfbGQoVENHQ29udGV4dCAqcywgVENHVHlwZSB0 eXBlLCBpbnQgYXJnLAorICAgICAgICAgICAgICAgIGludCBhcmcxLCB0Y2dfdGFyZ2V0X2xvbmcg YXJnMikKK3sKKyAgICB0Y2dfb3V0X2xkMzJ1KHMsIENPTkRfQUwsIGFyZywgYXJnMSwgYXJnMik7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0X3N0KFRDR0NvbnRleHQgKnMsIFRDR1R5 cGUgdHlwZSwgaW50IGFyZywKKyAgICAgICAgICAgICAgICBpbnQgYXJnMSwgdGNnX3RhcmdldF9s b25nIGFyZzIpCit7CisgICAgdGNnX291dF9zdDMyKHMsIENPTkRfQUwsIGFyZywgYXJnMSwgYXJn Mik7Cit9CisKK3ZvaWQgdGNnX291dF9hZGRpKFRDR0NvbnRleHQgKnMsIGludCByZWcsIHRjZ190 YXJnZXRfbG9uZyB2YWwpCit7CisgICAgaWYgKHZhbCA+IDApCisgICAgICAgIGlmICh2YWwgPCAw eDEwMCkKKyAgICAgICAgICAgIHRjZ19vdXRfZGF0X2ltbShzLCBDT05EX0FMLCBBUklUSF9BREQs IHJlZywgcmVnLCB2YWwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0Y2dfYWJvcnQoKTsK KyAgICBlbHNlIGlmICh2YWwgPCAwKSB7CisgICAgICAgIGlmICh2YWwgPiAtMHgxMDApCisgICAg ICAgICAgICB0Y2dfb3V0X2RhdF9pbW0ocywgQ09ORF9BTCwgQVJJVEhfU1VCLCByZWcsIHJlZywg LXZhbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRjZ19hYm9ydCgpOworICAgIH0KK30K Kworc3RhdGljIGlubGluZSB2b2lkIHRjZ19vdXRfbW92KFRDR0NvbnRleHQgKnMsIGludCByZXQs IGludCBhcmcpCit7CisgICAgdGNnX291dF9kYXRfcmVnKHMsIENPTkRfQUwsIEFSSVRIX01PViwg cmV0LCAwLCBhcmcsIFNISUZUX0lNTV9MU0woMCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg dGNnX291dF9tb3ZpKFRDR0NvbnRleHQgKnMsIFRDR1R5cGUgdHlwZSwKKyAgICAgICAgICAgICAg ICBpbnQgcmV0LCB0Y2dfdGFyZ2V0X2xvbmcgYXJnKQoreworICAgIHRjZ19vdXRfbW92aTMyKHMs IENPTkRfQUwsIHJldCwgYXJnKTsKK30KZGlmZiAtLWdpdCBhL3RjZy9hcm0vdGNnLXRhcmdldC5o IGIvdGNnL2FybS90Y2ctdGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uNDBhYTFlNQotLS0gL2Rldi9udWxsCisrKyBiL3RjZy9hcm0vdGNnLXRhcmdldC5oCkBAIC0w LDAgKzEsNjQgQEAKKy8qCisgKiBUaW55IENvZGUgR2VuZXJhdG9yIGZvciBRRU1VCisgKgorICog Q29weXJpZ2h0IChjKSAyMDA4IEFuZHJ6ZWogWmFib3Jvd3NraQorICoKKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRz CisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUg aW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl IFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqLworI2Rl ZmluZSBUQ0dfVEFSR0VUX0FSTSAxCisKKyNkZWZpbmUgVENHX1RBUkdFVF9SRUdfQklUUyAzMgor I3VuZGVmIFRDR19UQVJHRVRfV09SRFNfQklHRU5ESUFOCisjdW5kZWYgVENHX1RBUkdFVF9IQVNf ZGl2X2kzMgorI3VuZGVmIFRDR19UQVJHRVRfSEFTX2Rpdl9pNjQKKyN1bmRlZiBUQ0dfVEFSR0VU X0hBU19ic3dhcF9pMzIKKyNkZWZpbmUgVENHX1RBUkdFVF9IQVNfZXh0OHNfaTMyCisjZGVmaW5l IFRDR19UQVJHRVRfSEFTX2V4dDE2c19pMzIKKyN1bmRlZiBUQ0dfVEFSR0VUX1NUQUNLX0dST1dT VVAKKworZW51bSB7CisgICAgVENHX1JFR19SMCA9IDAsCisgICAgVENHX1JFR19SMSwKKyAgICBU Q0dfUkVHX1IyLAorICAgIFRDR19SRUdfUjMsCisgICAgVENHX1JFR19SNCwKKyAgICBUQ0dfUkVH X1I1LAorICAgIFRDR19SRUdfUjYsCisgICAgVENHX1JFR19SNywKKyAgICBUQ0dfUkVHX1I4LAor ICAgIFRDR19SRUdfUjksCisgICAgVENHX1JFR19SMTAsCisgICAgVENHX1JFR19SMTEsCisgICAg VENHX1JFR19SMTIsCisgICAgVENHX1JFR19SMTMsCisgICAgVENHX1JFR19SMTQsCisgICAgVENH X1RBUkdFVF9OQl9SRUdTCit9OworCisvKiB1c2VkIGZvciBmdW5jdGlvbiBjYWxsIGdlbmVyYXRp b24gKi8KKyNkZWZpbmUgVENHX1JFR19DQUxMX1NUQUNLCVRDR19SRUdfUjEzCisjZGVmaW5lIFRD R19UQVJHRVRfU1RBQ0tfQUxJR04JMTYKKworZW51bSB7CisgICAgLyogTm90ZTogbXVzdCBiZSBz eW5jZWQgd2l0aCBkeW5nZW4tZXhlYy5oICovCisgICAgVENHX0FSRUcwID0gVENHX1JFR19SNywK KyAgICBUQ0dfQVJFRzEgPSBUQ0dfUkVHX1I0LAorICAgIFRDR19BUkVHMiA9IFRDR19SRUdfUjUs CisgICAgVENHX0FSRUczID0gVENHX1JFR19SNiwKK307CmRpZmYgLS1naXQgYS90Y2cvdGNnLWR5 bmdlbi5jIGIvdGNnL3RjZy1keW5nZW4uYwppbmRleCA3NzUwMmFmLi5iNTZkZGI4IDEwMDY0NAot LS0gYS90Y2cvdGNnLWR5bmdlbi5jCisrKyBiL3RjZy90Y2ctZHluZ2VuLmMKQEAgLTE0MywxMDkg KzE0Myw2IEBAIHZvaWQgZml4X2Jzcih2b2lkICpwLCBpbnQgb2Zmc2V0KSB7CiAKICNlbmRpZiAv KiBfX2FscGhhX18gKi8KIAotI2lmZGVmIF9fYXJtX18KLQotI2RlZmluZSBBUk1fTERSX1RBQkxF X1NJWkUgMTAyNAotCi10eXBlZGVmIHN0cnVjdCBMRFJFbnRyeSB7Ci0gICAgdWludDhfdCAqcHRy OwotICAgIHVpbnQzMl90ICpkYXRhX3B0cjsKLSAgICB1bnNpZ25lZCB0eXBlOjI7Ci19IExEUkVu dHJ5OwotCi1zdGF0aWMgTERSRW50cnkgYXJtX2xkcl90YWJsZVsxMDI0XTsKLXN0YXRpYyB1aW50 MzJfdCBhcm1fZGF0YV90YWJsZVtBUk1fTERSX1RBQkxFX1NJWkVdOwotCi1leHRlcm4gY2hhciBl eGVjX2xvb3A7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcm1fcmVsb2NfcGMyNCh1aW50MzJfdCAq cHRyLCB1aW50MzJfdCBpbnNuLCBpbnQgdmFsKQotewotICAgICpwdHIgPSAoaW5zbiAmIH4weGZm ZmZmZikgfCAoKGluc24gKyAoKHZhbCAtIChpbnQpcHRyKSA+PiAyKSkgJiAweGZmZmZmZik7Ci19 Ci0KLXN0YXRpYyB1aW50OF90ICphcm1fZmx1c2hfbGRyKHVpbnQ4X3QgKmdlbl9jb2RlX3B0ciwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExEUkVudHJ5ICpsZHJfc3RhcnQsIExEUkVu dHJ5ICpsZHJfZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmRh dGFfc3RhcnQsIHVpbnQzMl90ICpkYXRhX2VuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBnZW5fam1wKQotewotICAgIExEUkVudHJ5ICpsZTsKLSAgICB1aW50MzJfdCAqcHRy OwotICAgIGludCBvZmZzZXQsIGRhdGFfc2l6ZSwgdGFyZ2V0OwotICAgIHVpbnQ4X3QgKmRhdGFf cHRyOwotICAgIHVpbnQzMl90IGluc247Ci0gICAgdWludDMyX3QgbWFzazsKLQotICAgIGRhdGFf c2l6ZSA9IChkYXRhX2VuZCAtIGRhdGFfc3RhcnQpIDw8IDI7Ci0KLSAgICBpZiAoZ2VuX2ptcCkg ewotICAgICAgICAvKiBnZW5lcmF0ZSBicmFuY2ggdG8gc2tpcCB0aGUgZGF0YSAqLwotICAgICAg ICBpZiAoZGF0YV9zaXplID09IDApCi0gICAgICAgICAgICByZXR1cm4gZ2VuX2NvZGVfcHRyOwot ICAgICAgICB0YXJnZXQgPSAobG9uZylnZW5fY29kZV9wdHIgKyBkYXRhX3NpemUgKyA0OwotICAg ICAgICBhcm1fcmVsb2NfcGMyNCgodWludDMyX3QgKilnZW5fY29kZV9wdHIsIDB4ZWFmZmZmZmUs IHRhcmdldCk7Ci0gICAgICAgIGdlbl9jb2RlX3B0ciArPSA0OwotICAgIH0KLQotICAgIC8qIGNv cHkgdGhlIGRhdGEgKi8KLSAgICBkYXRhX3B0ciA9IGdlbl9jb2RlX3B0cjsKLSAgICBtZW1jcHko Z2VuX2NvZGVfcHRyLCBkYXRhX3N0YXJ0LCBkYXRhX3NpemUpOwotICAgIGdlbl9jb2RlX3B0ciAr PSBkYXRhX3NpemU7Ci0KLSAgICAvKiBwYXRjaCB0aGUgbGRyIHRvIHBvaW50IHRvIHRoZSBkYXRh ICovCi0gICAgZm9yKGxlID0gbGRyX3N0YXJ0OyBsZSA8IGxkcl9lbmQ7IGxlKyspIHsKLSAgICAg ICAgcHRyID0gKHVpbnQzMl90ICopbGUtPnB0cjsKLSAgICAgICAgb2Zmc2V0ID0gKCh1bnNpZ25l ZCBsb25nKShsZS0+ZGF0YV9wdHIpIC0gKHVuc2lnbmVkIGxvbmcpZGF0YV9zdGFydCkgKwotICAg ICAgICAgICAgKHVuc2lnbmVkIGxvbmcpZGF0YV9wdHIgLQotICAgICAgICAgICAgKHVuc2lnbmVk IGxvbmcpcHRyIC0gODsKLSAgICAgICAgaWYgKG9mZnNldCA8IDApIHsKLSAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAiTmVnYXRpdmUgY29uc3RhbnQgcG9vbCBvZmZzZXRcbiIpOwotICAgICAg ICAgICAgdGNnX2Fib3J0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChsZS0+dHlwZSkg ewotICAgICAgICAgIGNhc2UgMDogLyogbGRyICovCi0gICAgICAgICAgICBtYXNrID0gfjB4MDA4 MDBmZmY7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0ID49IDQwOTYpIHsKLSAgICAgICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIkJhZCBsZHIgb2Zmc2V0XG4iKTsKLSAgICAgICAgICAgICAgICB0 Y2dfYWJvcnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg IGNhc2UgMTogLyogbGRjICovCi0gICAgICAgICAgICBtYXNrID0gfjB4MDA4MDAwZmY7Ci0gICAg ICAgICAgICBpZiAob2Zmc2V0ID49IDEwMjQgKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICJCYWQgbGRjIG9mZnNldFxuIik7Ci0gICAgICAgICAgICAgICAgdGNnX2Fib3J0KCk7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDI6IC8q IGFkZCAqLwotICAgICAgICAgICAgbWFzayA9IH4weGZmZjsKLSAgICAgICAgICAgIGlmIChvZmZz ZXQgPj0gMTAyNCApIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCBhZGQg b2Zmc2V0XG4iKTsKLSAgICAgICAgICAgICAgICB0Y2dfYWJvcnQoKTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBmcHJp bnRmKHN0ZGVyciwgIkJhZCBwYyByZWxhdGl2ZSBmaXh1cFxuIik7Ci0gICAgICAgICAgICB0Y2df YWJvcnQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGluc24gPSAqcHRyICYgbWFzazsKLSAgICAg ICAgc3dpdGNoIChsZS0+dHlwZSkgewotICAgICAgICAgIGNhc2UgMDogLyogbGRyICovCi0gICAg ICAgICAgICBpbnNuIHw9IG9mZnNldCB8IDB4MDA4MDAwMDA7Ci0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgICBjYXNlIDE6IC8qIGxkYyAqLwotICAgICAgICAgICAgaW5zbiB8PSAob2Zmc2V0 ID4+IDIpIHwgMHgwMDgwMDAwMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug MjogLyogYWRkICovCi0gICAgICAgICAgICBpbnNuIHw9IChvZmZzZXQgPj4gMikgfCAweGYwMDsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgKnB0ciA9IGluc247Ci0g ICAgfQotICAgIHJldHVybiBnZW5fY29kZV9wdHI7Ci19Ci0KLSNlbmRpZiAvKiBfX2FybV9fICov Ci0KICNpZmRlZiBfX2lhNjQKIAogLyogUGF0Y2ggaW5zdHJ1Y3Rpb24gd2l0aCAidmFsIiB3aGVy ZSAibWFzayIgaGFzIDEgYml0cy4gKi8K ------=_Part_5685_27271684.1210088758171--