From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Adalbert=20Laz=C4=83r?= Subject: [RFC PATCH v6 77/92] kvm: introspection: add trace functions Date: Fri, 9 Aug 2019 19:00:32 +0300 Message-ID: <20190809160047.8319-78-alazar@bitdefender.com> References: <20190809160047.8319-1-alazar@bitdefender.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190809160047.8319-1-alazar@bitdefender.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: kvm@vger.kernel.org Cc: Tamas K Lengyel , Weijiang Yang , Yu C , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Jan Kiszka , =?UTF-8?q?Samuel=20Laur=C3=A9n?= , Konrad Rzeszutek Wilk , Marian Rotariu , virtualization@lists.linux-foundation.org, =?UTF-8?q?Adalbert=20Laz=C4=83r?= , linux-mm@kvack.org, Patrick Colp , =?UTF-8?q?Nicu=C8=99or=20C=C3=AE=C8=9Bu?= , Mathieu Tarral , Stefan Hajnoczi , =?UTF-8?q?Mircea=20C=C3=AErjaliu?= , Paolo Bonzini , Zhang@mail.linuxfoundation.org, =?UTF-8?q?Mihai=20Don=C8=9Bu?= List-Id: virtualization@lists.linuxfoundation.org Q28tZGV2ZWxvcGVkLWJ5OiBOaWN1yJlvciBDw67Im3UgPG5jaXR1QGJpdGRlZmVuZGVyLmNvbT4K U2lnbmVkLW9mZi1ieTogTmljdciZb3IgQ8OuyJt1IDxuY2l0dUBiaXRkZWZlbmRlci5jb20+CkNv LWRldmVsb3BlZC1ieTogTWlyY2VhIEPDrnJqYWxpdSA8bWNpcmphbGl1QGJpdGRlZmVuZGVyLmNv bT4KU2lnbmVkLW9mZi1ieTogTWlyY2VhIEPDrnJqYWxpdSA8bWNpcmphbGl1QGJpdGRlZmVuZGVy LmNvbT4KQ28tZGV2ZWxvcGVkLWJ5OiBNYXJpYW4gUm90YXJpdSA8bWFyaWFuLmMucm90YXJpdUBn bWFpbC5jb20+ClNpZ25lZC1vZmYtYnk6IE1hcmlhbiBSb3Rhcml1IDxtYXJpYW4uYy5yb3Rhcml1 QGdtYWlsLmNvbT4KQ28tZGV2ZWxvcGVkLWJ5OiBBZGFsYmVydCBMYXrEg3IgPGFsYXphckBiaXRk ZWZlbmRlci5jb20+ClNpZ25lZC1vZmYtYnk6IEFkYWxiZXJ0IExhesSDciA8YWxhemFyQGJpdGRl ZmVuZGVyLmNvbT4KLS0tCiBhcmNoL3g4Ni9rdm0va3ZtaS5jICAgICAgICAgfCAgNjMgKysrKwog aW5jbHVkZS90cmFjZS9ldmVudHMva3ZtaS5oIHwgNjgwICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogdmlydC9rdm0va3ZtaS5jICAgICAgICAgICAgIHwgIDIwICsrCiB2aXJ0 L2t2bS9rdm1pX21lbS5jICAgICAgICAgfCAgIDUgKwogdmlydC9rdm0va3ZtaV9tc2cuYyAgICAg ICAgIHwgIDE2ICsKIDUgZmlsZXMgY2hhbmdlZCwgNzg0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBpbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm1pLmgKCmRpZmYgLS1naXQgYS9hcmNo L3g4Ni9rdm0va3ZtaS5jIGIvYXJjaC94ODYva3ZtL2t2bWkuYwppbmRleCA1MzEyZjE3OWFmOWMu LjE3MWU3NjQ0OTI3MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2t2bWkuYworKysgYi9hcmNo L3g4Ni9rdm0va3ZtaS5jCkBAIC05LDYgKzksOCBAQAogI2luY2x1ZGUgPGFzbS92bXguaD4KICNp bmNsdWRlICIuLi8uLi8uLi92aXJ0L2t2bS9rdm1pX2ludC5oIgogCisjaW5jbHVkZSA8dHJhY2Uv ZXZlbnRzL2t2bWkuaD4KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgKm1zcl9tYXNrKHN0cnVjdCBr dm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50ICptc3IpCiB7CiAJc3dpdGNoICgqbXNyKSB7CkBA IC0xMDIsNiArMTA0LDkgQEAgc3RhdGljIGJvb2wgX19rdm1pX21zcl9ldmVudChzdHJ1Y3Qga3Zt X3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyKQogCWlmIChvbGRfbXNyLmRhdGEgPT0g bXNyLT5kYXRhKQogCQlyZXR1cm4gdHJ1ZTsKIAorCXRyYWNlX2t2bWlfZXZlbnRfbXNyX3NlbmQo dmNwdS0+dmNwdV9pZCwgbXNyLT5pbmRleCwgb2xkX21zci5kYXRhLAorCQkJCSAgbXNyLT5kYXRh KTsKKwogCWFjdGlvbiA9IGt2bWlfc2VuZF9tc3IodmNwdSwgbXNyLT5pbmRleCwgb2xkX21zci5k YXRhLCBtc3ItPmRhdGEsCiAJCQkgICAgICAgJnJldF92YWx1ZSk7CiAJc3dpdGNoIChhY3Rpb24p IHsKQEAgLTExMyw2ICsxMTgsOCBAQCBzdGF0aWMgYm9vbCBfX2t2bWlfbXNyX2V2ZW50KHN0cnVj dCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3IpCiAJCWt2bWlfaGFuZGxlX2Nv bW1vbl9ldmVudF9hY3Rpb25zKHZjcHUsIGFjdGlvbiwgIk1TUiIpOwogCX0KIAorCXRyYWNlX2t2 bWlfZXZlbnRfbXNyX3JlY3YodmNwdS0+dmNwdV9pZCwgYWN0aW9uLCByZXRfdmFsdWUpOworCiAJ cmV0dXJuIHJldDsKIH0KIApAQCAtMzg3LDYgKzM5NCw4IEBAIHN0YXRpYyBib29sIF9fa3ZtaV9j cl9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBjciwKIAlpZiAoIXRl c3RfYml0KGNyLCBJVkNQVSh2Y3B1KS0+Y3JfbWFzaykpCiAJCXJldHVybiB0cnVlOwogCisJdHJh Y2Vfa3ZtaV9ldmVudF9jcl9zZW5kKHZjcHUtPnZjcHVfaWQsIGNyLCBvbGRfdmFsdWUsICpuZXdf dmFsdWUpOworCiAJYWN0aW9uID0ga3ZtaV9zZW5kX2NyKHZjcHUsIGNyLCBvbGRfdmFsdWUsICpu ZXdfdmFsdWUsICZyZXRfdmFsdWUpOwogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBLVk1JX0VW RU5UX0FDVElPTl9DT05USU5VRToKQEAgLTM5Nyw2ICs0MDYsOCBAQCBzdGF0aWMgYm9vbCBfX2t2 bWlfY3JfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgY3IsCiAJCWt2 bWlfaGFuZGxlX2NvbW1vbl9ldmVudF9hY3Rpb25zKHZjcHUsIGFjdGlvbiwgIkNSIik7CiAJfQog CisJdHJhY2Vfa3ZtaV9ldmVudF9jcl9yZWN2KHZjcHUtPnZjcHVfaWQsIGFjdGlvbiwgcmV0X3Zh bHVlKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQzNyw2ICs0NDgsOCBAQCBzdGF0aWMgdm9p ZCBfX2t2bWlfeHNldGJ2X2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1MzIgYWN0 aW9uOwogCisJdHJhY2Vfa3ZtaV9ldmVudF94c2V0YnZfc2VuZCh2Y3B1LT52Y3B1X2lkKTsKKwog CWFjdGlvbiA9IGt2bWlfc2VuZF94c2V0YnYodmNwdSk7CiAJc3dpdGNoIChhY3Rpb24pIHsKIAlj YXNlIEtWTUlfRVZFTlRfQUNUSU9OX0NPTlRJTlVFOgpAQCAtNDQ0LDYgKzQ1Nyw4IEBAIHN0YXRp YyB2b2lkIF9fa3ZtaV94c2V0YnZfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWRlZmF1 bHQ6CiAJCWt2bWlfaGFuZGxlX2NvbW1vbl9ldmVudF9hY3Rpb25zKHZjcHUsIGFjdGlvbiwgIlhT RVRCViIpOwogCX0KKworCXRyYWNlX2t2bWlfZXZlbnRfeHNldGJ2X3JlY3YodmNwdS0+dmNwdV9p ZCwgYWN0aW9uKTsKIH0KIAogdm9pZCBrdm1pX3hzZXRidl9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUg KnZjcHUpCkBAIC00NjAsMTIgKzQ3NSwyNiBAQCB2b2lkIGt2bWlfeHNldGJ2X2V2ZW50KHN0cnVj dCBrdm1fdmNwdSAqdmNwdSkKIAlrdm1pX3B1dCh2Y3B1LT5rdm0pOwogfQogCitzdGF0aWMgdTY0 IGdldF9uZXh0X3JpcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bWlfdmNw dSAqaXZjcHUgPSBJVkNQVSh2Y3B1KTsKKworCWlmIChpdmNwdS0+aGF2ZV9kZWxheWVkX3JlZ3Mp CisJCXJldHVybiBpdmNwdS0+ZGVsYXllZF9yZWdzLnJpcDsKKwllbHNlCisJCXJldHVybiBrdm1f cmlwX3JlYWQodmNwdSk7Cit9CisKIHZvaWQga3ZtaV9hcmNoX2JyZWFrcG9pbnRfZXZlbnQoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3ZhLCB1OCBpbnNuX2xlbikKIHsKIAl1MzIgYWN0aW9u OwogCXU2NCBncGE7CisJdTY0IG9sZF9yaXA7CiAKIAlncGEgPSBrdm1fbW11X2d2YV90b19ncGFf c3lzdGVtKHZjcHUsIGd2YSwgMCwgTlVMTCk7CisJb2xkX3JpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1 KTsKKworCXRyYWNlX2t2bWlfZXZlbnRfYnBfc2VuZCh2Y3B1LT52Y3B1X2lkLCBncGEsIG9sZF9y aXApOwogCiAJYWN0aW9uID0ga3ZtaV9tc2dfc2VuZF9icCh2Y3B1LCBncGEsIGluc25fbGVuKTsK IAlzd2l0Y2ggKGFjdGlvbikgewpAQCAtNDc4LDYgKzUwNyw4IEBAIHZvaWQga3ZtaV9hcmNoX2Jy ZWFrcG9pbnRfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3ZhLCB1OCBpbnNuX2xl bikKIAlkZWZhdWx0OgogCQlrdm1pX2hhbmRsZV9jb21tb25fZXZlbnRfYWN0aW9ucyh2Y3B1LCBh Y3Rpb24sICJCUCIpOwogCX0KKworCXRyYWNlX2t2bWlfZXZlbnRfYnBfcmVjdih2Y3B1LT52Y3B1 X2lkLCBhY3Rpb24sIGdldF9uZXh0X3JpcCh2Y3B1KSk7CiB9CiAKICNkZWZpbmUgS1ZNX0hDX1hF Tl9IVk1fT1BfR1VFU1RfUkVRVUVTVF9WTV9FVkVOVCAyNApAQCAtNTA0LDYgKzUzNSw4IEBAIHZv aWQga3ZtaV9hcmNoX2h5cGVyY2FsbF9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJ dTMyIGFjdGlvbjsKIAorCXRyYWNlX2t2bWlfZXZlbnRfaGNfc2VuZCh2Y3B1LT52Y3B1X2lkKTsK KwogCWFjdGlvbiA9IGt2bWlfbXNnX3NlbmRfaHlwZXJjYWxsKHZjcHUpOwogCXN3aXRjaCAoYWN0 aW9uKSB7CiAJY2FzZSBLVk1JX0VWRU5UX0FDVElPTl9DT05USU5VRToKQEAgLTUxMSw2ICs1NDQs OCBAQCB2b2lkIGt2bWlfYXJjaF9oeXBlcmNhbGxfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1 KQogCWRlZmF1bHQ6CiAJCWt2bWlfaGFuZGxlX2NvbW1vbl9ldmVudF9hY3Rpb25zKHZjcHUsIGFj dGlvbiwgIkhZUEVSQ0FMTCIpOwogCX0KKworCXRyYWNlX2t2bWlfZXZlbnRfaGNfcmVjdih2Y3B1 LT52Y3B1X2lkLCBhY3Rpb24pOwogfQogCiBib29sIGt2bWlfYXJjaF9wZl9ldmVudChzdHJ1Y3Qg a3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgZ3ZhX3QgZ3ZhLApAQCAtNTMyLDYgKzU2Nyw5IEBA IGJvb2wga3ZtaV9hcmNoX3BmX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3Bh LCBndmFfdCBndmEsCiAJaWYgKGl2Y3B1LT5lZmZlY3RpdmVfcmVwX2NvbXBsZXRlKQogCQlyZXR1 cm4gdHJ1ZTsKIAorCXRyYWNlX2t2bWlfZXZlbnRfcGZfc2VuZCh2Y3B1LT52Y3B1X2lkLCBncGEs IGd2YSwgYWNjZXNzLAorCQkJCSBrdm1fcmlwX3JlYWQodmNwdSkpOworCiAJYWN0aW9uID0ga3Zt aV9tc2dfc2VuZF9wZih2Y3B1LCBncGEsIGd2YSwgYWNjZXNzLCAmaXZjcHUtPnNzX3JlcXVlc3Rl ZCwKIAkJCQkgICZpdmNwdS0+cmVwX2NvbXBsZXRlLCAmY3R4X2FkZHIsCiAJCQkJICBpdmNwdS0+ Y3R4X2RhdGEsICZjdHhfc2l6ZSk7CkBAIC01NTMsNiArNTkxLDkgQEAgYm9vbCBrdm1pX2FyY2hf cGZfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIGd2YV90IGd2YSwKIAkJ a3ZtaV9oYW5kbGVfY29tbW9uX2V2ZW50X2FjdGlvbnModmNwdSwgYWN0aW9uLCAiUEYiKTsKIAl9 CiAKKwl0cmFjZV9rdm1pX2V2ZW50X3BmX3JlY3YodmNwdS0+dmNwdV9pZCwgYWN0aW9uLCBnZXRf bmV4dF9yaXAodmNwdSksCisJCQkJIGN0eF9zaXplLCBpdmNwdS0+c3NfcmVxdWVzdGVkLCByZXQp OworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjI4LDYgKzY2OSwxMSBAQCB2b2lkIGt2bWlfYXJj aF90cmFwX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJZXJyID0gMDsKIAl9CiAKKwl0 cmFjZV9rdm1pX2V2ZW50X3RyYXBfc2VuZCh2Y3B1LT52Y3B1X2lkLCB2ZWN0b3IsCisJCQkJICAg SVZDUFUodmNwdSktPmV4Y2VwdGlvbi5uciwKKwkJCQkgICBlcnIsIElWQ1BVKHZjcHUpLT5leGNl cHRpb24uZXJyb3JfY29kZSwKKwkJCQkgICB2Y3B1LT5hcmNoLmNyMik7CisKIAlhY3Rpb24gPSBr dm1pX3NlbmRfdHJhcCh2Y3B1LCB2ZWN0b3IsIHR5cGUsIGVyciwgdmNwdS0+YXJjaC5jcjIpOwog CXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBLVk1JX0VWRU5UX0FDVElPTl9DT05USU5VRToKQEAg LTYzNSw2ICs2ODEsOCBAQCB2b2lkIGt2bWlfYXJjaF90cmFwX2V2ZW50KHN0cnVjdCBrdm1fdmNw dSAqdmNwdSkKIAlkZWZhdWx0OgogCQlrdm1pX2hhbmRsZV9jb21tb25fZXZlbnRfYWN0aW9ucyh2 Y3B1LCBhY3Rpb24sICJUUkFQIik7CiAJfQorCisJdHJhY2Vfa3ZtaV9ldmVudF90cmFwX3JlY3Yo dmNwdS0+dmNwdV9pZCwgYWN0aW9uKTsKIH0KIAogc3RhdGljIGJvb2wgX19rdm1pX2Rlc2NyaXB0 b3JfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBkZXNjcmlwdG9yLApAQCAtNjQzLDYg KzY5MSw4IEBAIHN0YXRpYyBib29sIF9fa3ZtaV9kZXNjcmlwdG9yX2V2ZW50KHN0cnVjdCBrdm1f dmNwdSAqdmNwdSwgdTggZGVzY3JpcHRvciwKIAl1MzIgYWN0aW9uOwogCWJvb2wgcmV0ID0gZmFs c2U7CiAKKwl0cmFjZV9rdm1pX2V2ZW50X2Rlc2Nfc2VuZCh2Y3B1LT52Y3B1X2lkLCBkZXNjcmlw dG9yLCB3cml0ZSk7CisKIAlhY3Rpb24gPSBrdm1pX21zZ19zZW5kX2Rlc2NyaXB0b3IodmNwdSwg ZGVzY3JpcHRvciwgd3JpdGUpOwogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBLVk1JX0VWRU5U X0FDVElPTl9DT05USU5VRToKQEAgLTY1NCw2ICs3MDQsOCBAQCBzdGF0aWMgYm9vbCBfX2t2bWlf ZGVzY3JpcHRvcl9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IGRlc2NyaXB0b3IsCiAJ CWt2bWlfaGFuZGxlX2NvbW1vbl9ldmVudF9hY3Rpb25zKHZjcHUsIGFjdGlvbiwgIkRFU0MiKTsK IAl9CiAKKwl0cmFjZV9rdm1pX2V2ZW50X2Rlc2NfcmVjdih2Y3B1LT52Y3B1X2lkLCBhY3Rpb24p OworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzE4LDYgKzc3MCwxNSBAQCBpbnQga3ZtaV9hcmNo X2NtZF9pbmplY3RfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yLAog CQkJCSAgIGJvb2wgZXJyb3JfY29kZV92YWxpZCwKIAkJCQkgICB1MzIgZXJyb3JfY29kZSwgdTY0 IGFkZHJlc3MpCiB7CisJc3RydWN0IHg4Nl9leGNlcHRpb24gZSA9IHsKKwkJLmVycm9yX2NvZGVf dmFsaWQgPSBlcnJvcl9jb2RlX3ZhbGlkLAorCQkuZXJyb3JfY29kZSA9IGVycm9yX2NvZGUsCisJ CS5hZGRyZXNzID0gYWRkcmVzcywKKwkJLnZlY3RvciA9IHZlY3RvciwKKwl9OworCisJdHJhY2Vf a3ZtaV9jbWRfaW5qZWN0X2V4Y2VwdGlvbih2Y3B1LCAmZSk7CisKIAlpZiAoIShpc192ZWN0b3Jf dmFsaWQodmVjdG9yKSAmJiBpc19ndmFfdmFsaWQodmNwdSwgYWRkcmVzcykpKQogCQlyZXR1cm4g LUtWTV9FSU5WQUw7CiAKQEAgLTg3Niw2ICs5MzcsOCBAQCB2b2lkIGt2bWlfYXJjaF91cGRhdGVf cGFnZV90cmFja2luZyhzdHJ1Y3Qga3ZtICprdm0sCiAJCQlyZXR1cm47CiAJfQogCisJdHJhY2Vf a3ZtaV9zZXRfZ2ZuX2FjY2VzcyhtLT5nZm4sIG0tPmFjY2VzcywgbS0+d3JpdGVfYml0bWFwLCBz bG90LT5pZCk7CisKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0cmFja19tb2Rlcyk7IGkr KykgewogCQl1bnNpZ25lZCBpbnQgYWxsb3dfYml0ID0gdHJhY2tfbW9kZXNbaV0uYWxsb3dfYml0 OwogCQllbnVtIGt2bV9wYWdlX3RyYWNrX21vZGUgbW9kZSA9IHRyYWNrX21vZGVzW2ldLnRyYWNr X21vZGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm1pLmggYi9pbmNsdWRl L3RyYWNlL2V2ZW50cy9rdm1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi40NDIxODk0MzdmZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50 cy9rdm1pLmgKQEAgLTAsMCArMSw2ODAgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wICovCisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBrdm1p CisKKyNpZiAhZGVmaW5lZChfVFJBQ0VfS1ZNSV9IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9N VUxUSV9SRUFEKQorI2RlZmluZSBfVFJBQ0VfS1ZNSV9ICisKKyNpbmNsdWRlIDxsaW51eC90cmFj ZXBvaW50Lmg+CisKKyNpZm5kZWYgX19UUkFDRV9LVk1JX1NUUlVDVFVSRVMKKyNkZWZpbmUgX19U UkFDRV9LVk1JX1NUUlVDVFVSRVMKKworI3VuZGVmIEVOCisjZGVmaW5lIEVOKHgpIHsgeCwgI3gg fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRyYWNlX3ByaW50X2ZsYWdzIGt2bWlfbXNnX2lkX3N5 bWJvbFtdID0geworCUVOKEtWTUlfR0VUX1ZFUlNJT04pLAorCUVOKEtWTUlfQ0hFQ0tfQ09NTUFO RCksCisJRU4oS1ZNSV9DSEVDS19FVkVOVCksCisJRU4oS1ZNSV9HRVRfR1VFU1RfSU5GTyksCisJ RU4oS1ZNSV9HRVRfVkNQVV9JTkZPKSwKKwlFTihLVk1JX0dFVF9SRUdJU1RFUlMpLAorCUVOKEtW TUlfU0VUX1JFR0lTVEVSUyksCisJRU4oS1ZNSV9HRVRfUEFHRV9BQ0NFU1MpLAorCUVOKEtWTUlf U0VUX1BBR0VfQUNDRVNTKSwKKwlFTihLVk1JX0dFVF9QQUdFX1dSSVRFX0JJVE1BUCksCisJRU4o S1ZNSV9TRVRfUEFHRV9XUklURV9CSVRNQVApLAorCUVOKEtWTUlfSU5KRUNUX0VYQ0VQVElPTiks CisJRU4oS1ZNSV9SRUFEX1BIWVNJQ0FMKSwKKwlFTihLVk1JX1dSSVRFX1BIWVNJQ0FMKSwKKwlF TihLVk1JX0dFVF9NQVBfVE9LRU4pLAorCUVOKEtWTUlfQ09OVFJPTF9FVkVOVFMpLAorCUVOKEtW TUlfQ09OVFJPTF9DUiksCisJRU4oS1ZNSV9DT05UUk9MX01TUiksCisJRU4oS1ZNSV9FVkVOVCks CisJRU4oS1ZNSV9FVkVOVF9SRVBMWSksCisJRU4oS1ZNSV9HRVRfQ1BVSUQpLAorCUVOKEtWTUlf R0VUX1hTQVZFKSwKKwlFTihLVk1JX1BBVVNFX1ZDUFUpLAorCUVOKEtWTUlfQ09OVFJPTF9WTV9F VkVOVFMpLAorCUVOKEtWTUlfR0VUX01UUlJfVFlQRSksCisJRU4oS1ZNSV9DT05UUk9MX1NQUCks CisJRU4oS1ZNSV9DT05UUk9MX0NNRF9SRVNQT05TRSksCisJey0xLCBOVUxMfQorfTsKKworc3Rh dGljIGNvbnN0IHN0cnVjdCB0cmFjZV9wcmludF9mbGFncyBrdm1pX2Rlc2NyaXB0b3Jfc3ltYm9s W10gPSB7CisJRU4oS1ZNSV9ERVNDX0lEVFIpLAorCUVOKEtWTUlfREVTQ19HRFRSKSwKKwlFTihL Vk1JX0RFU0NfTERUUiksCisJRU4oS1ZNSV9ERVNDX1RSKSwKKwl7LTEsIE5VTEx9Cit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IHRyYWNlX3ByaW50X2ZsYWdzIGt2bWlfZXZlbnRfc3ltYm9sW10g PSB7CisJRU4oS1ZNSV9FVkVOVF9VTkhPT0spLAorCUVOKEtWTUlfRVZFTlRfQ1IpLAorCUVOKEtW TUlfRVZFTlRfTVNSKSwKKwlFTihLVk1JX0VWRU5UX1hTRVRCViksCisJRU4oS1ZNSV9FVkVOVF9C UkVBS1BPSU5UKSwKKwlFTihLVk1JX0VWRU5UX0hZUEVSQ0FMTCksCisJRU4oS1ZNSV9FVkVOVF9Q RiksCisJRU4oS1ZNSV9FVkVOVF9UUkFQKSwKKwlFTihLVk1JX0VWRU5UX0RFU0NSSVBUT1IpLAor CUVOKEtWTUlfRVZFTlRfQ1JFQVRFX1ZDUFUpLAorCUVOKEtWTUlfRVZFTlRfUEFVU0VfVkNQVSks CisJRU4oS1ZNSV9FVkVOVF9TSU5HTEVTVEVQKSwKKwl7IC0xLCBOVUxMIH0KK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgdHJhY2VfcHJpbnRfZmxhZ3Mga3ZtaV9hY3Rpb25fc3ltYm9sW10gPSB7 CisJe0tWTUlfRVZFTlRfQUNUSU9OX0NPTlRJTlVFLCAiY29udGludWUifSwKKwl7S1ZNSV9FVkVO VF9BQ1RJT05fUkVUUlksICJyZXRyeSJ9LAorCXtLVk1JX0VWRU5UX0FDVElPTl9DUkFTSCwgImNy YXNoIn0sCisJey0xLCBOVUxMfQorfTsKKworI2VuZGlmIC8qIF9fVFJBQ0VfS1ZNSV9TVFJVQ1RV UkVTICovCisKK1RSQUNFX0VWRU5UKAorCWt2bWlfdm1fY29tbWFuZCwKKwlUUF9QUk9UTyhfX3Ux NiBpZCwgX191MzIgc2VxKSwKKwlUUF9BUkdTKGlkLCBzZXEpLAorCVRQX1NUUlVDVF9fZW50cnko CisJCV9fZmllbGQoX191MTYsIGlkKQorCQlfX2ZpZWxkKF9fdTMyLCBzZXEpCisJKSwKKwlUUF9m YXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+aWQgPSBpZDsKKwkJX19lbnRyeS0+c2VxID0gc2VxOwor CSksCisJVFBfcHJpbnRrKCIlcyBzZXEgJWQiLAorCQkgIHRyYWNlX3ByaW50X3N5bWJvbHNfc2Vx KHAsIF9fZW50cnktPmlkLCBrdm1pX21zZ19pZF9zeW1ib2wpLAorCQkgIF9fZW50cnktPnNlcSkK Kyk7CisKK1RSQUNFX0VWRU5UKAorCWt2bWlfdm1fcmVwbHksCisJVFBfUFJPVE8oX191MTYgaWQs IF9fdTMyIHNlcSwgX19zMzIgZXJyKSwKKwlUUF9BUkdTKGlkLCBzZXEsIGVyciksCisJVFBfU1RS VUNUX19lbnRyeSgKKwkJX19maWVsZChfX3UxNiwgaWQpCisJCV9fZmllbGQoX191MzIsIHNlcSkK KwkJX19maWVsZChfX3MzMiwgZXJyKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnkt PmlkID0gaWQ7CisJCV9fZW50cnktPnNlcSA9IHNlcTsKKwkJX19lbnRyeS0+ZXJyID0gZXJyOwor CSksCisJVFBfcHJpbnRrKCIlcyBzZXEgJWQgZXJyICVkIiwKKwkJICB0cmFjZV9wcmludF9zeW1i b2xzX3NlcShwLCBfX2VudHJ5LT5pZCwga3ZtaV9tc2dfaWRfc3ltYm9sKSwKKwkJICBfX2VudHJ5 LT5zZXEsCisJCSAgX19lbnRyeS0+ZXJyKQorKTsKKworVFJBQ0VfRVZFTlQoCisJa3ZtaV92Y3B1 X2NvbW1hbmQsCisJVFBfUFJPVE8oX191MTYgdmNwdSwgX191MTYgaWQsIF9fdTMyIHNlcSksCisJ VFBfQVJHUyh2Y3B1LCBpZCwgc2VxKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKF9f dTE2LCB2Y3B1KQorCQlfX2ZpZWxkKF9fdTE2LCBpZCkKKwkJX19maWVsZChfX3UzMiwgc2VxKQor CSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnZjcHUgPSB2Y3B1OworCQlfX2VudHJ5 LT5pZCA9IGlkOworCQlfX2VudHJ5LT5zZXEgPSBzZXE7CisJKSwKKwlUUF9wcmludGsoInZjcHUg JWQgJXMgc2VxICVkIiwKKwkJICBfX2VudHJ5LT52Y3B1LAorCQkgIHRyYWNlX3ByaW50X3N5bWJv bHNfc2VxKHAsIF9fZW50cnktPmlkLCBrdm1pX21zZ19pZF9zeW1ib2wpLAorCQkgIF9fZW50cnkt PnNlcSkKKyk7CisKK1RSQUNFX0VWRU5UKAorCWt2bWlfdmNwdV9yZXBseSwKKwlUUF9QUk9UTyhf X3UxNiB2Y3B1LCBfX3UxNiBpZCwgX191MzIgc2VxLCBfX3MzMiBlcnIpLAorCVRQX0FSR1ModmNw dSwgaWQsIHNlcSwgZXJyKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKF9fdTE2LCB2 Y3B1KQorCQlfX2ZpZWxkKF9fdTE2LCBpZCkKKwkJX19maWVsZChfX3UzMiwgc2VxKQorCQlfX2Zp ZWxkKF9fczMyLCBlcnIpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dmNwdSA9 IHZjcHU7CisJCV9fZW50cnktPmlkID0gaWQ7CisJCV9fZW50cnktPnNlcSA9IHNlcTsKKwkJX19l bnRyeS0+ZXJyID0gZXJyOworCSksCisJVFBfcHJpbnRrKCJ2Y3B1ICVkICVzIHNlcSAlZCBlcnIg JWQiLAorCQkgIF9fZW50cnktPnZjcHUsCisJCSAgdHJhY2VfcHJpbnRfc3ltYm9sc19zZXEocCwg X19lbnRyeS0+aWQsIGt2bWlfbXNnX2lkX3N5bWJvbCksCisJCSAgX19lbnRyeS0+c2VxLAorCQkg IF9fZW50cnktPmVycikKKyk7CisKK1RSQUNFX0VWRU5UKAorCWt2bWlfZXZlbnQsCisJVFBfUFJP VE8oX191MTYgdmNwdSwgX191MzIgaWQsIF9fdTMyIHNlcSksCisJVFBfQVJHUyh2Y3B1LCBpZCwg c2VxKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKF9fdTE2LCB2Y3B1KQorCQlfX2Zp ZWxkKF9fdTMyLCBpZCkKKwkJX19maWVsZChfX3UzMiwgc2VxKQorCSksCisJVFBfZmFzdF9hc3Np Z24oCisJCV9fZW50cnktPnZjcHUgPSB2Y3B1OworCQlfX2VudHJ5LT5pZCA9IGlkOworCQlfX2Vu dHJ5LT5zZXEgPSBzZXE7CisJKSwKKwlUUF9wcmludGsoInZjcHUgJWQgJXMgc2VxICVkIiwKKwkJ X19lbnRyeS0+dmNwdSwKKwkJdHJhY2VfcHJpbnRfc3ltYm9sc19zZXEocCwgX19lbnRyeS0+aWQs IGt2bWlfZXZlbnRfc3ltYm9sKSwKKwkJX19lbnRyeS0+c2VxKQorKTsKKworVFJBQ0VfRVZFTlQo CisJa3ZtaV9ldmVudF9yZXBseSwKKwlUUF9QUk9UTyhfX3UzMiBpZCwgX191MzIgc2VxKSwKKwlU UF9BUkdTKGlkLCBzZXEpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoX191MzIsIGlk KQorCQlfX2ZpZWxkKF9fdTMyLCBzZXEpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRy eS0+aWQgPSBpZDsKKwkJX19lbnRyeS0+c2VxID0gc2VxOworCSksCisJVFBfcHJpbnRrKCIlcyBz ZXEgJWQiLAorCQl0cmFjZV9wcmludF9zeW1ib2xzX3NlcShwLCBfX2VudHJ5LT5pZCwga3ZtaV9l dmVudF9zeW1ib2wpLAorCQlfX2VudHJ5LT5zZXEpCispOworCisjZGVmaW5lIEtWTUlfQUNDRVNT X1BSSU5USygpICh7CQkJCQkJXAorCWNvbnN0IGNoYXIgKnNhdmVkX3B0ciA9IHRyYWNlX3NlcV9i dWZmZXJfcHRyKHApOwkJXAorCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYWNjZXNzX3N0cltd ID0gewkJCVwKKwkJIi0tLSIsICJyLS0iLCAiLXctIiwgInJ3LSIsICItLXgiLCAici14IiwgIi13 eCIsICJyd3giCVwKKwl9OwkJCQkJCQkJXAorCXRyYWNlX3NlcV9wcmludGYocCwgIiVzIiwgYWNj ZXNzX3N0cltfX2VudHJ5LT5hY2Nlc3MgJiA3XSk7CVwKKwlzYXZlZF9wdHI7CQkJCQkJCVwKK30p CisKK1RSQUNFX0VWRU5UKAorCWt2bWlfc2V0X2dmbl9hY2Nlc3MsCisJVFBfUFJPVE8oX191NjQg Z2ZuLCBfX3U4IGFjY2VzcywgX191MzIgYml0bWFwLCBfX3UxNiBzbG90KSwKKwlUUF9BUkdTKGdm biwgYWNjZXNzLCBiaXRtYXAsIHNsb3QpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQo X191NjQsIGdmbikKKwkJX19maWVsZChfX3U4LCBhY2Nlc3MpCisJCV9fZmllbGQoX191MzIsIGJp dG1hcCkKKwkJX19maWVsZChfX3UxNiwgc2xvdCkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlf X2VudHJ5LT5nZm4gPSBnZm47CisJCV9fZW50cnktPmFjY2VzcyA9IGFjY2VzczsKKwkJX19lbnRy eS0+Yml0bWFwID0gYml0bWFwOworCQlfX2VudHJ5LT5zbG90ID0gc2xvdDsKKwkpLAorCVRQX3By aW50aygiZ2ZuICVsbHggJXMgd3JpdGUgYml0bWFwICV4IHNsb3QgJWQiLAorCQkgIF9fZW50cnkt PmdmbiwgS1ZNSV9BQ0NFU1NfUFJJTlRLKCksCisJCSAgX19lbnRyeS0+Yml0bWFwLCBfX2VudHJ5 LT5zbG90KQorKTsKKworREVDTEFSRV9FVkVOVF9DTEFTUygKKwlrdm1pX2V2ZW50X3NlbmRfdGVt cGxhdGUsCisJVFBfUFJPVE8oX191MTYgdmNwdSksCisJVFBfQVJHUyh2Y3B1KSwKKwlUUF9TVFJV Q1RfX2VudHJ5KAorCQlfX2ZpZWxkKF9fdTE2LCB2Y3B1KQorCSksCisJVFBfZmFzdF9hc3NpZ24o CisJCV9fZW50cnktPnZjcHUgPSB2Y3B1OworCSksCisJVFBfcHJpbnRrKCJ2Y3B1ICVkIiwKKwkJ ICBfX2VudHJ5LT52Y3B1CisJKQorKTsKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoCisJa3ZtaV9ldmVu dF9yZWN2X3RlbXBsYXRlLAorCVRQX1BST1RPKF9fdTE2IHZjcHUsIF9fdTMyIGFjdGlvbiksCisJ VFBfQVJHUyh2Y3B1LCBhY3Rpb24pLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoX191 MTYsIHZjcHUpCisJCV9fZmllbGQoX191MzIsIGFjdGlvbikKKwkpLAorCVRQX2Zhc3RfYXNzaWdu KAorCQlfX2VudHJ5LT52Y3B1ID0gdmNwdTsKKwkJX19lbnRyeS0+YWN0aW9uID0gYWN0aW9uOwor CSksCisJVFBfcHJpbnRrKCJ2Y3B1ICVkICVzIiwKKwkJICBfX2VudHJ5LT52Y3B1LAorCQkgIHRy YWNlX3ByaW50X3N5bWJvbHNfc2VxKHAsIF9fZW50cnktPmFjdGlvbiwKKwkJCQkJICBrdm1pX2Fj dGlvbl9zeW1ib2wpCisJKQorKTsKKworVFJBQ0VfRVZFTlQoCisJa3ZtaV9ldmVudF9jcl9zZW5k LAorCVRQX1BST1RPKF9fdTE2IHZjcHUsIF9fdTMyIGNyLCBfX3U2NCBvbGRfdmFsdWUsIF9fdTY0 IG5ld192YWx1ZSksCisJVFBfQVJHUyh2Y3B1LCBjciwgb2xkX3ZhbHVlLCBuZXdfdmFsdWUpLAor CVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoX191MTYsIHZjcHUpCisJCV9fZmllbGQoX191 MzIsIGNyKQorCQlfX2ZpZWxkKF9fdTY0LCBvbGRfdmFsdWUpCisJCV9fZmllbGQoX191NjQsIG5l d192YWx1ZSkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT52Y3B1ID0gdmNwdTsK KwkJX19lbnRyeS0+Y3IgPSBjcjsKKwkJX19lbnRyeS0+b2xkX3ZhbHVlID0gb2xkX3ZhbHVlOwor CQlfX2VudHJ5LT5uZXdfdmFsdWUgPSBuZXdfdmFsdWU7CisJKSwKKwlUUF9wcmludGsoInZjcHUg JWQgY3IgJXggb2xkX3ZhbHVlICVsbHggbmV3X3ZhbHVlICVsbHgiLAorCQkgIF9fZW50cnktPnZj cHUsCisJCSAgX19lbnRyeS0+Y3IsCisJCSAgX19lbnRyeS0+b2xkX3ZhbHVlLAorCQkgIF9fZW50 cnktPm5ld192YWx1ZQorCSkKKyk7CitUUkFDRV9FVkVOVCgKKwlrdm1pX2V2ZW50X2NyX3JlY3Ys CisJVFBfUFJPVE8oX191MTYgdmNwdSwgX191MzIgYWN0aW9uLCBfX3U2NCBuZXdfdmFsdWUpLAor CVRQX0FSR1ModmNwdSwgYWN0aW9uLCBuZXdfdmFsdWUpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJ CV9fZmllbGQoX191MTYsIHZjcHUpCisJCV9fZmllbGQoX191MzIsIGFjdGlvbikKKwkJX19maWVs ZChfX3U2NCwgbmV3X3ZhbHVlKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnZj cHUgPSB2Y3B1OworCQlfX2VudHJ5LT5hY3Rpb24gPSBhY3Rpb247CisJCV9fZW50cnktPm5ld192 YWx1ZSA9IG5ld192YWx1ZTsKKwkpLAorCVRQX3ByaW50aygidmNwdSAlZCAlcyBuZXdfdmFsdWUg JWxseCIsCisJCSAgX19lbnRyeS0+dmNwdSwKKwkJICB0cmFjZV9wcmludF9zeW1ib2xzX3NlcShw LCBfX2VudHJ5LT5hY3Rpb24sCisJCQkJCSAga3ZtaV9hY3Rpb25fc3ltYm9sKSwKKwkJICBfX2Vu dHJ5LT5uZXdfdmFsdWUKKwkpCispOworCitUUkFDRV9FVkVOVCgKKwlrdm1pX2V2ZW50X21zcl9z ZW5kLAorCVRQX1BST1RPKF9fdTE2IHZjcHUsIF9fdTMyIG1zciwgX191NjQgb2xkX3ZhbHVlLCBf X3U2NCBuZXdfdmFsdWUpLAorCVRQX0FSR1ModmNwdSwgbXNyLCBvbGRfdmFsdWUsIG5ld192YWx1 ZSksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChfX3UxNiwgdmNwdSkKKwkJX19maWVs ZChfX3UzMiwgbXNyKQorCQlfX2ZpZWxkKF9fdTY0LCBvbGRfdmFsdWUpCisJCV9fZmllbGQoX191 NjQsIG5ld192YWx1ZSkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT52Y3B1ID0g dmNwdTsKKwkJX19lbnRyeS0+bXNyID0gbXNyOworCQlfX2VudHJ5LT5vbGRfdmFsdWUgPSBvbGRf dmFsdWU7CisJCV9fZW50cnktPm5ld192YWx1ZSA9IG5ld192YWx1ZTsKKwkpLAorCVRQX3ByaW50 aygidmNwdSAlZCBtc3IgJXggb2xkX3ZhbHVlICVsbHggbmV3X3ZhbHVlICVsbHgiLAorCQkgIF9f ZW50cnktPnZjcHUsCisJCSAgX19lbnRyeS0+bXNyLAorCQkgIF9fZW50cnktPm9sZF92YWx1ZSwK KwkJICBfX2VudHJ5LT5uZXdfdmFsdWUKKwkpCispOworVFJBQ0VfRVZFTlQoCisJa3ZtaV9ldmVu dF9tc3JfcmVjdiwKKwlUUF9QUk9UTyhfX3UxNiB2Y3B1LCBfX3UzMiBhY3Rpb24sIF9fdTY0IG5l d192YWx1ZSksCisJVFBfQVJHUyh2Y3B1LCBhY3Rpb24sIG5ld192YWx1ZSksCisJVFBfU1RSVUNU X19lbnRyeSgKKwkJX19maWVsZChfX3UxNiwgdmNwdSkKKwkJX19maWVsZChfX3UzMiwgYWN0aW9u KQorCQlfX2ZpZWxkKF9fdTY0LCBuZXdfdmFsdWUpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJ X19lbnRyeS0+dmNwdSA9IHZjcHU7CisJCV9fZW50cnktPmFjdGlvbiA9IGFjdGlvbjsKKwkJX19l bnRyeS0+bmV3X3ZhbHVlID0gbmV3X3ZhbHVlOworCSksCisJVFBfcHJpbnRrKCJ2Y3B1ICVkICVz IG5ld192YWx1ZSAlbGx4IiwKKwkJICBfX2VudHJ5LT52Y3B1LAorCQkgIHRyYWNlX3ByaW50X3N5 bWJvbHNfc2VxKHAsIF9fZW50cnktPmFjdGlvbiwKKwkJCQkJICBrdm1pX2FjdGlvbl9zeW1ib2wp LAorCQkgIF9fZW50cnktPm5ld192YWx1ZQorCSkKKyk7CisKK0RFRklORV9FVkVOVChrdm1pX2V2 ZW50X3NlbmRfdGVtcGxhdGUsIGt2bWlfZXZlbnRfeHNldGJ2X3NlbmQsCisJVFBfUFJPVE8oX191 MTYgdmNwdSksCisJVFBfQVJHUyh2Y3B1KQorKTsKK0RFRklORV9FVkVOVChrdm1pX2V2ZW50X3Jl Y3ZfdGVtcGxhdGUsIGt2bWlfZXZlbnRfeHNldGJ2X3JlY3YsCisJVFBfUFJPVE8oX191MTYgdmNw dSwgX191MzIgYWN0aW9uKSwKKwlUUF9BUkdTKHZjcHUsIGFjdGlvbikKKyk7CisKK1RSQUNFX0VW RU5UKAorCWt2bWlfZXZlbnRfYnBfc2VuZCwKKwlUUF9QUk9UTyhfX3UxNiB2Y3B1LCBfX3U2NCBn cGEsIF9fdTY0IG9sZF9yaXApLAorCVRQX0FSR1ModmNwdSwgZ3BhLCBvbGRfcmlwKSwKKwlUUF9T VFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKF9fdTE2LCB2Y3B1KQorCQlfX2ZpZWxkKF9fdTY0LCBn cGEpCisJCV9fZmllbGQoX191NjQsIG9sZF9yaXApCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJ X19lbnRyeS0+dmNwdSA9IHZjcHU7CisJCV9fZW50cnktPmdwYSA9IGdwYTsKKwkJX19lbnRyeS0+ b2xkX3JpcCA9IG9sZF9yaXA7CisJKSwKKwlUUF9wcmludGsoInZjcHUgJWQgZ3BhICVsbHggcmlw ICVsbHgiLAorCQkgIF9fZW50cnktPnZjcHUsCisJCSAgX19lbnRyeS0+Z3BhLAorCQkgIF9fZW50 cnktPm9sZF9yaXAKKwkpCispOworVFJBQ0VfRVZFTlQoCisJa3ZtaV9ldmVudF9icF9yZWN2LAor CVRQX1BST1RPKF9fdTE2IHZjcHUsIF9fdTMyIGFjdGlvbiwgX191NjQgbmV3X3JpcCksCisJVFBf QVJHUyh2Y3B1LCBhY3Rpb24sIG5ld19yaXApLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmll bGQoX191MTYsIHZjcHUpCisJCV9fZmllbGQoX191MzIsIGFjdGlvbikKKwkJX19maWVsZChfX3U2 NCwgbmV3X3JpcCkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT52Y3B1ID0gdmNw dTsKKwkJX19lbnRyeS0+YWN0aW9uID0gYWN0aW9uOworCQlfX2VudHJ5LT5uZXdfcmlwID0gbmV3 X3JpcDsKKwkpLAorCVRQX3ByaW50aygidmNwdSAlZCAlcyByaXAgJWxseCIsCisJCSAgX19lbnRy eS0+dmNwdSwKKwkJICB0cmFjZV9wcmludF9zeW1ib2xzX3NlcShwLCBfX2VudHJ5LT5hY3Rpb24s CisJCQkJCSAga3ZtaV9hY3Rpb25fc3ltYm9sKSwKKwkJICBfX2VudHJ5LT5uZXdfcmlwCisJKQor KTsKKworREVGSU5FX0VWRU5UKGt2bWlfZXZlbnRfc2VuZF90ZW1wbGF0ZSwga3ZtaV9ldmVudF9o Y19zZW5kLAorCVRQX1BST1RPKF9fdTE2IHZjcHUpLAorCVRQX0FSR1ModmNwdSkKKyk7CitERUZJ TkVfRVZFTlQoa3ZtaV9ldmVudF9yZWN2X3RlbXBsYXRlLCBrdm1pX2V2ZW50X2hjX3JlY3YsCisJ VFBfUFJPVE8oX191MTYgdmNwdSwgX191MzIgYWN0aW9uKSwKKwlUUF9BUkdTKHZjcHUsIGFjdGlv bikKKyk7CisKK1RSQUNFX0VWRU5UKAorCWt2bWlfZXZlbnRfcGZfc2VuZCwKKwlUUF9QUk9UTyhf X3UxNiB2Y3B1LCBfX3U2NCBncGEsIF9fdTY0IGd2YSwgX191OCBhY2Nlc3MsIF9fdTY0IHJpcCks CisJVFBfQVJHUyh2Y3B1LCBncGEsIGd2YSwgYWNjZXNzLCByaXApLAorCVRQX1NUUlVDVF9fZW50 cnkoCisJCV9fZmllbGQoX191MTYsIHZjcHUpCisJCV9fZmllbGQoX191NjQsIGdwYSkKKwkJX19m aWVsZChfX3U2NCwgZ3ZhKQorCQlfX2ZpZWxkKF9fdTgsIGFjY2VzcykKKwkJX19maWVsZChfX3U2 NCwgcmlwKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnZjcHUgPSB2Y3B1Owor CQlfX2VudHJ5LT5ncGEgPSBncGE7CisJCV9fZW50cnktPmd2YSA9IGd2YTsKKwkJX19lbnRyeS0+ YWNjZXNzID0gYWNjZXNzOworCQlfX2VudHJ5LT5yaXAgPSByaXA7CisJKSwKKwlUUF9wcmludGso InZjcHUgJWQgZ3BhICVsbHggJXMgZ3ZhICVsbHggcmlwICVsbHgiLAorCQkgIF9fZW50cnktPnZj cHUsCisJCSAgX19lbnRyeS0+Z3BhLAorCQkgIEtWTUlfQUNDRVNTX1BSSU5USygpLAorCQkgIF9f ZW50cnktPmd2YSwKKwkJICBfX2VudHJ5LT5yaXAKKwkpCispOworVFJBQ0VfRVZFTlQoCisJa3Zt aV9ldmVudF9wZl9yZWN2LAorCVRQX1BST1RPKF9fdTE2IHZjcHUsIF9fdTMyIGFjdGlvbiwgX191 NjQgbmV4dF9yaXAsIHNpemVfdCBjdXN0b21fZGF0YSwKKwkJIGJvb2wgc2luZ2xlc3RlcCwgYm9v bCByZXQpLAorCVRQX0FSR1ModmNwdSwgYWN0aW9uLCBuZXh0X3JpcCwgY3VzdG9tX2RhdGEsIHNp bmdsZXN0ZXAsIHJldCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChfX3UxNiwgdmNw dSkKKwkJX19maWVsZChfX3UzMiwgYWN0aW9uKQorCQlfX2ZpZWxkKF9fdTY0LCBuZXh0X3JpcCkK KwkJX19maWVsZChzaXplX3QsIGN1c3RvbV9kYXRhKQorCQlfX2ZpZWxkKGJvb2wsIHNpbmdsZXN0 ZXApCisJCV9fZmllbGQoYm9vbCwgcmV0KQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50 cnktPnZjcHUgPSB2Y3B1OworCQlfX2VudHJ5LT5hY3Rpb24gPSBhY3Rpb247CisJCV9fZW50cnkt Pm5leHRfcmlwID0gbmV4dF9yaXA7CisJCV9fZW50cnktPmN1c3RvbV9kYXRhID0gY3VzdG9tX2Rh dGE7CisJCV9fZW50cnktPnNpbmdsZXN0ZXAgPSBzaW5nbGVzdGVwOworCQlfX2VudHJ5LT5yZXQg PSByZXQ7CisJKSwKKwlUUF9wcmludGsoInZjcHUgJWQgJXMgcmlwICVsbHggY3VzdG9tICV6dSAl cyIsCisJCSAgX19lbnRyeS0+dmNwdSwKKwkJICB0cmFjZV9wcmludF9zeW1ib2xzX3NlcShwLCBf X2VudHJ5LT5hY3Rpb24sCisJCQkJCSAga3ZtaV9hY3Rpb25fc3ltYm9sKSwKKwkJICBfX2VudHJ5 LT5uZXh0X3JpcCwgX19lbnRyeS0+Y3VzdG9tX2RhdGEsCisJCSAgKF9fZW50cnktPnNpbmdsZXN0 ZXAgPyAoX19lbnRyeS0+cmV0ID8gInNpbmdsZXN0ZXAgZmFpbGVkIiA6CisJCQkJCQkJICJzaW5n bGVzdGVwIHJ1bm5pbmciKQorCQkJCQk6ICIiKQorCSkKKyk7CisKK1RSQUNFX0VWRU5UKAorCWt2 bWlfZXZlbnRfdHJhcF9zZW5kLAorCVRQX1BST1RPKF9fdTE2IHZjcHUsIF9fdTMyIHZlY3Rvciwg X191OCBuciwgX191MzIgZXJyLCBfX3UxNiBlcnJvcl9jb2RlLAorCQkgX191NjQgY3IyKSwKKwlU UF9BUkdTKHZjcHUsIHZlY3RvciwgbnIsIGVyciwgZXJyb3JfY29kZSwgY3IyKSwKKwlUUF9TVFJV Q1RfX2VudHJ5KAorCQlfX2ZpZWxkKF9fdTE2LCB2Y3B1KQorCQlfX2ZpZWxkKF9fdTMyLCB2ZWN0 b3IpCisJCV9fZmllbGQoX191OCwgbnIpCisJCV9fZmllbGQoX191MzIsIGVycikKKwkJX19maWVs ZChfX3UxNiwgZXJyb3JfY29kZSkKKwkJX19maWVsZChfX3U2NCwgY3IyKQorCSksCisJVFBfZmFz dF9hc3NpZ24oCisJCV9fZW50cnktPnZjcHUgPSB2Y3B1OworCQlfX2VudHJ5LT52ZWN0b3IgPSB2 ZWN0b3I7CisJCV9fZW50cnktPm5yID0gbnI7CisJCV9fZW50cnktPmVyciA9IGVycjsKKwkJX19l bnRyeS0+ZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7CisJCV9fZW50cnktPmNyMiA9IGNyMjsKKwkp LAorCVRQX3ByaW50aygidmNwdSAlZCB2ZWN0b3IgJXgvJXggZXJyICV4LyV4IGFkZHJlc3MgJWxs eCIsCisJCSAgX19lbnRyeS0+dmNwdSwKKwkJICBfX2VudHJ5LT52ZWN0b3IsIF9fZW50cnktPm5y LAorCQkgIF9fZW50cnktPmVyciwgX19lbnRyeS0+ZXJyb3JfY29kZSwKKwkJICBfX2VudHJ5LT5j cjIKKwkpCispOworREVGSU5FX0VWRU5UKGt2bWlfZXZlbnRfcmVjdl90ZW1wbGF0ZSwga3ZtaV9l dmVudF90cmFwX3JlY3YsCisJVFBfUFJPVE8oX191MTYgdmNwdSwgX191MzIgYWN0aW9uKSwKKwlU UF9BUkdTKHZjcHUsIGFjdGlvbikKKyk7CisKK1RSQUNFX0VWRU5UKAorCWt2bWlfZXZlbnRfZGVz Y19zZW5kLAorCVRQX1BST1RPKF9fdTE2IHZjcHUsIF9fdTggZGVzY3JpcHRvciwgX191OCB3cml0 ZSksCisJVFBfQVJHUyh2Y3B1LCBkZXNjcmlwdG9yLCB3cml0ZSksCisJVFBfU1RSVUNUX19lbnRy eSgKKwkJX19maWVsZChfX3UxNiwgdmNwdSkKKwkJX19maWVsZChfX3U4LCBkZXNjcmlwdG9yKQor CQlfX2ZpZWxkKF9fdTgsIHdyaXRlKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnkt PnZjcHUgPSB2Y3B1OworCQlfX2VudHJ5LT5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsKKwkJX19l bnRyeS0+d3JpdGUgPSB3cml0ZTsKKwkpLAorCVRQX3ByaW50aygidmNwdSAlZCAlcyAlcyIsCisJ CSAgX19lbnRyeS0+dmNwdSwKKwkJICBfX2VudHJ5LT53cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIs CisJCSAgdHJhY2VfcHJpbnRfc3ltYm9sc19zZXEocCwgX19lbnRyeS0+ZGVzY3JpcHRvciwKKwkJ CQkJICBrdm1pX2Rlc2NyaXB0b3Jfc3ltYm9sKQorCSkKKyk7CitERUZJTkVfRVZFTlQoa3ZtaV9l dmVudF9yZWN2X3RlbXBsYXRlLCBrdm1pX2V2ZW50X2Rlc2NfcmVjdiwKKwlUUF9QUk9UTyhfX3Ux NiB2Y3B1LCBfX3UzMiBhY3Rpb24pLAorCVRQX0FSR1ModmNwdSwgYWN0aW9uKQorKTsKKworREVG SU5FX0VWRU5UKGt2bWlfZXZlbnRfc2VuZF90ZW1wbGF0ZSwga3ZtaV9ldmVudF9jcmVhdGVfdmNw dV9zZW5kLAorCVRQX1BST1RPKF9fdTE2IHZjcHUpLAorCVRQX0FSR1ModmNwdSkKKyk7CitERUZJ TkVfRVZFTlQoa3ZtaV9ldmVudF9yZWN2X3RlbXBsYXRlLCBrdm1pX2V2ZW50X2NyZWF0ZV92Y3B1 X3JlY3YsCisJVFBfUFJPVE8oX191MTYgdmNwdSwgX191MzIgYWN0aW9uKSwKKwlUUF9BUkdTKHZj cHUsIGFjdGlvbikKKyk7CisKK0RFRklORV9FVkVOVChrdm1pX2V2ZW50X3NlbmRfdGVtcGxhdGUs IGt2bWlfZXZlbnRfcGF1c2VfdmNwdV9zZW5kLAorCVRQX1BST1RPKF9fdTE2IHZjcHUpLAorCVRQ X0FSR1ModmNwdSkKKyk7CitERUZJTkVfRVZFTlQoa3ZtaV9ldmVudF9yZWN2X3RlbXBsYXRlLCBr dm1pX2V2ZW50X3BhdXNlX3ZjcHVfcmVjdiwKKwlUUF9QUk9UTyhfX3UxNiB2Y3B1LCBfX3UzMiBh Y3Rpb24pLAorCVRQX0FSR1ModmNwdSwgYWN0aW9uKQorKTsKKworREVGSU5FX0VWRU5UKGt2bWlf ZXZlbnRfc2VuZF90ZW1wbGF0ZSwga3ZtaV9ldmVudF9zaW5nbGVzdGVwX3NlbmQsCisJVFBfUFJP VE8oX191MTYgdmNwdSksCisJVFBfQVJHUyh2Y3B1KQorKTsKK0RFRklORV9FVkVOVChrdm1pX2V2 ZW50X3JlY3ZfdGVtcGxhdGUsIGt2bWlfZXZlbnRfc2luZ2xlc3RlcF9yZWN2LAorCVRQX1BST1RP KF9fdTE2IHZjcHUsIF9fdTMyIGFjdGlvbiksCisJVFBfQVJHUyh2Y3B1LCBhY3Rpb24pCispOwor CitUUkFDRV9FVkVOVCgKKwlrdm1pX3J1bl9zaW5nbGVzdGVwLAorCVRQX1BST1RPKHN0cnVjdCBr dm1fdmNwdSAqdmNwdSwgX191NjQgZ3BhLCBfX3U4IGFjY2VzcywgX191OCBsZXZlbCwKKwkJIHNp emVfdCBjdXN0b21fZGF0YSksCisJVFBfQVJHUyh2Y3B1LCBncGEsIGFjY2VzcywgbGV2ZWwsIGN1 c3RvbV9kYXRhKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKF9fdTE2LCB2Y3B1X2lk KQorCQlfX2ZpZWxkKF9fdTY0LCBncGEpCisJCV9fZmllbGQoX191OCwgYWNjZXNzKQorCQlfX2Zp ZWxkKHNpemVfdCwgbGVuKQorCQlfX2FycmF5KF9fdTgsIGluc24sIDE1KQorCQlfX2ZpZWxkKF9f dTgsIGxldmVsKQorCQlfX2ZpZWxkKHNpemVfdCwgY3VzdG9tX2RhdGEpCisJKSwKKwlUUF9mYXN0 X2Fzc2lnbigKKwkJX19lbnRyeS0+dmNwdV9pZCA9IHZjcHUtPnZjcHVfaWQ7CisJCV9fZW50cnkt PmdwYSA9IGdwYTsKKwkJX19lbnRyeS0+YWNjZXNzID0gYWNjZXNzOworCQlfX2VudHJ5LT5sZW4g PSBtaW5fdChzaXplX3QsIDE1LAorCQkJCSAgICAgdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZmV0 Y2gucHRyCisJCQkJICAgICAtIHZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmZldGNoLmRhdGEpOwor CQltZW1jcHkoX19lbnRyeS0+aW5zbiwgdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZmV0Y2guZGF0 YSwgMTUpOworCQlfX2VudHJ5LT5sZXZlbCA9IGxldmVsOworCQlfX2VudHJ5LT5jdXN0b21fZGF0 YSA9IGN1c3RvbV9kYXRhOworCSksCisJVFBfcHJpbnRrKCJ2Y3B1ICVkIGdwYSAlbGx4ICVzIGlu c24gJXMgbGV2ZWwgJXggY3VzdG9tICV6dSIsCisJCSAgX19lbnRyeS0+dmNwdV9pZCwKKwkJICBf X2VudHJ5LT5ncGEsCisJCSAgS1ZNSV9BQ0NFU1NfUFJJTlRLKCksCisJCSAgX19wcmludF9oZXgo X19lbnRyeS0+aW5zbiwgX19lbnRyeS0+bGVuKSwKKwkJICBfX2VudHJ5LT5sZXZlbCwKKwkJICBf X2VudHJ5LT5jdXN0b21fZGF0YQorCSkKKyk7CisKK1RSQUNFX0VWRU5UKAorCWt2bWlfc3RvcF9z aW5nbGVzdGVwLAorCVRQX1BST1RPKF9fdTE2IHZjcHUpLAorCVRQX0FSR1ModmNwdSksCisJVFBf U1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChfX3UxNiwgdmNwdSkKKwkpLAorCVRQX2Zhc3RfYXNz aWduKAorCQlfX2VudHJ5LT52Y3B1ID0gdmNwdTsKKwkpLAorCVRQX3ByaW50aygidmNwdSAlZCIs IF9fZW50cnktPnZjcHUKKwkpCispOworCitUUkFDRV9FVkVOVCgKKwlrdm1pX21lbV9tYXAsCisJ VFBfUFJPVE8oc3RydWN0IGt2bSAqa3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCBtYXBfZ3BhKSwK KwlUUF9BUkdTKGt2bSwgcmVxX2dwYSwgbWFwX2dwYSksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJ X19maWVsZF9zdHJ1Y3QodXVpZF90LCB1dWlkKQorCQlfX2ZpZWxkKGdwYV90LCByZXFfZ3BhKQor CQlfX2ZpZWxkKGdwYV90LCBtYXBfZ3BhKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCXN0cnVj dCBrdm1pICppa3ZtID0ga3ZtaV9nZXQoa3ZtKTsKKworCQlpZiAoaWt2bSkgeworCQkJbWVtY3B5 KCZfX2VudHJ5LT51dWlkLCAmaWt2bS0+dXVpZCwgc2l6ZW9mKHV1aWRfdCkpOworCQkJa3ZtaV9w dXQoa3ZtKTsKKwkJfSBlbHNlCisJCQltZW1zZXQoJl9fZW50cnktPnV1aWQsIDAsIHNpemVvZih1 dWlkX3QpKTsKKwkJX19lbnRyeS0+cmVxX2dwYSA9IHJlcV9ncGE7CisJCV9fZW50cnktPm1hcF9n cGEgPSBtYXBfZ3BhOworCSksCisJVFBfcHJpbnRrKCJ2bSAlcFUgcmVxX2dwYSAlbGx4IG1hcF9n cGEgJWxseCIsCisJCSZfX2VudHJ5LT51dWlkLAorCQlfX2VudHJ5LT5yZXFfZ3BhLAorCQlfX2Vu dHJ5LT5tYXBfZ3BhCisJKQorKTsKKworVFJBQ0VfRVZFTlQoCisJa3ZtaV9tZW1fdW5tYXAsCisJ VFBfUFJPVE8oZ3BhX3QgbWFwX2dwYSksCisJVFBfQVJHUyhtYXBfZ3BhKSwKKwlUUF9TVFJVQ1Rf X2VudHJ5KAorCQlfX2ZpZWxkKGdwYV90LCBtYXBfZ3BhKQorCSksCisJVFBfZmFzdF9hc3NpZ24o CisJCV9fZW50cnktPm1hcF9ncGEgPSBtYXBfZ3BhOworCSksCisJVFBfcHJpbnRrKCJtYXBfZ3Bh ICVsbHgiLAorCQlfX2VudHJ5LT5tYXBfZ3BhCisJKQorKTsKKworI2RlZmluZSBFWFMoeCkgeyB4 IyNfVkVDVE9SLCAiIyIgI3ggfQorCisjZGVmaW5lIGt2bV90cmFjZV9zeW1fZXhjCQkJCQkJXAor CUVYUyhERSksIEVYUyhEQiksIEVYUyhCUCksIEVYUyhPRiksIEVYUyhCUiksIEVYUyhVRCksIEVY UyhOTSksCVwKKwlFWFMoREYpLCBFWFMoVFMpLCBFWFMoTlApLCBFWFMoU1MpLCBFWFMoR1ApLCBF WFMoUEYpLAkJXAorCUVYUyhNRiksIEVYUyhBQyksIEVYUyhNQykKKworVFJBQ0VfRVZFTlQoCisJ a3ZtaV9jbWRfaW5qZWN0X2V4Y2VwdGlvbiwKKwlUUF9QUk9UTyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZj cHUsIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpmYXVsdCksCisJVFBfQVJHUyh2Y3B1LCBmYXVsdCks CisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChfX3UxNiwgdmNwdV9pZCkKKwkJX19maWVs ZChfX3U4LCB2ZWN0b3IpCisJCV9fZmllbGQoX191NjQsIGFkZHJlc3MpCisJCV9fZmllbGQoX191 MTYsIGVycm9yX2NvZGUpCisJCV9fZmllbGQoYm9vbCwgZXJyb3JfY29kZV92YWxpZCkKKwkpLAor CVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT52Y3B1X2lkID0gdmNwdS0+dmNwdV9pZDsKKwkJ X19lbnRyeS0+dmVjdG9yID0gZmF1bHQtPnZlY3RvcjsKKwkJX19lbnRyeS0+YWRkcmVzcyA9IGZh dWx0LT5hZGRyZXNzOworCQlfX2VudHJ5LT5lcnJvcl9jb2RlID0gZmF1bHQtPmVycm9yX2NvZGU7 CisJCV9fZW50cnktPmVycm9yX2NvZGVfdmFsaWQgPSBmYXVsdC0+ZXJyb3JfY29kZV92YWxpZDsK KwkpLAorCVRQX3ByaW50aygidmNwdSAlZCAlcyBhZGRyZXNzICVsbHggZXJyb3IgJXgiLAorCQkg IF9fZW50cnktPnZjcHVfaWQsCisJCSAgX19wcmludF9zeW1ib2xpYyhfX2VudHJ5LT52ZWN0b3Is IGt2bV90cmFjZV9zeW1fZXhjKSwKKwkJICBfX2VudHJ5LT52ZWN0b3IgPT0gUEZfVkVDVE9SID8g X19lbnRyeS0+YWRkcmVzcyA6IDAsCisJCSAgX19lbnRyeS0+ZXJyb3JfY29kZV92YWxpZCA/IF9f ZW50cnktPmVycm9yX2NvZGUgOiAwCisJKQorKTsKKworI2VuZGlmIC8qIF9UUkFDRV9LVk1JX0gg Ki8KKworI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvdmlydC9r dm0va3ZtaS5jIGIvdmlydC9rdm0va3ZtaS5jCmluZGV4IDE1N2YzYTQwMWQ2NC4uY2UyOGNhOGM4 ZDc3IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1pLmMKKysrIGIvdmlydC9rdm0va3ZtaS5jCkBA IC0xMiw2ICsxMiw5IEBACiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGlu dXgvcmVtb3RlX21hcHBpbmcuaD4KIAorI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCisjaW5j bHVkZSA8dHJhY2UvZXZlbnRzL2t2bWkuaD4KKwogI2RlZmluZSBNQVhfUEFVU0VfUkVRVUVTVFMg MTAwMQogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1zZ19jYWNoZTsKQEAgLTEyODQsNiAr MTI4Nyw4IEBAIHN0YXRpYyB2b2lkIF9fa3ZtaV9zaW5nbGVzdGVwX2V2ZW50KHN0cnVjdCBrdm1f dmNwdSAqdmNwdSkKIHsKIAl1MzIgYWN0aW9uOwogCisJdHJhY2Vfa3ZtaV9ldmVudF9zaW5nbGVz dGVwX3NlbmQodmNwdS0+dmNwdV9pZCk7CisKIAlhY3Rpb24gPSBrdm1pX3NlbmRfc2luZ2xlc3Rl cCh2Y3B1KTsKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgS1ZNSV9FVkVOVF9BQ1RJT05fQ09O VElOVUU6CkBAIC0xMjkxLDYgKzEyOTYsOCBAQCBzdGF0aWMgdm9pZCBfX2t2bWlfc2luZ2xlc3Rl cF9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJZGVmYXVsdDoKIAkJa3ZtaV9oYW5kbGVf Y29tbW9uX2V2ZW50X2FjdGlvbnModmNwdSwgYWN0aW9uLCAiU0lOR0xFU1RFUCIpOwogCX0KKwor CXRyYWNlX2t2bWlfZXZlbnRfc2luZ2xlc3RlcF9yZWN2KHZjcHUtPnZjcHVfaWQsIGFjdGlvbik7 CiB9CiAKIHN0YXRpYyB2b2lkIGt2bWlfc2luZ2xlc3RlcF9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUg KnZjcHUpCkBAIC0xMzExLDYgKzEzMTgsOCBAQCBzdGF0aWMgYm9vbCBfX2t2bWlfY3JlYXRlX3Zj cHVfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXUzMiBhY3Rpb247CiAJYm9vbCByZXQg PSBmYWxzZTsKIAorCXRyYWNlX2t2bWlfZXZlbnRfY3JlYXRlX3ZjcHVfc2VuZCh2Y3B1LT52Y3B1 X2lkKTsKKwogCWFjdGlvbiA9IGt2bWlfbXNnX3NlbmRfY3JlYXRlX3ZjcHUodmNwdSk7CiAJc3dp dGNoIChhY3Rpb24pIHsKIAljYXNlIEtWTUlfRVZFTlRfQUNUSU9OX0NPTlRJTlVFOgpAQCAtMTMy MCw2ICsxMzI5LDggQEAgc3RhdGljIGJvb2wgX19rdm1pX2NyZWF0ZV92Y3B1X2V2ZW50KHN0cnVj dCBrdm1fdmNwdSAqdmNwdSkKIAkJa3ZtaV9oYW5kbGVfY29tbW9uX2V2ZW50X2FjdGlvbnModmNw dSwgYWN0aW9uLCAiQ1JFQVRFIik7CiAJfQogCisJdHJhY2Vfa3ZtaV9ldmVudF9jcmVhdGVfdmNw dV9yZWN2KHZjcHUtPnZjcHVfaWQsIGFjdGlvbik7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0x MzQ1LDYgKzEzNTYsOCBAQCBzdGF0aWMgYm9vbCBfX2t2bWlfcGF1c2VfdmNwdV9ldmVudChzdHJ1 Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJdTMyIGFjdGlvbjsKIAlib29sIHJldCA9IGZhbHNlOwogCisJ dHJhY2Vfa3ZtaV9ldmVudF9wYXVzZV92Y3B1X3NlbmQodmNwdS0+dmNwdV9pZCk7CisKIAlhY3Rp b24gPSBrdm1pX21zZ19zZW5kX3BhdXNlX3ZjcHUodmNwdSk7CiAJc3dpdGNoIChhY3Rpb24pIHsK IAljYXNlIEtWTUlfRVZFTlRfQUNUSU9OX0NPTlRJTlVFOgpAQCAtMTM1NCw2ICsxMzY3LDggQEAg c3RhdGljIGJvb2wgX19rdm1pX3BhdXNlX3ZjcHVfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1 KQogCQlrdm1pX2hhbmRsZV9jb21tb25fZXZlbnRfYWN0aW9ucyh2Y3B1LCBhY3Rpb24sICJQQVVT RSIpOwogCX0KIAorCXRyYWNlX2t2bWlfZXZlbnRfcGF1c2VfdmNwdV9yZWN2KHZjcHUtPnZjcHVf aWQsIGFjdGlvbik7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xODU3LDYgKzE4NzIsOCBAQCB2 b2lkIGt2bWlfc3RvcF9zcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAlpdmNwdS0+c3Nfb3du ZXIgPSBmYWxzZTsKIAorCXRyYWNlX2t2bWlfc3RvcF9zaW5nbGVzdGVwKHZjcHUtPnZjcHVfaWQp OworCiAJa3ZtaV9zaW5nbGVzdGVwX2V2ZW50KHZjcHUpOwogCiBvdXQ6CkBAIC0xODkyLDYgKzE5 MDksOSBAQCBzdGF0aWMgYm9vbCBrdm1pX3J1bl9zcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdw YV90IGdwYSwgdTggYWNjZXNzKQogCWdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTsKIAlpbnQg ZXJyOwogCisJdHJhY2Vfa3ZtaV9ydW5fc2luZ2xlc3RlcCh2Y3B1LCBncGEsIGFjY2VzcywgaWt2 bS0+c3NfbGV2ZWwsCisJCQkJICBJVkNQVSh2Y3B1KS0+Y3R4X3NpemUpOworCiAJa3ZtaV9hcmNo X3N0YXJ0X3NpbmdsZV9zdGVwKHZjcHUpOwogCiAJZXJyID0gd3JpdGVfY3VzdG9tX2RhdGEodmNw dSk7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1pX21lbS5jIGIvdmlydC9rdm0va3ZtaV9tZW0u YwppbmRleCA2MjQ0YWRkNjAwNjIuLmE3YTAxNjQ2ZWE1YyAxMDA2NDQKLS0tIGEvdmlydC9rdm0v a3ZtaV9tZW0uYworKysgYi92aXJ0L2t2bS9rdm1pX21lbS5jCkBAIC0yMyw2ICsyMyw3IEBACiAj aW5jbHVkZSA8bGludXgvcmVtb3RlX21hcHBpbmcuaD4KIAogI2luY2x1ZGUgPHVhcGkvbGludXgv a3ZtaS5oPgorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9rdm1pLmg+CiAKICNpbmNsdWRlICJrdm1p X2ludC5oIgogCkBAIC0yMjEsNiArMjIyLDggQEAgaW50IGt2bWlfaG9zdF9tZW1fbWFwKHN0cnVj dCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgdGtuX2d2YSwKIAl9CiAJcmVxX21tID0gdGFyZ2V0X2t2 bS0+bW07CiAKKwl0cmFjZV9rdm1pX21lbV9tYXAodGFyZ2V0X2t2bSwgcmVxX2dwYSwgbWFwX2dw YSk7CisKIAkvKiB0cmFuc2xhdGUgc291cmNlIGFkZHJlc3NlcyAqLwogCXJlcV9nZm4gPSBncGFf dG9fZ2ZuKHJlcV9ncGEpOwogCXJlcV9odmEgPSBnZm5fdG9faHZhX3NhZmUodGFyZ2V0X2t2bSwg cmVxX2dmbik7CkBAIC0yNzQsNiArMjc3LDggQEAgaW50IGt2bWlfaG9zdF9tZW1fdW5tYXAoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBtYXBfZ3BhKQogCiAJa3ZtX2RlYnVnKCJrdm1pOiB1 bm1hcHBpbmcgcmVxdWVzdCBmb3IgbWFwX2dwYSAlMDE2bGx4XG4iLCBtYXBfZ3BhKTsKIAorCXRy YWNlX2t2bWlfbWVtX3VubWFwKG1hcF9ncGEpOworCiAJLyogY29udmVydCBHUEEgLT4gSFZBICov CiAJbWFwX2dmbiA9IGdwYV90b19nZm4obWFwX2dwYSk7CiAJbWFwX2h2YSA9IGdmbl90b19odmFf c2FmZSh2Y3B1LT5rdm0sIG1hcF9nZm4pOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtaV9tc2cu YyBiL3ZpcnQva3ZtL2t2bWlfbXNnLmMKaW5kZXggYTVmODdhYWZhMjM3Li5iZGIxZTYwOTA2Zjkg MTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bWlfbXNnLmMKKysrIGIvdmlydC9rdm0va3ZtaV9tc2cu YwpAQCAtOCw2ICs4LDggQEAKICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlICJrdm1p X2ludC5oIgogCisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2t2bWkuaD4KKwogdHlwZWRlZiBpbnQg KCp2Y3B1X3JlcGx5X2ZjdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJICAgICAgY29uc3Qg c3RydWN0IGt2bWlfbXNnX2hkciAqbXNnLCBpbnQgZXJyLAogCQkJICAgICAgY29uc3Qgdm9pZCAq cnBsLCBzaXplX3QgcnBsX3NpemUpOwpAQCAtMTY1LDYgKzE2Nyw4IEBAIHN0YXRpYyBpbnQga3Zt aV9tc2dfdm1fcmVwbHkoc3RydWN0IGt2bWkgKmlrdm0sCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBr dm1pX21zZ19oZHIgKm1zZywgaW50IGVyciwKIAkJCSAgICAgY29uc3Qgdm9pZCAqcnBsLCBzaXpl X3QgcnBsX3NpemUpCiB7CisJdHJhY2Vfa3ZtaV92bV9yZXBseShtc2ctPmlkLCBtc2ctPnNlcSwg ZXJyKTsKKwogCXJldHVybiBrdm1pX21zZ19yZXBseShpa3ZtLCBtc2csIGVyciwgcnBsLCBycGxf c2l6ZSk7CiB9CiAKQEAgLTIwMiw2ICsyMDYsOCBAQCBpbnQga3ZtaV9tc2dfdmNwdV9yZXBseShz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQljb25zdCBzdHJ1Y3Qga3ZtaV9tc2dfaGRyICptc2cs IGludCBlcnIsCiAJCQljb25zdCB2b2lkICpycGwsIHNpemVfdCBycGxfc2l6ZSkKIHsKKwl0cmFj ZV9rdm1pX3ZjcHVfcmVwbHkodmNwdS0+dmNwdV9pZCwgbXNnLT5pZCwgbXNnLT5zZXEsIGVycik7 CisKIAlyZXR1cm4ga3ZtaV9tc2dfcmVwbHkoSUtWTSh2Y3B1LT5rdm0pLCBtc2csIGVyciwgcnBs LCBycGxfc2l6ZSk7CiB9CiAKQEAgLTU1OSw2ICs1NjUsOCBAQCBzdGF0aWMgaW50IGhhbmRsZV9l dmVudF9yZXBseShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJc3RydWN0IGt2bWlfdmNwdV9yZXBs eSAqZXhwZWN0ZWQgPSAmaXZjcHUtPnJlcGx5OwogCXNpemVfdCB1c2VmdWwsIHJlY2VpdmVkLCBj b21tb247CiAKKwl0cmFjZV9rdm1pX2V2ZW50X3JlcGx5KHJlcGx5LT5ldmVudCwgbXNnLT5zZXEp OworCiAJaWYgKHVubGlrZWx5KG1zZy0+c2VxICE9IGV4cGVjdGVkLT5zZXEpKQogCQlnb3RvIG91 dDsKIApAQCAtODgzLDYgKzg5MSw4IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtaV9tc2dfaGRyICprdm1p X21zZ19yZWN2KHN0cnVjdCBrdm1pICppa3ZtLCBib29sICp1bnN1cHBvcnRlZCkKIHN0YXRpYyBp bnQga3ZtaV9tc2dfZGlzcGF0Y2hfdm1fY21kKHN0cnVjdCBrdm1pICppa3ZtLAogCQkJCSAgICBj b25zdCBzdHJ1Y3Qga3ZtaV9tc2dfaGRyICptc2cpCiB7CisJdHJhY2Vfa3ZtaV92bV9jb21tYW5k KG1zZy0+aWQsIG1zZy0+c2VxKTsKKwogCXJldHVybiBtc2dfdm1bbXNnLT5pZF0oaWt2bSwgbXNn LCBtc2cgKyAxKTsKIH0KIApAQCAtODk1LDYgKzkwNSw4IEBAIHN0YXRpYyBpbnQga3ZtaV9tc2df ZGlzcGF0Y2hfdmNwdV9qb2Ioc3RydWN0IGt2bWkgKmlrdm0sCiAJc3RydWN0IGt2bV92Y3B1ICp2 Y3B1ID0gTlVMTDsKIAlpbnQgZXJyOwogCisJdHJhY2Vfa3ZtaV92Y3B1X2NvbW1hbmQoY21kLT52 Y3B1LCBoZHItPmlkLCBoZHItPnNlcSk7CisKIAlpZiAoaW52YWxpZF92Y3B1X2hkcihjbWQpKQog CQlyZXR1cm4gLUtWTV9FSU5WQUw7CiAKQEAgLTEwNTEsNiArMTA2Myw4IEBAIGludCBrdm1pX3Nl bmRfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgZXZfaWQsCiAJaXZjcHUtPnJlcGx5 LnNpemUgPSBycGxfc2l6ZTsKIAlpdmNwdS0+cmVwbHkuZXJyb3IgPSAtRUlOVFI7CiAKKwl0cmFj ZV9rdm1pX2V2ZW50KHZjcHUtPnZjcHVfaWQsIGNvbW1vbi5ldmVudCwgaGRyLnNlcSk7CisKIAll cnIgPSBrdm1pX3NvY2tfd3JpdGUoaWt2bSwgdmVjLCBuLCBtc2dfc2l6ZSk7CiAJaWYgKGVycikK IAkJZ290byBvdXQ7CkBAIC0xMDkxLDYgKzExMDUsOCBAQCBpbnQga3ZtaV9tc2dfc2VuZF91bmhv b2soc3RydWN0IGt2bWkgKmlrdm0pCiAKIAlrdm1pX3NldHVwX2V2ZW50X2NvbW1vbigmY29tbW9u LCBLVk1JX0VWRU5UX1VOSE9PSywgMCk7CiAKKwl0cmFjZV9rdm1pX2V2ZW50KDAsIGNvbW1vbi5l dmVudCwgaGRyLnNlcSk7CisKIAlyZXR1cm4ga3ZtaV9zb2NrX3dyaXRlKGlrdm0sIHZlYywgbiwg bXNnX3NpemUpOwogfQogCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5s aW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFp bG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==