From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v2 07/19] x86/emul: Remove opencoded exception generation Date: Mon, 28 Nov 2016 11:13:24 +0000 Message-ID: <1480331616-6165-8-git-send-email-andrew.cooper3@citrix.com> References: <1480331616-6165-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1480331616-6165-1-git-send-email-andrew.cooper3@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 List-Id: xen-devel@lists.xenproject.org SW50cm9kdWNlIGdlbmVyYXRlX2V4Y2VwdGlvbigpIGZvciB1bmNvbmRpdGlvbmFsIGV4Y2VwdGlv biBnZW5lcmF0aW9uLCBhbmQKcmVwbGFjZSBleGlzdGluZyB1c2VzLiAgQm90aCBnZW5lcmF0ZV9l eGNlcHRpb24oKSBhbmQgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCkKYXJlIHVwZGF0ZWQgdG8gbWFr ZSB0aGVpciBlcnJvciBjb2RlIHBhcmFtZXRlcnMgb3B0aW9uYWwsIHdoaWNoIHJlbW92ZXMgdGhl CnVzZSBvZiB0aGUgLTEgc2VudGluYWwuCgpUaGUgaW9wb3J0X2FjY2Vzc19jaGVjaygpIGNoZWNr IGxvc2VzIHRoZSBwcmVzZW5jZSBjaGVjayBmb3IgJXRyLCBhcyB0aGUgeDg2CmFyY2hpdGVjdHVy ZSBoYXMgbm8gY29uY2VwdCBvZiBhIG5vbi11c2FibGUgdGFzayByZWdpc3Rlci4KCk5vIGZ1bmN0 aW9uYWwgY2hhbmdlLgoKU2lnbmVkLW9mZi1ieTogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3Bl cjNAY2l0cml4LmNvbT4KUmV2aWV3ZWQtYnk6IEphbiBCZXVsaWNoIDxKQmV1bGljaEBzdXNlLmNv bT4KLS0tCnYyOgogKiBCcmFja2V0cyBhcm91bmQgJgotLS0KIHhlbi9hcmNoL3g4Ni94ODZfZW11 bGF0ZS94ODZfZW11bGF0ZS5jIHwgMTk2ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LQogMSBmaWxlIGNoYW5nZWQsIDEwMCBpbnNlcnRpb25zKCspLCA5NiBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS94ZW4vYXJjaC94ODYveDg2X2VtdWxhdGUveDg2X2VtdWxhdGUuYyBiL3hlbi9h cmNoL3g4Ni94ODZfZW11bGF0ZS94ODZfZW11bGF0ZS5jCmluZGV4IDljMjhlZDQuLjZhNjUzZjkg MTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni94ODZfZW11bGF0ZS94ODZfZW11bGF0ZS5jCisrKyBi L3hlbi9hcmNoL3g4Ni94ODZfZW11bGF0ZS94ODZfZW11bGF0ZS5jCkBAIC00NTcsMTQgKzQ1Nywy MCBAQCB0eXBlZGVmIHVuaW9uIHsKICNkZWZpbmUgRVhDX0JSICA1CiAjZGVmaW5lIEVYQ19VRCAg NgogI2RlZmluZSBFWENfTk0gIDcKKyNkZWZpbmUgRVhDX0RGICA4CiAjZGVmaW5lIEVYQ19UUyAx MAogI2RlZmluZSBFWENfTlAgMTEKICNkZWZpbmUgRVhDX1NTIDEyCiAjZGVmaW5lIEVYQ19HUCAx MwogI2RlZmluZSBFWENfUEYgMTQKICNkZWZpbmUgRVhDX01GIDE2CisjZGVmaW5lIEVYQ19BQyAx NwogI2RlZmluZSBFWENfWE0gMTkKIAorI2RlZmluZSBFWENfSEFTX0VDICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoMXUgPDwgRVhD X0RGKSB8ICgxdSA8PCBFWENfVFMpIHwgKDF1IDw8IEVYQ19OUCkgfCAgICAgICAgICAgICAgICAg XAorICAgICAoMXUgPDwgRVhDX1NTKSB8ICgxdSA8PCBFWENfR1ApIHwgKDF1IDw8IEVYQ19QRikg fCAoMXUgPDwgRVhDX0FDKSkKKwogLyogU2VnbWVudCBzZWxlY3RvciBlcnJvciBjb2RlIGJpdHMu ICovCiAjZGVmaW5lIEVDT0RFX0VYVCAoMSA8PCAwKQogI2RlZmluZSBFQ09ERV9JRFQgKDEgPDwg MSkKQEAgLTY2NywxNCArNjczLDIyIEBAIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmICggcmMgKSBnb3RvIGRvbmU7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIGdlbmVy YXRlX2V4Y2VwdGlvbl9pZihwLCBlLCBlYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKK3N0YXRpYyBpbmxpbmUgaW50IG1rZWModWludDhfdCBlLCBpbnQzMl90IGVjLCAuLi4p Cit7CisgICAgcmV0dXJuIChlIDwgMzIgJiYgKCgxdSA8PCBlKSAmIEVYQ19IQVNfRUMpKSA/IGVj IDogWDg2X0VWRU5UX05PX0VDOworfQorCisjZGVmaW5lIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihw LCBlLCBlYy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICh7ICBpZiAoIChw KSApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAogICAgICAgICBmYWlsX2lmKG9wcy0+aW5qZWN0X2h3X2V4Y2VwdGlvbiA9PSBOVUxM KTsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJjID0gb3BzLT5pbmplY3RfaHdf ZXhjZXB0aW9uKGUsIGVjLCBjdHh0KSA/IDogWDg2RU1VTF9FWENFUFRJT047IFwKKyAgICAgICAg cmMgPSBvcHMtPmluamVjdF9od19leGNlcHRpb24oZSwgbWtlYyhlLCAjI2VjLCAwKSwgY3R4dCkg ICAgICAgICAgXAorICAgICAgICAgICAgPyA6IFg4NkVNVUxfRVhDRVBUSU9OOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGdvdG8gZG9uZTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAogfSkKIAorI2RlZmluZSBnZW5lcmF0ZV9leGNlcHRpb24oZSwgZWMuLi4p IGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih0cnVlLCBlLCAjI2VjKQorCiAvKgogICogR2l2ZW4gYnl0 ZSBoYXMgZXZlbiBwYXJpdHkgKGV2ZW4gbnVtYmVyIG9mIDFzKT8gU0RNIFZvbC4gMSBTZWMuIDMu NC4zLjEsCiAgKiAiU3RhdHVzIEZsYWdzIjogRUZMQUdTLlBGIHJlZmxlY3RzIHBhcml0eSBvZiBs ZWFzdC1zaWcuIGJ5dGUgb2YgcmVzdWx0IG9ubHkuCkBAIC03ODUsNyArNzk5LDcgQEAgc3RhdGlj IGludCBfZ2V0X2ZwdSgKICAgICAgICAgICAgICAgICByZXR1cm4gcmM7CiAgICAgICAgICAgICBn ZW5lcmF0ZV9leGNlcHRpb25faWYoIShjcjQgJiAoKHR5cGUgPT0gWDg2RU1VTF9GUFVfeG1tKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQ1I0X09TRlhTUiA6 IENSNF9PU1hTQVZFKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhDX1VE LCAtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhDX1VEKTsKICAgICAg ICAgfQogCiAgICAgICAgIHJjID0gb3BzLT5yZWFkX2NyKDAsICZjcjAsIGN0eHQpOwpAQCAtNzk4 LDEzICs4MTIsMTMgQEAgc3RhdGljIGludCBfZ2V0X2ZwdSgKICAgICAgICAgfQogICAgICAgICBp ZiAoIGNyMCAmIENSMF9FTSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2Vw dGlvbl9pZih0eXBlID09IFg4NkVNVUxfRlBVX2ZwdSwgRVhDX05NLCAtMSk7Ci0gICAgICAgICAg ICBnZW5lcmF0ZV9leGNlcHRpb25faWYodHlwZSA9PSBYODZFTVVMX0ZQVV9tbXgsIEVYQ19VRCwg LTEpOwotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHR5cGUgPT0gWDg2RU1VTF9G UFVfeG1tLCBFWENfVUQsIC0xKTsKKyAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih0 eXBlID09IFg4NkVNVUxfRlBVX2ZwdSwgRVhDX05NKTsKKyAgICAgICAgICAgIGdlbmVyYXRlX2V4 Y2VwdGlvbl9pZih0eXBlID09IFg4NkVNVUxfRlBVX21teCwgRVhDX1VEKTsKKyAgICAgICAgICAg IGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih0eXBlID09IFg4NkVNVUxfRlBVX3htbSwgRVhDX1VEKTsK ICAgICAgICAgfQogICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoKGNyMCAmIENSMF9UUykg JiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlICE9IFg4NkVNVUxfRlBVX3dh aXQgfHwgKGNyMCAmIENSMF9NUCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhD X05NLCAtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfTk0pOwogICAgIH0K IAogIGRvbmU6CkBAIC04MzIsNyArODQ2LDcgQEAgZG8geyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIChfZmlj KS0+ZXhuX3JhaXNlZCA9IEVYQ19VRDsgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAogICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigoX2ZpYyktPmV4bl9yYWlzZWQgPj0gMCwgICAg ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKF9maWMpLT5leG5fcmFpc2Vk LCAtMSk7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIChfZmljKS0+ ZXhuX3JhaXNlZCk7ICAgICAgICAgICAgICAgICAgXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBl bXVsYXRlX2ZwdV9pbnNuKF9vcCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMTY3 LDExICsxMTgxLDkgQEAgc3RhdGljIGludCBpb3BvcnRfYWNjZXNzX2NoZWNrKAogICAgIGlmICgg KHJjID0gb3BzLT5yZWFkX3NlZ21lbnQoeDg2X3NlZ190ciwgJnRyLCBjdHh0KSkgIT0gMCApCiAg ICAgICAgIHJldHVybiByYzsKIAotICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBUU1MgaXMgdmFsaWQg YW5kIGhhcyBhbiBpby1iaXRtYXAtb2Zmc2V0IGZpZWxkLiAqLwotICAgIGlmICggIXRyLmF0dHIu ZmllbGRzLnAgfHwKLSAgICAgICAgICgodHIuYXR0ci5maWVsZHMudHlwZSAmIDB4ZCkgIT0gMHg5 KSB8fAotICAgICAgICAgKHRyLmxpbWl0IDwgMHg2NykgKQotICAgICAgICBnb3RvIHJhaXNlX2V4 Y2VwdGlvbjsKKyAgICAvKiBFbnN1cmUgdGhlIFRTUyBoYXMgYW4gaW8tYml0bWFwLW9mZnNldCBm aWVsZC4gKi8KKyAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYodHIuYXR0ci5maWVsZHMudHlwZSAh PSAweGIgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHIubGltaXQgPCAweDY3LCBFWENf R1AsIDApOwogCiAgICAgaWYgKCAocmMgPSByZWFkX3Vsb25nKHg4Nl9zZWdfbm9uZSwgdHIuYmFz ZSArIDB4NjYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZpb2JtcCwgMiwgY3R4dCwgb3Bz KSkgKQpAQCAtMTE3OSwyMSArMTE5MSwxNiBAQCBzdGF0aWMgaW50IGlvcG9ydF9hY2Nlc3NfY2hl Y2soCiAKICAgICAvKiBFbnN1cmUgVFNTIGluY2x1ZGVzIHR3byBieXRlcyBpbmNsdWRpbmcgYnl0 ZSBjb250YWluaW5nIGZpcnN0IHBvcnQuICovCiAgICAgaW9ibXAgKz0gZmlyc3RfcG9ydCAvIDg7 Ci0gICAgaWYgKCB0ci5saW1pdCA8PSBpb2JtcCApCi0gICAgICAgIGdvdG8gcmFpc2VfZXhjZXB0 aW9uOworICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih0ci5saW1pdCA8PSBpb2JtcCwgRVhDX0dQ LCAwKTsKIAogICAgIGlmICggKHJjID0gcmVhZF91bG9uZyh4ODZfc2VnX25vbmUsIHRyLmJhc2Ug KyBpb2JtcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlvYm1wLCAyLCBjdHh0LCBvcHMp KSApCiAgICAgICAgIHJldHVybiByYzsKLSAgICBpZiAoIChpb2JtcCAmICgoKDE8PGJ5dGVzKS0x KSA8PCAoZmlyc3RfcG9ydCY3KSkpICE9IDAgKQotICAgICAgICBnb3RvIHJhaXNlX2V4Y2VwdGlv bjsKKyAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoaW9ibXAgJiAoKCgxIDw8IGJ5dGVzKSAtIDEp IDw8IChmaXJzdF9wb3J0ICYgNykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfR1As IDApOwogCiAgZG9uZToKICAgICByZXR1cm4gcmM7Ci0KLSByYWlzZV9leGNlcHRpb246Ci0gICAg ZmFpbF9pZihvcHMtPmluamVjdF9od19leGNlcHRpb24gPT0gTlVMTCk7Ci0gICAgcmV0dXJuIG9w cy0+aW5qZWN0X2h3X2V4Y2VwdGlvbihFWENfR1AsIDAsIGN0eHQpID8gOiBYODZFTVVMX0VYQ0VQ VElPTjsKIH0KIAogc3RhdGljIGJvb2xfdApAQCAtMTI2Miw3ICsxMjY5LDcgQEAgc3RhdGljIGJv b2xfdCB2Y3B1X2hhcygKICNkZWZpbmUgdmNwdV9oYXNfcnRtKCkgICB2Y3B1X2hhcygweDAwMDAw MDA3LCBFQlgsIDExLCBjdHh0LCBvcHMpCiAKICNkZWZpbmUgdmNwdV9tdXN0X2hhdmUobGVhZiwg cmVnLCBiaXQpIFwKLSAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIXZjcHVfaGFzKGxlYWYsIHJl ZywgYml0LCBjdHh0LCBvcHMpLCBFWENfVUQsIC0xKQorICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9p ZighdmNwdV9oYXMobGVhZiwgcmVnLCBiaXQsIGN0eHQsIG9wcyksIEVYQ19VRCkKICNkZWZpbmUg dmNwdV9tdXN0X2hhdmVfZnB1KCkgIHZjcHVfbXVzdF9oYXZlKDB4MDAwMDAwMDEsIEVEWCwgMCkK ICNkZWZpbmUgdmNwdV9tdXN0X2hhdmVfY21vdigpIHZjcHVfbXVzdF9oYXZlKDB4MDAwMDAwMDEs IEVEWCwgMTUpCiAjZGVmaW5lIHZjcHVfbXVzdF9oYXZlX21teCgpICB2Y3B1X211c3RfaGF2ZSgw eDAwMDAwMDAxLCBFRFgsIDIzKQpAQCAtMTI4Miw3ICsxMjg5LDcgQEAgc3RhdGljIGJvb2xfdCB2 Y3B1X2hhcygKICAqIHRoZSBhY3R1YWwgb3BlcmF0aW9uLgogICovCiAjZGVmaW5lIGhvc3RfYW5k X3ZjcHVfbXVzdF9oYXZlKGZlYXQpICh7IFwKLSAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIWNw dV9oYXNfIyNmZWF0LCBFWENfVUQsIC0xKTsgXAorICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigh Y3B1X2hhc18jI2ZlYXQsIEVYQ19VRCk7IFwKICAgICB2Y3B1X211c3RfaGF2ZV8jI2ZlYXQoKTsg XAogfSkKICNlbHNlCkBAIC0xNDg1LDExICsxNDkyLDkgQEAgcHJvdG1vZGVfbG9hZF9zZWcoCiAg ICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKIAogIHJhaXNlX2V4bjoKLSAgICBpZiAoIG9wcy0+aW5q ZWN0X2h3X2V4Y2VwdGlvbiA9PSBOVUxMICkKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5E TEVBQkxFOwotICAgIGlmICggKHJjID0gb3BzLT5pbmplY3RfaHdfZXhjZXB0aW9uKGZhdWx0X3R5 cGUsIHNlbCAmIDB4ZmZmYywgY3R4dCkpICkKLSAgICAgICAgcmV0dXJuIHJjOwotICAgIHJldHVy biBYODZFTVVMX0VYQ0VQVElPTjsKKyAgICBnZW5lcmF0ZV9leGNlcHRpb24oZmF1bHRfdHlwZSwg c2VsICYgMHhmZmZjKTsKKyBkb25lOgorICAgIHJldHVybiByYzsKIH0KIAogc3RhdGljIGludApA QCAtMTcwNCw3ICsxNzA5LDcgQEAgc3RhdGljIGludCBpbmplY3Rfc3dpbnQoZW51bSB4ODZfc3dp bnRfdHlwZSB0eXBlLAogICAgIHJldHVybiByYzsKIAogIHJhaXNlX2V4bjoKLSAgICByZXR1cm4g b3BzLT5pbmplY3RfaHdfZXhjZXB0aW9uKGZhdWx0X3R5cGUsIGVycm9yX2NvZGUsIGN0eHQpOwor ICAgIGdlbmVyYXRlX2V4Y2VwdGlvbihmYXVsdF90eXBlLCBlcnJvcl9jb2RlKTsKIH0KIAogaW50 IHg4NmVtdWxfdW5oYW5kbGVhYmxlX3J3KApAQCAtMTc5NSw3ICsxODAwLDcgQEAgeDg2X2RlY29k ZV9vbmVieXRlKAogCiAgICAgY2FzZSAweDlhOiAvKiBjYWxsIChmYXIsIGFic29sdXRlKSAqLwog ICAgIGNhc2UgMHhlYTogLyogam1wIChmYXIsIGFic29sdXRlKSAqLwotICAgICAgICBnZW5lcmF0 ZV9leGNlcHRpb25faWYobW9kZV82NGJpdCgpLCBFWENfVUQsIC0xKTsKKyAgICAgICAgZ2VuZXJh dGVfZXhjZXB0aW9uX2lmKG1vZGVfNjRiaXQoKSwgRVhDX1VEKTsKIAogICAgICAgICBpbW0xID0g aW5zbl9mZXRjaF9ieXRlcyhvcF9ieXRlcyk7CiAgICAgICAgIGltbTIgPSBpbnNuX2ZldGNoX3R5 cGUodWludDE2X3QpOwpAQCAtMjAyMyw3ICsyMDI4LDcgQEAgeDg2X2RlY29kZSgKICAgICAgICAg ICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KICAgICAgICAgICAgIGNhc2UgODoKICAgICAgICAg ICAgICAgICAvKiBWRVggLyBYT1AgLyBFVkVYICovCi0gICAgICAgICAgICAgICAgZ2VuZXJhdGVf ZXhjZXB0aW9uX2lmKHJleF9wcmVmaXggfHwgdmV4LnBmeCwgRVhDX1VELCAtMSk7CisgICAgICAg ICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHJleF9wcmVmaXggfHwgdmV4LnBmeCwgRVhD X1VEKTsKIAogICAgICAgICAgICAgICAgIHZleC5yYXdbMF0gPSBtb2RybTsKICAgICAgICAgICAg ICAgICBpZiAoIGIgPT0gMHhjNSApCkBAIC0yNTEzLDEyICsyNTE4LDEyIEBAIHg4Nl9lbXVsYXRl KAogICAgICAgICAgICAgKGV4dCAhPSBleHRfMGYgfHwKICAgICAgICAgICAgICAoKChiIDwgMHgy MCkgfHwgKGIgPiAweDIzKSkgJiYgLyogTU9WIENSbi9EUm4gKi8KICAgICAgICAgICAgICAgKGIg IT0gMHhjNykpKSwgICAgICAgICAgICAgICAgLyogQ01QWENIR3s4LDE2fUIgKi8KLSAgICAgICAg ICAgIEVYQ19VRCwgLTEpOworICAgICAgICAgICAgRVhDX1VEKTsKICAgICAgICAgZHN0LnR5cGUg PSBPUF9OT05FOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRHN0UmVnOgotICAgICAgICBn ZW5lcmF0ZV9leGNlcHRpb25faWYobG9ja19wcmVmaXgsIEVYQ19VRCwgLTEpOworICAgICAgICBn ZW5lcmF0ZV9leGNlcHRpb25faWYobG9ja19wcmVmaXgsIEVYQ19VRCk7CiAgICAgICAgIGRzdC50 eXBlID0gT1BfUkVHOwogICAgICAgICBpZiAoIGQgJiBCeXRlT3AgKQogICAgICAgICB7CkBAIC0y NTc0LDcgKzI1NzksNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgZHN0ID0gZWE7CiAgICAgICAg IGlmICggZHN0LnR5cGUgPT0gT1BfUkVHICkKICAgICAgICAgewotICAgICAgICAgICAgZ2VuZXJh dGVfZXhjZXB0aW9uX2lmKGxvY2tfcHJlZml4LCBFWENfVUQsIC0xKTsKKyAgICAgICAgICAgIGdl bmVyYXRlX2V4Y2VwdGlvbl9pZihsb2NrX3ByZWZpeCwgRVhDX1VEKTsKICAgICAgICAgICAgIHN3 aXRjaCAoIGRzdC5ieXRlcyApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICBjYXNlIDE6IGRz dC52YWwgPSAqKHVpbnQ4X3QgICopZHN0LnJlZzsgYnJlYWs7CkBAIC0yNTkxLDcgKzI1OTYsNyBA QCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgIGRzdC5vcmlnX3ZhbCA9IGRzdC52YWw7CiAgICAg ICAgIH0KICAgICAgICAgZWxzZSAvKiBMb2NrIHByZWZpeCBpcyBhbGxvd2VkIG9ubHkgb24gUk1X IGluc3RydWN0aW9ucy4gKi8KLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihsb2Nr X3ByZWZpeCwgRVhDX1VELCAtMSk7CisgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYo bG9ja19wcmVmaXgsIEVYQ19VRCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjYyOSw3 ICsyNjM0LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAweDM4 IC4uLiAweDNkOiBjbXA6IC8qIGNtcCAqLwotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYo bG9ja19wcmVmaXgsIEVYQ19VRCwgLTEpOworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYo bG9ja19wcmVmaXgsIEVYQ19VRCk7CiAgICAgICAgIGVtdWxhdGVfMm9wX1NyY1YoImNtcCIsIHNy YywgZHN0LCBfcmVncy5lZmxhZ3MpOwogICAgICAgICBkc3QudHlwZSA9IE9QX05PTkU7CiAgICAg ICAgIGJyZWFrOwpAQCAtMjYzNyw3ICsyNjQyLDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgY2FzZSAw eDA2OiAvKiBwdXNoICUlZXMgKi8KICAgICAgICAgc3JjLnZhbCA9IHg4Nl9zZWdfZXM7CiAgICAg cHVzaF9zZWc6Ci0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihtb2RlXzY0Yml0KCkgJiYg IWV4dCwgRVhDX1VELCAtMSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihtb2RlXzY0 Yml0KCkgJiYgIWV4dCwgRVhDX1VEKTsKICAgICAgICAgZmFpbF9pZihvcHMtPnJlYWRfc2VnbWVu dCA9PSBOVUxMKTsKICAgICAgICAgaWYgKCAocmMgPSBvcHMtPnJlYWRfc2VnbWVudChzcmMudmFs LCAmc3JlZywgY3R4dCkpICE9IDAgKQogICAgICAgICAgICAgZ290byBkb25lOwpAQCAtMjY0Nyw3 ICsyNjUyLDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgY2FzZSAweDA3OiAvKiBwb3AgJSVlcyAqLwog ICAgICAgICBzcmMudmFsID0geDg2X3NlZ19lczsKICAgICBwb3Bfc2VnOgotICAgICAgICBnZW5l cmF0ZV9leGNlcHRpb25faWYobW9kZV82NGJpdCgpICYmICFleHQsIEVYQ19VRCwgLTEpOworICAg ICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYobW9kZV82NGJpdCgpICYmICFleHQsIEVYQ19VRCk7 CiAgICAgICAgIGZhaWxfaWYob3BzLT53cml0ZV9zZWdtZW50ID09IE5VTEwpOwogICAgICAgICAv KiA2NC1iaXQgbW9kZTogUE9QIGRlZmF1bHRzIHRvIGEgNjQtYml0IG9wZXJhbmQuICovCiAgICAg ICAgIGlmICggbW9kZV82NGJpdCgpICYmIChvcF9ieXRlcyA9PSA0KSApCkBAIC0yNjg0LDcgKzI2 ODksNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgdWludDhfdCBhbCA9IF9yZWdzLmVheDsKICAg ICAgICAgdW5zaWduZWQgbG9uZyBlZmxhZ3MgPSBfcmVncy5lZmxhZ3M7CiAKLSAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKG1vZGVfNjRiaXQoKSwgRVhDX1VELCAtMSk7CisgICAgICAgIGdl bmVyYXRlX2V4Y2VwdGlvbl9pZihtb2RlXzY0Yml0KCksIEVYQ19VRCk7CiAgICAgICAgIF9yZWdz LmVmbGFncyAmPSB+KEVGTEdfQ0Z8RUZMR19BRnxFRkxHX1NGfEVGTEdfWkZ8RUZMR19QRik7CiAg ICAgICAgIGlmICggKChhbCAmIDB4MGYpID4gOSkgfHwgKGVmbGFncyAmIEVGTEdfQUYpICkKICAg ICAgICAgewpAQCAtMjcwNiw3ICsyNzExLDcgQEAgeDg2X2VtdWxhdGUoCiAKICAgICBjYXNlIDB4 Mzc6IC8qIGFhYSAqLwogICAgIGNhc2UgMHgzZjogLyogYWFzICovCi0gICAgICAgIGdlbmVyYXRl X2V4Y2VwdGlvbl9pZihtb2RlXzY0Yml0KCksIEVYQ19VRCwgLTEpOworICAgICAgICBnZW5lcmF0 ZV9leGNlcHRpb25faWYobW9kZV82NGJpdCgpLCBFWENfVUQpOwogICAgICAgICBfcmVncy5lZmxh Z3MgJj0gfkVGTEdfQ0Y7CiAgICAgICAgIGlmICggKCh1aW50OF90KV9yZWdzLmVheCA+IDkpIHx8 IChfcmVncy5lZmxhZ3MgJiBFRkxHX0FGKSApCiAgICAgICAgIHsKQEAgLTI3NTAsNyArMjc1NSw3 IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICB1bnNpZ25lZCBsb25nIHJlZ3NbXSA9IHsKICAgICAg ICAgICAgIF9yZWdzLmVheCwgX3JlZ3MuZWN4LCBfcmVncy5lZHgsIF9yZWdzLmVieCwKICAgICAg ICAgICAgIF9yZWdzLmVzcCwgX3JlZ3MuZWJwLCBfcmVncy5lc2ksIF9yZWdzLmVkaSB9OwotICAg ICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYobW9kZV82NGJpdCgpLCBFWENfVUQsIC0xKTsKKyAg ICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKG1vZGVfNjRiaXQoKSwgRVhDX1VEKTsKICAgICAg ICAgZm9yICggaSA9IDA7IGkgPCA4OyBpKysgKQogICAgICAgICAgICAgaWYgKCAocmMgPSBvcHMt PndyaXRlKHg4Nl9zZWdfc3MsIHNwX3ByZV9kZWMob3BfYnl0ZXMpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZyZWdzW2ldLCBvcF9ieXRlcywgY3R4dCkpICE9IDAgKQpAQCAt Mjc2NSw3ICsyNzcwLDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAgICAodW5zaWduZWQgbG9u ZyAqKSZfcmVncy5lYnAsICh1bnNpZ25lZCBsb25nICopJmR1bW15X2VzcCwKICAgICAgICAgICAg ICh1bnNpZ25lZCBsb25nICopJl9yZWdzLmVieCwgKHVuc2lnbmVkIGxvbmcgKikmX3JlZ3MuZWR4 LAogICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgKikmX3JlZ3MuZWN4LCAodW5zaWduZWQgbG9u ZyAqKSZfcmVncy5lYXggfTsKLSAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKG1vZGVfNjRi aXQoKSwgRVhDX1VELCAtMSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihtb2RlXzY0 Yml0KCksIEVYQ19VRCk7CiAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgODsgaSsrICkKICAgICAg ICAgewogICAgICAgICAgICAgaWYgKCAocmMgPSByZWFkX3Vsb25nKHg4Nl9zZWdfc3MsIHNwX3Bv c3RfaW5jKG9wX2J5dGVzKSwKQEAgLTI3ODMsMTQgKzI3ODgsMTQgQEAgeDg2X2VtdWxhdGUoCiAg ICAgICAgIHVuc2lnbmVkIGxvbmcgc3JjX3ZhbDI7CiAgICAgICAgIGludCBsYiwgdWIsIGlkeDsK ICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKG1vZGVfNjRiaXQoKSB8fCAoc3JjLnR5cGUg IT0gT1BfTUVNKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYQ19VRCwgLTEpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhDX1VEKTsKICAgICAgICAgaWYgKCAocmMg PSByZWFkX3Vsb25nKHNyYy5tZW0uc2VnLCBzcmMubWVtLm9mZiArIG9wX2J5dGVzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJnNyY192YWwyLCBvcF9ieXRlcywgY3R4dCwgb3BzKSkg KQogICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB1YiAgPSAob3BfYnl0ZXMgPT0gMikg PyAoaW50MTZfdClzcmNfdmFsMiA6IChpbnQzMl90KXNyY192YWwyOwogICAgICAgICBsYiAgPSAo b3BfYnl0ZXMgPT0gMikgPyAoaW50MTZfdClzcmMudmFsICA6IChpbnQzMl90KXNyYy52YWw7CiAg ICAgICAgIGlkeCA9IChvcF9ieXRlcyA9PSAyKSA/IChpbnQxNl90KWRzdC52YWwgIDogKGludDMy X3QpZHN0LnZhbDsKLSAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKChpZHggPCBsYikgfHwg KGlkeCA+IHViKSwgRVhDX0JSLCAtMSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigo aWR4IDwgbGIpIHx8IChpZHggPiB1YiksIEVYQ19CUik7CiAgICAgICAgIGRzdC50eXBlID0gT1Bf Tk9ORTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjgyOCw3ICsyODMzLDcgQEAgeDg2X2Vt dWxhdGUoCiAgICAgICAgICAgICAgICAgX3JlZ3MuZWZsYWdzICY9IH5FRkxHX1pGOwogICAgICAg ICAgICAgICAgIGRzdC50eXBlID0gT1BfTk9ORTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighaW5fcHJvdG1vZGUoY3R4dCwgb3BzKSwgRVhDX1VELCAt MSk7CisgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIWluX3Byb3Rtb2RlKGN0eHQs IG9wcyksIEVYQ19VRCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKQEAgLTI5MTksNyAr MjkyNCw3IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgMHg4Mjog LyogR3JwMSAoeDg2LzMyIG9ubHkpICovCi0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZiht b2RlXzY0Yml0KCksIEVYQ19VRCwgLTEpOworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYo bW9kZV82NGJpdCgpLCBFWENfVUQpOwogICAgIGNhc2UgMHg4MDogY2FzZSAweDgxOiBjYXNlIDB4 ODM6IC8qIEdycDEgKi8KICAgICAgICAgc3dpdGNoICggbW9kcm1fcmVnICYgNyApCiAgICAgICAg IHsKQEAgLTI5NzAsNyArMjk3NSw3IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAgZHN0LnR5 cGUgPSBPUF9OT05FOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKChtb2RybV9yZWcgJiA3KSAhPSAwLCBFWENfVUQsIC0xKTsKKyAg ICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKChtb2RybV9yZWcgJiA3KSAhPSAwLCBFWENfVUQp OwogICAgIGNhc2UgMHg4OCAuLi4gMHg4YjogLyogbW92ICovCiAgICAgY2FzZSAweGEwIC4uLiAw eGExOiAvKiBtb3YgbWVtLm9mZnMseyVhbCwlYXgsJWVheCwlcmF4fSAqLwogICAgIGNhc2UgMHhh MiAuLi4gMHhhMzogLyogbW92IHslYWwsJWF4LCVlYXgsJXJheH0sbWVtLm9mZnMgKi8KQEAgLTI5 NzksNyArMjk4NCw3IEBAIHg4Nl9lbXVsYXRlKAogCiAgICAgY2FzZSAweDhjOiAvKiBtb3YgU3Jl ZyxyL20gKi8KICAgICAgICAgc2VnID0gbW9kcm1fcmVnICYgNzsgLyogUkVYLlIgaXMgaWdub3Jl ZC4gKi8KLSAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFpc194ODZfdXNlcl9zZWdtZW50 KHNlZyksIEVYQ19VRCwgLTEpOworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIWlzX3g4 Nl91c2VyX3NlZ21lbnQoc2VnKSwgRVhDX1VEKTsKICAgICBzdG9yZV9zZWxlY3RvcjoKICAgICAg ICAgZmFpbF9pZihvcHMtPnJlYWRfc2VnbWVudCA9PSBOVUxMKTsKICAgICAgICAgaWYgKCAocmMg PSBvcHMtPnJlYWRfc2VnbWVudChzZWcsICZzcmVnLCBjdHh0KSkgIT0gMCApCkBAIC0yOTkyLDcg KzI5OTcsNyBAQCB4ODZfZW11bGF0ZSgKICAgICBjYXNlIDB4OGU6IC8qIG1vdiByL20sU3JlZyAq LwogICAgICAgICBzZWcgPSBtb2RybV9yZWcgJiA3OyAvKiBSRVguUiBpcyBpZ25vcmVkLiAqLwog ICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIWlzX3g4Nl91c2VyX3NlZ21lbnQoc2VnKSB8 fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnID09IHg4Nl9zZWdfY3MsIEVYQ19V RCwgLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnID09IHg4Nl9zZWdfY3Ms IEVYQ19VRCk7CiAgICAgICAgIGlmICggKHJjID0gbG9hZF9zZWcoc2VnLCBzcmMudmFsLCAwLCBO VUxMLCBjdHh0LCBvcHMpKSAhPSAwICkKICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAg aWYgKCBzZWcgPT0geDg2X3NlZ19zcyApCkBAIC0zMDAxLDEyICszMDA2LDEyIEBAIHg4Nl9lbXVs YXRlKAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgMHg4ZDogLyogbGVhICovCi0gICAgICAg IGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihlYS50eXBlICE9IE9QX01FTSwgRVhDX1VELCAtMSk7Cisg ICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihlYS50eXBlICE9IE9QX01FTSwgRVhDX1VEKTsK ICAgICAgICAgZHN0LnZhbCA9IGVhLm1lbS5vZmY7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz ZSAweDhmOiAvKiBwb3AgKHNvbGUgbWVtYmVyIG9mIEdycDFhKSAqLwotICAgICAgICBnZW5lcmF0 ZV9leGNlcHRpb25faWYoKG1vZHJtX3JlZyAmIDcpICE9IDAsIEVYQ19VRCwgLTEpOworICAgICAg ICBnZW5lcmF0ZV9leGNlcHRpb25faWYoKG1vZHJtX3JlZyAmIDcpICE9IDAsIEVYQ19VRCk7CiAg ICAgICAgIC8qIDY0LWJpdCBtb2RlOiBQT1AgZGVmYXVsdHMgdG8gYSA2NC1iaXQgb3BlcmFuZC4g Ki8KICAgICAgICAgaWYgKCBtb2RlXzY0Yml0KCkgJiYgKGRzdC5ieXRlcyA9PSA0KSApCiAgICAg ICAgICAgICBkc3QuYnl0ZXMgPSA4OwpAQCAtMzI4Myw4ICszMjg4LDggQEAgeDg2X2VtdWxhdGUo CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2VsOwogICAgICAgICBkc3QudmFsID0geDg2X3NlZ19l czsKICAgICBsZXM6IC8qIGRzdC52YWwgaWRlbnRpZmllcyB0aGUgc2VnbWVudCAqLwotICAgICAg ICBnZW5lcmF0ZV9leGNlcHRpb25faWYobW9kZV82NGJpdCgpICYmICFleHQsIEVYQ19VRCwgLTEp OwotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoc3JjLnR5cGUgIT0gT1BfTUVNLCBFWENf VUQsIC0xKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKG1vZGVfNjRiaXQoKSAmJiAh ZXh0LCBFWENfVUQpOworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoc3JjLnR5cGUgIT0g T1BfTUVNLCBFWENfVUQpOwogICAgICAgICBpZiAoIChyYyA9IHJlYWRfdWxvbmcoc3JjLm1lbS5z ZWcsIHNyYy5tZW0ub2ZmICsgc3JjLmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnNlbCwgMiwgY3R4dCwgb3BzKSkgIT0gMCApCiAgICAgICAgICAgICBnb3RvIGRvbmU7CkBA IC0zMzc0LDcgKzMzNzksNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgZ290byBkb25lOwogCiAg ICAgY2FzZSAweGNlOiAvKiBpbnRvICovCi0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZiht b2RlXzY0Yml0KCksIEVYQ19VRCwgLTEpOworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYo bW9kZV82NGJpdCgpLCBFWENfVUQpOwogICAgICAgICBpZiAoICEoX3JlZ3MuZWZsYWdzICYgRUZM R19PRikgKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHNyYy52YWwgPSBFWENfT0Y7CkBA IC0zNDE2LDcgKzM0MjEsNyBAQCB4ODZfZW11bGF0ZSgKICAgICBjYXNlIDB4ZDU6IC8qIGFhZCAq LyB7CiAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlID0gKHVpbnQ4X3Qpc3JjLnZhbDsKIAotICAg ICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYobW9kZV82NGJpdCgpLCBFWENfVUQsIC0xKTsKKyAg ICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKG1vZGVfNjRiaXQoKSwgRVhDX1VEKTsKICAgICAg ICAgaWYgKCBiICYgMHgwMSApCiAgICAgICAgIHsKICAgICAgICAgICAgIHVpbnQxNl90IGF4ID0g X3JlZ3MuZWF4OwpAQCAtMzQyNyw3ICszNDMyLDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgIHsK ICAgICAgICAgICAgIHVpbnQ4X3QgYWwgPSBfcmVncy5lYXg7CiAKLSAgICAgICAgICAgIGdlbmVy YXRlX2V4Y2VwdGlvbl9pZighYmFzZSwgRVhDX0RFLCAtMSk7CisgICAgICAgICAgICBnZW5lcmF0 ZV9leGNlcHRpb25faWYoIWJhc2UsIEVYQ19ERSk7CiAgICAgICAgICAgICAqKHVpbnQxNl90ICop Jl9yZWdzLmVheCA9ICgoYWwgLyBiYXNlKSA8PCA4KSB8IChhbCAlIGJhc2UpOwogICAgICAgICB9 CiAgICAgICAgIF9yZWdzLmVmbGFncyAmPSB+KEVGTEdfU0Z8RUZMR19aRnxFRkxHX1BGKTsKQEAg LTM0MzgsNyArMzQ0Myw3IEBAIHg4Nl9lbXVsYXRlKAogICAgIH0KIAogICAgIGNhc2UgMHhkNjog Lyogc2FsYyAqLwotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYobW9kZV82NGJpdCgpLCBF WENfVUQsIC0xKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKG1vZGVfNjRiaXQoKSwg RVhDX1VEKTsKICAgICAgICAgKih1aW50OF90ICopJl9yZWdzLmVheCA9IChfcmVncy5lZmxhZ3Mg JiBFRkxHX0NGKSA/IDB4ZmYgOiAweDAwOwogICAgICAgICBicmVhazsKIApAQCAtNDA0Niw3ICs0 MDUxLDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHVbMl0sIHY7 CiAKICAgICAgICAgY2FzZSAwIC4uLiAxOiAvKiB0ZXN0ICovCi0gICAgICAgICAgICBnZW5lcmF0 ZV9leGNlcHRpb25faWYobG9ja19wcmVmaXgsIEVYQ19VRCwgLTEpOworICAgICAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKGxvY2tfcHJlZml4LCBFWENfVUQpOwogICAgICAgICAgICAgZ290 byB0ZXN0OwogICAgICAgICBjYXNlIDI6IC8qIG5vdCAqLwogICAgICAgICAgICAgZHN0LnZhbCA9 IH5kc3QudmFsOwpAQCAtNDE0NCw3ICs0MTQ5LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAg ICAgICAgdiAgICA9ICh1aW50OF90KXNyYy52YWw7CiAgICAgICAgICAgICAgICAgZ2VuZXJhdGVf ZXhjZXB0aW9uX2lmKAogICAgICAgICAgICAgICAgICAgICBkaXZfZGJsKHUsIHYpIHx8ICgodWlu dDhfdCl1WzBdICE9ICh1aW50MTZfdCl1WzBdKSwKLSAgICAgICAgICAgICAgICAgICAgRVhDX0RF LCAtMSk7CisgICAgICAgICAgICAgICAgICAgIEVYQ19ERSk7CiAgICAgICAgICAgICAgICAgZHN0 LnZhbCA9ICh1aW50OF90KXVbMF07CiAgICAgICAgICAgICAgICAgKCh1aW50OF90ICopJl9yZWdz LmVheClbMV0gPSB1WzFdOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDE1NCw3ICs0MTU5 LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAgICAgICAgdiAgICA9ICh1aW50MTZfdClzcmMu dmFsOwogICAgICAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigKICAgICAgICAgICAg ICAgICAgICAgZGl2X2RibCh1LCB2KSB8fCAoKHVpbnQxNl90KXVbMF0gIT0gKHVpbnQzMl90KXVb MF0pLAotICAgICAgICAgICAgICAgICAgICBFWENfREUsIC0xKTsKKyAgICAgICAgICAgICAgICAg ICAgRVhDX0RFKTsKICAgICAgICAgICAgICAgICBkc3QudmFsID0gKHVpbnQxNl90KXVbMF07CiAg ICAgICAgICAgICAgICAgKih1aW50MTZfdCAqKSZfcmVncy5lZHggPSB1WzFdOwogICAgICAgICAg ICAgICAgIGJyZWFrOwpAQCAtNDE2NSw3ICs0MTcwLDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAg ICAgICAgICAgdiAgICA9ICh1aW50MzJfdClzcmMudmFsOwogICAgICAgICAgICAgICAgIGdlbmVy YXRlX2V4Y2VwdGlvbl9pZigKICAgICAgICAgICAgICAgICAgICAgZGl2X2RibCh1LCB2KSB8fCAo KHVpbnQzMl90KXVbMF0gIT0gdVswXSksCi0gICAgICAgICAgICAgICAgICAgIEVYQ19ERSwgLTEp OworICAgICAgICAgICAgICAgICAgICBFWENfREUpOwogICAgICAgICAgICAgICAgIGRzdC52YWwg ICA9ICh1aW50MzJfdCl1WzBdOwogICAgICAgICAgICAgICAgIF9yZWdzLmVkeCA9ICh1aW50MzJf dCl1WzFdOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDE3NCw3ICs0MTc5LDcgQEAgeDg2 X2VtdWxhdGUoCiAgICAgICAgICAgICAgICAgdVswXSA9IF9yZWdzLmVheDsKICAgICAgICAgICAg ICAgICB1WzFdID0gX3JlZ3MuZWR4OwogICAgICAgICAgICAgICAgIHYgICAgPSBzcmMudmFsOwot ICAgICAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihkaXZfZGJsKHUsIHYpLCBFWENf REUsIC0xKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoZGl2X2RibCh1 LCB2KSwgRVhDX0RFKTsKICAgICAgICAgICAgICAgICBkc3QudmFsICAgPSB1WzBdOwogICAgICAg ICAgICAgICAgIF9yZWdzLmVkeCA9IHVbMV07CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00 MTkwLDcgKzQxOTUsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgICAgICB2ICAgID0gKGlu dDhfdClzcmMudmFsOwogICAgICAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigKICAg ICAgICAgICAgICAgICAgICAgaWRpdl9kYmwodSwgdikgfHwgKChpbnQ4X3QpdVswXSAhPSAoaW50 MTZfdCl1WzBdKSwKLSAgICAgICAgICAgICAgICAgICAgRVhDX0RFLCAtMSk7CisgICAgICAgICAg ICAgICAgICAgIEVYQ19ERSk7CiAgICAgICAgICAgICAgICAgZHN0LnZhbCA9IChpbnQ4X3QpdVsw XTsKICAgICAgICAgICAgICAgICAoKGludDhfdCAqKSZfcmVncy5lYXgpWzFdID0gdVsxXTsKICAg ICAgICAgICAgICAgICBicmVhazsKQEAgLTQyMDAsNyArNDIwNSw3IEBAIHg4Nl9lbXVsYXRlKAog ICAgICAgICAgICAgICAgIHYgICAgPSAoaW50MTZfdClzcmMudmFsOwogICAgICAgICAgICAgICAg IGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigKICAgICAgICAgICAgICAgICAgICAgaWRpdl9kYmwodSwg dikgfHwgKChpbnQxNl90KXVbMF0gIT0gKGludDMyX3QpdVswXSksCi0gICAgICAgICAgICAgICAg ICAgIEVYQ19ERSwgLTEpOworICAgICAgICAgICAgICAgICAgICBFWENfREUpOwogICAgICAgICAg ICAgICAgIGRzdC52YWwgPSAoaW50MTZfdCl1WzBdOwogICAgICAgICAgICAgICAgICooaW50MTZf dCAqKSZfcmVncy5lZHggPSB1WzFdOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDIxMSw3 ICs0MjE2LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAgICAgICAgdiAgICA9IChpbnQzMl90 KXNyYy52YWw7CiAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKAogICAgICAg ICAgICAgICAgICAgICBpZGl2X2RibCh1LCB2KSB8fCAoKGludDMyX3QpdVswXSAhPSB1WzBdKSwK LSAgICAgICAgICAgICAgICAgICAgRVhDX0RFLCAtMSk7CisgICAgICAgICAgICAgICAgICAgIEVY Q19ERSk7CiAgICAgICAgICAgICAgICAgZHN0LnZhbCAgID0gKGludDMyX3QpdVswXTsKICAgICAg ICAgICAgICAgICBfcmVncy5lZHggPSAodWludDMyX3QpdVsxXTsKICAgICAgICAgICAgICAgICBi cmVhazsKQEAgLTQyMjAsNyArNDIyNSw3IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAgICAg IHVbMF0gPSBfcmVncy5lYXg7CiAgICAgICAgICAgICAgICAgdVsxXSA9IF9yZWdzLmVkeDsKICAg ICAgICAgICAgICAgICB2ICAgID0gc3JjLnZhbDsKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZV9l eGNlcHRpb25faWYoaWRpdl9kYmwodSwgdiksIEVYQ19ERSwgLTEpOworICAgICAgICAgICAgICAg IGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihpZGl2X2RibCh1LCB2KSwgRVhDX0RFKTsKICAgICAgICAg ICAgICAgICBkc3QudmFsICAgPSB1WzBdOwogICAgICAgICAgICAgICAgIF9yZWdzLmVkeCA9IHVb MV07CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00MjYwLDcgKzQyNjUsNyBAQCB4ODZfZW11 bGF0ZSgKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDB4ZmU6IC8qIEdycDQgKi8KLSAgICAg ICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKChtb2RybV9yZWcgJiA3KSA+PSAyLCBFWENfVUQsIC0x KTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKChtb2RybV9yZWcgJiA3KSA+PSAyLCBF WENfVUQpOwogICAgIGNhc2UgMHhmZjogLyogR3JwNSAqLwogICAgICAgICBzd2l0Y2ggKCBtb2Ry bV9yZWcgJiA3ICkKICAgICAgICAgewpAQCAtNDI4NSw3ICs0MjkwLDcgQEAgeDg2X2VtdWxhdGUo CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAzOiAvKiBjYWxsIChmYXIsIGFic29s dXRlIGluZGlyZWN0KSAqLwogICAgICAgICBjYXNlIDU6IC8qIGptcCAoZmFyLCBhYnNvbHV0ZSBp bmRpcmVjdCkgKi8KLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihzcmMudHlwZSAh PSBPUF9NRU0sIEVYQ19VRCwgLTEpOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lm KHNyYy50eXBlICE9IE9QX01FTSwgRVhDX1VEKTsKIAogICAgICAgICAgICAgaWYgKCAocmMgPSBy ZWFkX3Vsb25nKHNyYy5tZW0uc2VnLCBzcmMubWVtLm9mZiArIG9wX2J5dGVzLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZpbW0yLCAyLCBjdHh0LCBvcHMpKSApCkBAIC00Mjk3 LDEzICs0MzAyLDEzIEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICBjYXNlIDY6IC8qIHB1c2ggKi8K ICAgICAgICAgICAgIGdvdG8gcHVzaDsKICAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKDEsIEVYQ19VRCwgLTEpOworICAgICAgICAgICAgZ2VuZXJhdGVf ZXhjZXB0aW9uKEVYQ19VRCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl IFg4NkVNVUxfT1BDKDB4MGYsIDB4MDApOiAvKiBHcnA2ICovCiAgICAgICAgIHNlZyA9IChtb2Ry bV9yZWcgJiAxKSA/IHg4Nl9zZWdfdHIgOiB4ODZfc2VnX2xkdHI7Ci0gICAgICAgIGdlbmVyYXRl X2V4Y2VwdGlvbl9pZighaW5fcHJvdG1vZGUoY3R4dCwgb3BzKSwgRVhDX1VELCAtMSk7CisgICAg ICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighaW5fcHJvdG1vZGUoY3R4dCwgb3BzKSwgRVhDX1VE KTsKICAgICAgICAgc3dpdGNoICggbW9kcm1fcmVnICYgNiApCiAgICAgICAgIHsKICAgICAgICAg Y2FzZSAwOiAvKiBzbGR0IC8gc3RyICovCkBAIC00MzE1LDcgKzQzMjAsNyBAQCB4ODZfZW11bGF0 ZSgKICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih0cnVlLCBFWENf VUQsIC0xKTsKKyAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih0cnVlLCBFWENfVUQp OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC00MzMw LDEwICs0MzM1LDEwIEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICB7CiAgICAgICAgICAgICB1bnNp Z25lZCBsb25nIGNyNDsKIAotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHZleC5w ZngsIEVYQ19VRCwgLTEpOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHZleC5w ZngsIEVYQ19VRCk7CiAgICAgICAgICAgICBpZiAoICFvcHMtPnJlYWRfY3IgfHwgb3BzLT5yZWFk X2NyKDQsICZjcjQsIGN0eHQpICE9IFg4NkVNVUxfT0tBWSApCiAgICAgICAgICAgICAgICAgY3I0 ID0gMDsKLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighKGNyNCAmIFg4Nl9DUjRf T1NYU0FWRSksIEVYQ19VRCwgLTEpOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lm KCEoY3I0ICYgWDg2X0NSNF9PU1hTQVZFKSwgRVhDX1VEKTsKICAgICAgICAgICAgIGdlbmVyYXRl X2V4Y2VwdGlvbl9pZighbW9kZV9yaW5nMCgpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaGFuZGxlX3hzZXRidihfcmVncy5fZWN4LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZ3MuX2VheCB8IChfcmVncy5yZHggPDwgMzIp KSwKQEAgLTQzNDQsMjggKzQzNDksMjggQEAgeDg2X2VtdWxhdGUoCiAKICAgICAgICAgY2FzZSAw eGQ0OiAvKiB2bWZ1bmMgKi8KICAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihsb2Nr X3ByZWZpeCB8IHJlcF9wcmVmaXgoKSB8ICh2ZXgucGZ4ID09IHZleF82NiksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRVhDX1VELCAtMSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRVhDX1VEKTsKICAgICAgICAgICAgIGZhaWxfaWYoIW9wcy0+dm1mdW5j KTsKICAgICAgICAgICAgIGlmICggKHJjID0gb3BzLT52bWZ1bmMoY3R4dCkgIT0gWDg2RU1VTF9P S0FZKSApCiAgICAgICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICAgICAgZ290byBub193 cml0ZWJhY2s7CiAKICAgICAgICAgY2FzZSAweGQ1OiAvKiB4ZW5kICovCi0gICAgICAgICAgICBn ZW5lcmF0ZV9leGNlcHRpb25faWYodmV4LnBmeCwgRVhDX1VELCAtMSk7Ci0gICAgICAgICAgICBn ZW5lcmF0ZV9leGNlcHRpb25faWYoIXZjcHVfaGFzX3J0bSgpLCBFWENfVUQsIC0xKTsKKyAgICAg ICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih2ZXgucGZ4LCBFWENfVUQpOworICAgICAgICAg ICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCF2Y3B1X2hhc19ydG0oKSwgRVhDX1VEKTsKICAgICAg ICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih2Y3B1X2hhc19ydG0oKSwgRVhDX0dQLCAwKTsK ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHhkNjogLyogeHRlc3QgKi8KLSAg ICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih2ZXgucGZ4LCBFWENfVUQsIC0xKTsKKyAg ICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih2ZXgucGZ4LCBFWENfVUQpOwogICAgICAg ICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCF2Y3B1X2hhc19ydG0oKSAmJiAhdmNwdV9oYXNf aGxlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhDX1VELCAtMSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhDX1VEKTsKICAgICAgICAgICAgIC8q IE5laXRoZXIgSExFIG5vciBSVE0gY2FuIGJlIGFjdGl2ZSB3aGVuIHdlIGdldCBoZXJlLiAqLwog ICAgICAgICAgICAgX3JlZ3MuZWZsYWdzIHw9IEVGTEdfWkY7CiAgICAgICAgICAgICBnb3RvIG5v X3dyaXRlYmFjazsKIAogICAgICAgICBjYXNlIDB4ZGY6IC8qIGludmxwZ2EgKi8KLSAgICAgICAg ICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighaW5fcHJvdG1vZGUoY3R4dCwgb3BzKSwgRVhDX1VE LCAtMSk7CisgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIWluX3Byb3Rtb2RlKGN0 eHQsIG9wcyksIEVYQ19VRCk7CiAgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIW1v ZGVfcmluZzAoKSwgRVhDX0dQLCAwKTsKICAgICAgICAgICAgIGZhaWxfaWYob3BzLT5pbnZscGcg PT0gTlVMTCk7CiAgICAgICAgICAgICBpZiAoIChyYyA9IG9wcy0+aW52bHBnKHg4Nl9zZWdfbm9u ZSwgdHJ1bmNhdGVfZWEoX3JlZ3MuZWF4KSwKQEAgLTQzOTUsNyArNDQwMCw3IEBAIHg4Nl9lbXVs YXRlKAogICAgICAgICAgICAgICAgICBvcHMtPmNwdWlkKCZlYXgsICZlYngsICZkdW1teSwgJmR1 bW15LCBjdHh0KSA9PSBYODZFTVVMX09LQVkgKQogICAgICAgICAgICAgICAgIGxpbWl0ID0gKChl YnggPj4gOCkgJiAweGZmKSAqIDg7CiAgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYo bGltaXQgPCBzaXplb2YobG9uZykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobGltaXQgJiAobGltaXQgLSAxKSksIEVYQ19VRCwgLTEpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsaW1pdCAmIChsaW1pdCAtIDEpKSwgRVhDX1VEKTsKICAgICAgICAg ICAgIGJhc2UgJj0gfihsaW1pdCAtIDEpOwogICAgICAgICAgICAgaWYgKCBvdmVycmlkZV9zZWcg PT0gLTEgKQogICAgICAgICAgICAgICAgIG92ZXJyaWRlX3NlZyA9IHg4Nl9zZWdfZHM7CkBAIC00 NDMxLDcgKzQ0MzYsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgewogICAgICAgICBjYXNlIDA6 IC8qIHNnZHQgKi8KICAgICAgICAgY2FzZSAxOiAvKiBzaWR0ICovCi0gICAgICAgICAgICBnZW5l cmF0ZV9leGNlcHRpb25faWYoZWEudHlwZSAhPSBPUF9NRU0sIEVYQ19VRCwgLTEpOworICAgICAg ICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGVhLnR5cGUgIT0gT1BfTUVNLCBFWENfVUQpOwog ICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHVtaXBfYWN0aXZlKGN0eHQsIG9wcyks IEVYQ19HUCwgMCk7CiAgICAgICAgICAgICBmYWlsX2lmKG9wcy0+cmVhZF9zZWdtZW50ID09IE5V TEwpOwogICAgICAgICAgICAgaWYgKCAocmMgPSBvcHMtPnJlYWRfc2VnbWVudChzZWcsICZzcmVn LCBjdHh0KSkgKQpAQCAtNDQ1Miw3ICs0NDU3LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgIGNh c2UgMjogLyogbGdkdCAqLwogICAgICAgICBjYXNlIDM6IC8qIGxpZHQgKi8KICAgICAgICAgICAg IGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighbW9kZV9yaW5nMCgpLCBFWENfR1AsIDApOwotICAgICAg ICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGVhLnR5cGUgIT0gT1BfTUVNLCBFWENfVUQsIC0x KTsKKyAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihlYS50eXBlICE9IE9QX01FTSwg RVhDX1VEKTsKICAgICAgICAgICAgIGZhaWxfaWYob3BzLT53cml0ZV9zZWdtZW50ID09IE5VTEwp OwogICAgICAgICAgICAgbWVtc2V0KCZzcmVnLCAwLCBzaXplb2Yoc3JlZykpOwogICAgICAgICAg ICAgaWYgKCAocmMgPSByZWFkX3Vsb25nKGVhLm1lbS5zZWcsIGVhLm1lbS5vZmYrMCwKQEAgLTQ0 OTUsNyArNDUwMCw3IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg IGNhc2UgNzogLyogaW52bHBnICovCiAgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYo IW1vZGVfcmluZzAoKSwgRVhDX0dQLCAwKTsKLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlv bl9pZihlYS50eXBlICE9IE9QX01FTSwgRVhDX1VELCAtMSk7CisgICAgICAgICAgICBnZW5lcmF0 ZV9leGNlcHRpb25faWYoZWEudHlwZSAhPSBPUF9NRU0sIEVYQ19VRCk7CiAgICAgICAgICAgICBm YWlsX2lmKG9wcy0+aW52bHBnID09IE5VTEwpOwogICAgICAgICAgICAgaWYgKCAocmMgPSBvcHMt PmludmxwZyhlYS5tZW0uc2VnLCBlYS5tZW0ub2ZmLCBjdHh0KSkgKQogICAgICAgICAgICAgICAg IGdvdG8gZG9uZTsKQEAgLTQ1MDksMTMgKzQ1MTQsMTMgQEAgeDg2X2VtdWxhdGUoCiAgICAgY2Fz ZSBYODZFTVVMX09QQygweDBmLCAweDA1KTogLyogc3lzY2FsbCAqLyB7CiAgICAgICAgIHVpbnQ2 NF90IG1zcl9jb250ZW50OwogCi0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighaW5fcHJv dG1vZGUoY3R4dCwgb3BzKSwgRVhDX1VELCAtMSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlv bl9pZighaW5fcHJvdG1vZGUoY3R4dCwgb3BzKSwgRVhDX1VEKTsKIAogICAgICAgICAvKiBJbmpl Y3QgI1VEIGlmIHN5c2NhbGwvc3lzcmV0IGFyZSBkaXNhYmxlZC4gKi8KICAgICAgICAgZmFpbF9p ZihvcHMtPnJlYWRfbXNyID09IE5VTEwpOwogICAgICAgICBpZiAoIChyYyA9IG9wcy0+cmVhZF9t c3IoTVNSX0VGRVIsICZtc3JfY29udGVudCwgY3R4dCkpICE9IDAgKQogICAgICAgICAgICAgZ290 byBkb25lOwotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoKG1zcl9jb250ZW50ICYgRUZF Ul9TQ0UpID09IDAsIEVYQ19VRCwgLTEpOworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYo KG1zcl9jb250ZW50ICYgRUZFUl9TQ0UpID09IDAsIEVYQ19VRCk7CiAKICAgICAgICAgaWYgKCAo cmMgPSBvcHMtPnJlYWRfbXNyKE1TUl9TVEFSLCAmbXNyX2NvbnRlbnQsIGN0eHQpKSAhPSAwICkK ICAgICAgICAgICAgIGdvdG8gZG9uZTsKQEAgLTQ1ODQsNyArNDU4OSw3IEBAIHg4Nl9lbXVsYXRl KAogICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHgwYik6IC8qIHVkMiAqLwogICAgIGNhc2Ug WDg2RU1VTF9PUEMoMHgwZiwgMHhiOSk6IC8qIHVkMSAqLwogICAgIGNhc2UgWDg2RU1VTF9PUEMo MHgwZiwgMHhmZik6IC8qIHVkMCAqLwotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoMSwg RVhDX1VELCAtMSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbihFWENfVUQpOwogCiAgICAg Y2FzZSBYODZFTVVMX09QQygweDBmLCAweDBkKTogLyogR3JwUCAocHJlZmV0Y2gpICovCiAgICAg Y2FzZSBYODZFTVVMX09QQygweDBmLCAweDE4KTogLyogR3JwMTYgKHByZWZldGNoL25vcCkgKi8K QEAgLTQ3MDMsNyArNDcwOCw3IEBAIHg4Nl9lbXVsYXRlKAogICAgIGNhc2UgWDg2RU1VTF9PUEMo MHgwZiwgMHgyMSk6IC8qIG1vdiBkcixyZWcgKi8KICAgICBjYXNlIFg4NkVNVUxfT1BDKDB4MGYs IDB4MjIpOiAvKiBtb3YgcmVnLGNyICovCiAgICAgY2FzZSBYODZFTVVMX09QQygweDBmLCAweDIz KTogLyogbW92IHJlZyxkciAqLwotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoZWEudHlw ZSAhPSBPUF9SRUcsIEVYQ19VRCwgLTEpOworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYo ZWEudHlwZSAhPSBPUF9SRUcsIEVYQ19VRCk7CiAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9p ZighbW9kZV9yaW5nMCgpLCBFWENfR1AsIDApOwogICAgICAgICBtb2RybV9yZWcgfD0gbG9ja19w cmVmaXggPDwgMzsKICAgICAgICAgaWYgKCBiICYgMiApCkBAIC00OTM5LDExICs0OTQ0LDExIEBA IHg4Nl9lbXVsYXRlKAogICAgICAgICBzd2l0Y2ggKCBiICkKICAgICAgICAgewogICAgICAgICBj YXNlIDB4N2U6Ci0gICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYodmV4LmwsIEVYQ19V RCwgLTEpOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHZleC5sLCBFWENfVUQp OwogICAgICAgICAgICAgZWEuYnl0ZXMgPSBvcF9ieXRlczsKICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICBjYXNlIDB4ZDY6Ci0gICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYodmV4 LmwsIEVYQ19VRCwgLTEpOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHZleC5s LCBFWENfVUQpOwogICAgICAgICAgICAgZWEuYnl0ZXMgPSA4OwogICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgIH0KQEAgLTUwMzMsNyArNTAzOCw3IEBAIHg4Nl9lbXVsYXRlKAogICAgIGNhc2Ug WDg2RU1VTF9PUEMoMHgwZiwgMHhhZCk6IC8qIHNocmQgJSVjbCxyLHIvbSAqLyB7CiAgICAgICAg IHVpbnQ4X3Qgc2hpZnQsIHdpZHRoID0gZHN0LmJ5dGVzIDw8IDM7CiAKLSAgICAgICAgZ2VuZXJh dGVfZXhjZXB0aW9uX2lmKGxvY2tfcHJlZml4LCBFWENfVUQsIC0xKTsKKyAgICAgICAgZ2VuZXJh dGVfZXhjZXB0aW9uX2lmKGxvY2tfcHJlZml4LCBFWENfVUQpOwogICAgICAgICBpZiAoIGIgJiAx ICkKICAgICAgICAgICAgIHNoaWZ0ID0gX3JlZ3MuZWN4OwogICAgICAgICBlbHNlCkBAIC01MTQ4 LDcgKzUxNTMsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgY2FzZSA1OiBnb3RvIGJ0czsKICAg ICAgICAgY2FzZSA2OiBnb3RvIGJ0cjsKICAgICAgICAgY2FzZSA3OiBnb3RvIGJ0YzsKLSAgICAg ICAgZGVmYXVsdDogZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKDEsIEVYQ19VRCwgLTEpOworICAgICAg ICBkZWZhdWx0OiBnZW5lcmF0ZV9leGNlcHRpb24oRVhDX1VEKTsKICAgICAgICAgfQogICAgICAg ICBicmVhazsKIApAQCAtNTI0OSwxNSArNTI1NCwxNSBAQCB4ODZfZW11bGF0ZSgKICAgICBjYXNl IFg4NkVNVUxfT1BDKDB4MGYsIDB4YzMpOiAvKiBtb3ZudGkgKi8KICAgICAgICAgLyogSWdub3Jl IHRoZSBub24tdGVtcG9yYWwgaGludCBmb3Igbm93LiAqLwogICAgICAgICB2Y3B1X211c3RfaGF2 ZV9zc2UyKCk7Ci0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihkc3QuYnl0ZXMgPD0gMiwg RVhDX1VELCAtMSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihkc3QuYnl0ZXMgPD0g MiwgRVhDX1VEKTsKICAgICAgICAgZHN0LnZhbCA9IHNyYy52YWw7CiAgICAgICAgIGJyZWFrOwog CiAgICAgY2FzZSBYODZFTVVMX09QQygweDBmLCAweGM3KTogLyogR3JwOSAoY21weGNoZzhiL2Nt cHhjaGcxNmIpICovIHsKICAgICAgICAgdW5zaWduZWQgbG9uZyBvbGRbMl0sIGV4cFsyXSwgbmV3 WzJdOwogCi0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigobW9kcm1fcmVnICYgNykgIT0g MSwgRVhDX1VELCAtMSk7Ci0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihlYS50eXBlICE9 IE9QX01FTSwgRVhDX1VELCAtMSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigobW9k cm1fcmVnICYgNykgIT0gMSwgRVhDX1VEKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lm KGVhLnR5cGUgIT0gT1BfTUVNLCBFWENfVUQpOwogICAgICAgICBpZiAoIG9wX2J5dGVzID09IDgg KQogICAgICAgICAgICAgaG9zdF9hbmRfdmNwdV9tdXN0X2hhdmUoY3gxNik7CiAgICAgICAgIG9w X2J5dGVzICo9IDI7CkBAIC01NDE0LDggKzU0MTksNyBAQCB4ODZfZW11bGF0ZSgKICAgICAqY3R4 dC0+cmVncyA9IF9yZWdzOwogCiAgICAgLyogSW5qZWN0ICNEQiBpZiBzaW5nbGUtc3RlcCB0cmFj aW5nIHdhcyBlbmFibGVkIGF0IGluc3RydWN0aW9uIHN0YXJ0LiAqLwotICAgIGlmICggdGYgJiYg KHJjID09IFg4NkVNVUxfT0tBWSkgJiYgb3BzLT5pbmplY3RfaHdfZXhjZXB0aW9uICkKLSAgICAg ICAgcmMgPSBvcHMtPmluamVjdF9od19leGNlcHRpb24oRVhDX0RCLCAtMSwgY3R4dCkgPyA6IFg4 NkVNVUxfRVhDRVBUSU9OOworICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih0ZiAmJiAocmMgPT0g WDg2RU1VTF9PS0FZKSwgRVhDX0RCKTsKIAogIGRvbmU6CiAgICAgX3B1dF9mcHUoKTsKLS0gCjIu MS40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVu LWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3Rz Lnhlbi5vcmcveGVuLWRldmVsCg==