From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v4 06/27] x86: clean up PV emulation code Date: Thu, 8 Jun 2017 18:11:42 +0100 Message-ID: <20170608171203.20416-7-wei.liu2@citrix.com> References: <20170608171203.20416-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dJ0yj-0004rX-3S for xen-devel@lists.xenproject.org; Thu, 08 Jun 2017 17:12:13 +0000 In-Reply-To: <20170608171203.20416-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org UmVwbGFjZSBib29sX3Qgd2l0aCBib29sLiBGaXggY29kaW5nIHN0eWxlIGlzc3Vlcy4gQWRkIHNw YWNlcyBhcm91bmQKYmluYXJ5IG9wcy4gVXNlIDFVIGZvciBzaGlmdGluZy4gRWxpbWluYXRlIFRP R0dMRV9NT0RFLgoKU2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4K U2lnbmVkLW9mZi1ieTogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4K LS0tCiB4ZW4vYXJjaC94ODYvcHYvZW11bC1nYXRlLW9wLmMgfCAgNSArKy0KIHhlbi9hcmNoL3g4 Ni9wdi9lbXVsLXByaXYtb3AuYyB8IDgyICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0t LS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCA0MiBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvZW11bC1nYXRlLW9wLmMgYi94ZW4v YXJjaC94ODYvcHYvZW11bC1nYXRlLW9wLmMKaW5kZXggOTdhNGIzMWE1Ni4uY2RmM2IzMDhmMiAx MDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3B2L2VtdWwtZ2F0ZS1vcC5jCisrKyBiL3hlbi9hcmNo L3g4Ni9wdi9lbXVsLWdhdGUtb3AuYwpAQCAtNTAsNyArNTAsNiBAQCBzdGF0aWMgaW50IHJlYWRf Z2F0ZV9kZXNjcmlwdG9yKHVuc2lnbmVkIGludCBnYXRlX3NlbCwKICAgICBzdHJ1Y3QgZGVzY19z dHJ1Y3QgZGVzYzsKICAgICBjb25zdCBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKnBkZXNjOwogCi0KICAg ICBwZGVzYyA9IChjb25zdCBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKikKICAgICAgICAgKCEoZ2F0ZV9z ZWwgJiA0KSA/IEdEVF9WSVJUX1NUQVJUKHYpIDogTERUX1ZJUlRfU1RBUlQodikpCiAgICAgICAg ICsgKGdhdGVfc2VsID4+IDMpOwpAQCAtOTcsOCArOTYsOCBAQCBzdGF0aWMgaW50IHJlYWRfZ2F0 ZV9kZXNjcmlwdG9yKHVuc2lnbmVkIGludCBnYXRlX3NlbCwKICAgICByZXR1cm4gMTsKIH0KIAot c3RhdGljIGlubGluZSBpbnQgY2hlY2tfc3RhY2tfbGltaXQodW5zaWduZWQgaW50IGFyLCB1bnNp Z25lZCBpbnQgbGltaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgZXNwLCB1bnNpZ25lZCBpbnQgZGVjcikKK3N0YXRpYyBpbmxpbmUgYm9vbCBjaGVj a19zdGFja19saW1pdCh1bnNpZ25lZCBpbnQgYXIsIHVuc2lnbmVkIGludCBsaW1pdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXNwLCB1bnNpZ25l ZCBpbnQgZGVjcikKIHsKICAgICByZXR1cm4gKCgoZXNwIC0gZGVjcikgPCAoZXNwIC0gMSkpICYm CiAgICAgICAgICAgICAoIShhciAmIF9TRUdNRU5UX0VDKSA/IChlc3AgLSAxKSA8PSBsaW1pdCA6 IChlc3AgLSBkZWNyKSA+IGxpbWl0KSk7CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvZW11 bC1wcml2LW9wLmMgYi94ZW4vYXJjaC94ODYvcHYvZW11bC1wcml2LW9wLmMKaW5kZXggZmQ1ZmQ3 NGJkMS4uODUxODViNmIyOSAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3B2L2VtdWwtcHJpdi1v cC5jCisrKyBiL3hlbi9hcmNoL3g4Ni9wdi9lbXVsLXByaXYtb3AuYwpAQCAtNTgsNyArNTgsNyBA QCBzdHJ1Y3QgcHJpdl9vcF9jdHh0IHsKICNkZWZpbmUgVFNDX0FVWCAyCiB9OwogCi0vKiBJL08g ZW11bGF0aW9uIHN1cHBvcnQuIEhlbHBlciByb3V0aW5lcyBmb3IsIGFuZCB0eXBlIG9mLCB0aGUg c3RhY2sgc3R1Yi4qLworLyogSS9PIGVtdWxhdGlvbiBzdXBwb3J0LiBIZWxwZXIgcm91dGluZXMg Zm9yLCBhbmQgdHlwZSBvZiwgdGhlIHN0YWNrIHN0dWIuICovCiB2b2lkIGhvc3RfdG9fZ3Vlc3Rf Z3ByX3N3aXRjaChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqKTsKIHVuc2lnbmVkIGxvbmcgZ3Vlc3Rf dG9faG9zdF9ncHJfc3dpdGNoKHVuc2lnbmVkIGxvbmcpOwogCkBAIC0xMDEsNyArMTAxLDcgQEAg c3RhdGljIGlvX2VtdWxfc3R1Yl90ICppb19lbXVsX3N0dWJfc2V0dXAoc3RydWN0IHByaXZfb3Bf Y3R4dCAqY3R4dCwgdTggb3Bjb2RlLAogCiAKIC8qIFBlcmZvcm0gSU9QTCBjaGVjayBiZXR3ZWVu IHRoZSB2Y3B1J3Mgc2hhZG93ZWQgSU9QTCwgYW5kIHRoZSBhc3N1bWVkIGNwbC4gKi8KLXN0YXRp YyBib29sX3QgaW9wbF9vayhjb25zdCBzdHJ1Y3QgdmNwdSAqdiwgY29uc3Qgc3RydWN0IGNwdV91 c2VyX3JlZ3MgKnJlZ3MpCitzdGF0aWMgYm9vbCBpb3BsX29rKGNvbnN0IHN0cnVjdCB2Y3B1ICp2 LCBjb25zdCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKIHsKICAgICB1bnNpZ25lZCBpbnQg Y3BsID0gZ3Vlc3Rfa2VybmVsX21vZGUodiwgcmVncykgPwogICAgICAgICAoVk1fQVNTSVNUKHYt PmRvbWFpbiwgYXJjaGl0ZWN0dXJhbF9pb3BsKSA/IDAgOiAxKSA6IDM7CkBAIC0xMTIsMTYgKzEx MiwxNCBAQCBzdGF0aWMgYm9vbF90IGlvcGxfb2soY29uc3Qgc3RydWN0IHZjcHUgKnYsIGNvbnN0 IHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQogfQogCiAvKiBIYXMgdGhlIGd1ZXN0IHJlcXVl c3RlZCBzdWZmaWNpZW50IHBlcm1pc3Npb24gZm9yIHRoaXMgSS9PIGFjY2Vzcz8gKi8KLXN0YXRp YyBpbnQgZ3Vlc3RfaW9fb2theSgKLSAgICB1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50 IGJ5dGVzLAotICAgIHN0cnVjdCB2Y3B1ICp2LCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykK K3N0YXRpYyBib29sIGd1ZXN0X2lvX29rYXkodW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGlu dCBieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZjcHUgKnYsIHN0cnVj dCBjcHVfdXNlcl9yZWdzICpyZWdzKQogewogICAgIC8qIElmIGluIHVzZXIgbW9kZSwgc3dpdGNo IHRvIGtlcm5lbCBtb2RlIGp1c3QgdG8gcmVhZCBJL08gYml0bWFwLiAqLwotICAgIGludCB1c2Vy X21vZGUgPSAhKHYtPmFyY2guZmxhZ3MgJiBURl9rZXJuZWxfbW9kZSk7Ci0jZGVmaW5lIFRPR0dM RV9NT0RFKCkgaWYgKCB1c2VyX21vZGUgKSB0b2dnbGVfZ3Vlc3RfbW9kZSh2KQorICAgIGNvbnN0 IGJvb2wgdXNlcl9tb2RlID0gISh2LT5hcmNoLmZsYWdzICYgVEZfa2VybmVsX21vZGUpOwogCiAg ICAgaWYgKCBpb3BsX29rKHYsIHJlZ3MpICkKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJl dHVybiB0cnVlOwogCiAgICAgaWYgKCB2LT5hcmNoLnB2X3ZjcHUuaW9ibXBfbGltaXQgPiAocG9y dCArIGJ5dGVzKSApCiAgICAgewpAQCAtMTMxLDcgKzEyOSw5IEBAIHN0YXRpYyBpbnQgZ3Vlc3Rf aW9fb2theSgKICAgICAgICAgICogR3JhYiBwZXJtaXNzaW9uIGJ5dGVzIGZyb20gZ3Vlc3Qgc3Bh Y2UuIEluYWNjZXNzaWJsZSBieXRlcyBhcmUKICAgICAgICAgICogcmVhZCBhcyAweGZmIChubyBh Y2Nlc3MgYWxsb3dlZCkuCiAgICAgICAgICAqLwotICAgICAgICBUT0dHTEVfTU9ERSgpOworICAg ICAgICBpZiAoIHVzZXJfbW9kZSApCisgICAgICAgICAgICB0b2dnbGVfZ3Vlc3RfbW9kZSh2KTsK KwogICAgICAgICBzd2l0Y2ggKCBfX2NvcHlfZnJvbV9ndWVzdF9vZmZzZXQoeC5ieXRlcywgdi0+ YXJjaC5wdl92Y3B1LmlvYm1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcG9ydD4+MywgMikgKQogICAgICAgICB7CkBAIC0xNDEsNDMgKzE0MSw0NSBAQCBzdGF0 aWMgaW50IGd1ZXN0X2lvX29rYXkoCiAgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLwogICAg ICAgICBjYXNlIDA6ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBUT0dHTEVfTU9ERSgpOwog Ci0gICAgICAgIGlmICggKHgubWFzayAmICgoKDE8PGJ5dGVzKS0xKSA8PCAocG9ydCY3KSkpID09 IDAgKQotICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmICggdXNlcl9tb2RlICkKKyAg ICAgICAgICAgIHRvZ2dsZV9ndWVzdF9tb2RlKHYpOworCisgICAgICAgIGlmICggKHgubWFzayAm ICgoKDEgPDwgYnl0ZXMpIC0gMSkgPDwgKHBvcnQgJiA3KSkpID09IDAgKQorICAgICAgICAgICAg cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZhbHNlOwog fQogCiAvKiBIYXMgdGhlIGFkbWluaXN0cmF0b3IgZ3JhbnRlZCBzdWZmaWNpZW50IHBlcm1pc3Np b24gZm9yIHRoaXMgSS9PIGFjY2Vzcz8gKi8KLXN0YXRpYyBib29sX3QgYWRtaW5faW9fb2theSh1 bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IGJ5dGVzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHN0cnVjdCBkb21haW4gKmQpCitzdGF0aWMgYm9vbCBhZG1pbl9pb19v a2F5KHVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgYnl0ZXMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkb21haW4gKmQpCiB7CiAgICAgLyoKICAgICAgKiBQ b3J0IDB4Y2Y4IChDT05GSUdfQUREUkVTUykgaXMgb25seSB2aXNpYmxlIGZvciBEV09SRCBhY2Nl c3Nlcy4KICAgICAgKiBXZSBuZXZlciBwZXJtaXQgZGlyZWN0IGFjY2VzcyB0byB0aGF0IHJlZ2lz dGVyLgogICAgICAqLwogICAgIGlmICggKHBvcnQgPT0gMHhjZjgpICYmIChieXRlcyA9PSA0KSAp Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvKiBXZSBh bHNvIG5ldmVyIHBlcm1pdCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBSVEMvQ01PUyByZWdpc3RlcnMu ICovCiAgICAgaWYgKCAoKHBvcnQgJiB+MSkgPT0gUlRDX1BPUlQoMCkpICkKLSAgICAgICAgcmV0 dXJuIDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBpb3BvcnRzX2FjY2Vz c19wZXJtaXR0ZWQoZCwgcG9ydCwgcG9ydCArIGJ5dGVzIC0gMSk7CiB9CiAKLXN0YXRpYyBib29s X3QgcGNpX2NmZ19vayhzdHJ1Y3QgZG9tYWluICpjdXJyZCwgdW5zaWduZWQgaW50IHN0YXJ0LAot ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzaXplLCB1aW50MzJfdCAqd3Jp dGUpCitzdGF0aWMgYm9vbCBwY2lfY2ZnX29rKHN0cnVjdCBkb21haW4gKmN1cnJkLCB1bnNpZ25l ZCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzaXplLCB1 aW50MzJfdCAqd3JpdGUpCiB7CiAgICAgdWludDMyX3QgbWFjaGluZV9iZGY7CiAKICAgICBpZiAo ICFpc19oYXJkd2FyZV9kb21haW4oY3VycmQpICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg IHJldHVybiBmYWxzZTsKIAogICAgIGlmICggIUNGOF9FTkFCTEVEKGN1cnJkLT5hcmNoLnBjaV9j ZjgpICkKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgbWFj aGluZV9iZGYgPSBDRjhfQkRGKGN1cnJkLT5hcmNoLnBjaV9jZjgpOwogICAgIGlmICggd3JpdGUg KQpAQCAtMTg1LDcgKzE4Nyw3IEBAIHN0YXRpYyBib29sX3QgcGNpX2NmZ19vayhzdHJ1Y3QgZG9t YWluICpjdXJyZCwgdW5zaWduZWQgaW50IHN0YXJ0LAogICAgICAgICBjb25zdCB1bnNpZ25lZCBs b25nICpyb19tYXAgPSBwY2lfZ2V0X3JvX21hcCgwKTsKIAogICAgICAgICBpZiAoIHJvX21hcCAm JiB0ZXN0X2JpdChtYWNoaW5lX2JkZiwgcm9fbWFwKSApCi0gICAgICAgICAgICByZXR1cm4gMDsK KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgc3RhcnQgfD0gQ0Y4X0FERFJf TE8oY3VycmQtPmFyY2gucGNpX2NmOCk7CiAgICAgLyogQU1EIGV4dGVuZGVkIGNvbmZpZ3VyYXRp b24gc3BhY2UgYWNjZXNzPyAqLwpAQCAtMTk2LDcgKzE5OCw3IEBAIHN0YXRpYyBib29sX3QgcGNp X2NmZ19vayhzdHJ1Y3QgZG9tYWluICpjdXJyZCwgdW5zaWduZWQgaW50IHN0YXJ0LAogICAgICAg ICB1aW50NjRfdCBtc3JfdmFsOwogCiAgICAgICAgIGlmICggcmRtc3Jfc2FmZShNU1JfQU1ENjRf TkJfQ0ZHLCBtc3JfdmFsKSApCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKICAgICAgICAgaWYgKCBtc3JfdmFsICYgKDFVTEwgPDwgQU1ENjRfTkJfQ0ZH X0NGOF9FWFRfRU5BQkxFX0JJVCkgKQogICAgICAgICAgICAgc3RhcnQgfD0gQ0Y4X0FERFJfSEko Y3VycmQtPmFyY2gucGNpX2NmOCk7CiAgICAgfQpAQCAtMjczLDcgKzI3NSw4IEBAIHVpbnQzMl90 IGd1ZXN0X2lvX3JlYWQodW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcywKIH0K IAogc3RhdGljIHVuc2lnbmVkIGludCBjaGVja19ndWVzdF9pb19icmVha3BvaW50KHN0cnVjdCB2 Y3B1ICp2LAotICAgIHVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgbGVuKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwb3J0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBsZW4pCiB7CiAgICAgdW5zaWduZWQgaW50IHdpZHRoLCBpLCBtYXRjaCA9IDA7CiAgICAg dW5zaWduZWQgbG9uZyBzdGFydDsKQEAgLTMwMSw3ICszMDQsNyBAQCBzdGF0aWMgdW5zaWduZWQg aW50IGNoZWNrX2d1ZXN0X2lvX2JyZWFrcG9pbnQoc3RydWN0IHZjcHUgKnYsCiAgICAgICAgIH0K IAogICAgICAgICBpZiAoIChzdGFydCA8IChwb3J0ICsgbGVuKSkgJiYgKChzdGFydCArIHdpZHRo KSA+IHBvcnQpICkKLSAgICAgICAgICAgIG1hdGNoIHw9IDEgPDwgaTsKKyAgICAgICAgICAgIG1h dGNoIHw9IDF1IDw8IGk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1hdGNoOwpAQCAtMzQyLDcgKzM0 NSw4IEBAIHZvaWQgZ3Vlc3RfaW9fd3JpdGUodW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGlu dCBieXRlcywgdWludDMyX3QgZGF0YSwKIHsKICAgICBpZiAoIGFkbWluX2lvX29rYXkocG9ydCwg Ynl0ZXMsIGN1cnJkKSApCiAgICAgewotICAgICAgICBzd2l0Y2ggKCBieXRlcyApIHsKKyAgICAg ICAgc3dpdGNoICggYnl0ZXMgKQorICAgICAgICB7CiAgICAgICAgIGNhc2UgMToKICAgICAgICAg ICAgIG91dGIoKHVpbnQ4X3QpZGF0YSwgcG9ydCk7CiAgICAgICAgICAgICBpZiAoIHB2X3Bvc3Rf b3V0Yl9ob29rICkKQEAgLTc0MSw3ICs3NDUsNyBAQCBzdGF0aWMgaW50IHByaXZfb3Bfd3JpdGVf Y3IodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyB2YWwsCiAgICAgICAgIGlmICggKHZh bCBeIHJlYWRfY3IwKCkpICYgflg4Nl9DUjBfVFMgKQogICAgICAgICB7CiAgICAgICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8g Y2hhbmdlIHVubW9kaWZpYWJsZSBDUjAgZmxhZ3NcbiIpOworICAgICAgICAgICAgICAgICAgICAg IkF0dGVtcHQgdG8gY2hhbmdlIHVubW9kaWZpYWJsZSBDUjAgZmxhZ3NcbiIpOwogICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZG9fZnB1X3Rhc2tzd2l0Y2goISEodmFsICYg WDg2X0NSMF9UUykpOwpAQCAtOTQ4LDE2ICs5NTIsMTYgQEAgc3RhdGljIGludCBwcml2X29wX3Jl YWRfbXNyKHVuc2lnbmVkIGludCByZWcsIHVpbnQ2NF90ICp2YWwsCiAgICAgICAgICAgICAqdmFs IHw9IE1TUl9NSVNDX0ZFQVRVUkVTX0NQVUlEX0ZBVUxUSU5HOwogICAgICAgICByZXR1cm4gWDg2 RU1VTF9PS0FZOwogCi0gICAgY2FzZSBNU1JfUDZfUEVSRkNUUigwKS4uLk1TUl9QNl9QRVJGQ1RS KDcpOgotICAgIGNhc2UgTVNSX1A2X0VWTlRTRUwoMCkuLi5NU1JfUDZfRVZOVFNFTCgzKToKLSAg ICBjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMC4uLk1TUl9DT1JFX1BFUkZfRklYRURfQ1RS MjoKLSAgICBjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkwuLi5NU1JfQ09SRV9QRVJG X0dMT0JBTF9PVkZfQ1RSTDoKKyAgICBjYXNlIE1TUl9QNl9QRVJGQ1RSKDApIC4uLiBNU1JfUDZf UEVSRkNUUig3KToKKyAgICBjYXNlIE1TUl9QNl9FVk5UU0VMKDApIC4uLiBNU1JfUDZfRVZOVFNF TCgzKToKKyAgICBjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMCAuLi4gTVNSX0NPUkVfUEVS Rl9GSVhFRF9DVFIyOgorICAgIGNhc2UgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTCAuLi4g TVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6CiAgICAgICAgIGlmICggYm9vdF9jcHVfZGF0 YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgKQogICAgICAgICB7CiAgICAgICAgICAg ICB2cG11X21zciA9IHRydWU7CiAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICBj YXNlIE1TUl9BTURfRkFNMTVIX0VWTlRTRUwwLi4uTVNSX0FNRF9GQU0xNUhfUEVSRkNUUjU6Ci0g ICAgY2FzZSBNU1JfSzdfRVZOVFNFTDAuLi5NU1JfSzdfUEVSRkNUUjM6CisgICAgY2FzZSBNU1Jf QU1EX0ZBTTE1SF9FVk5UU0VMMCAuLi4gTVNSX0FNRF9GQU0xNUhfUEVSRkNUUjU6CisgICAgY2Fz ZSBNU1JfSzdfRVZOVFNFTDAgLi4uIE1TUl9LN19QRVJGQ1RSMzoKICAgICAgICAgICAgIGlmICgg dnBtdV9tc3IgfHwgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkg KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmICggdnBtdV9kb19yZG1zcihyZWcs IHZhbCkgKQpAQCAtMTE1MywxNSArMTE1NywxNSBAQCBzdGF0aWMgaW50IHByaXZfb3Bfd3JpdGVf bXNyKHVuc2lnbmVkIGludCByZWcsIHVpbnQ2NF90IHZhbCwKICAgICAgICAgY3Vyci0+YXJjaC5j cHVpZF9mYXVsdGluZyA9ICEhKHZhbCAmIE1TUl9NSVNDX0ZFQVRVUkVTX0NQVUlEX0ZBVUxUSU5H KTsKICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKIAotICAgIGNhc2UgTVNSX1A2X1BFUkZD VFIoMCkuLi5NU1JfUDZfUEVSRkNUUig3KToKLSAgICBjYXNlIE1TUl9QNl9FVk5UU0VMKDApLi4u TVNSX1A2X0VWTlRTRUwoMyk6Ci0gICAgY2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjAuLi5N U1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjI6Ci0gICAgY2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NU Ul9DVFJMLi4uTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6CisgICAgY2FzZSBNU1JfUDZf UEVSRkNUUigwKSAuLi4gTVNSX1A2X1BFUkZDVFIoNyk6CisgICAgY2FzZSBNU1JfUDZfRVZOVFNF TCgwKSAuLi4gTVNSX1A2X0VWTlRTRUwoMyk6CisgICAgY2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVE X0NUUjAgLi4uIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMjoKKyAgICBjYXNlIE1TUl9DT1JFX1BF UkZfRklYRURfQ1RSX0NUUkwgLi4uIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMOgogICAg ICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMICkK ICAgICAgICAgewogICAgICAgICAgICAgdnBtdV9tc3IgPSB0cnVlOwotICAgIGNhc2UgTVNSX0FN RF9GQU0xNUhfRVZOVFNFTDAuLi5NU1JfQU1EX0ZBTTE1SF9QRVJGQ1RSNToKLSAgICBjYXNlIE1T Ul9LN19FVk5UU0VMMC4uLk1TUl9LN19QRVJGQ1RSMzoKKyAgICBjYXNlIE1TUl9BTURfRkFNMTVI X0VWTlRTRUwwIC4uLiBNU1JfQU1EX0ZBTTE1SF9QRVJGQ1RSNToKKyAgICBjYXNlIE1TUl9LN19F Vk5UU0VMMCAuLi4gTVNSX0s3X1BFUkZDVFIzOgogICAgICAgICAgICAgaWYgKCB2cG11X21zciB8 fCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSApCiAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKCAodnBtdV9tb2RlICYgWEVOUE1VX01PREVfQUxM KSAmJgotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpo dHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==