From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MmwBC-0006ue-48 for qemu-devel@nongnu.org; Sun, 13 Sep 2009 17:00:14 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MmwBB-0006uP-Rn for qemu-devel@nongnu.org; Sun, 13 Sep 2009 17:00:13 -0400 Received: from [199.232.76.173] (port=52972 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MmwBA-0006uM-Hr for qemu-devel@nongnu.org; Sun, 13 Sep 2009 17:00:12 -0400 Received: from fg-out-1718.google.com ([72.14.220.152]:38890) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MmwB9-0001Rq-DT for qemu-devel@nongnu.org; Sun, 13 Sep 2009 17:00:12 -0400 Received: by fg-out-1718.google.com with SMTP id d23so704114fga.10 for ; Sun, 13 Sep 2009 14:00:09 -0700 (PDT) MIME-Version: 1.0 Date: Sun, 13 Sep 2009 23:00:08 +0200 Message-ID: <761ea48b0909131400i33efc212nce026adb75a4f5d2@mail.gmail.com> From: Laurent Desnogues Content-Type: multipart/mixed; boundary=001485eb93b59bc83f04737bd5ed Subject: [Qemu-devel] [PATCH][RFC] x86: use globals for CPU registers List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org --001485eb93b59bc83f04737bd5ed Content-Type: text/plain; charset=ISO-8859-1 Hello, this patch is a proposal to use globals for the 8 or 16 CPU registers on i386 and x86_64. I measured the improvement in the following conditions: - Machine: i7 920 - Software: Fedora11 x86_64 gcc 4.4.1 - Benchmark: SPEC2000 gcc with expr.i input - User mode - i386 and x86_64 hosts and targets, with and without the patch (8 combinations) The results are: qemu-i386_on-i386 15.82user 0.05system 0:15.91elapsed qemu-i386_on-i386-reg 15.40user 0.02system 0:15.43elapsed qemu-i386_on-x86_64 15.65user 0.05system 0:15.71elapsed qemu-i386_on-x86_64-reg 15.11user 0.03system 0:15.15elapsed qemu-x86_64_on-i386 mmap: No such device or address qemu-x86_64_on-i386-reg mmap: No such device or address qemu-x86_64_on-x86_64 18.42user 0.07system 0:18.49elapsed qemu-x86_64_on-x86_64-reg 13.22user 0.06system 0:13.31elapsed Given my lack of knowledge of system QEMU, I will leave it to someone else to measure the speedup. A previous version of that patch, that only handled i386 target, was tested by Malc who got speedup running OpenSSL on his G4. It was also sent to Fabrice who asked me to send it to the mailing list. The usage of globals is controlled by USE_REGS so that reviewers can quickly test the benefit (or the lack of it). Comments are welcome (except for the obvious presence of // which is only temporary). I need to optimize a few things once I'm sure the temporaries (cpu_tmp0, ...) are not used outside of the modified functions. x86_64 was coded in a hurry and is perhaps buggy. Laurent Signed-off-by: Laurent Desnogues --001485eb93b59bc83f04737bd5ed Content-Type: text/x-diff; charset=US-ASCII; name="i386-reg2.patch" Content-Disposition: attachment; filename="i386-reg2.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fzk9r2hd0 ZGlmZiAtLWdpdCBhL3RhcmdldC1pMzg2L3RyYW5zbGF0ZS5jIGIvdGFyZ2V0LWkzODYvdHJhbnNs YXRlLmMKaW5kZXggMzM1ZmMwOC4uZGMyZmNkZSAxMDA2NDQKLS0tIGEvdGFyZ2V0LWkzODYvdHJh bnNsYXRlLmMKKysrIGIvdGFyZ2V0LWkzODYvdHJhbnNsYXRlLmMKQEAgLTU4LDEwICs1OCwxNSBA QAogCiAvLyNkZWZpbmUgTUFDUk9fVEVTVCAgIDEKIAorI2RlZmluZSBVU0VfUkVHUworCiAvKiBn bG9iYWwgcmVnaXN0ZXIgaW5kZXhlcyAqLwogc3RhdGljIFRDR3ZfcHRyIGNwdV9lbnY7CiBzdGF0 aWMgVENHdiBjcHVfQTAsIGNwdV9jY19zcmMsIGNwdV9jY19kc3QsIGNwdV9jY190bXA7CiBzdGF0 aWMgVENHdl9pMzIgY3B1X2NjX29wOworI2lmZGVmIFVTRV9SRUdTCitzdGF0aWMgVENHdiBjcHVf cmVnc1tDUFVfTkJfUkVHU107CisjZW5kaWYKIC8qIGxvY2FsIHRlbXBzICovCiBzdGF0aWMgVENH diBjcHVfVFsyXSwgY3B1X1QzOwogLyogbG9jYWwgcmVnaXN0ZXIgaW5kZXhlcyAob25seSB1c2Vk IGluc2lkZSBvbGQgbWljcm8gb3BzKSAqLwpAQCAtMjY5LDcwICsyNzQsOTUgQEAgc3RhdGljIGlu bGluZSB2b2lkIGdlbl9vcF9hbmRsX0EwX2ZmZmYodm9pZCkKICNkZWZpbmUgUkVHX0xIX09GRlNF VCA0CiAjZW5kaWYKIAorI2lmZGVmIFVTRV9SRUdTCisjaWZkZWYgVEFSR0VUX1g4Nl82NAorLyog I3dhcm5pbmcgTllJICovCisjZW5kaWYKKwogc3RhdGljIGlubGluZSB2b2lkIGdlbl9vcF9tb3Zf cmVnX3YoaW50IG90LCBpbnQgcmVnLCBUQ0d2IHQwKQogeworICAgIFRDR3YgdG1wOworCiAgICAg c3dpdGNoKG90KSB7CiAgICAgY2FzZSBPVF9CWVRFOgorICAgICAgICB0bXAgPSB0Y2dfdGVtcF9u ZXcoKTsKKyAgICAgICAgdGNnX2dlbl9hbmRpX3RsKHRtcCwgdDAsIDB4ZmYpOwogICAgICAgICBp ZiAocmVnIDwgNCBYODZfNjRfREVGKCB8fCByZWcgPj0gOCB8fCB4ODZfNjRfaHJlZ3MpKSB7Ci0g ICAgICAgICAgICB0Y2dfZ2VuX3N0OF90bCh0MCwgY3B1X2Vudiwgb2Zmc2V0b2YoQ1BVU3RhdGUs IHJlZ3NbcmVnXSkgKyBSRUdfQl9PRkZTRVQpOworICAgICAgICAgICAgdGNnX2dlbl9hbmRpX3Rs KGNwdV9yZWdzW3JlZ10sIGNwdV9yZWdzW3JlZ10sIH4weGZmKTsKKyAgICAgICAgICAgIHRjZ19n ZW5fb3JfdGwoY3B1X3JlZ3NbcmVnXSwgY3B1X3JlZ3NbcmVnXSwgdG1wKTsKKyAgICAgICAgICAg IC8vdGNnX2dlbl9zdDhfdGwodDAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3Jl Z10pICsgUkVHX0JfT0ZGU0VUKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRjZ19n ZW5fc3Q4X3RsKHQwLCBjcHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1tyZWcgLSA0XSkg KyBSRUdfSF9PRkZTRVQpOworICAgICAgICAgICAgdGNnX2dlbl9zaGxpX3RsKHRtcCwgdG1wLCA4 KTsKKyAgICAgICAgICAgIHRjZ19nZW5fYW5kaV90bChjcHVfcmVnc1tyZWcgLSA0XSwgY3B1X3Jl Z3NbcmVnIC0gNF0sIH4weGZmMDApOworICAgICAgICAgICAgdGNnX2dlbl9vcl90bChjcHVfcmVn c1tyZWcgLSA0XSwgY3B1X3JlZ3NbcmVnIC0gNF0sIHRtcCk7CisgICAgICAgICAgICAvL3RjZ19n ZW5fc3Q4X3RsKHQwLCBjcHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1tyZWcgLSA0XSkg KyBSRUdfSF9PRkZTRVQpOwogICAgICAgICB9CisgICAgICAgIHRjZ190ZW1wX2ZyZWUodG1wKTsK ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPVF9XT1JEOgotICAgICAgICB0Y2dfZ2VuX3N0MTZf dGwodDAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3JlZ10pICsgUkVHX1dfT0ZG U0VUKTsKKyAgICAgICAgdG1wID0gdGNnX3RlbXBfbmV3KCk7CisgICAgICAgIHRjZ19nZW5fYW5k aV90bCh0bXAsIHQwLCAweGZmZmYpOworICAgICAgICB0Y2dfZ2VuX2FuZGlfdGwoY3B1X3JlZ3Nb cmVnXSwgY3B1X3JlZ3NbcmVnXSwgfjB4ZmZmZik7CisgICAgICAgIHRjZ19nZW5fb3JfdGwoY3B1 X3JlZ3NbcmVnXSwgY3B1X3JlZ3NbcmVnXSwgdG1wKTsKKyAgICAgICAgdGNnX3RlbXBfZnJlZSh0 bXApOworICAgICAgICAvL3RjZ19nZW5fc3QxNl90bCh0MCwgY3B1X2Vudiwgb2Zmc2V0b2YoQ1BV U3RhdGUsIHJlZ3NbcmVnXSkgKyBSRUdfV19PRkZTRVQpOwogICAgICAgICBicmVhazsKICNpZmRl ZiBUQVJHRVRfWDg2XzY0CiAgICAgY2FzZSBPVF9MT05HOgotICAgICAgICB0Y2dfZ2VuX3N0MzJf dGwodDAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3JlZ10pICsgUkVHX0xfT0ZG U0VUKTsKICAgICAgICAgLyogaGlnaCBwYXJ0IG9mIHJlZ2lzdGVyIHNldCB0byB6ZXJvICovCi0g ICAgICAgIHRjZ19nZW5fbW92aV90bChjcHVfdG1wMCwgMCk7Ci0gICAgICAgIHRjZ19nZW5fc3Qz Ml90bChjcHVfdG1wMCwgY3B1X2Vudiwgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbcmVnXSkgKyBS RUdfTEhfT0ZGU0VUKTsKKyAgICAgICAgdGNnX2dlbl9leHQzMnVfdGwoY3B1X3JlZ3NbcmVnXSwg dDApOworICAgICAgICAvL3RjZ19nZW5fc3QzMl90bCh0MCwgY3B1X2Vudiwgb2Zmc2V0b2YoQ1BV U3RhdGUsIHJlZ3NbcmVnXSkgKyBSRUdfTF9PRkZTRVQpOworICAgICAgICAvKiBoaWdoIHBhcnQg b2YgcmVnaXN0ZXIgc2V0IHRvIHplcm8gKi8KKyAgICAgICAgLy90Y2dfZ2VuX21vdmlfdGwoY3B1 X3RtcDAsIDApOworICAgICAgICAvL3RjZ19nZW5fc3QzMl90bChjcHVfdG1wMCwgY3B1X2Vudiwg b2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbcmVnXSkgKyBSRUdfTEhfT0ZGU0VUKTsKICAgICAgICAg YnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICBjYXNlIE9UX1FVQUQ6Ci0gICAgICAgIHRjZ19nZW5f c3RfdGwodDAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3JlZ10pKTsKKyAgICAg ICAgdGNnX2dlbl9tb3ZfdGwoY3B1X3JlZ3NbcmVnXSwgdDApOworICAgICAgICAvL3RjZ19nZW5f c3RfdGwodDAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3JlZ10pKTsKICAgICAg ICAgYnJlYWs7CiAjZWxzZQogICAgIGRlZmF1bHQ6CiAgICAgY2FzZSBPVF9MT05HOgotICAgICAg ICB0Y2dfZ2VuX3N0MzJfdGwodDAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3Jl Z10pICsgUkVHX0xfT0ZGU0VUKTsKKyAgICAgICAgdGNnX2dlbl9tb3ZfdGwoY3B1X3JlZ3NbcmVn XSwgdDApOworICAgICAgICAvL3RjZ19nZW5fc3QzMl90bCh0MCwgY3B1X2Vudiwgb2Zmc2V0b2Yo Q1BVU3RhdGUsIHJlZ3NbcmVnXSkgKyBSRUdfTF9PRkZTRVQpOwogICAgICAgICBicmVhazsKICNl bmRpZgogICAgIH0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGdlbl9vcF9tb3ZfcmVnX1QwKGlu dCBvdCwgaW50IHJlZykKLXsKLSAgICBnZW5fb3BfbW92X3JlZ192KG90LCByZWcsIGNwdV9UWzBd KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdlbl9vcF9tb3ZfcmVnX1QxKGludCBvdCwgaW50 IHJlZykKLXsKLSAgICBnZW5fb3BfbW92X3JlZ192KG90LCByZWcsIGNwdV9UWzFdKTsKLX0KLQog c3RhdGljIGlubGluZSB2b2lkIGdlbl9vcF9tb3ZfcmVnX0EwKGludCBzaXplLCBpbnQgcmVnKQog eworICAgIFRDR3YgdG1wOworCiAgICAgc3dpdGNoKHNpemUpIHsKICAgICBjYXNlIDA6Ci0gICAg ICAgIHRjZ19nZW5fc3QxNl90bChjcHVfQTAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCBy ZWdzW3JlZ10pICsgUkVHX1dfT0ZGU0VUKTsKKyAgICAgICAgdG1wID0gdGNnX3RlbXBfbmV3KCk7 CisgICAgICAgIHRjZ19nZW5fYW5kaV90bCh0bXAsIGNwdV9BMCwgMHhmZmZmKTsKKyAgICAgICAg dGNnX2dlbl9hbmRpX3RsKGNwdV9yZWdzW3JlZ10sIGNwdV9yZWdzW3JlZ10sIH4weGZmZmYpOwor ICAgICAgICB0Y2dfZ2VuX29yX3RsKGNwdV9yZWdzW3JlZ10sIGNwdV9yZWdzW3JlZ10sIHRtcCk7 CisgICAgICAgIHRjZ190ZW1wX2ZyZWUodG1wKTsKKyAgICAgICAgLy90Y2dfZ2VuX3N0MTZfdGwo Y3B1X0EwLCBjcHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1tyZWddKSArIFJFR19XX09G RlNFVCk7CiAgICAgICAgIGJyZWFrOwogI2lmZGVmIFRBUkdFVF9YODZfNjQKICAgICBjYXNlIDE6 Ci0gICAgICAgIHRjZ19nZW5fc3QzMl90bChjcHVfQTAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0 YXRlLCByZWdzW3JlZ10pICsgUkVHX0xfT0ZGU0VUKTsKICAgICAgICAgLyogaGlnaCBwYXJ0IG9m IHJlZ2lzdGVyIHNldCB0byB6ZXJvICovCi0gICAgICAgIHRjZ19nZW5fbW92aV90bChjcHVfdG1w MCwgMCk7Ci0gICAgICAgIHRjZ19nZW5fc3QzMl90bChjcHVfdG1wMCwgY3B1X2Vudiwgb2Zmc2V0 b2YoQ1BVU3RhdGUsIHJlZ3NbcmVnXSkgKyBSRUdfTEhfT0ZGU0VUKTsKKyAgICAgICAgdGNnX2dl bl9leHQzMnVfdGwoY3B1X3JlZ3NbcmVnXSwgY3B1X0EwKTsKKyAgICAgICAgLy90Y2dfZ2VuX3N0 MzJfdGwoY3B1X0EwLCBjcHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1tyZWddKSArIFJF R19MX09GRlNFVCk7CisgICAgICAgIC8qIGhpZ2ggcGFydCBvZiByZWdpc3RlciBzZXQgdG8gemVy byAqLworICAgICAgICAvL3RjZ19nZW5fbW92aV90bChjcHVfdG1wMCwgMCk7CisgICAgICAgIC8v dGNnX2dlbl9zdDMyX3RsKGNwdV90bXAwLCBjcHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgcmVn c1tyZWddKSArIFJFR19MSF9PRkZTRVQpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0Ogog ICAgIGNhc2UgMjoKLSAgICAgICAgdGNnX2dlbl9zdF90bChjcHVfQTAsIGNwdV9lbnYsIG9mZnNl dG9mKENQVVN0YXRlLCByZWdzW3JlZ10pKTsKKyAgICAgICAgdGNnX2dlbl9tb3ZfdGwoY3B1X3Jl Z3NbcmVnXSwgY3B1X0EwKTsKKyAgICAgICAgLy90Y2dfZ2VuX3N0X3RsKGNwdV9BMCwgY3B1X2Vu diwgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbcmVnXSkpOwogICAgICAgICBicmVhazsKICNlbHNl CiAgICAgZGVmYXVsdDoKICAgICBjYXNlIDE6Ci0gICAgICAgIHRjZ19nZW5fc3QzMl90bChjcHVf QTAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3JlZ10pICsgUkVHX0xfT0ZGU0VU KTsKKyAgICAgICAgdGNnX2dlbl9tb3ZfdGwoY3B1X3JlZ3NbcmVnXSwgY3B1X0EwKTsKKyAgICAg ICAgLy90Y2dfZ2VuX3N0MzJfdGwoY3B1X0EwLCBjcHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwg cmVnc1tyZWddKSArIFJFR19MX09GRlNFVCk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAg fQpAQCAtMzQ1LDU5ICszNzUsMjEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZW5fb3BfbW92X3Zf cmVnKGludCBvdCwgVENHdiB0MCwgaW50IHJlZykKICAgICAgICAgaWYgKHJlZyA8IDQgWDg2XzY0 X0RFRiggfHwgcmVnID49IDggfHwgeDg2XzY0X2hyZWdzKSkgewogICAgICAgICAgICAgZ290byBz dGRfY2FzZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRjZ19nZW5fbGQ4dV90bCh0 MCwgY3B1X2Vudiwgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbcmVnIC0gNF0pICsgUkVHX0hfT0ZG U0VUKTsKKyAgICAgICAgICAgIHRjZ19nZW5fc2hyaV90bCh0MCwgY3B1X3JlZ3NbcmVnIC0gNF0s IDgpOworICAgICAgICAgICAgdGNnX2dlbl9hbmRpX3RsKHQwLCB0MCwgMHhmZik7CisgICAgICAg ICAgICAvL3RjZ19nZW5fbGQ4dV90bCh0MCwgY3B1X2Vudiwgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJl Z3NbcmVnIC0gNF0pICsgUkVHX0hfT0ZGU0VUKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK ICAgICBkZWZhdWx0OgogICAgIHN0ZF9jYXNlOgotICAgICAgICB0Y2dfZ2VuX2xkX3RsKHQwLCBj cHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1tyZWddKSk7CisgICAgICAgIHRjZ19nZW5f bW92X3RsKHQwLCBjcHVfcmVnc1tyZWddKTsKKyAgICAgICAgLy90Y2dfZ2VuX2xkX3RsKHQwLCBj cHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1tyZWddKSk7CiAgICAgICAgIGJyZWFrOwog ICAgIH0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGdlbl9vcF9tb3ZfVE5fcmVnKGludCBvdCwg aW50IHRfaW5kZXgsIGludCByZWcpCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuX29wX21vdmxfQTBf cmVnKGludCByZWcpCiB7Ci0gICAgZ2VuX29wX21vdl92X3JlZyhvdCwgY3B1X1RbdF9pbmRleF0s IHJlZyk7CisgICAgdGNnX2dlbl9tb3ZfdGwoY3B1X0EwLCBjcHVfcmVnc1tyZWddKTsKKyAgICAv L3RjZ19nZW5fbGQzMnVfdGwoY3B1X0EwLCBjcHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgcmVn c1tyZWddKSArIFJFR19MX09GRlNFVCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZW5fb3Bf bW92bF9BMF9yZWcoaW50IHJlZykKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5fb3BfYWRkX3JlZ19p bShpbnQgc2l6ZSwgaW50IHJlZywgaW50MzJfdCB2YWwpCiB7Ci0gICAgdGNnX2dlbl9sZDMydV90 bChjcHVfQTAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3JlZ10pICsgUkVHX0xf T0ZGU0VUKTsKKyAgICBUQ0d2IHRtcDsKKworICAgIHN3aXRjaChzaXplKSB7CisgICAgY2FzZSAw OgorICAgICAgICAvLyBUT0RPIG9wdGltaXplCisgICAgICAgIHRtcCA9IHRjZ190ZW1wX25ldygp OworICAgICAgICB0Y2dfZ2VuX21vdl90bChjcHVfdG1wMCwgY3B1X3JlZ3NbcmVnXSk7CisgICAg ICAgIHRjZ19nZW5fYWRkaV90bChjcHVfdG1wMCwgY3B1X3RtcDAsIHZhbCk7CisgICAgICAgIHRj Z19nZW5fYW5kaV90bCh0bXAsIGNwdV90bXAwLCAweGZmZmYpOworICAgICAgICB0Y2dfZ2VuX2Fu ZGlfdGwoY3B1X3JlZ3NbcmVnXSwgY3B1X3JlZ3NbcmVnXSwgfjB4ZmZmZik7CisgICAgICAgIHRj Z19nZW5fb3JfdGwoY3B1X3JlZ3NbcmVnXSwgY3B1X3JlZ3NbcmVnXSwgdG1wKTsKKyAgICAgICAg dGNnX3RlbXBfZnJlZSh0bXApOworICAgICAgICAvL3RjZ19nZW5fbGRfdGwoY3B1X3RtcDAsIGNw dV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3JlZ10pKTsKKyAgICAgICAgLy90Y2dfZ2Vu X2FkZGlfdGwoY3B1X3RtcDAsIGNwdV90bXAwLCB2YWwpOworICAgICAgICAvL3RjZ19nZW5fc3Qx Nl90bChjcHVfdG1wMCwgY3B1X2Vudiwgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbcmVnXSkgKyBS RUdfV19PRkZTRVQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIC8vIFRP RE8gb3B0aW1pemUKKyAgICAgICAgdGNnX2dlbl9tb3ZfdGwoY3B1X3RtcDAsIGNwdV9yZWdzW3Jl Z10pOworICAgICAgICB0Y2dfZ2VuX2FkZGlfdGwoY3B1X3RtcDAsIGNwdV90bXAwLCB2YWwpOwor I2lmZGVmIFRBUkdFVF9YODZfNjQKKyAgICAgICAgdGNnX2dlbl9hbmRpX3RsKGNwdV90bXAwLCBj cHVfdG1wMCwgMHhmZmZmZmZmZik7CisjZW5kaWYKKyAgICAgICAgdGNnX2dlbl9tb3ZfdGwoY3B1 X3JlZ3NbcmVnXSwgY3B1X3RtcDApOworICAgICAgICAvL3RjZ19nZW5fbGRfdGwoY3B1X3RtcDAs IGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3JlZ10pKTsKKyAgICAgICAgLy90Y2df Z2VuX2FkZGlfdGwoY3B1X3RtcDAsIGNwdV90bXAwLCB2YWwpOworICAgICAgICAvLyNpZmRlZiBU QVJHRVRfWDg2XzY0CisgICAgICAgIC8vdGNnX2dlbl9hbmRpX3RsKGNwdV90bXAwLCBjcHVfdG1w MCwgMHhmZmZmZmZmZik7CisgICAgICAgIC8vI2VuZGlmCisgICAgICAgIC8vdGNnX2dlbl9zdF90 bChjcHVfdG1wMCwgY3B1X2Vudiwgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbcmVnXSkpOworICAg ICAgICBicmVhazsKKyNpZmRlZiBUQVJHRVRfWDg2XzY0CisgICAgY2FzZSAyOgorICAgICAgICB0 Y2dfZ2VuX2FkZGlfdGwoY3B1X3JlZ3NbcmVnXSwgY3B1X3JlZ3NbcmVnXSwgdmFsKTsKKyAgICAg ICAgLy90Y2dfZ2VuX2xkX3RsKGNwdV90bXAwLCBjcHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwg cmVnc1tyZWddKSk7CisgICAgICAgIC8vdGNnX2dlbl9hZGRpX3RsKGNwdV90bXAwLCBjcHVfdG1w MCwgdmFsKTsKKyAgICAgICAgLy90Y2dfZ2VuX3N0X3RsKGNwdV90bXAwLCBjcHVfZW52LCBvZmZz ZXRvZihDUFVTdGF0ZSwgcmVnc1tyZWddKSk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAg fQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2VuX29wX2FkZGxfQTBfaW0oaW50MzJfdCB2YWwp CitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuX29wX2FkZF9yZWdfVDAoaW50IHNpemUsIGludCByZWcp CiB7Ci0gICAgdGNnX2dlbl9hZGRpX3RsKGNwdV9BMCwgY3B1X0EwLCB2YWwpOworICAgIFRDR3Yg dG1wOworCisgICAgc3dpdGNoKHNpemUpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIC8vIFRPRE8g b3B0aW1pemUKKyAgICAgICAgdG1wID0gdGNnX3RlbXBfbmV3KCk7CisgICAgICAgIHRjZ19nZW5f bW92X3RsKGNwdV90bXAwLCBjcHVfcmVnc1tyZWddKTsKKyAgICAgICAgdGNnX2dlbl9hZGRfdGwo Y3B1X3RtcDAsIGNwdV90bXAwLCBjcHVfVFswXSk7CisgICAgICAgIHRjZ19nZW5fYW5kaV90bCh0 bXAsIGNwdV90bXAwLCAweGZmZmYpOworICAgICAgICB0Y2dfZ2VuX2FuZGlfdGwoY3B1X3JlZ3Nb cmVnXSwgY3B1X3JlZ3NbcmVnXSwgfjB4ZmZmZik7CisgICAgICAgIHRjZ19nZW5fb3JfdGwoY3B1 X3JlZ3NbcmVnXSwgY3B1X3JlZ3NbcmVnXSwgdG1wKTsKKyAgICAgICAgdGNnX3RlbXBfZnJlZSh0 bXApOworICAgICAgICAvL3RjZ19nZW5fbGRfdGwoY3B1X3RtcDAsIGNwdV9lbnYsIG9mZnNldG9m KENQVVN0YXRlLCByZWdzW3JlZ10pKTsKKyAgICAgICAgLy90Y2dfZ2VuX2FkZF90bChjcHVfdG1w MCwgY3B1X3RtcDAsIGNwdV9UWzBdKTsKKyAgICAgICAgLy90Y2dfZ2VuX3N0MTZfdGwoY3B1X3Rt cDAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3JlZ10pICsgUkVHX1dfT0ZGU0VU KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICAvLyBUT0RPIG9wdGltaXpl CisgICAgICAgIHRjZ19nZW5fbW92X3RsKGNwdV90bXAwLCBjcHVfcmVnc1tyZWddKTsKKyAgICAg ICAgdGNnX2dlbl9hZGRfdGwoY3B1X3RtcDAsIGNwdV90bXAwLCBjcHVfVFswXSk7CiAjaWZkZWYg VEFSR0VUX1g4Nl82NAotICAgIHRjZ19nZW5fYW5kaV90bChjcHVfQTAsIGNwdV9BMCwgMHhmZmZm ZmZmZik7CisgICAgICAgIHRjZ19nZW5fYW5kaV90bChjcHVfdG1wMCwgY3B1X3RtcDAsIDB4ZmZm ZmZmZmYpOworI2VuZGlmCisgICAgICAgIHRjZ19nZW5fbW92X3RsKGNwdV9yZWdzW3JlZ10sIGNw dV90bXAwKTsKKyAgICAgICAgLy90Y2dfZ2VuX2xkX3RsKGNwdV90bXAwLCBjcHVfZW52LCBvZmZz ZXRvZihDUFVTdGF0ZSwgcmVnc1tyZWddKSk7CisgICAgICAgIC8vdGNnX2dlbl9hZGRfdGwoY3B1 X3RtcDAsIGNwdV90bXAwLCBjcHVfVFswXSk7CisgICAgICAgIC8vI2lmZGVmIFRBUkdFVF9YODZf NjQKKyAgICAgICAgLy90Y2dfZ2VuX2FuZGlfdGwoY3B1X3RtcDAsIGNwdV90bXAwLCAweGZmZmZm ZmZmKTsKKyAgICAgICAgLy8jZW5kaWYKKyAgICAgICAgLy90Y2dfZ2VuX3N0X3RsKGNwdV90bXAw LCBjcHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1tyZWddKSk7CisgICAgICAgIGJyZWFr OworI2lmZGVmIFRBUkdFVF9YODZfNjQKKyAgICBjYXNlIDI6CisgICAgICAgIHRjZ19nZW5fYWRk X3RsKGNwdV9yZWdzW3JlZ10sIGNwdV9yZWdzW3JlZ10sIGNwdV9UWzBdKTsKKyAgICAgICAgLy90 Y2dfZ2VuX2xkX3RsKGNwdV90bXAwLCBjcHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1ty ZWddKSk7CisgICAgICAgIC8vdGNnX2dlbl9hZGRfdGwoY3B1X3RtcDAsIGNwdV90bXAwLCBjcHVf VFswXSk7CisgICAgICAgIC8vdGNnX2dlbl9zdF90bChjcHVfdG1wMCwgY3B1X2Vudiwgb2Zmc2V0 b2YoQ1BVU3RhdGUsIHJlZ3NbcmVnXSkpOworICAgICAgICBicmVhazsKICNlbmRpZgorICAgIH0K IH0KIAotI2lmZGVmIFRBUkdFVF9YODZfNjQKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZW5fb3BfYWRk cV9BMF9pbShpbnQ2NF90IHZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5fb3BfYWRkbF9BMF9y ZWdfc04oaW50IHNoaWZ0LCBpbnQgcmVnKQogewotICAgIHRjZ19nZW5fYWRkaV90bChjcHVfQTAs IGNwdV9BMCwgdmFsKTsKKyAgICB0Y2dfZ2VuX21vdl90bChjcHVfdG1wMCwgY3B1X3JlZ3NbcmVn XSk7CisgICAgaWYgKHNoaWZ0ICE9IDApCisgICAgICAgIHRjZ19nZW5fc2hsaV90bChjcHVfdG1w MCwgY3B1X3RtcDAsIHNoaWZ0KTsKKyAgICB0Y2dfZ2VuX2FkZF90bChjcHVfQTAsIGNwdV9BMCwg Y3B1X3RtcDApOworI2lmZGVmIFRBUkdFVF9YODZfNjQKKyAgICB0Y2dfZ2VuX2FuZGlfdGwoY3B1 X0EwLCBjcHVfQTAsIDB4ZmZmZmZmZmYpOworI2VuZGlmCisKKyAgICAvL3RjZ19nZW5fbGRfdGwo Y3B1X3RtcDAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3JlZ10pKTsKKyAgICAv L2lmIChzaGlmdCAhPSAwKQorICAgIC8vICAgIHRjZ19nZW5fc2hsaV90bChjcHVfdG1wMCwgY3B1 X3RtcDAsIHNoaWZ0KTsKKyAgICAvL3RjZ19nZW5fYWRkX3RsKGNwdV9BMCwgY3B1X0EwLCBjcHVf dG1wMCk7CisgICAgLy8jaWZkZWYgVEFSR0VUX1g4Nl82NAorICAgIC8vdGNnX2dlbl9hbmRpX3Rs KGNwdV9BMCwgY3B1X0EwLCAweGZmZmZmZmZmKTsKKyAgICAvLyNlbmRpZgogfQorCisjZWxzZQor CitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuX29wX21vdl9yZWdfdihpbnQgb3QsIGludCByZWcsIFRD R3YgdDApCit7CisgICAgc3dpdGNoKG90KSB7CisgICAgY2FzZSBPVF9CWVRFOgorICAgICAgICBp ZiAocmVnIDwgNCBYODZfNjRfREVGKCB8fCByZWcgPj0gOCB8fCB4ODZfNjRfaHJlZ3MpKSB7Cisg ICAgICAgICAgICB0Y2dfZ2VuX3N0OF90bCh0MCwgY3B1X2Vudiwgb2Zmc2V0b2YoQ1BVU3RhdGUs IHJlZ3NbcmVnXSkgKyBSRUdfQl9PRkZTRVQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgdGNnX2dlbl9zdDhfdGwodDAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3Jl ZyAtIDRdKSArIFJFR19IX09GRlNFVCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBPVF9XT1JEOgorICAgICAgICB0Y2dfZ2VuX3N0MTZfdGwodDAsIGNwdV9lbnYsIG9mZnNl dG9mKENQVVN0YXRlLCByZWdzW3JlZ10pICsgUkVHX1dfT0ZGU0VUKTsKKyAgICAgICAgYnJlYWs7 CisjaWZkZWYgVEFSR0VUX1g4Nl82NAorICAgIGNhc2UgT1RfTE9ORzoKKyAgICAgICAgdGNnX2dl bl9zdDMyX3RsKHQwLCBjcHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1tyZWddKSArIFJF R19MX09GRlNFVCk7CisgICAgICAgIC8qIGhpZ2ggcGFydCBvZiByZWdpc3RlciBzZXQgdG8gemVy byAqLworICAgICAgICB0Y2dfZ2VuX21vdmlfdGwoY3B1X3RtcDAsIDApOworICAgICAgICB0Y2df Z2VuX3N0MzJfdGwoY3B1X3RtcDAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3Jl Z10pICsgUkVHX0xIX09GRlNFVCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg Y2FzZSBPVF9RVUFEOgorICAgICAgICB0Y2dfZ2VuX3N0X3RsKHQwLCBjcHVfZW52LCBvZmZzZXRv ZihDUFVTdGF0ZSwgcmVnc1tyZWddKSk7CisgICAgICAgIGJyZWFrOworI2Vsc2UKKyAgICBkZWZh dWx0OgorICAgIGNhc2UgT1RfTE9ORzoKKyAgICAgICAgdGNnX2dlbl9zdDMyX3RsKHQwLCBjcHVf ZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1tyZWddKSArIFJFR19MX09GRlNFVCk7CisgICAg ICAgIGJyZWFrOwogI2VuZGlmCi0gICAgCi1zdGF0aWMgdm9pZCBnZW5fYWRkX0EwX2ltKERpc2Fz Q29udGV4dCAqcywgaW50IHZhbCkKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5f b3BfbW92X3JlZ19BMChpbnQgc2l6ZSwgaW50IHJlZykKIHsKKyAgICBzd2l0Y2goc2l6ZSkgewor ICAgIGNhc2UgMDoKKyAgICAgICAgdGNnX2dlbl9zdDE2X3RsKGNwdV9BMCwgY3B1X2Vudiwgb2Zm c2V0b2YoQ1BVU3RhdGUsIHJlZ3NbcmVnXSkgKyBSRUdfV19PRkZTRVQpOworICAgICAgICBicmVh azsKICNpZmRlZiBUQVJHRVRfWDg2XzY0Ci0gICAgaWYgKENPREU2NChzKSkKLSAgICAgICAgZ2Vu X29wX2FkZHFfQTBfaW0odmFsKTsKLSAgICBlbHNlCisgICAgY2FzZSAxOgorICAgICAgICB0Y2df Z2VuX3N0MzJfdGwoY3B1X0EwLCBjcHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1tyZWdd KSArIFJFR19MX09GRlNFVCk7CisgICAgICAgIC8qIGhpZ2ggcGFydCBvZiByZWdpc3RlciBzZXQg dG8gemVybyAqLworICAgICAgICB0Y2dfZ2VuX21vdmlfdGwoY3B1X3RtcDAsIDApOworICAgICAg ICB0Y2dfZ2VuX3N0MzJfdGwoY3B1X3RtcDAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCBy ZWdzW3JlZ10pICsgUkVHX0xIX09GRlNFVCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6 CisgICAgY2FzZSAyOgorICAgICAgICB0Y2dfZ2VuX3N0X3RsKGNwdV9BMCwgY3B1X2Vudiwgb2Zm c2V0b2YoQ1BVU3RhdGUsIHJlZ3NbcmVnXSkpOworICAgICAgICBicmVhazsKKyNlbHNlCisgICAg ZGVmYXVsdDoKKyAgICBjYXNlIDE6CisgICAgICAgIHRjZ19nZW5fc3QzMl90bChjcHVfQTAsIGNw dV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3JlZ10pICsgUkVHX0xfT0ZGU0VUKTsKKyAg ICAgICAgYnJlYWs7CiAjZW5kaWYKLSAgICAgICAgZ2VuX29wX2FkZGxfQTBfaW0odmFsKTsKKyAg ICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZW5fb3BfYWRkbF9UMF9UMSh2b2lkKQorc3Rh dGljIGlubGluZSB2b2lkIGdlbl9vcF9tb3Zfdl9yZWcoaW50IG90LCBUQ0d2IHQwLCBpbnQgcmVn KQogewotICAgIHRjZ19nZW5fYWRkX3RsKGNwdV9UWzBdLCBjcHVfVFswXSwgY3B1X1RbMV0pOwor ICAgIHN3aXRjaChvdCkgeworICAgIGNhc2UgT1RfQllURToKKyAgICAgICAgaWYgKHJlZyA8IDQg WDg2XzY0X0RFRiggfHwgcmVnID49IDggfHwgeDg2XzY0X2hyZWdzKSkgeworICAgICAgICAgICAg Z290byBzdGRfY2FzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRjZ19nZW5fbGQ4 dV90bCh0MCwgY3B1X2Vudiwgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbcmVnIC0gNF0pICsgUkVH X0hfT0ZGU0VUKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg IHN0ZF9jYXNlOgorICAgICAgICB0Y2dfZ2VuX2xkX3RsKHQwLCBjcHVfZW52LCBvZmZzZXRvZihD UFVTdGF0ZSwgcmVnc1tyZWddKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAotc3RhdGlj IGlubGluZSB2b2lkIGdlbl9vcF9qbXBfVDAodm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5f b3BfbW92bF9BMF9yZWcoaW50IHJlZykKIHsKLSAgICB0Y2dfZ2VuX3N0X3RsKGNwdV9UWzBdLCBj cHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgZWlwKSk7CisgICAgdGNnX2dlbl9sZDMydV90bChj cHVfQTAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3JlZ10pICsgUkVHX0xfT0ZG U0VUKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGdlbl9vcF9hZGRfcmVnX2ltKGludCBzaXpl LCBpbnQgcmVnLCBpbnQzMl90IHZhbCkKQEAgLTQ1MiwxNSArNjM2LDEwIEBAIHN0YXRpYyBpbmxp bmUgdm9pZCBnZW5fb3BfYWRkX3JlZ19UMChpbnQgc2l6ZSwgaW50IHJlZykKICAgICB9CiB9CiAK LXN0YXRpYyBpbmxpbmUgdm9pZCBnZW5fb3Bfc2V0X2NjX29wKGludDMyX3QgdmFsKQotewotICAg IHRjZ19nZW5fbW92aV9pMzIoY3B1X2NjX29wLCB2YWwpOwotfQotCiBzdGF0aWMgaW5saW5lIHZv aWQgZ2VuX29wX2FkZGxfQTBfcmVnX3NOKGludCBzaGlmdCwgaW50IHJlZykKIHsKICAgICB0Y2df Z2VuX2xkX3RsKGNwdV90bXAwLCBjcHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1tyZWdd KSk7Ci0gICAgaWYgKHNoaWZ0ICE9IDApIAorICAgIGlmIChzaGlmdCAhPSAwKQogICAgICAgICB0 Y2dfZ2VuX3NobGlfdGwoY3B1X3RtcDAsIGNwdV90bXAwLCBzaGlmdCk7CiAgICAgdGNnX2dlbl9h ZGRfdGwoY3B1X0EwLCBjcHVfQTAsIGNwdV90bXAwKTsKICNpZmRlZiBUQVJHRVRfWDg2XzY0CkBA IC00NjgsNiArNjQ3LDYzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZW5fb3BfYWRkbF9BMF9yZWdf c04oaW50IHNoaWZ0LCBpbnQgcmVnKQogI2VuZGlmCiB9CiAKKyNlbmRpZgorCitzdGF0aWMgaW5s aW5lIHZvaWQgZ2VuX29wX21vdl9yZWdfVDAoaW50IG90LCBpbnQgcmVnKQoreworICAgIGdlbl9v cF9tb3ZfcmVnX3Yob3QsIHJlZywgY3B1X1RbMF0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg Z2VuX29wX21vdl9yZWdfVDEoaW50IG90LCBpbnQgcmVnKQoreworICAgIGdlbl9vcF9tb3ZfcmVn X3Yob3QsIHJlZywgY3B1X1RbMV0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuX29wX21v dl9UTl9yZWcoaW50IG90LCBpbnQgdF9pbmRleCwgaW50IHJlZykKK3sKKyAgICBnZW5fb3BfbW92 X3ZfcmVnKG90LCBjcHVfVFt0X2luZGV4XSwgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk IGdlbl9vcF9hZGRsX0EwX2ltKGludDMyX3QgdmFsKQoreworICAgIHRjZ19nZW5fYWRkaV90bChj cHVfQTAsIGNwdV9BMCwgdmFsKTsKKyNpZmRlZiBUQVJHRVRfWDg2XzY0CisgICAgdGNnX2dlbl9h bmRpX3RsKGNwdV9BMCwgY3B1X0EwLCAweGZmZmZmZmZmKTsKKyNlbmRpZgorfQorCisjaWZkZWYg VEFSR0VUX1g4Nl82NAorc3RhdGljIGlubGluZSB2b2lkIGdlbl9vcF9hZGRxX0EwX2ltKGludDY0 X3QgdmFsKQoreworICAgIHRjZ19nZW5fYWRkaV90bChjcHVfQTAsIGNwdV9BMCwgdmFsKTsKK30K KyNlbmRpZgorICAgIAorc3RhdGljIHZvaWQgZ2VuX2FkZF9BMF9pbShEaXNhc0NvbnRleHQgKnMs IGludCB2YWwpCit7CisjaWZkZWYgVEFSR0VUX1g4Nl82NAorICAgIGlmIChDT0RFNjQocykpCisg ICAgICAgIGdlbl9vcF9hZGRxX0EwX2ltKHZhbCk7CisgICAgZWxzZQorI2VuZGlmCisgICAgICAg IGdlbl9vcF9hZGRsX0EwX2ltKHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5fb3Bf YWRkbF9UMF9UMSh2b2lkKQoreworICAgIHRjZ19nZW5fYWRkX3RsKGNwdV9UWzBdLCBjcHVfVFsw XSwgY3B1X1RbMV0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuX29wX2ptcF9UMCh2b2lk KQoreworICAgIHRjZ19nZW5fc3RfdGwoY3B1X1RbMF0sIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0 YXRlLCBlaXApKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdlbl9vcF9zZXRfY2Nfb3AoaW50 MzJfdCB2YWwpCit7CisgICAgdGNnX2dlbl9tb3ZpX2kzMihjcHVfY2Nfb3AsIHZhbCk7Cit9CisK IHN0YXRpYyBpbmxpbmUgdm9pZCBnZW5fb3BfbW92bF9BMF9zZWcoaW50IHJlZykKIHsKICAgICB0 Y2dfZ2VuX2xkMzJ1X3RsKGNwdV9BMCwgY3B1X2Vudiwgb2Zmc2V0b2YoQ1BVU3RhdGUsIHNlZ3Nb cmVnXS5iYXNlKSArIFJFR19MX09GRlNFVCk7CkBAIC00OTYsMTMgKzczMiwyMSBAQCBzdGF0aWMg aW5saW5lIHZvaWQgZ2VuX29wX2FkZHFfQTBfc2VnKGludCByZWcpCiAKIHN0YXRpYyBpbmxpbmUg dm9pZCBnZW5fb3BfbW92cV9BMF9yZWcoaW50IHJlZykKIHsKKyNpZmRlZiBVU0VfUkVHUworICAg IHRjZ19nZW5fbW92X3RsKGNwdV9BMCwgY3B1X3JlZ3NbcmVnXSk7CisjZWxzZQogICAgIHRjZ19n ZW5fbGRfdGwoY3B1X0EwLCBjcHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1tyZWddKSk7 CisjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGdlbl9vcF9hZGRxX0EwX3JlZ19zTihp bnQgc2hpZnQsIGludCByZWcpCiB7CisjaWZkZWYgVVNFX1JFR1MKKyAgICB0Y2dfZ2VuX21vdl90 bChjcHVfdG1wMCwgY3B1X3JlZ3NbcmVnXSk7CisjZWxzZQogICAgIHRjZ19nZW5fbGRfdGwoY3B1 X3RtcDAsIGNwdV9lbnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW3JlZ10pKTsKLSAgICBpZiAo c2hpZnQgIT0gMCkgCisjZW5kaWYKKyAgICBpZiAoc2hpZnQgIT0gMCkKICAgICAgICAgdGNnX2dl bl9zaGxpX3RsKGNwdV90bXAwLCBjcHVfdG1wMCwgc2hpZnQpOwogICAgIHRjZ19nZW5fYWRkX3Rs KGNwdV9BMCwgY3B1X0EwLCBjcHVfdG1wMCk7CiB9CkBAIC03MDEsMTQgKzk0NSwyMiBAQCBzdGF0 aWMgdm9pZCBnZW5fZXh0cyhpbnQgb3QsIFRDR3YgcmVnKQogCiBzdGF0aWMgaW5saW5lIHZvaWQg Z2VuX29wX2puel9lY3goaW50IHNpemUsIGludCBsYWJlbDEpCiB7CisjaWZkZWYgVVNFX1JFR1MK KyAgICB0Y2dfZ2VuX21vdl90bChjcHVfdG1wMCwgY3B1X3JlZ3NbUl9FQ1hdKTsKKyNlbHNlCiAg ICAgdGNnX2dlbl9sZF90bChjcHVfdG1wMCwgY3B1X2Vudiwgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJl Z3NbUl9FQ1hdKSk7CisjZW5kaWYKICAgICBnZW5fZXh0dShzaXplICsgMSwgY3B1X3RtcDApOwog ICAgIHRjZ19nZW5fYnJjb25kaV90bChUQ0dfQ09ORF9ORSwgY3B1X3RtcDAsIDAsIGxhYmVsMSk7 CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBnZW5fb3BfanpfZWN4KGludCBzaXplLCBpbnQgbGFi ZWwxKQogeworI2lmZGVmIFVTRV9SRUdTCisgICAgdGNnX2dlbl9tb3ZfdGwoY3B1X3RtcDAsIGNw dV9yZWdzW1JfRUNYXSk7CisjZWxzZQogICAgIHRjZ19nZW5fbGRfdGwoY3B1X3RtcDAsIGNwdV9l bnYsIG9mZnNldG9mKENQVVN0YXRlLCByZWdzW1JfRUNYXSkpOworI2VuZGlmCiAgICAgZ2VuX2V4 dHUoc2l6ZSArIDEsIGNwdV90bXAwKTsKICAgICB0Y2dfZ2VuX2JyY29uZGlfdGwoVENHX0NPTkRf RVEsIGNwdV90bXAwLCAwLCBsYWJlbDEpOwogfQpAQCAtNDgzNCw3ICs1MDg2LDExIEBAIHN0YXRp YyB0YXJnZXRfdWxvbmcgZGlzYXNfaW5zbihEaXNhc0NvbnRleHQgKnMsIHRhcmdldF91bG9uZyBw Y19zdGFydCkKICAgICAgICAgICAgICAgICBybSA9IDA7IC8qIGF2b2lkIHdhcm5pbmcgKi8KICAg ICAgICAgICAgIH0KICAgICAgICAgICAgIGxhYmVsMSA9IGdlbl9uZXdfbGFiZWwoKTsKKyNpZmRl ZiBVU0VfUkVHUworICAgICAgICAgICAgdGNnX2dlbl9tb3ZfdGwodDIsIGNwdV9yZWdzW1JfRUFY XSk7CisjZWxzZQogICAgICAgICAgICAgdGNnX2dlbl9sZF90bCh0MiwgY3B1X2Vudiwgb2Zmc2V0 b2YoQ1BVU3RhdGUsIHJlZ3NbUl9FQVhdKSk7CisjZW5kaWYKICAgICAgICAgICAgIHRjZ19nZW5f c3ViX3RsKHQyLCB0MiwgdDApOwogICAgICAgICAgICAgZ2VuX2V4dHUob3QsIHQyKTsKICAgICAg ICAgICAgIHRjZ19nZW5fYnJjb25kaV90bChUQ0dfQ09ORF9FUSwgdDIsIDAsIGxhYmVsMSk7CkBA IC01NDA5LDcgKzU2NjUsMTEgQEAgc3RhdGljIHRhcmdldF91bG9uZyBkaXNhc19pbnNuKERpc2Fz Q29udGV4dCAqcywgdGFyZ2V0X3Vsb25nIHBjX3N0YXJ0KQogICAgICAgICAgICAgdmFsID0gbGR1 Yl9jb2RlKHMtPnBjKyspOwogICAgICAgICAgICAgdGNnX2dlbl9tb3ZpX3RsKGNwdV9UMywgdmFs KTsKICAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBVU0VfUkVHUworICAgICAgICAgICAgdGNnX2dl bl9tb3ZfdGwoY3B1X1QzLCBjcHVfcmVnc1tSX0VDWF0pOworI2Vsc2UKICAgICAgICAgICAgIHRj Z19nZW5fbGRfdGwoY3B1X1QzLCBjcHVfZW52LCBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1tSX0VD WF0pKTsKKyNlbmRpZgogICAgICAgICB9CiAgICAgICAgIGdlbl9zaGlmdGRfcm1fVDFfVDMocywg b3QsIG9wcmVnLCBvcCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNjMxNywxMCArNjU3NywxOCBAQCBz dGF0aWMgdGFyZ2V0X3Vsb25nIGRpc2FzX2luc24oRGlzYXNDb250ZXh0ICpzLCB0YXJnZXRfdWxv bmcgcGNfc3RhcnQpCiAgICAgICAgICAgICAgICAgLyogWFhYOiBzcGVjaWZpYyBJbnRlbCBiZWhh dmlvdXIgPyAqLwogICAgICAgICAgICAgICAgIGwxID0gZ2VuX25ld19sYWJlbCgpOwogICAgICAg ICAgICAgICAgIGdlbl9qY2MxKHMsIHMtPmNjX29wLCBiIF4gMSwgbDEpOworI2lmZGVmIFVTRV9S RUdTCisgICAgICAgICAgICAgICAgdGNnX2dlbl9tb3ZfdGwoY3B1X3JlZ3NbcmVnXSwgdDApOwor I2Vsc2UKICAgICAgICAgICAgICAgICB0Y2dfZ2VuX3N0MzJfdGwodDAsIGNwdV9lbnYsIG9mZnNl dG9mKENQVVN0YXRlLCByZWdzW3JlZ10pICsgUkVHX0xfT0ZGU0VUKTsKKyNlbmRpZgogICAgICAg ICAgICAgICAgIGdlbl9zZXRfbGFiZWwobDEpOworI2lmZGVmIFVTRV9SRUdTCisgICAgICAgICAg ICAgICAgdGNnX2dlbl9leHQzMnVfdGwoY3B1X3JlZ3NbcmVnXSwgY3B1X3JlZ3NbcmVnXSk7Cisj ZWxzZQogICAgICAgICAgICAgICAgIHRjZ19nZW5fbW92aV90bChjcHVfdG1wMCwgMCk7CiAgICAg ICAgICAgICAgICAgdGNnX2dlbl9zdDMyX3RsKGNwdV90bXAwLCBjcHVfZW52LCBvZmZzZXRvZihD UFVTdGF0ZSwgcmVnc1tyZWddKSArIFJFR19MSF9PRkZTRVQpOworI2VuZGlmCiAgICAgICAgICAg ICB9IGVsc2UKICNlbmRpZgogICAgICAgICAgICAgewpAQCAtNzU4OCw2ICs3ODU2LDYwIEBAIHZv aWQgb3B0aW1pemVfZmxhZ3NfaW5pdCh2b2lkKQogICAgIGNwdV9jY190bXAgPSB0Y2dfZ2xvYmFs X21lbV9uZXcoVENHX0FSRUcwLCBvZmZzZXRvZihDUFVTdGF0ZSwgY2NfdG1wKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjY190bXAiKTsKIAorI2lmZGVmIFVTRV9SRUdT CisjaWZkZWYgVEFSR0VUX1g4Nl82NAorICAgIGNwdV9yZWdzW1JfRUFYXSA9IHRjZ19nbG9iYWxf bWVtX25ld19pNjQoVENHX0FSRUcwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbUl9FQVhdKSwgInJheCIpOworICAg IGNwdV9yZWdzW1JfRUNYXSA9IHRjZ19nbG9iYWxfbWVtX25ld19pNjQoVENHX0FSRUcwLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVU3Rh dGUsIHJlZ3NbUl9FQ1hdKSwgInJjeCIpOworICAgIGNwdV9yZWdzW1JfRURYXSA9IHRjZ19nbG9i YWxfbWVtX25ld19pNjQoVENHX0FSRUcwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbUl9FRFhdKSwgInJkeCIpOwor ICAgIGNwdV9yZWdzW1JfRUJYXSA9IHRjZ19nbG9iYWxfbWVtX25ld19pNjQoVENHX0FSRUcwLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoQ1BV U3RhdGUsIHJlZ3NbUl9FQlhdKSwgInJieCIpOworICAgIGNwdV9yZWdzW1JfRVNQXSA9IHRjZ19n bG9iYWxfbWVtX25ld19pNjQoVENHX0FSRUcwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbUl9FU1BdKSwgInJzcCIp OworICAgIGNwdV9yZWdzW1JfRUJQXSA9IHRjZ19nbG9iYWxfbWVtX25ld19pNjQoVENHX0FSRUcw LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2Yo Q1BVU3RhdGUsIHJlZ3NbUl9FQlBdKSwgInJicCIpOworICAgIGNwdV9yZWdzW1JfRVNJXSA9IHRj Z19nbG9iYWxfbWVtX25ld19pNjQoVENHX0FSRUcwLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbUl9FU0ldKSwgInJz aSIpOworICAgIGNwdV9yZWdzW1JfRURJXSA9IHRjZ19nbG9iYWxfbWVtX25ld19pNjQoVENHX0FS RUcwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0 b2YoQ1BVU3RhdGUsIHJlZ3NbUl9FREldKSwgInJkaSIpOworICAgIGNwdV9yZWdzWzhdID0gdGNn X2dsb2JhbF9tZW1fbmV3X2k2NChUQ0dfQVJFRzAsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9mZnNldG9mKENQVVN0YXRlLCByZWdzWzhdKSwgInI4Iik7CisgICAg Y3B1X3JlZ3NbOV0gPSB0Y2dfZ2xvYmFsX21lbV9uZXdfaTY0KFRDR19BUkVHMCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldG9mKENQVVN0YXRlLCByZWdz WzldKSwgInI5Iik7CisgICAgY3B1X3JlZ3NbMTBdID0gdGNnX2dsb2JhbF9tZW1fbmV3X2k2NChU Q0dfQVJFRzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZz ZXRvZihDUFVTdGF0ZSwgcmVnc1sxMF0pLCAicjEwIik7CisgICAgY3B1X3JlZ3NbMTFdID0gdGNn X2dsb2JhbF9tZW1fbmV3X2k2NChUQ0dfQVJFRzAsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1sxMV0pLCAicjExIik7Cisg ICAgY3B1X3JlZ3NbMTJdID0gdGNnX2dsb2JhbF9tZW1fbmV3X2k2NChUQ0dfQVJFRzAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRvZihDUFVTdGF0ZSwg cmVnc1sxMl0pLCAicjEyIik7CisgICAgY3B1X3JlZ3NbMTNdID0gdGNnX2dsb2JhbF9tZW1fbmV3 X2k2NChUQ0dfQVJFRzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1sxM10pLCAicjEzIik7CisgICAgY3B1X3JlZ3NbMTRd ID0gdGNnX2dsb2JhbF9tZW1fbmV3X2k2NChUQ0dfQVJFRzAsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRvZihDUFVTdGF0ZSwgcmVnc1sxNF0pLCAicjE0 Iik7CisgICAgY3B1X3JlZ3NbMTVdID0gdGNnX2dsb2JhbF9tZW1fbmV3X2k2NChUQ0dfQVJFRzAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRvZihDUFVT dGF0ZSwgcmVnc1sxNV0pLCAicjE1Iik7CisjZWxzZQorICAgIGNwdV9yZWdzW1JfRUFYXSA9IHRj Z19nbG9iYWxfbWVtX25ld19pMzIoVENHX0FSRUcwLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbUl9FQVhdKSwgImVh eCIpOworICAgIGNwdV9yZWdzW1JfRUNYXSA9IHRjZ19nbG9iYWxfbWVtX25ld19pMzIoVENHX0FS RUcwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0 b2YoQ1BVU3RhdGUsIHJlZ3NbUl9FQ1hdKSwgImVjeCIpOworICAgIGNwdV9yZWdzW1JfRURYXSA9 IHRjZ19nbG9iYWxfbWVtX25ld19pMzIoVENHX0FSRUcwLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbUl9FRFhdKSwg ImVkeCIpOworICAgIGNwdV9yZWdzW1JfRUJYXSA9IHRjZ19nbG9iYWxfbWVtX25ld19pMzIoVENH X0FSRUcwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zm c2V0b2YoQ1BVU3RhdGUsIHJlZ3NbUl9FQlhdKSwgImVieCIpOworICAgIGNwdV9yZWdzW1JfRVNQ XSA9IHRjZ19nbG9iYWxfbWVtX25ld19pMzIoVENHX0FSRUcwLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbUl9FU1Bd KSwgImVzcCIpOworICAgIGNwdV9yZWdzW1JfRUJQXSA9IHRjZ19nbG9iYWxfbWVtX25ld19pMzIo VENHX0FSRUcwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbUl9FQlBdKSwgImVicCIpOworICAgIGNwdV9yZWdzW1Jf RVNJXSA9IHRjZ19nbG9iYWxfbWVtX25ld19pMzIoVENHX0FSRUcwLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbUl9F U0ldKSwgImVzaSIpOworICAgIGNwdV9yZWdzW1JfRURJXSA9IHRjZ19nbG9iYWxfbWVtX25ld19p MzIoVENHX0FSRUcwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb2Zmc2V0b2YoQ1BVU3RhdGUsIHJlZ3NbUl9FREldKSwgImVkaSIpOworI2VuZGlmCisjZW5k aWYKKwogICAgIC8qIHJlZ2lzdGVyIGhlbHBlcnMgKi8KICNkZWZpbmUgR0VOX0hFTFBFUiAyCiAj aW5jbHVkZSAiaGVscGVyLmgiCg== --001485eb93b59bc83f04737bd5ed--