From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH for-next v3 01/22] x86/traps: move privilege instruction emulation code Date: Thu, 18 May 2017 18:09:43 +0100 Message-ID: <20170518171004.27204-2-wei.liu2@citrix.com> References: <20170518171004.27204-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.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dBOwG-0002mD-Fu for xen-devel@lists.xenproject.org; Thu, 18 May 2017 17:10:13 +0000 In-Reply-To: <20170518171004.27204-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 TW92ZSByZWxldmFudCBjb2RlIHRvIHB2L2VtdWxhdGUuYy4gRXhwb3J0IGVtdWxhdGVfcHJpdmls ZWdlZF9vcCBpbgpwdi90cmFwcy5oLgoKTm90ZSB0aGF0IHJlYWRfZGVzY3JpcHRvciBpcyBkdXBs aWNhdGVkIGluIGVtdWxhdGUuYy4gVGhlIGR1cGxpY2F0aW9uCndpbGwgYmUgZ29uZSBvbmNlIGFs bCBlbXVsYXRpb24gY29kZSBpcyBtb3ZlZC4KCk5vIGZ1bmN0aW9uYWwgY2hhbmdlLgoKU2lnbmVk LW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB4ZW4vYXJjaC94ODYv cHYvTWFrZWZpbGUgICAgICAgfCAgICAxICsKIHhlbi9hcmNoL3g4Ni9wdi9lbXVsYXRlLmMgICAg ICB8IDE0NzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogeGVuL2Fy Y2gveDg2L3RyYXBzLmMgICAgICAgICAgIHwgMTM1OCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiB4ZW4vaW5jbHVkZS9hc20teDg2L3B2L3RyYXBzLmggfCAgIDQ4ICsrCiA0 IGZpbGVzIGNoYW5nZWQsIDE1MjEgaW5zZXJ0aW9ucygrKSwgMTM1NiBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC94ODYvcHYvZW11bGF0ZS5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgeGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi90cmFwcy5oCgpkaWZmIC0tZ2l0IGEveGVuL2Fy Y2gveDg2L3B2L01ha2VmaWxlIGIveGVuL2FyY2gveDg2L3B2L01ha2VmaWxlCmluZGV4IDQ4OWE5 ZjU5Y2IuLjU2NDIwMmNiYjcgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9wdi9NYWtlZmlsZQor KysgYi94ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUKQEAgLTMsMyArMyw0IEBAIG9iai15ICs9IHRy YXBzLm8KIAogb2JqLWJpbi15ICs9IGRvbTBfYnVpbGQuaW5pdC5vCiBvYmoteSArPSBkb21haW4u bworb2JqLXkgKz0gZW11bGF0ZS5vCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvZW11bGF0 ZS5jIGIveGVuL2FyY2gveDg2L3B2L2VtdWxhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi5mYjBkMDY2YTNiCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2FyY2gveDg2 L3B2L2VtdWxhdGUuYwpAQCAtMCwwICsxLDE0NzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK KyAqIGFyY2gveDg2L3B2L2VtdWxhdGUuYworICoKKyAqIFBWIGVtdWxhdGlvbiBjb2RlCisgKgor ICogTW9kaWZpY2F0aW9ucyB0byBMaW51eCBvcmlnaW5hbCBhcmUgY29weXJpZ2h0IChjKSAyMDAy LTIwMDQsIEsgQSBGcmFzZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAq IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp Y2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8K KworI2luY2x1ZGUgPHhlbi9lcnJuby5oPgorI2luY2x1ZGUgPHhlbi9ldmVudC5oPgorI2luY2x1 ZGUgPHhlbi9ndWVzdF9hY2Nlc3MuaD4KKyNpbmNsdWRlIDx4ZW4vaW9jYXAuaD4KKyNpbmNsdWRl IDx4ZW4vc3BpbmxvY2suaD4KKyNpbmNsdWRlIDx4ZW4vdHJhY2UuaD4KKworI2luY2x1ZGUgPGFz bS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2RlYnVncmVnLmg+CisjaW5jbHVkZSA8YXNtL2hwZXQu aD4KKyNpbmNsdWRlIDxhc20vaHlwZXJjYWxsLmg+CisjaW5jbHVkZSA8YXNtL21jMTQ2ODE4cnRj Lmg+CisjaW5jbHVkZSA8YXNtL3AybS5oPgorI2luY2x1ZGUgPGFzbS9wdi90cmFwcy5oPgorI2lu Y2x1ZGUgPGFzbS9zaGFyZWQuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxh c20veDg2X2VtdWxhdGUuaD4KKworI2luY2x1ZGUgPHhzbS94c20uaD4KKworI2luY2x1ZGUgIi4u L3g4Nl82NC9tbWNvbmZpZy5oIgorCisvKioqKioqKioqKioqKioqKioqCisgKiBIZWxwZXIgZnVu Y3Rpb25zCisgKi8KKworc3RhdGljIGludCByZWFkX2Rlc2NyaXB0b3IodW5zaWduZWQgaW50IHNl bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2Y3B1ICp2LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqYmFzZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmxpbWl0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50ICphciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv b2xfdCBpbnNuX2ZldGNoKQoreworICAgIHN0cnVjdCBkZXNjX3N0cnVjdCBkZXNjOworCisgICAg aWYgKCBzZWwgPCA0KQorICAgICAgICBkZXNjLmIgPSBkZXNjLmEgPSAwOworICAgIGVsc2UgaWYg KCBfX2dldF91c2VyKGRlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVj dCBkZXNjX3N0cnVjdCAqKSghKHNlbCAmIDQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA/IEdEVF9WSVJUX1NUQVJUKHYpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IExEVF9WSVJUX1NU QVJUKHYpKQorICAgICAgICAgICAgICAgICAgICAgICAgICsgKHNlbCA+PiAzKSkgKQorICAgICAg ICByZXR1cm4gMDsKKyAgICBpZiAoICFpbnNuX2ZldGNoICkKKyAgICAgICAgZGVzYy5iICY9IH5f U0VHTUVOVF9MOworCisgICAgKmFyID0gZGVzYy5iICYgMHgwMGYwZmYwMDsKKyAgICBpZiAoICEo ZGVzYy5iICYgX1NFR01FTlRfTCkgKQorICAgIHsKKyAgICAgICAgKmJhc2UgPSAoKGRlc2MuYSA+ PiAxNikgKyAoKGRlc2MuYiAmIDB4ZmYpIDw8IDE2KSArCisgICAgICAgICAgICAgICAgIChkZXNj LmIgJiAweGZmMDAwMDAwKSk7CisgICAgICAgICpsaW1pdCA9IChkZXNjLmEgJiAweGZmZmYpIHwg KGRlc2MuYiAmIDB4MDAwZjAwMDApOworICAgICAgICBpZiAoIGRlc2MuYiAmIF9TRUdNRU5UX0cg KQorICAgICAgICAgICAgKmxpbWl0ID0gKCgqbGltaXQgKyAxKSA8PCAxMikgLSAxOworI2lmbmRl ZiBOREVCVUcKKyAgICAgICAgaWYgKCBzZWwgPiAzICkKKyAgICAgICAgeworICAgICAgICAgICAg dW5zaWduZWQgaW50IGEsIGw7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHZhbGlkOworCisg ICAgICAgICAgICBhc20gdm9sYXRpbGUgKAorICAgICAgICAgICAgICAgICJsYXJsICUyLCUwIDsg c2V0eiAlMSIKKyAgICAgICAgICAgICAgICA6ICI9ciIgKGEpLCAiPXFtIiAodmFsaWQpIDogInJt IiAoc2VsKSk7CisgICAgICAgICAgICBCVUdfT04odmFsaWQgJiYgKChhICYgMHgwMGYwZmYwMCkg IT0gKmFyKSk7CisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKAorICAgICAgICAgICAgICAgICJs c2xsICUyLCUwIDsgc2V0eiAlMSIKKyAgICAgICAgICAgICAgICA6ICI9ciIgKGwpLCAiPXFtIiAo dmFsaWQpIDogInJtIiAoc2VsKSk7CisgICAgICAgICAgICBCVUdfT04odmFsaWQgJiYgKGwgIT0g KmxpbWl0KSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg ICAgICAqYmFzZSA9IDBVTDsKKyAgICAgICAgKmxpbWl0ID0gfjBVTDsKKyAgICB9CisKKyAgICBy ZXR1cm4gMTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqCisgKiBJL08gZW11bGF0aW9u IHN1cHBvcnQKKyAqLworCitzdHJ1Y3QgcHJpdl9vcF9jdHh0IHsKKyAgICBzdHJ1Y3QgeDg2X2Vt dWxhdGVfY3R4dCBjdHh0OworICAgIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYmFz ZSwgbGltaXQ7CisgICAgfSBjczsKKyAgICBjaGFyICppb19lbXVsX3N0dWI7CisgICAgdW5zaWdu ZWQgaW50IGJwbWF0Y2g7CisgICAgdW5zaWduZWQgaW50IHRzYzsKKyNkZWZpbmUgVFNDX0JBU0Ug MQorI2RlZmluZSBUU0NfQVVYIDIKK307CisKKy8qIEkvTyBlbXVsYXRpb24gc3VwcG9ydC4gSGVs cGVyIHJvdXRpbmVzIGZvciwgYW5kIHR5cGUgb2YsIHRoZSBzdGFjayBzdHViLiovCit2b2lkIGhv c3RfdG9fZ3Vlc3RfZ3ByX3N3aXRjaChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqKTsKK3Vuc2lnbmVk IGxvbmcgZ3Vlc3RfdG9faG9zdF9ncHJfc3dpdGNoKHVuc2lnbmVkIGxvbmcpOworCit2b2lkICgq cHZfcG9zdF9vdXRiX2hvb2spKHVuc2lnbmVkIGludCBwb3J0LCB1OCB2YWx1ZSk7CisKK3R5cGVk ZWYgdm9pZCBpb19lbXVsX3N0dWJfdChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqKTsKKworc3RhdGlj IGlvX2VtdWxfc3R1Yl90ICppb19lbXVsX3N0dWJfc2V0dXAoc3RydWN0IHByaXZfb3BfY3R4dCAq Y3R4dCwgdTggb3Bjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcykKK3sKKyAgICBpZiAoICFj dHh0LT5pb19lbXVsX3N0dWIgKQorICAgICAgICBjdHh0LT5pb19lbXVsX3N0dWIgPSBtYXBfZG9t YWluX3BhZ2UoX21mbih0aGlzX2NwdShzdHVicy5tZm4pKSkgKworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXNfY3B1KHN0dWJzLmFkZHIpICYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+UEFHRV9NQVNLKSArCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFVCX0JVRl9TSVpF IC8gMjsKKworICAgIC8qIG1vdnEgJGhvc3RfdG9fZ3Vlc3RfZ3ByX3N3aXRjaCwlcmN4ICovCisg ICAgY3R4dC0+aW9fZW11bF9zdHViWzBdID0gMHg0ODsKKyAgICBjdHh0LT5pb19lbXVsX3N0dWJb MV0gPSAweGI5OworICAgICoodm9pZCAqKikmY3R4dC0+aW9fZW11bF9zdHViWzJdID0gKHZvaWQg Kilob3N0X3RvX2d1ZXN0X2dwcl9zd2l0Y2g7CisgICAgLyogY2FsbHEgKiVyY3ggKi8KKyAgICBj dHh0LT5pb19lbXVsX3N0dWJbMTBdID0gMHhmZjsKKyAgICBjdHh0LT5pb19lbXVsX3N0dWJbMTFd ID0gMHhkMTsKKyAgICAvKiBkYXRhMTYgb3Igbm9wICovCisgICAgY3R4dC0+aW9fZW11bF9zdHVi WzEyXSA9IChieXRlcyAhPSAyKSA/IDB4OTAgOiAweDY2OworICAgIC8qIDxpby1hY2Nlc3Mgb3Bj b2RlPiAqLworICAgIGN0eHQtPmlvX2VtdWxfc3R1YlsxM10gPSBvcGNvZGU7CisgICAgLyogaW1t OCBvciBub3AgKi8KKyAgICBjdHh0LT5pb19lbXVsX3N0dWJbMTRdID0gIShvcGNvZGUgJiA4KSA/ IHBvcnQgOiAweDkwOworICAgIC8qIHJldCAoanVtcHMgdG8gZ3Vlc3RfdG9faG9zdF9ncHJfc3dp dGNoKSAqLworICAgIGN0eHQtPmlvX2VtdWxfc3R1YlsxNV0gPSAweGMzOworICAgIEJVSUxEX0JV R19PTihTVFVCX0JVRl9TSVpFIC8gMiA8IDE2KTsKKworICAgIGlmICggaW9lbXVsX2hhbmRsZV9x dWlyayApCisgICAgICAgIGlvZW11bF9oYW5kbGVfcXVpcmsob3Bjb2RlLCAmY3R4dC0+aW9fZW11 bF9zdHViWzEyXSwgY3R4dC0+Y3R4dC5yZWdzKTsKKworICAgIC8qIEhhbmR5IGZ1bmN0aW9uLXR5 cGVkIHBvaW50ZXIgdG8gdGhlIHN0dWIuICovCisgICAgcmV0dXJuICh2b2lkICopKHRoaXNfY3B1 KHN0dWJzLmFkZHIpICsgU1RVQl9CVUZfU0laRSAvIDIpOworfQorCisKKy8qIFBlcmZvcm0gSU9Q TCBjaGVjayBiZXR3ZWVuIHRoZSB2Y3B1J3Mgc2hhZG93ZWQgSU9QTCwgYW5kIHRoZSBhc3N1bWVk IGNwbC4gKi8KK3N0YXRpYyBib29sX3QgaW9wbF9vayhjb25zdCBzdHJ1Y3QgdmNwdSAqdiwgY29u c3Qgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCit7CisgICAgdW5zaWduZWQgaW50IGNwbCA9 IGd1ZXN0X2tlcm5lbF9tb2RlKHYsIHJlZ3MpID8KKyAgICAgICAgKFZNX0FTU0lTVCh2LT5kb21h aW4sIGFyY2hpdGVjdHVyYWxfaW9wbCkgPyAwIDogMSkgOiAzOworCisgICAgQVNTRVJUKCh2LT5h cmNoLnB2X3ZjcHUuaW9wbCAmIH5YODZfRUZMQUdTX0lPUEwpID09IDApOworCisgICAgcmV0dXJu IElPUEwoY3BsKSA8PSB2LT5hcmNoLnB2X3ZjcHUuaW9wbDsKK30KKworLyogSGFzIHRoZSBndWVz dCByZXF1ZXN0ZWQgc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciB0aGlzIEkvTyBhY2Nlc3M/ICov CitzdGF0aWMgaW50IGd1ZXN0X2lvX29rYXkoCisgICAgdW5zaWduZWQgaW50IHBvcnQsIHVuc2ln bmVkIGludCBieXRlcywKKyAgICBzdHJ1Y3QgdmNwdSAqdiwgc3RydWN0IGNwdV91c2VyX3JlZ3Mg KnJlZ3MpCit7CisgICAgLyogSWYgaW4gdXNlciBtb2RlLCBzd2l0Y2ggdG8ga2VybmVsIG1vZGUg anVzdCB0byByZWFkIEkvTyBiaXRtYXAuICovCisgICAgaW50IHVzZXJfbW9kZSA9ICEodi0+YXJj aC5mbGFncyAmIFRGX2tlcm5lbF9tb2RlKTsKKyNkZWZpbmUgVE9HR0xFX01PREUoKSBpZiAoIHVz ZXJfbW9kZSApIHRvZ2dsZV9ndWVzdF9tb2RlKHYpCisKKyAgICBpZiAoIGlvcGxfb2sodiwgcmVn cykgKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGlmICggdi0+YXJjaC5wdl92Y3B1LmlvYm1w X2xpbWl0ID4gKHBvcnQgKyBieXRlcykgKQorICAgIHsKKyAgICAgICAgdW5pb24geyB1aW50OF90 IGJ5dGVzWzJdOyB1aW50MTZfdCBtYXNrOyB9IHg7CisKKyAgICAgICAgLyoKKyAgICAgICAgICog R3JhYiBwZXJtaXNzaW9uIGJ5dGVzIGZyb20gZ3Vlc3Qgc3BhY2UuIEluYWNjZXNzaWJsZSBieXRl cyBhcmUKKyAgICAgICAgICogcmVhZCBhcyAweGZmIChubyBhY2Nlc3MgYWxsb3dlZCkuCisgICAg ICAgICAqLworICAgICAgICBUT0dHTEVfTU9ERSgpOworICAgICAgICBzd2l0Y2ggKCBfX2NvcHlf ZnJvbV9ndWVzdF9vZmZzZXQoeC5ieXRlcywgdi0+YXJjaC5wdl92Y3B1LmlvYm1wLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydD4+MywgMikgKQorICAgICAg ICB7CisgICAgICAgIGRlZmF1bHQ6IHguYnl0ZXNbMF0gPSB+MDsKKyAgICAgICAgICAgIC8qIGZh bGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgMTogIHguYnl0ZXNbMV0gPSB+MDsKKyAgICAgICAg ICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgMDogIGJyZWFrOworICAgICAgICB9 CisgICAgICAgIFRPR0dMRV9NT0RFKCk7CisKKyAgICAgICAgaWYgKCAoeC5tYXNrICYgKCgoMTw8 Ynl0ZXMpLTEpIDw8IChwb3J0JjcpKSkgPT0gMCApCisgICAgICAgICAgICByZXR1cm4gMTsKKyAg ICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyogSGFzIHRoZSBhZG1pbmlzdHJhdG9yIGdyYW50 ZWQgc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciB0aGlzIEkvTyBhY2Nlc3M/ICovCitzdGF0aWMg Ym9vbF90IGFkbWluX2lvX29rYXkodW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRl cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZG9tYWluICpkKQor eworICAgIC8qCisgICAgICogUG9ydCAweGNmOCAoQ09ORklHX0FERFJFU1MpIGlzIG9ubHkgdmlz aWJsZSBmb3IgRFdPUkQgYWNjZXNzZXMuCisgICAgICogV2UgbmV2ZXIgcGVybWl0IGRpcmVjdCBh Y2Nlc3MgdG8gdGhhdCByZWdpc3Rlci4KKyAgICAgKi8KKyAgICBpZiAoIChwb3J0ID09IDB4Y2Y4 KSAmJiAoYnl0ZXMgPT0gNCkgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIFdlIGFsc28g bmV2ZXIgcGVybWl0IGRpcmVjdCBhY2Nlc3MgdG8gdGhlIFJUQy9DTU9TIHJlZ2lzdGVycy4gKi8K KyAgICBpZiAoICgocG9ydCAmIH4xKSA9PSBSVENfUE9SVCgwKSkgKQorICAgICAgICByZXR1cm4g MDsKKworICAgIHJldHVybiBpb3BvcnRzX2FjY2Vzc19wZXJtaXR0ZWQoZCwgcG9ydCwgcG9ydCAr IGJ5dGVzIC0gMSk7Cit9CisKK3N0YXRpYyBib29sX3QgcGNpX2NmZ19vayhzdHJ1Y3QgZG9tYWlu ICpjdXJyZCwgdW5zaWduZWQgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBzaXplLCB1aW50MzJfdCAqd3JpdGUpCit7CisgICAgdWludDMyX3QgbWFjaGlu ZV9iZGY7CisKKyAgICBpZiAoICFpc19oYXJkd2FyZV9kb21haW4oY3VycmQpICkKKyAgICAgICAg cmV0dXJuIDA7CisKKyAgICBpZiAoICFDRjhfRU5BQkxFRChjdXJyZC0+YXJjaC5wY2lfY2Y4KSAp CisgICAgICAgIHJldHVybiAxOworCisgICAgbWFjaGluZV9iZGYgPSBDRjhfQkRGKGN1cnJkLT5h cmNoLnBjaV9jZjgpOworICAgIGlmICggd3JpdGUgKQorICAgIHsKKyAgICAgICAgY29uc3QgdW5z aWduZWQgbG9uZyAqcm9fbWFwID0gcGNpX2dldF9yb19tYXAoMCk7CisKKyAgICAgICAgaWYgKCBy b19tYXAgJiYgdGVzdF9iaXQobWFjaGluZV9iZGYsIHJvX21hcCkgKQorICAgICAgICAgICAgcmV0 dXJuIDA7CisgICAgfQorICAgIHN0YXJ0IHw9IENGOF9BRERSX0xPKGN1cnJkLT5hcmNoLnBjaV9j ZjgpOworICAgIC8qIEFNRCBleHRlbmRlZCBjb25maWd1cmF0aW9uIHNwYWNlIGFjY2Vzcz8gKi8K KyAgICBpZiAoIENGOF9BRERSX0hJKGN1cnJkLT5hcmNoLnBjaV9jZjgpICYmCisgICAgICAgICBi b290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYKKyAgICAgICAgIGJv b3RfY3B1X2RhdGEueDg2ID49IDB4MTAgJiYgYm9vdF9jcHVfZGF0YS54ODYgPD0gMHgxNyApCisg ICAgeworICAgICAgICB1aW50NjRfdCBtc3JfdmFsOworCisgICAgICAgIGlmICggcmRtc3Jfc2Fm ZShNU1JfQU1ENjRfTkJfQ0ZHLCBtc3JfdmFsKSApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg ICAgICAgaWYgKCBtc3JfdmFsICYgKDFVTEwgPDwgQU1ENjRfTkJfQ0ZHX0NGOF9FWFRfRU5BQkxF X0JJVCkgKQorICAgICAgICAgICAgc3RhcnQgfD0gQ0Y4X0FERFJfSEkoY3VycmQtPmFyY2gucGNp X2NmOCk7CisgICAgfQorCisgICAgcmV0dXJuICF3cml0ZSA/CisgICAgICAgICAgIHhzbV9wY2lf Y29uZmlnX3Blcm1pc3Npb24oWFNNX0hPT0ssIGN1cnJkLCBtYWNoaW5lX2JkZiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgc3RhcnQgKyBzaXplIC0gMSwgMCkg PT0gMCA6CisgICAgICAgICAgIHBjaV9jb25mX3dyaXRlX2ludGVyY2VwdCgwLCBtYWNoaW5lX2Jk Ziwgc3RhcnQsIHNpemUsIHdyaXRlKSA+PSAwOworfQorCit1aW50MzJfdCBndWVzdF9pb19yZWFk KHVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgYnl0ZXMsCisgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBkb21haW4gKmN1cnJkKQoreworICAgIHVpbnQzMl90IGRhdGEgPSAwOwor ICAgIHVuc2lnbmVkIGludCBzaGlmdCA9IDA7CisKKyAgICBpZiAoIGFkbWluX2lvX29rYXkocG9y dCwgYnl0ZXMsIGN1cnJkKSApCisgICAgeworICAgICAgICBzd2l0Y2ggKCBieXRlcyApCisgICAg ICAgIHsKKyAgICAgICAgY2FzZSAxOiByZXR1cm4gaW5iKHBvcnQpOworICAgICAgICBjYXNlIDI6 IHJldHVybiBpbncocG9ydCk7CisgICAgICAgIGNhc2UgNDogcmV0dXJuIGlubChwb3J0KTsKKyAg ICAgICAgfQorICAgIH0KKworICAgIHdoaWxlICggYnl0ZXMgIT0gMCApCisgICAgeworICAgICAg ICB1bnNpZ25lZCBpbnQgc2l6ZSA9IDE7CisgICAgICAgIHVpbnQzMl90IHN1Yl9kYXRhID0gfjA7 CisKKyAgICAgICAgaWYgKCAocG9ydCA9PSAweDQyKSB8fCAocG9ydCA9PSAweDQzKSB8fCAocG9y dCA9PSAweDYxKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN1Yl9kYXRhID0gcHZfcGl0X2hh bmRsZXIocG9ydCwgMCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIHBvcnQgPT0g UlRDX1BPUlQoMCkgKQorICAgICAgICB7CisgICAgICAgICAgICBzdWJfZGF0YSA9IGN1cnJkLT5h cmNoLmNtb3NfaWR4OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCAocG9ydCA9PSBSVENf UE9SVCgxKSkgJiYKKyAgICAgICAgICAgICAgICAgIGlvcG9ydHNfYWNjZXNzX3Blcm1pdHRlZChj dXJyZCwgUlRDX1BPUlQoMCksIFJUQ19QT1JUKDEpKSApCisgICAgICAgIHsKKyAgICAgICAgICAg IHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZy dGNfbG9jaywgZmxhZ3MpOworICAgICAgICAgICAgb3V0YihjdXJyZC0+YXJjaC5jbW9zX2lkeCAm IDB4N2YsIFJUQ19QT1JUKDApKTsKKyAgICAgICAgICAgIHN1Yl9kYXRhID0gaW5iKFJUQ19QT1JU KDEpKTsKKyAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFn cyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIChwb3J0ID09IDB4Y2Y4KSAmJiAoYnl0 ZXMgPT0gNCkgKQorICAgICAgICB7CisgICAgICAgICAgICBzaXplID0gNDsKKyAgICAgICAgICAg IHN1Yl9kYXRhID0gY3VycmQtPmFyY2gucGNpX2NmODsKKyAgICAgICAgfQorICAgICAgICBlbHNl IGlmICggKHBvcnQgJiAweGZmZmMpID09IDB4Y2ZjICkKKyAgICAgICAgeworICAgICAgICAgICAg c2l6ZSA9IG1pbihieXRlcywgNCAtIChwb3J0ICYgMykpOworICAgICAgICAgICAgaWYgKCBzaXpl ID09IDMgKQorICAgICAgICAgICAgICAgIHNpemUgPSAyOworICAgICAgICAgICAgaWYgKCBwY2lf Y2ZnX29rKGN1cnJkLCBwb3J0ICYgMywgc2l6ZSwgTlVMTCkgKQorICAgICAgICAgICAgICAgIHN1 Yl9kYXRhID0gcGNpX2NvbmZfcmVhZChjdXJyZC0+YXJjaC5wY2lfY2Y4LCBwb3J0ICYgMywgc2l6 ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHNpemUgPT0gNCApCisgICAgICAgICAgICBy ZXR1cm4gc3ViX2RhdGE7CisKKyAgICAgICAgZGF0YSB8PSAoc3ViX2RhdGEgJiAoKDF1IDw8IChz aXplICogOCkpIC0gMSkpIDw8IHNoaWZ0OworICAgICAgICBzaGlmdCArPSBzaXplICogODsKKyAg ICAgICAgcG9ydCArPSBzaXplOworICAgICAgICBieXRlcyAtPSBzaXplOworICAgIH0KKworICAg IHJldHVybiBkYXRhOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNoZWNrX2d1ZXN0X2lvX2Jy ZWFrcG9pbnQoc3RydWN0IHZjcHUgKnYsCisgICAgdW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVk IGludCBsZW4pCit7CisgICAgdW5zaWduZWQgaW50IHdpZHRoLCBpLCBtYXRjaCA9IDA7CisgICAg dW5zaWduZWQgbG9uZyBzdGFydDsKKworICAgIGlmICggISh2LT5hcmNoLmRlYnVncmVnWzVdKSB8 fAorICAgICAgICAgISh2LT5hcmNoLnB2X3ZjcHUuY3RybHJlZ1s0XSAmIFg4Nl9DUjRfREUpICkK KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IDQ7IGkrKyApCisgICAg eworICAgICAgICBpZiAoICEodi0+YXJjaC5kZWJ1Z3JlZ1s1XSAmCisgICAgICAgICAgICAgICAo MyA8PCAoaSAqIERSX0VOQUJMRV9TSVpFKSkpICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg ICAgICAgIHN0YXJ0ID0gdi0+YXJjaC5kZWJ1Z3JlZ1tpXTsKKyAgICAgICAgd2lkdGggPSAwOwor CisgICAgICAgIHN3aXRjaCAoICh2LT5hcmNoLmRlYnVncmVnWzddID4+CisgICAgICAgICAgICAg ICAgICAoRFJfQ09OVFJPTF9TSElGVCArIGkgKiBEUl9DT05UUk9MX1NJWkUpKSAmIDB4YyApCisg ICAgICAgIHsKKyAgICAgICAgY2FzZSBEUl9MRU5fMTogd2lkdGggPSAxOyBicmVhazsKKyAgICAg ICAgY2FzZSBEUl9MRU5fMjogd2lkdGggPSAyOyBicmVhazsKKyAgICAgICAgY2FzZSBEUl9MRU5f NDogd2lkdGggPSA0OyBicmVhazsKKyAgICAgICAgY2FzZSBEUl9MRU5fODogd2lkdGggPSA4OyBi cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggKHN0YXJ0IDwgKHBvcnQgKyBsZW4pKSAm JiAoKHN0YXJ0ICsgd2lkdGgpID4gcG9ydCkgKQorICAgICAgICAgICAgbWF0Y2ggfD0gMSA8PCBp OworICAgIH0KKworICAgIHJldHVybiBtYXRjaDsKK30KKworc3RhdGljIGludCBwcml2X29wX3Jl YWRfaW8odW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKnZhbCwgc3RydWN0IHg4Nl9lbXVsYXRlX2N0 eHQgKmN0eHQpCit7CisgICAgc3RydWN0IHByaXZfb3BfY3R4dCAqcG9jID0gY29udGFpbmVyX29m KGN0eHQsIHN0cnVjdCBwcml2X29wX2N0eHQsIGN0eHQpOworICAgIHN0cnVjdCB2Y3B1ICpjdXJy ID0gY3VycmVudDsKKyAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnJlbnQtPmRvbWFpbjsK KworICAgIC8qIElOUyBtdXN0IG5vdCBjb21lIGhlcmUuICovCisgICAgQVNTRVJUKChjdHh0LT5v cGNvZGUgJiB+OSkgPT0gMHhlNCk7CisKKyAgICBpZiAoICFndWVzdF9pb19va2F5KHBvcnQsIGJ5 dGVzLCBjdXJyLCBjdHh0LT5yZWdzKSApCisgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExF QUJMRTsKKworICAgIHBvYy0+YnBtYXRjaCA9IGNoZWNrX2d1ZXN0X2lvX2JyZWFrcG9pbnQoY3Vy ciwgcG9ydCwgYnl0ZXMpOworCisgICAgaWYgKCBhZG1pbl9pb19va2F5KHBvcnQsIGJ5dGVzLCBj dXJyZCkgKQorICAgIHsKKyAgICAgICAgaW9fZW11bF9zdHViX3QgKmlvX2VtdWwgPQorICAgICAg ICAgICAgaW9fZW11bF9zdHViX3NldHVwKHBvYywgY3R4dC0+b3Bjb2RlLCBwb3J0LCBieXRlcyk7 CisKKyAgICAgICAgbWFya19yZWdzX2RpcnR5KGN0eHQtPnJlZ3MpOworICAgICAgICBpb19lbXVs KGN0eHQtPnJlZ3MpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9ET05FOworICAgIH0KKworICAg ICp2YWwgPSBndWVzdF9pb19yZWFkKHBvcnQsIGJ5dGVzLCBjdXJyZCk7CisKKyAgICByZXR1cm4g WDg2RU1VTF9PS0FZOworfQorCit2b2lkIGd1ZXN0X2lvX3dyaXRlKHVuc2lnbmVkIGludCBwb3J0 LCB1bnNpZ25lZCBpbnQgYnl0ZXMsIHVpbnQzMl90IGRhdGEsCisgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBkb21haW4gKmN1cnJkKQoreworICAgIGlmICggYWRtaW5faW9fb2theShwb3J0LCBi eXRlcywgY3VycmQpICkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoIGJ5dGVzICkgeworICAgICAg ICBjYXNlIDE6CisgICAgICAgICAgICBvdXRiKCh1aW50OF90KWRhdGEsIHBvcnQpOworICAgICAg ICAgICAgaWYgKCBwdl9wb3N0X291dGJfaG9vayApCisgICAgICAgICAgICAgICAgcHZfcG9zdF9v dXRiX2hvb2socG9ydCwgKHVpbnQ4X3QpZGF0YSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgY2FzZSAyOgorICAgICAgICAgICAgb3V0dygodWludDE2X3QpZGF0YSwgcG9ydCk7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgb3V0bChkYXRhLCBw b3J0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAg ICB9CisKKyAgICB3aGlsZSAoIGJ5dGVzICE9IDAgKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQg aW50IHNpemUgPSAxOworCisgICAgICAgIGlmICggKHBvcnQgPT0gMHg0MikgfHwgKHBvcnQgPT0g MHg0MykgfHwgKHBvcnQgPT0gMHg2MSkgKQorICAgICAgICB7CisgICAgICAgICAgICBwdl9waXRf aGFuZGxlcihwb3J0LCAodWludDhfdClkYXRhLCAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl IGlmICggcG9ydCA9PSBSVENfUE9SVCgwKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1cnJk LT5hcmNoLmNtb3NfaWR4ID0gZGF0YTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggKHBv cnQgPT0gUlRDX1BPUlQoMSkpICYmCisgICAgICAgICAgICAgICAgICBpb3BvcnRzX2FjY2Vzc19w ZXJtaXR0ZWQoY3VycmQsIFJUQ19QT1JUKDApLCBSVENfUE9SVCgxKSkgKQorICAgICAgICB7Cisg ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCisgICAgICAgICAgICBpZiAoIHB2X3J0 Y19oYW5kbGVyICkKKyAgICAgICAgICAgICAgICBwdl9ydGNfaGFuZGxlcihjdXJyZC0+YXJjaC5j bW9zX2lkeCAmIDB4N2YsIGRhdGEpOworICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnJ0 Y19sb2NrLCBmbGFncyk7CisgICAgICAgICAgICBvdXRiKGN1cnJkLT5hcmNoLmNtb3NfaWR4ICYg MHg3ZiwgUlRDX1BPUlQoMCkpOworICAgICAgICAgICAgb3V0YihkYXRhLCBSVENfUE9SVCgxKSk7 CisgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwor ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCAocG9ydCA9PSAweGNmOCkgJiYgKGJ5dGVzID09 IDQpICkKKyAgICAgICAgeworICAgICAgICAgICAgc2l6ZSA9IDQ7CisgICAgICAgICAgICBjdXJy ZC0+YXJjaC5wY2lfY2Y4ID0gZGF0YTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggKHBv cnQgJiAweGZmZmMpID09IDB4Y2ZjICkKKyAgICAgICAgeworICAgICAgICAgICAgc2l6ZSA9IG1p bihieXRlcywgNCAtIChwb3J0ICYgMykpOworICAgICAgICAgICAgaWYgKCBzaXplID09IDMgKQor ICAgICAgICAgICAgICAgIHNpemUgPSAyOworICAgICAgICAgICAgaWYgKCBwY2lfY2ZnX29rKGN1 cnJkLCBwb3J0ICYgMywgc2l6ZSwgJmRhdGEpICkKKyAgICAgICAgICAgICAgICBwY2lfY29uZl93 cml0ZShjdXJyZC0+YXJjaC5wY2lfY2Y4LCBwb3J0ICYgMywgc2l6ZSwgZGF0YSk7CisgICAgICAg IH0KKworICAgICAgICBpZiAoIHNpemUgPT0gNCApCisgICAgICAgICAgICByZXR1cm47CisKKyAg ICAgICAgcG9ydCArPSBzaXplOworICAgICAgICBieXRlcyAtPSBzaXplOworICAgICAgICBkYXRh ID4+PSBzaXplICogODsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgcHJpdl9vcF93cml0ZV9pbyh1 bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IGJ5dGVzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4 dCkKK3sKKyAgICBzdHJ1Y3QgcHJpdl9vcF9jdHh0ICpwb2MgPSBjb250YWluZXJfb2YoY3R4dCwg c3RydWN0IHByaXZfb3BfY3R4dCwgY3R4dCk7CisgICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJy ZW50OworICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3VycmVudC0+ZG9tYWluOworCisgICAg LyogT1VUUyBtdXN0IG5vdCBjb21lIGhlcmUuICovCisgICAgQVNTRVJUKChjdHh0LT5vcGNvZGUg JiB+OSkgPT0gMHhlNik7CisKKyAgICBpZiAoICFndWVzdF9pb19va2F5KHBvcnQsIGJ5dGVzLCBj dXJyLCBjdHh0LT5yZWdzKSApCisgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsK KworICAgIHBvYy0+YnBtYXRjaCA9IGNoZWNrX2d1ZXN0X2lvX2JyZWFrcG9pbnQoY3VyciwgcG9y dCwgYnl0ZXMpOworCisgICAgaWYgKCBhZG1pbl9pb19va2F5KHBvcnQsIGJ5dGVzLCBjdXJyZCkg KQorICAgIHsKKyAgICAgICAgaW9fZW11bF9zdHViX3QgKmlvX2VtdWwgPQorICAgICAgICAgICAg aW9fZW11bF9zdHViX3NldHVwKHBvYywgY3R4dC0+b3Bjb2RlLCBwb3J0LCBieXRlcyk7CisKKyAg ICAgICAgbWFya19yZWdzX2RpcnR5KGN0eHQtPnJlZ3MpOworICAgICAgICBpb19lbXVsKGN0eHQt PnJlZ3MpOworICAgICAgICBpZiAoIChieXRlcyA9PSAxKSAmJiBwdl9wb3N0X291dGJfaG9vayAp CisgICAgICAgICAgICBwdl9wb3N0X291dGJfaG9vayhwb3J0LCB2YWwpOworICAgICAgICByZXR1 cm4gWDg2RU1VTF9ET05FOworICAgIH0KKworICAgIGd1ZXN0X2lvX3dyaXRlKHBvcnQsIGJ5dGVz LCB2YWwsIGN1cnJkKTsKKworICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9CisKK3N0YXRpYyBp bnQgcHJpdl9vcF9yZWFkX3NlZ21lbnQoZW51bSB4ODZfc2VnbWVudCBzZWcsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZWdtZW50X3JlZ2lzdGVyICpyZWcsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0 KQoreworICAgIC8qIENoZWNrIGlmIHRoaXMgaXMgYW4gYXR0ZW1wdCB0byBhY2Nlc3MgdGhlIEkv TyBiaXRtYXAuICovCisgICAgaWYgKCBzZWcgPT0geDg2X3NlZ190ciApCisgICAgeworICAgICAg ICBzd2l0Y2ggKCBjdHh0LT5vcGNvZGUgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMHg2YyAu Li4gMHg2ZjogLyogaW5zIC8gb3V0cyAqLworICAgICAgICBjYXNlIDB4ZTQgLi4uIDB4ZTc6IC8q IGluIC8gb3V0IChpbW1lZGlhdGUgcG9ydCkgKi8KKyAgICAgICAgY2FzZSAweGVjIC4uLiAweGVm OiAvKiBpbiAvIG91dCAocG9ydCBpbiAlZHgpICovCisgICAgICAgICAgICAvKiBEZWZlciB0aGUg Y2hlY2sgdG8gcHJpdl9vcF97cmVhZCx3cml0ZX1faW8oKS4gKi8KKyAgICAgICAgICAgIHJldHVy biBYODZFTVVMX0RPTkU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIGN0eHQtPmFkZHJf c2l6ZSA8IDY0ICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbGltaXQ7CisgICAgICAg IHVuc2lnbmVkIGludCBzZWwsIGFyOworCisgICAgICAgIHN3aXRjaCAoIHNlZyApCisgICAgICAg IHsKKyAgICAgICAgY2FzZSB4ODZfc2VnX2NzOiBzZWwgPSBjdHh0LT5yZWdzLT5jczsgYnJlYWs7 CisgICAgICAgIGNhc2UgeDg2X3NlZ19kczogc2VsID0gcmVhZF9zcmVnKGRzKTsgIGJyZWFrOwor ICAgICAgICBjYXNlIHg4Nl9zZWdfZXM6IHNlbCA9IHJlYWRfc3JlZyhlcyk7ICBicmVhazsKKyAg ICAgICAgY2FzZSB4ODZfc2VnX2ZzOiBzZWwgPSByZWFkX3NyZWcoZnMpOyAgYnJlYWs7CisgICAg ICAgIGNhc2UgeDg2X3NlZ19nczogc2VsID0gcmVhZF9zcmVnKGdzKTsgIGJyZWFrOworICAgICAg ICBjYXNlIHg4Nl9zZWdfc3M6IHNlbCA9IGN0eHQtPnJlZ3MtPnNzOyBicmVhazsKKyAgICAgICAg ZGVmYXVsdDogcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworICAgICAgICB9CisKKyAgICAg ICAgaWYgKCAhcmVhZF9kZXNjcmlwdG9yKHNlbCwgY3VycmVudCwgJnJlZy0+YmFzZSwgJmxpbWl0 LCAmYXIsIDApICkKKyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKwor ICAgICAgICByZWctPmxpbWl0ID0gbGltaXQ7CisgICAgICAgIHJlZy0+YXR0ci5ieXRlcyA9IGFy ID4+IDg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN3aXRjaCAoIHNlZyApCisg ICAgICAgIHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICggIWlzX3g4Nl91c2Vy X3NlZ21lbnQoc2VnKSApCisgICAgICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVB QkxFOworICAgICAgICAgICAgcmVnLT5iYXNlID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICBjYXNlIHg4Nl9zZWdfZnM6CisgICAgICAgICAgICByZWctPmJhc2UgPSByZGZzYmFzZSgp OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgeDg2X3NlZ19nczoKKyAgICAgICAg ICAgIHJlZy0+YmFzZSA9IHJkZ3NiYXNlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg fQorCisgICAgICAgIHJlZy0+bGltaXQgPSB+MFU7CisKKyAgICAgICAgcmVnLT5hdHRyLmJ5dGVz ID0gMDsKKyAgICAgICAgcmVnLT5hdHRyLmZpZWxkcy50eXBlID0gX1NFR01FTlRfV1IgPj4gODsK KyAgICAgICAgaWYgKCBzZWcgPT0geDg2X3NlZ19jcyApCisgICAgICAgIHsKKyAgICAgICAgICAg IHJlZy0+YXR0ci5maWVsZHMudHlwZSB8PSBfU0VHTUVOVF9DT0RFID4+IDg7CisgICAgICAgICAg ICByZWctPmF0dHIuZmllbGRzLmwgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg ICAgICAgIHJlZy0+YXR0ci5maWVsZHMuZGIgPSAxOworICAgICAgICByZWctPmF0dHIuZmllbGRz LnMgICA9IDE7CisgICAgICAgIHJlZy0+YXR0ci5maWVsZHMuZHBsID0gMzsKKyAgICAgICAgcmVn LT5hdHRyLmZpZWxkcy5wICAgPSAxOworICAgICAgICByZWctPmF0dHIuZmllbGRzLmcgICA9IDE7 CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGb3IgeDg2X2VtdWxhdGUuYydzIG1vZGVfcmluZzAo KSB0byB3b3JrLCBmYWtlIGEgRFBMIG9mIHplcm8uCisgICAgICogQWxzbyBkbyB0aGlzIGZvciBj b25zaXN0ZW5jeSBmb3Igbm9uLWNvbmZvcm1pbmcgY29kZSBzZWdtZW50cy4KKyAgICAgKi8KKyAg ICBpZiAoIChzZWcgPT0geDg2X3NlZ19zcyB8fAorICAgICAgICAgIChzZWcgPT0geDg2X3NlZ19j cyAmJgorICAgICAgICAgICAhKHJlZy0+YXR0ci5maWVsZHMudHlwZSAmIChfU0VHTUVOVF9FQyA+ PiA4KSkpKSAmJgorICAgICAgICAgZ3Vlc3Rfa2VybmVsX21vZGUoY3VycmVudCwgY3R4dC0+cmVn cykgKQorICAgICAgICByZWctPmF0dHIuZmllbGRzLmRwbCA9IDA7CisKKyAgICByZXR1cm4gWDg2 RU1VTF9PS0FZOworfQorCitzdGF0aWMgaW50IHB2X2VtdWxfdmlydF90b19saW5lYXIodW5zaWdu ZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgbGltaXQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB4ODZfc2VnbWVudCBzZWcsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQg KmN0eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAq YWRkcikKK3sKKyAgICBpbnQgcmMgPSBYODZFTVVMX09LQVk7CisKKyAgICAqYWRkciA9IGJhc2Ug KyBvZmZzZXQ7CisKKyAgICBpZiAoIGN0eHQtPmFkZHJfc2l6ZSA8IDY0ICkKKyAgICB7CisgICAg ICAgIGlmICggbGltaXQgPCBieXRlcyAtIDEgfHwgb2Zmc2V0ID4gbGltaXQgLSBieXRlcyArIDEg KQorICAgICAgICAgICAgcmMgPSBYODZFTVVMX0VYQ0VQVElPTjsKKyAgICAgICAgKmFkZHIgPSAo dWludDMyX3QpKmFkZHI7CisgICAgfQorICAgIGVsc2UgaWYgKCAhX19hZGRyX29rKCphZGRyKSAp CisgICAgICAgIHJjID0gWDg2RU1VTF9FWENFUFRJT047CisKKyAgICBpZiAoIHVubGlrZWx5KHJj ID09IFg4NkVNVUxfRVhDRVBUSU9OKSApCisgICAgICAgIHg4Nl9lbXVsX2h3X2V4Y2VwdGlvbihz ZWcgIT0geDg2X3NlZ19zcyA/IFRSQVBfZ3BfZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogVFJBUF9zdGFja19lcnJvciwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDAsIGN0eHQpOworCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0 aWMgaW50IHByaXZfb3BfcmVwX2lucyh1aW50MTZfdCBwb3J0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgZW51bSB4ODZfc2VnbWVudCBzZWcsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9yZXAsIHVuc2ln bmVkIGxvbmcgKnJlcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2Vt dWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICBzdHJ1Y3QgcHJpdl9vcF9jdHh0ICpwb2MgPSBjb250 YWluZXJfb2YoY3R4dCwgc3RydWN0IHByaXZfb3BfY3R4dCwgY3R4dCk7CisgICAgc3RydWN0IHZj cHUgKmN1cnIgPSBjdXJyZW50OworICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3VycmVudC0+ ZG9tYWluOworICAgIHVuc2lnbmVkIGxvbmcgZ29hbCA9ICpyZXBzOworICAgIHN0cnVjdCBzZWdt ZW50X3JlZ2lzdGVyIHNyZWc7CisgICAgaW50IHJjOworCisgICAgQVNTRVJUKHNlZyA9PSB4ODZf c2VnX2VzKTsKKworICAgICpyZXBzID0gMDsKKworICAgIGlmICggIWd1ZXN0X2lvX29rYXkocG9y dCwgYnl0ZXNfcGVyX3JlcCwgY3VyciwgY3R4dC0+cmVncykgKQorICAgICAgICByZXR1cm4gWDg2 RU1VTF9VTkhBTkRMRUFCTEU7CisKKyAgICByYyA9IHByaXZfb3BfcmVhZF9zZWdtZW50KHg4Nl9z ZWdfZXMsICZzcmVnLCBjdHh0KTsKKyAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSApCisgICAg ICAgIHJldHVybiByYzsKKworICAgIGlmICggIXNyZWcuYXR0ci5maWVsZHMucCApCisgICAgICAg IHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKyAgICBpZiAoICFzcmVnLmF0dHIuZmllbGRz LnMgfHwKKyAgICAgICAgIChzcmVnLmF0dHIuZmllbGRzLnR5cGUgJiAoX1NFR01FTlRfQ09ERSA+ PiA4KSkgfHwKKyAgICAgICAgICEoc3JlZy5hdHRyLmZpZWxkcy50eXBlICYgKF9TRUdNRU5UX1dS ID4+IDgpKSApCisgICAgeworICAgICAgICB4ODZfZW11bF9od19leGNlcHRpb24oVFJBUF9ncF9m YXVsdCwgMCwgY3R4dCk7CisgICAgICAgIHJldHVybiBYODZFTVVMX0VYQ0VQVElPTjsKKyAgICB9 CisKKyAgICBwb2MtPmJwbWF0Y2ggPSBjaGVja19ndWVzdF9pb19icmVha3BvaW50KGN1cnIsIHBv cnQsIGJ5dGVzX3Blcl9yZXApOworCisgICAgd2hpbGUgKCAqcmVwcyA8IGdvYWwgKQorICAgIHsK KyAgICAgICAgdW5zaWduZWQgaW50IGRhdGEgPSBndWVzdF9pb19yZWFkKHBvcnQsIGJ5dGVzX3Bl cl9yZXAsIGN1cnJkKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyOworCisgICAgICAgIHJj ID0gcHZfZW11bF92aXJ0X3RvX2xpbmVhcihzcmVnLmJhc2UsIG9mZnNldCwgYnl0ZXNfcGVyX3Jl cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyZWcubGltaXQsIHg4Nl9z ZWdfZXMsIGN0eHQsICZhZGRyKTsKKyAgICAgICAgaWYgKCByYyAhPSBYODZFTVVMX09LQVkgKQor ICAgICAgICAgICAgcmV0dXJuIHJjOworCisgICAgICAgIGlmICggKHJjID0gX19jb3B5X3RvX3Vz ZXIoKHZvaWQgKilhZGRyLCAmZGF0YSwgYnl0ZXNfcGVyX3JlcCkpICE9IDAgKQorICAgICAgICB7 CisgICAgICAgICAgICB4ODZfZW11bF9wYWdlZmF1bHQoUEZFQ193cml0ZV9hY2Nlc3MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkciArIGJ5dGVzX3Blcl9yZXAgLSByYywgY3R4 dCk7CisgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9FWENFUFRJT047CisgICAgICAgIH0KKwor ICAgICAgICArKypyZXBzOworCisgICAgICAgIGlmICggcG9jLT5icG1hdGNoIHx8IGh5cGVyY2Fs bF9wcmVlbXB0X2NoZWNrKCkgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogeDg2 X2VtdWxhdGUoKSBjbGlwcyB0aGUgcmVwZXRpdGlvbiBjb3VudCB0byBlbnN1cmUgd2UgZG9uJ3Qg d3JhcC4gKi8KKyAgICAgICAgaWYgKCB1bmxpa2VseShjdHh0LT5yZWdzLT5lZmxhZ3MgJiBYODZf RUZMQUdTX0RGKSApCisgICAgICAgICAgICBvZmZzZXQgLT0gYnl0ZXNfcGVyX3JlcDsKKyAgICAg ICAgZWxzZQorICAgICAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzX3Blcl9yZXA7CisgICAgfQorCisg ICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKK30KKworc3RhdGljIGludCBwcml2X29wX3JlcF9vdXRz KGVudW0geDg2X3NlZ21lbnQgc2VnLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50MTZfdCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBieXRlc19wZXJfcmVwLCB1bnNpZ25lZCBsb25nICpyZXBzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQor eworICAgIHN0cnVjdCBwcml2X29wX2N0eHQgKnBvYyA9IGNvbnRhaW5lcl9vZihjdHh0LCBzdHJ1 Y3QgcHJpdl9vcF9jdHh0LCBjdHh0KTsKKyAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7 CisgICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyZW50LT5kb21haW47CisgICAgdW5zaWdu ZWQgbG9uZyBnb2FsID0gKnJlcHM7CisgICAgc3RydWN0IHNlZ21lbnRfcmVnaXN0ZXIgc3JlZzsK KyAgICBpbnQgcmM7CisKKyAgICAqcmVwcyA9IDA7CisKKyAgICBpZiAoICFndWVzdF9pb19va2F5 KHBvcnQsIGJ5dGVzX3Blcl9yZXAsIGN1cnIsIGN0eHQtPnJlZ3MpICkKKyAgICAgICAgcmV0dXJu IFg4NkVNVUxfVU5IQU5ETEVBQkxFOworCisgICAgcmMgPSBwcml2X29wX3JlYWRfc2VnbWVudChz ZWcsICZzcmVnLCBjdHh0KTsKKyAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSApCisgICAgICAg IHJldHVybiByYzsKKworICAgIGlmICggIXNyZWcuYXR0ci5maWVsZHMucCApCisgICAgICAgIHJl dHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKyAgICBpZiAoICFzcmVnLmF0dHIuZmllbGRzLnMg fHwKKyAgICAgICAgICgoc3JlZy5hdHRyLmZpZWxkcy50eXBlICYgKF9TRUdNRU5UX0NPREUgPj4g OCkpICYmCisgICAgICAgICAgIShzcmVnLmF0dHIuZmllbGRzLnR5cGUgJiAoX1NFR01FTlRfV1Ig Pj4gOCkpKSApCisgICAgeworICAgICAgICB4ODZfZW11bF9od19leGNlcHRpb24oc2VnICE9IHg4 Nl9zZWdfc3MgPyBUUkFQX2dwX2ZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6IFRSQVBfc3RhY2tfZXJyb3IsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAwLCBjdHh0KTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOwor ICAgIH0KKworICAgIHBvYy0+YnBtYXRjaCA9IGNoZWNrX2d1ZXN0X2lvX2JyZWFrcG9pbnQoY3Vy ciwgcG9ydCwgYnl0ZXNfcGVyX3JlcCk7CisKKyAgICB3aGlsZSAoICpyZXBzIDwgZ29hbCApCisg ICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YSA9IDA7CisgICAgICAgIHVuc2lnbmVkIGxv bmcgYWRkcjsKKworICAgICAgICByYyA9IHB2X2VtdWxfdmlydF90b19saW5lYXIoc3JlZy5iYXNl LCBvZmZzZXQsIGJ5dGVzX3Blcl9yZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzcmVnLmxpbWl0LCBzZWcsIGN0eHQsICZhZGRyKTsKKyAgICAgICAgaWYgKCByYyAhPSBY ODZFTVVMX09LQVkgKQorICAgICAgICAgICAgcmV0dXJuIHJjOworCisgICAgICAgIGlmICggKHJj ID0gX19jb3B5X2Zyb21fdXNlcigmZGF0YSwgKHZvaWQgKilhZGRyLCBieXRlc19wZXJfcmVwKSkg IT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHg4Nl9lbXVsX3BhZ2VmYXVsdCgwLCBhZGRy ICsgYnl0ZXNfcGVyX3JlcCAtIHJjLCBjdHh0KTsKKyAgICAgICAgICAgIHJldHVybiBYODZFTVVM X0VYQ0VQVElPTjsKKyAgICAgICAgfQorCisgICAgICAgIGd1ZXN0X2lvX3dyaXRlKHBvcnQsIGJ5 dGVzX3Blcl9yZXAsIGRhdGEsIGN1cnJkKTsKKworICAgICAgICArKypyZXBzOworCisgICAgICAg IGlmICggcG9jLT5icG1hdGNoIHx8IGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkgKQorICAgICAg ICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogeDg2X2VtdWxhdGUoKSBjbGlwcyB0aGUgcmVwZXRp dGlvbiBjb3VudCB0byBlbnN1cmUgd2UgZG9uJ3Qgd3JhcC4gKi8KKyAgICAgICAgaWYgKCB1bmxp a2VseShjdHh0LT5yZWdzLT5lZmxhZ3MgJiBYODZfRUZMQUdTX0RGKSApCisgICAgICAgICAgICBv ZmZzZXQgLT0gYnl0ZXNfcGVyX3JlcDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb2Zmc2V0 ICs9IGJ5dGVzX3Blcl9yZXA7CisgICAgfQorCisgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKK30K Kworc3RhdGljIGludCBwcml2X29wX3JlYWRfY3IodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQg bG9uZyAqdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRl X2N0eHQgKmN0eHQpCit7CisgICAgY29uc3Qgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50Owor CisgICAgc3dpdGNoICggcmVnICkKKyAgICB7CisgICAgY2FzZSAwOiAvKiBSZWFkIENSMCAqLwor ICAgICAgICAqdmFsID0gKHJlYWRfY3IwKCkgJiB+WDg2X0NSMF9UUykgfCBjdXJyLT5hcmNoLnB2 X3ZjcHUuY3RybHJlZ1swXTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNh c2UgMjogLyogUmVhZCBDUjIgKi8KKyAgICBjYXNlIDQ6IC8qIFJlYWQgQ1I0ICovCisgICAgICAg ICp2YWwgPSBjdXJyLT5hcmNoLnB2X3ZjcHUuY3RybHJlZ1tyZWddOworICAgICAgICByZXR1cm4g WDg2RU1VTF9PS0FZOworCisgICAgY2FzZSAzOiAvKiBSZWFkIENSMyAqLworICAgIHsKKyAgICAg ICAgY29uc3Qgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyLT5kb21haW47CisgICAgICAgIHVu c2lnbmVkIGxvbmcgbWZuOworCisgICAgICAgIGlmICggIWlzX3B2XzMyYml0X2RvbWFpbihjdXJy ZCkgKQorICAgICAgICB7CisgICAgICAgICAgICBtZm4gPSBwYWdldGFibGVfZ2V0X3BmbihjdXJy LT5hcmNoLmd1ZXN0X3RhYmxlKTsKKyAgICAgICAgICAgICp2YWwgPSB4ZW5fcGZuX3RvX2NyMyht Zm5fdG9fZ21mbihjdXJyZCwgbWZuKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg ICB7CisgICAgICAgICAgICBsNF9wZ2VudHJ5X3QgKnBsNGUgPQorICAgICAgICAgICAgICAgIG1h cF9kb21haW5fcGFnZShfbWZuKHBhZ2V0YWJsZV9nZXRfcGZuKGN1cnItPmFyY2guZ3Vlc3RfdGFi bGUpKSk7CisKKyAgICAgICAgICAgIG1mbiA9IGw0ZV9nZXRfcGZuKCpwbDRlKTsKKyAgICAgICAg ICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsNGUpOworICAgICAgICAgICAgKnZhbCA9IGNvbXBhdF9w Zm5fdG9fY3IzKG1mbl90b19nbWZuKGN1cnJkLCBtZm4pKTsKKyAgICAgICAgfQorICAgICAgICAv KiBQVHMgc2hvdWxkIG5vdCBiZSBzaGFyZWQgKi8KKyAgICAgICAgQlVHX09OKHBhZ2VfZ2V0X293 bmVyKG1mbl90b19wYWdlKG1mbikpID09IGRvbV9jb3cpOworICAgICAgICByZXR1cm4gWDg2RU1V TF9PS0FZOworICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7 Cit9CisKK3N0YXRpYyBpbnQgcHJpdl9vcF93cml0ZV9jcih1bnNpZ25lZCBpbnQgcmVnLCB1bnNp Z25lZCBsb25nIHZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2Vt dWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7CisK KyAgICBzd2l0Y2ggKCByZWcgKQorICAgIHsKKyAgICBjYXNlIDA6IC8qIFdyaXRlIENSMCAqLwor ICAgICAgICBpZiAoICh2YWwgXiByZWFkX2NyMCgpKSAmIH5YODZfQ1IwX1RTICkKKyAgICAgICAg eworICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAg ICAgICJBdHRlbXB0IHRvIGNoYW5nZSB1bm1vZGlmaWFibGUgQ1IwIGZsYWdzXG4iKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRvX2ZwdV90YXNrc3dpdGNoKCEhKHZh bCAmIFg4Nl9DUjBfVFMpKTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNh c2UgMjogLyogV3JpdGUgQ1IyICovCisgICAgICAgIGN1cnItPmFyY2gucHZfdmNwdS5jdHJscmVn WzJdID0gdmFsOworICAgICAgICBhcmNoX3NldF9jcjIoY3VyciwgdmFsKTsKKyAgICAgICAgcmV0 dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2UgMzogLyogV3JpdGUgQ1IzICovCisgICAgewor ICAgICAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnItPmRvbWFpbjsKKyAgICAgICAgdW5z aWduZWQgbG9uZyBnZm47CisgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgICAg IGludCByYzsKKworICAgICAgICBnZm4gPSAhaXNfcHZfMzJiaXRfZG9tYWluKGN1cnJkKQorICAg ICAgICAgICAgICA/IHhlbl9jcjNfdG9fcGZuKHZhbCkgOiBjb21wYXRfY3IzX3RvX3Bmbih2YWwp OworICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4oY3VycmQsIGdmbiwgTlVMTCwgUDJN X0FMTE9DKTsKKyAgICAgICAgaWYgKCAhcGFnZSApCisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgcmMgPSBuZXdfZ3Vlc3RfY3IzKHBhZ2VfdG9fbWZuKHBhZ2UpKTsKKyAgICAgICAgcHV0X3Bh Z2UocGFnZSk7CisKKyAgICAgICAgc3dpdGNoICggcmMgKQorICAgICAgICB7CisgICAgICAgIGNh c2UgMDoKKyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisgICAgICAgIGNhc2UgLUVS RVNUQVJUOiAvKiByZXRyeSBhZnRlciBwcmVlbXB0aW9uICovCisgICAgICAgICAgICByZXR1cm4g WDg2RU1VTF9SRVRSWTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj YXNlIDQ6IC8qIFdyaXRlIENSNCAqLworICAgICAgICBjdXJyLT5hcmNoLnB2X3ZjcHUuY3RybHJl Z1s0XSA9IHB2X2d1ZXN0X2NyNF9maXh1cChjdXJyLCB2YWwpOworICAgICAgICB3cml0ZV9jcjQo cHZfZ3Vlc3RfY3I0X3RvX3JlYWxfY3I0KGN1cnIpKTsKKyAgICAgICAgY3R4dF9zd2l0Y2hfbGV2 ZWxsaW5nKGN1cnIpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworICAgIH0KKworICAg IHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKK30KKworc3RhdGljIGludCBwcml2X29wX3Jl YWRfZHIodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyAqdmFsLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgdW5z aWduZWQgbG9uZyByZXMgPSBkb19nZXRfZGVidWdyZWcocmVnKTsKKworICAgIGlmICggSVNfRVJS X1ZBTFVFKHJlcykgKQorICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisKKyAg ICAqdmFsID0gcmVzOworCisgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKK30KKworc3RhdGljIGlu dCBwcml2X29wX3dyaXRlX2RyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgdmFsLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0 KQoreworICAgIHJldHVybiBkb19zZXRfZGVidWdyZWcocmVnLCB2YWwpID09IDAKKyAgICAgICAg ICAgPyBYODZFTVVMX09LQVkgOiBYODZFTVVMX1VOSEFORExFQUJMRTsKK30KKworc3RhdGljIGlu bGluZSB1aW50NjRfdCBndWVzdF9taXNjX2VuYWJsZSh1aW50NjRfdCB2YWwpCit7CisgICAgdmFs ICY9IH4oTVNSX0lBMzJfTUlTQ19FTkFCTEVfUEVSRl9BVkFJTCB8CisgICAgICAgICAgICAgTVNS X0lBMzJfTUlTQ19FTkFCTEVfTU9OSVRPUl9FTkFCTEUpOworICAgIHZhbCB8PSBNU1JfSUEzMl9N SVNDX0VOQUJMRV9CVFNfVU5BVkFJTCB8CisgICAgICAgICAgIE1TUl9JQTMyX01JU0NfRU5BQkxF X1BFQlNfVU5BVkFJTCB8CisgICAgICAgICAgIE1TUl9JQTMyX01JU0NfRU5BQkxFX1hUUFJfRElT QUJMRTsKKyAgICByZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfY3B1ZnJl cV9jb250cm9sbGVyKGNvbnN0IHN0cnVjdCBkb21haW4gKmQpCit7CisgICAgcmV0dXJuICgoY3B1 ZnJlcV9jb250cm9sbGVyID09IEZSRVFDVExfZG9tMF9rZXJuZWwpICYmCisgICAgICAgICAgICBp c19oYXJkd2FyZV9kb21haW4oZCkpOworfQorCitzdGF0aWMgaW50IHByaXZfb3BfcmVhZF9tc3Io dW5zaWduZWQgaW50IHJlZywgdWludDY0X3QgKnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICBzdHJ1Y3QgcHJpdl9v cF9jdHh0ICpwb2MgPSBjb250YWluZXJfb2YoY3R4dCwgc3RydWN0IHByaXZfb3BfY3R4dCwgY3R4 dCk7CisgICAgY29uc3Qgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OworICAgIGNvbnN0IHN0 cnVjdCBkb21haW4gKmN1cnJkID0gY3Vyci0+ZG9tYWluOworICAgIGJvb2wgdnBtdV9tc3IgPSBm YWxzZTsKKworICAgIHN3aXRjaCAoIHJlZyApCisgICAgeworICAgICAgICBpbnQgcmM7CisKKyAg ICBjYXNlIE1TUl9GU19CQVNFOgorICAgICAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihjdXJy ZCkgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICp2YWwgPSBjcHVfaGFzX2ZzZ3NiYXNl ID8gX19yZGZzYmFzZSgpIDogY3Vyci0+YXJjaC5wdl92Y3B1LmZzX2Jhc2U7CisgICAgICAgIHJl dHVybiBYODZFTVVMX09LQVk7CisKKyAgICBjYXNlIE1TUl9HU19CQVNFOgorICAgICAgICBpZiAo IGlzX3B2XzMyYml0X2RvbWFpbihjdXJyZCkgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICp2YWwgPSBjcHVfaGFzX2ZzZ3NiYXNlID8gX19yZGdzYmFzZSgpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogY3Vyci0+YXJjaC5wdl92Y3B1LmdzX2Jhc2Vfa2VybmVsOworICAg ICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgY2FzZSBNU1JfU0hBRE9XX0dTX0JBU0U6 CisgICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGN1cnJkKSApCisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgKnZhbCA9IGN1cnItPmFyY2gucHZfdmNwdS5nc19iYXNlX3VzZXI7Cisg ICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisKKyAgICAvKgorICAgICAqIEluIG9yZGVyIHRv IGZ1bGx5IHJldGFpbiBvcmlnaW5hbCBiZWhhdmlvciwgZGVmZXIgY2FsbGluZworICAgICAqIHB2 X3NvZnRfcmR0c2MoKSB1bnRpbCBhZnRlciBlbXVsYXRpb24uIFRoaXMgbWF5IHdhbnQvbmVlZCB0 byBiZQorICAgICAqIHJlY29uc2lkZXJlZC4KKyAgICAgKi8KKyAgICBjYXNlIE1TUl9JQTMyX1RT QzoKKyAgICAgICAgcG9jLT50c2MgfD0gVFNDX0JBU0U7CisgICAgICAgIGdvdG8gbm9ybWFsOwor CisgICAgY2FzZSBNU1JfVFNDX0FVWDoKKyAgICAgICAgcG9jLT50c2MgfD0gVFNDX0FVWDsKKyAg ICAgICAgaWYgKCBjcHVfaGFzX3JkdHNjcCApCisgICAgICAgICAgICBnb3RvIG5vcm1hbDsKKyAg ICAgICAgKnZhbCA9IDA7CisgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisKKyAgICBjYXNl IE1TUl9FRkVSOgorICAgICAgICAqdmFsID0gcmVhZF9lZmVyKCk7CisgICAgICAgIGlmICggaXNf cHZfMzJiaXRfZG9tYWluKGN1cnJkKSApCisgICAgICAgICAgICAqdmFsICY9IH4oRUZFUl9MTUUg fCBFRkVSX0xNQSB8IEVGRVJfTE1TTEUpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwor CisgICAgY2FzZSBNU1JfSzdfRklEX1ZJRF9DVEw6CisgICAgY2FzZSBNU1JfSzdfRklEX1ZJRF9T VEFUVVM6CisgICAgY2FzZSBNU1JfSzhfUFNUQVRFX0xJTUlUOgorICAgIGNhc2UgTVNSX0s4X1BT VEFURV9DVFJMOgorICAgIGNhc2UgTVNSX0s4X1BTVEFURV9TVEFUVVM6CisgICAgY2FzZSBNU1Jf SzhfUFNUQVRFMDoKKyAgICBjYXNlIE1TUl9LOF9QU1RBVEUxOgorICAgIGNhc2UgTVNSX0s4X1BT VEFURTI6CisgICAgY2FzZSBNU1JfSzhfUFNUQVRFMzoKKyAgICBjYXNlIE1TUl9LOF9QU1RBVEU0 OgorICAgIGNhc2UgTVNSX0s4X1BTVEFURTU6CisgICAgY2FzZSBNU1JfSzhfUFNUQVRFNjoKKyAg ICBjYXNlIE1TUl9LOF9QU1RBVEU3OgorICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3Zl bmRvciAhPSBYODZfVkVORE9SX0FNRCApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYg KCB1bmxpa2VseShpc19jcHVmcmVxX2NvbnRyb2xsZXIoY3VycmQpKSApCisgICAgICAgICAgICBn b3RvIG5vcm1hbDsKKyAgICAgICAgKnZhbCA9IDA7CisgICAgICAgIHJldHVybiBYODZFTVVMX09L QVk7CisKKyAgICBjYXNlIE1TUl9JQTMyX1VDT0RFX1JFVjoKKyAgICAgICAgQlVJTERfQlVHX09O KE1TUl9JQTMyX1VDT0RFX1JFViAhPSBNU1JfQU1EX1BBVENITEVWRUwpOworICAgICAgICBpZiAo IGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMICkKKyAgICAgICAg eworICAgICAgICAgICAgaWYgKCB3cm1zcl9zYWZlKE1TUl9JQTMyX1VDT0RFX1JFViwgMCkgKQor ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLyogQXMgZG9jdW1lbnRlZCBpbiB0 aGUgU0RNOiBEbyBhIENQVUlEIDEgaGVyZSAqLworICAgICAgICAgICAgY3B1aWRfZWF4KDEpOwor ICAgICAgICB9CisgICAgICAgIGdvdG8gbm9ybWFsOworCisgICAgY2FzZSBNU1JfSUEzMl9NSVND X0VOQUJMRToKKyAgICAgICAgaWYgKCByZG1zcl9zYWZlKHJlZywgKnZhbCkgKQorICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICp2YWwgPSBndWVzdF9taXNjX2VuYWJsZSgqdmFsKTsKKyAgICAg ICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2UgTVNSX0FNRDY0X0RSMF9BRERSRVNT X01BU0s6CisgICAgICAgIGlmICggIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9EQkVYVCkgKQor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICp2YWwgPSBjdXJyLT5hcmNoLnB2X3ZjcHUuZHJf bWFza1swXTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2UgTVNSX0FN RDY0X0RSMV9BRERSRVNTX01BU0sgLi4uIE1TUl9BTUQ2NF9EUjNfQUREUkVTU19NQVNLOgorICAg ICAgICBpZiAoICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfREJFWFQpICkKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICAqdmFsID0gY3Vyci0+YXJjaC5wdl92Y3B1LmRyX21hc2tbcmVnIC0g TVNSX0FNRDY0X0RSMV9BRERSRVNTX01BU0sgKyAxXTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxf T0tBWTsKKworICAgIGNhc2UgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVM6CisgICAgICAgIC8q IE5vIGV4dHJhIGNhcGFiaWxpdGllcyBhcmUgc3VwcG9ydGVkLiAqLworICAgICAgICAqdmFsID0g MDsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2UgTVNSX0lOVEVMX1BM QVRGT1JNX0lORk86CisgICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4 Nl9WRU5ET1JfSU5URUwgfHwKKyAgICAgICAgICAgICByZG1zcl9zYWZlKE1TUl9JTlRFTF9QTEFU Rk9STV9JTkZPLCAqdmFsKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgKnZhbCA9IDA7 CisgICAgICAgIGlmICggdGhpc19jcHUoY3B1aWRfZmF1bHRpbmdfZW5hYmxlZCkgKQorICAgICAg ICAgICAgKnZhbCB8PSBNU1JfUExBVEZPUk1fSU5GT19DUFVJRF9GQVVMVElORzsKKyAgICAgICAg cmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2UgTVNSX0lOVEVMX01JU0NfRkVBVFVSRVNf RU5BQkxFUzoKKyAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZF TkRPUl9JTlRFTCB8fAorICAgICAgICAgICAgIHJkbXNyX3NhZmUoTVNSX0lOVEVMX01JU0NfRkVB VFVSRVNfRU5BQkxFUywgKnZhbCkgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICp2YWwg PSAwOworICAgICAgICBpZiAoIGN1cnItPmFyY2guY3B1aWRfZmF1bHRpbmcgKQorICAgICAgICAg ICAgKnZhbCB8PSBNU1JfTUlTQ19GRUFUVVJFU19DUFVJRF9GQVVMVElORzsKKyAgICAgICAgcmV0 dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2UgTVNSX1A2X1BFUkZDVFIoMCkuLi5NU1JfUDZf UEVSRkNUUig3KToKKyAgICBjYXNlIE1TUl9QNl9FVk5UU0VMKDApLi4uTVNSX1A2X0VWTlRTRUwo Myk6CisgICAgY2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjAuLi5NU1JfQ09SRV9QRVJGX0ZJ WEVEX0NUUjI6CisgICAgY2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMLi4uTVNSX0NP UkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6CisgICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZf dmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgKQorICAgICAgICB7CisgICAgICAgICAgICB2cG11 X21zciA9IHRydWU7CisgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIE1T Ul9BTURfRkFNMTVIX0VWTlRTRUwwLi4uTVNSX0FNRF9GQU0xNUhfUEVSRkNUUjU6CisgICAgY2Fz ZSBNU1JfSzdfRVZOVFNFTDAuLi5NU1JfSzdfUEVSRkNUUjM6CisgICAgICAgICAgICBpZiAoIHZw bXVfbXNyIHx8IChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICkK KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIHZwbXVfZG9fcmRtc3IocmVnLCB2 YWwpICkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcmV0dXJu IFg4NkVNVUxfT0tBWTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBmYWxs IHRocm91Z2ggKi8KKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoIHJkbXNyX2h5cGVydmlzb3Jf cmVncyhyZWcsIHZhbCkgKQorICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAg ICAgICByYyA9IHZtY2VfcmRtc3IocmVnLCB2YWwpOworICAgICAgICBpZiAoIHJjIDwgMCApCisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCByYyApCisgICAgICAgICAgICByZXR1cm4g WDg2RU1VTF9PS0FZOworICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBub3JtYWw6Cisg ICAgICAgIC8qIEV2ZXJ5b25lIGNhbiByZWFkIHRoZSBNU1Igc3BhY2UuICovCisgICAgICAgIC8q IGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiRG9tYWluIGF0dGVtcHRlZCBSRE1TUiAlMDh4XG4i LCByZWcpOyAqLworICAgICAgICBpZiAoIHJkbXNyX3NhZmUocmVnLCAqdmFsKSApCisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKyAgICB9CisKKyAgICBy ZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Cit9CisKK3N0YXRpYyBpbnQgcHJpdl9vcF93cml0 ZV9tc3IodW5zaWduZWQgaW50IHJlZywgdWludDY0X3QgdmFsLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICBzdHJ1Y3Qg dmNwdSAqY3VyciA9IGN1cnJlbnQ7CisgICAgY29uc3Qgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBj dXJyLT5kb21haW47CisgICAgYm9vbCB2cG11X21zciA9IGZhbHNlOworCisgICAgc3dpdGNoICgg cmVnICkKKyAgICB7CisgICAgICAgIHVpbnQ2NF90IHRlbXA7CisgICAgICAgIGludCByYzsKKwor ICAgIGNhc2UgTVNSX0ZTX0JBU0U6CisgICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGN1 cnJkKSB8fCAhaXNfY2Fub25pY2FsX2FkZHJlc3ModmFsKSApCisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgd3Jmc2Jhc2UodmFsKTsKKyAgICAgICAgY3Vyci0+YXJjaC5wdl92Y3B1LmZzX2Jh c2UgPSB2YWw7CisgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisKKyAgICBjYXNlIE1TUl9H U19CQVNFOgorICAgICAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihjdXJyZCkgfHwgIWlzX2Nh bm9uaWNhbF9hZGRyZXNzKHZhbCkgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHdyZ3Ni YXNlKHZhbCk7CisgICAgICAgIGN1cnItPmFyY2gucHZfdmNwdS5nc19iYXNlX2tlcm5lbCA9IHZh bDsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2UgTVNSX1NIQURPV19H U19CQVNFOgorICAgICAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihjdXJyZCkgfHwgIWlzX2Nh bm9uaWNhbF9hZGRyZXNzKHZhbCkgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHdybXNy bChNU1JfU0hBRE9XX0dTX0JBU0UsIHZhbCk7CisgICAgICAgIGN1cnItPmFyY2gucHZfdmNwdS5n c19iYXNlX3VzZXIgPSB2YWw7CisgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisKKyAgICBj YXNlIE1TUl9LN19GSURfVklEX1NUQVRVUzoKKyAgICBjYXNlIE1TUl9LN19GSURfVklEX0NUTDoK KyAgICBjYXNlIE1TUl9LOF9QU1RBVEVfTElNSVQ6CisgICAgY2FzZSBNU1JfSzhfUFNUQVRFX0NU Ukw6CisgICAgY2FzZSBNU1JfSzhfUFNUQVRFX1NUQVRVUzoKKyAgICBjYXNlIE1TUl9LOF9QU1RB VEUwOgorICAgIGNhc2UgTVNSX0s4X1BTVEFURTE6CisgICAgY2FzZSBNU1JfSzhfUFNUQVRFMjoK KyAgICBjYXNlIE1TUl9LOF9QU1RBVEUzOgorICAgIGNhc2UgTVNSX0s4X1BTVEFURTQ6CisgICAg Y2FzZSBNU1JfSzhfUFNUQVRFNToKKyAgICBjYXNlIE1TUl9LOF9QU1RBVEU2OgorICAgIGNhc2Ug TVNSX0s4X1BTVEFURTc6CisgICAgY2FzZSBNU1JfSzhfSFdDUjoKKyAgICAgICAgaWYgKCBib290 X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQgKQorICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIGlmICggbGlrZWx5KCFpc19jcHVmcmVxX2NvbnRyb2xsZXIoY3VycmQpKSB8 fAorICAgICAgICAgICAgIHdybXNyX3NhZmUocmVnLCB2YWwpID09IDAgKQorICAgICAgICAgICAg cmV0dXJuIFg4NkVNVUxfT0tBWTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1TUl9BTUQ2 NF9OQl9DRkc6CisgICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9W RU5ET1JfQU1EIHx8CisgICAgICAgICAgICAgYm9vdF9jcHVfZGF0YS54ODYgPCAweDEwIHx8IGJv b3RfY3B1X2RhdGEueDg2ID4gMHgxNyApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYg KCAhaXNfaGFyZHdhcmVfZG9tYWluKGN1cnJkKSB8fCAhaXNfcGlubmVkX3ZjcHUoY3VycikgKQor ICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKyAgICAgICAgaWYgKCAocmRtc3Jfc2Fm ZShNU1JfQU1ENjRfTkJfQ0ZHLCB0ZW1wKSAhPSAwKSB8fAorICAgICAgICAgICAgICgodmFsIF4g dGVtcCkgJiB+KDFVTEwgPDwgQU1ENjRfTkJfQ0ZHX0NGOF9FWFRfRU5BQkxFX0JJVCkpICkKKyAg ICAgICAgICAgIGdvdG8gaW52YWxpZDsKKyAgICAgICAgaWYgKCB3cm1zcl9zYWZlKE1TUl9BTUQ2 NF9OQl9DRkcsIHZhbCkgPT0gMCApCisgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwor ICAgICAgICBicmVhazsKKworICAgIGNhc2UgTVNSX0ZBTTEwSF9NTUlPX0NPTkZfQkFTRToKKyAg ICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQgfHwK KyAgICAgICAgICAgICBib290X2NwdV9kYXRhLng4NiA8IDB4MTAgfHwgYm9vdF9jcHVfZGF0YS54 ODYgPiAweDE3ICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoICFpc19oYXJkd2Fy ZV9kb21haW4oY3VycmQpIHx8ICFpc19waW5uZWRfdmNwdShjdXJyKSApCisgICAgICAgICAgICBy ZXR1cm4gWDg2RU1VTF9PS0FZOworICAgICAgICBpZiAoIHJkbXNyX3NhZmUoTVNSX0ZBTTEwSF9N TUlPX0NPTkZfQkFTRSwgdGVtcCkgIT0gMCApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg aWYgKCAocGNpX3Byb2JlICYgUENJX1BST0JFX01BU0spID09IFBDSV9QUk9CRV9NTUNPTkYgPwor ICAgICAgICAgICAgIHRlbXAgIT0gdmFsIDoKKyAgICAgICAgICAgICAoKHRlbXAgXiB2YWwpICYK KyAgICAgICAgICAgICAgfihGQU0xMEhfTU1JT19DT05GX0VOQUJMRSB8CisgICAgICAgICAgICAg ICAgKEZBTTEwSF9NTUlPX0NPTkZfQlVTUkFOR0VfTUFTSyA8PAorICAgICAgICAgICAgICAgICBG QU0xMEhfTU1JT19DT05GX0JVU1JBTkdFX1NISUZUKSB8CisgICAgICAgICAgICAgICAgKCh1NjQp RkFNMTBIX01NSU9fQ09ORl9CQVNFX01BU0sgPDwKKyAgICAgICAgICAgICAgICAgRkFNMTBIX01N SU9fQ09ORl9CQVNFX1NISUZUKSkpICkKKyAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKKyAgICAg ICAgaWYgKCB3cm1zcl9zYWZlKE1TUl9GQU0xMEhfTU1JT19DT05GX0JBU0UsIHZhbCkgPT0gMCAp CisgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworICAgICAgICBicmVhazsKKworICAg IGNhc2UgTVNSX0lBMzJfVUNPREVfUkVWOgorICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2 X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBpZiAoICFpc19oYXJkd2FyZV9kb21haW4oY3VycmQpIHx8ICFpc19waW5uZWRfdmNwdShjdXJy KSApCisgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworICAgICAgICBpZiAoIHJkbXNy X3NhZmUocmVnLCB0ZW1wKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCB2YWwg KQorICAgICAgICAgICAgZ290byBpbnZhbGlkOworICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZ OworCisgICAgY2FzZSBNU1JfSUEzMl9NSVNDX0VOQUJMRToKKyAgICAgICAgaWYgKCByZG1zcl9z YWZlKHJlZywgdGVtcCkgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICggdmFsICE9 IGd1ZXN0X21pc2NfZW5hYmxlKHRlbXApICkKKyAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKKyAg ICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2UgTVNSX0lBMzJfTVBFUkY6Cisg ICAgY2FzZSBNU1JfSUEzMl9BUEVSRjoKKyAgICAgICAgaWYgKCAoYm9vdF9jcHVfZGF0YS54ODZf dmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpICYmCisgICAgICAgICAgICAgKGJvb3RfY3B1X2Rh dGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCkgKQorICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIGlmICggbGlrZWx5KCFpc19jcHVmcmVxX2NvbnRyb2xsZXIoY3VycmQpKSB8fAorICAg ICAgICAgICAgIHdybXNyX3NhZmUocmVnLCB2YWwpID09IDAgKQorICAgICAgICAgICAgcmV0dXJu IFg4NkVNVUxfT0tBWTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1TUl9JQTMyX1BFUkZf Q1RMOgorICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9S X0lOVEVMICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoIGxpa2VseSghaXNfY3B1 ZnJlcV9jb250cm9sbGVyKGN1cnJkKSkgfHwKKyAgICAgICAgICAgICB3cm1zcl9zYWZlKHJlZywg dmFsKSA9PSAwICkKKyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisgICAgICAgIGJy ZWFrOworCisgICAgY2FzZSBNU1JfSUEzMl9USEVSTV9DT05UUk9MOgorICAgIGNhc2UgTVNSX0lB MzJfRU5FUkdZX1BFUkZfQklBUzoKKyAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92ZW5k b3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYg KCAhaXNfaGFyZHdhcmVfZG9tYWluKGN1cnJkKSB8fCAhaXNfcGlubmVkX3ZjcHUoY3VycikgfHwK KyAgICAgICAgICAgICB3cm1zcl9zYWZlKHJlZywgdmFsKSA9PSAwICkKKyAgICAgICAgICAgIHJl dHVybiBYODZFTVVMX09LQVk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNU1JfQU1ENjRf RFIwX0FERFJFU1NfTUFTSzoKKyAgICAgICAgaWYgKCAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJF X0RCRVhUKSB8fCAodmFsID4+IDMyKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY3Vy ci0+YXJjaC5wdl92Y3B1LmRyX21hc2tbMF0gPSB2YWw7CisgICAgICAgIGlmICggY3Vyci0+YXJj aC5kZWJ1Z3JlZ1s3XSAmIERSN19BQ1RJVkVfTUFTSyApCisgICAgICAgICAgICB3cm1zcmwoTVNS X0FNRDY0X0RSMF9BRERSRVNTX01BU0ssIHZhbCk7CisgICAgICAgIHJldHVybiBYODZFTVVMX09L QVk7CisKKyAgICBjYXNlIE1TUl9BTUQ2NF9EUjFfQUREUkVTU19NQVNLIC4uLiBNU1JfQU1ENjRf RFIzX0FERFJFU1NfTUFTSzoKKyAgICAgICAgaWYgKCAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJF X0RCRVhUKSB8fCAodmFsID4+IDMyKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY3Vy ci0+YXJjaC5wdl92Y3B1LmRyX21hc2tbcmVnIC0gTVNSX0FNRDY0X0RSMV9BRERSRVNTX01BU0sg KyAxXSA9IHZhbDsKKyAgICAgICAgaWYgKCBjdXJyLT5hcmNoLmRlYnVncmVnWzddICYgRFI3X0FD VElWRV9NQVNLICkKKyAgICAgICAgICAgIHdybXNybChyZWcsIHZhbCk7CisgICAgICAgIHJldHVy biBYODZFTVVMX09LQVk7CisKKyAgICBjYXNlIE1TUl9JTlRFTF9QTEFURk9STV9JTkZPOgorICAg ICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMIHx8 CisgICAgICAgICAgICAgdmFsIHx8IHJkbXNyX3NhZmUoTVNSX0lOVEVMX1BMQVRGT1JNX0lORk8s IHZhbCkgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7 CisKKyAgICBjYXNlIE1TUl9JTlRFTF9NSVNDX0ZFQVRVUkVTX0VOQUJMRVM6CisgICAgICAgIGlm ICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwgfHwKKyAgICAg ICAgICAgICAodmFsICYgfk1TUl9NSVNDX0ZFQVRVUkVTX0NQVUlEX0ZBVUxUSU5HKSB8fAorICAg ICAgICAgICAgIHJkbXNyX3NhZmUoTVNSX0lOVEVMX01JU0NfRkVBVFVSRVNfRU5BQkxFUywgdGVt cCkgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICggKHZhbCAmIE1TUl9NSVNDX0ZF QVRVUkVTX0NQVUlEX0ZBVUxUSU5HKSAmJgorICAgICAgICAgICAgICF0aGlzX2NwdShjcHVpZF9m YXVsdGluZ19lbmFibGVkKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY3Vyci0+YXJj aC5jcHVpZF9mYXVsdGluZyA9ICEhKHZhbCAmIE1TUl9NSVNDX0ZFQVRVUkVTX0NQVUlEX0ZBVUxU SU5HKTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2UgTVNSX1A2X1BF UkZDVFIoMCkuLi5NU1JfUDZfUEVSRkNUUig3KToKKyAgICBjYXNlIE1TUl9QNl9FVk5UU0VMKDAp Li4uTVNSX1A2X0VWTlRTRUwoMyk6CisgICAgY2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjAu Li5NU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjI6CisgICAgY2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVE X0NUUl9DVFJMLi4uTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6CisgICAgICAgIGlmICgg Ym9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgKQorICAgICAgICB7 CisgICAgICAgICAgICB2cG11X21zciA9IHRydWU7CisgICAgY2FzZSBNU1JfQU1EX0ZBTTE1SF9F Vk5UU0VMMC4uLk1TUl9BTURfRkFNMTVIX1BFUkZDVFI1OgorICAgIGNhc2UgTVNSX0s3X0VWTlRT RUwwLi4uTVNSX0s3X1BFUkZDVFIzOgorICAgICAgICAgICAgaWYgKCB2cG11X21zciB8fCAoYm9v dF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSApCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgaWYgKCAodnBtdV9tb2RlICYgWEVOUE1VX01PREVfQUxMKSAmJgor ICAgICAgICAgICAgICAgICAgICAgIWlzX2hhcmR3YXJlX2RvbWFpbihjdXJyZCkgKQorICAgICAg ICAgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgICAgICAgICAgICAgaWYg KCB2cG11X2RvX3dybXNyKHJlZywgdmFsLCAwKSApCisgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgZGVmYXVsdDoKKyAgICAg ICAgaWYgKCB3cm1zcl9oeXBlcnZpc29yX3JlZ3MocmVnLCB2YWwpID09IDEgKQorICAgICAgICAg ICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgICAgICByYyA9IHZtY2Vfd3Jtc3IocmVnLCB2 YWwpOworICAgICAgICBpZiAoIHJjIDwgMCApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg aWYgKCByYyApCisgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgICAgIGlm ICggKHJkbXNyX3NhZmUocmVnLCB0ZW1wKSAhPSAwKSB8fCAodmFsICE9IHRlbXApICkKKyAgICBp bnZhbGlkOgorICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAg ICAgICAgICAgICAiRG9tYWluIGF0dGVtcHRlZCBXUk1TUiAlMDh4IGZyb20gMHglMDE2IlBSSXg2 NCIgdG8gMHglMDE2IlBSSXg2NCJcbiIsCisgICAgICAgICAgICAgICAgICAgICByZWcsIHRlbXAs IHZhbCk7CisgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisgICAgfQorCisgICAgcmV0dXJu IFg4NkVNVUxfVU5IQU5ETEVBQkxFOworfQorCitzdGF0aWMgaW50IHByaXZfb3Bfd2JpbnZkKHN0 cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIC8qIElnbm9yZSB0aGUgaW5zdHJ1 Y3Rpb24gaWYgdW5wcml2aWxlZ2VkLiAqLworICAgIGlmICggIWNhY2hlX2ZsdXNoX3Blcm1pdHRl ZChjdXJyZW50LT5kb21haW4pICkKKyAgICAgICAgLyoKKyAgICAgICAgICogTm9uLXBoeXNkZXYg ZG9tYWluIGF0dGVtcHRlZCBXQklOVkQ7IGlnbm9yZSBmb3Igbm93IHNpbmNlCisgICAgICAgICAq IG5ld2VyIGxpbnV4IHVzZXMgdGhpcyBpbiBzb21lIHN0YXJ0LW9mLWRheSB0aW1pbmcgbG9vcHMu CisgICAgICAgICAqLworICAgICAgICA7CisgICAgZWxzZQorICAgICAgICB3YmludmQoKTsKKwor ICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9CisKK2ludCBwdl9lbXVsX2NwdWlkKHVpbnQzMl90 IGxlYWYsIHVpbnQzMl90IHN1YmxlYWYsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3B1aWRf bGVhZiAqcmVzLCBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICBndWVzdF9j cHVpZChjdXJyZW50LCBsZWFmLCBzdWJsZWFmLCByZXMpOworCisgICAgcmV0dXJuIFg4NkVNVUxf T0tBWTsKK30KKworc3RhdGljIGludCBwcml2X29wX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCB4ODZf ZW11bGF0ZV9zdGF0ZSAqc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgc3dpdGNoICggY3R4dC0+b3Bjb2RlICkK KyAgICB7CisgICAgY2FzZSAweDZjIC4uLiAweDZmOiAvKiBpbnMgLyBvdXRzICovCisgICAgY2Fz ZSAweGU0IC4uLiAweGU3OiAvKiBpbiAvIG91dCAoaW1tZWRpYXRlIHBvcnQpICovCisgICAgY2Fz ZSAweGVjIC4uLiAweGVmOiAvKiBpbiAvIG91dCAocG9ydCBpbiAlZHgpICovCisgICAgY2FzZSBY ODZFTVVMX09QQygweDBmLCAweDA2KTogLyogY2x0cyAqLworICAgIGNhc2UgWDg2RU1VTF9PUEMo MHgwZiwgMHgwOSk6IC8qIHdiaW52ZCAqLworICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHgy MCkgLi4uCisgICAgICAgICBYODZFTVVMX09QQygweDBmLCAweDIzKTogLyogbW92IHRvL2Zyb20g Y3IvZHIgKi8KKyAgICBjYXNlIFg4NkVNVUxfT1BDKDB4MGYsIDB4MzApOiAvKiB3cm1zciAqLwor ICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHgzMSk6IC8qIHJkdHNjICovCisgICAgY2FzZSBY ODZFTVVMX09QQygweDBmLCAweDMyKTogLyogcmRtc3IgKi8KKyAgICBjYXNlIFg4NkVNVUxfT1BD KDB4MGYsIDB4YTIpOiAvKiBjcHVpZCAqLworICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwor CisgICAgY2FzZSAweGZhOiBjYXNlIDB4ZmI6IC8qIGNsaSAvIHN0aSAqLworICAgICAgICBpZiAo ICFpb3BsX29rKGN1cnJlbnQsIGN0eHQtPnJlZ3MpICkKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAvKgorICAgICAgICAgKiBUaGlzIGlzIGp1c3QgdG9vIGRhbmdlcm91cyB0byBhbGxvdywg aW4gbXkgb3Bpbmlvbi4gQ29uc2lkZXIgaWYgdGhlCisgICAgICAgICAqIGNhbGxlciB0aGVuIHRy aWVzIHRvIHJlZW5hYmxlIGludGVycnVwdHMgdXNpbmcgUE9QRjogd2UgY2FuJ3QgdHJhcAorICAg ICAgICAgKiB0aGF0IGFuZCB3ZSdsbCBlbmQgdXAgd2l0aCBoYXJkLXRvLWRlYnVnIGxvY2t1cHMu IEZhc3QgJiBsb29zZSB3aWxsCisgICAgICAgICAqIGRvIGZvciB1cy4gOi0pCisgICAgICAgIHZj cHVfaW5mbyhjdXJyZW50LCBldnRjaG5fdXBjYWxsX21hc2spID0gKGN0eHQtPm9wY29kZSA9PSAw eGZhKTsKKyAgICAgICAgICovCisgICAgICAgIHJldHVybiBYODZFTVVMX0RPTkU7CisKKyAgICBj YXNlIFg4NkVNVUxfT1BDKDB4MGYsIDB4MDEpOgorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50 IG1vZHJtX3JtLCBtb2RybV9yZWc7CisKKyAgICAgICAgaWYgKCB4ODZfaW5zbl9tb2RybShzdGF0 ZSwgJm1vZHJtX3JtLCAmbW9kcm1fcmVnKSAhPSAzIHx8CisgICAgICAgICAgICAgKG1vZHJtX3Jt ICYgNykgIT0gMSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3dpdGNoICggbW9kcm1f cmVnICYgNyApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAyOiAvKiB4c2V0YnYgKi8KKyAgICAg ICAgY2FzZSA3OiAvKiByZHRzY3AgKi8KKyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7 CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIHJldHVybiBY ODZFTVVMX1VOSEFORExFQUJMRTsKK30KKworc3RhdGljIGludCBwcml2X29wX2luc25fZmV0Y2go ZW51bSB4ODZfc2VnbWVudCBzZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBf ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpj dHh0KQoreworICAgIGNvbnN0IHN0cnVjdCBwcml2X29wX2N0eHQgKnBvYyA9CisgICAgICAgIGNv bnRhaW5lcl9vZihjdHh0LCBzdHJ1Y3QgcHJpdl9vcF9jdHh0LCBjdHh0KTsKKyAgICB1bnNpZ25l ZCBpbnQgcmM7CisgICAgdW5zaWduZWQgbG9uZyBhZGRyID0gcG9jLT5jcy5iYXNlICsgb2Zmc2V0 OworCisgICAgQVNTRVJUKHNlZyA9PSB4ODZfc2VnX2NzKTsKKworICAgIC8qIFdlIGRvbid0IG1l YW4gdG8gZW11bGF0ZSBhbnkgYnJhbmNoZXMuICovCisgICAgaWYgKCAhYnl0ZXMgKQorICAgICAg ICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisKKyAgICByYyA9IHB2X2VtdWxfdmlydF90 b19saW5lYXIocG9jLT5jcy5iYXNlLCBvZmZzZXQsIGJ5dGVzLCBwb2MtPmNzLmxpbWl0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ODZfc2VnX2NzLCBjdHh0LCAmYWRkcik7Cisg ICAgaWYgKCByYyAhPSBYODZFTVVMX09LQVkgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICBp ZiAoIChyYyA9IF9fY29weV9mcm9tX3VzZXIocF9kYXRhLCAodm9pZCAqKWFkZHIsIGJ5dGVzKSkg IT0gMCApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBUT0RPOiBUaGlzIHNob3VsZCBy ZXBvcnQgUEZFQ19pbnNuX2ZldGNoIHdoZW4gZ29jLT5pbnNuX2ZldGNoICYmCisgICAgICAgICAq IGNwdV9oYXNfbngsIGJ1dCB3ZSdkIHRoZW4gbmVlZCBhICJmZXRjaCIgdmFyaWFudCBvZgorICAg ICAgICAgKiBfX2NvcHlfZnJvbV91c2VyKCkgcmVzcGVjdGluZyBOWCwgU01FUCwgYW5kIHByb3Rl Y3Rpb24ga2V5cy4KKyAgICAgICAgICovCisgICAgICAgIHg4Nl9lbXVsX3BhZ2VmYXVsdCgwLCBh ZGRyICsgYnl0ZXMgLSByYywgY3R4dCk7CisgICAgICAgIHJldHVybiBYODZFTVVMX0VYQ0VQVElP TjsKKyAgICB9CisKKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworfQorCisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHByaXZfb3Bfb3BzID0geworICAgIC5pbnNuX2ZldGNo ICAgICAgICAgID0gcHJpdl9vcF9pbnNuX2ZldGNoLAorICAgIC5yZWFkICAgICAgICAgICAgICAg ID0geDg2ZW11bF91bmhhbmRsZWFibGVfcncsCisgICAgLnZhbGlkYXRlICAgICAgICAgICAgPSBw cml2X29wX3ZhbGlkYXRlLAorICAgIC5yZWFkX2lvICAgICAgICAgICAgID0gcHJpdl9vcF9yZWFk X2lvLAorICAgIC53cml0ZV9pbyAgICAgICAgICAgID0gcHJpdl9vcF93cml0ZV9pbywKKyAgICAu cmVwX2lucyAgICAgICAgICAgICA9IHByaXZfb3BfcmVwX2lucywKKyAgICAucmVwX291dHMgICAg ICAgICAgICA9IHByaXZfb3BfcmVwX291dHMsCisgICAgLnJlYWRfc2VnbWVudCAgICAgICAgPSBw cml2X29wX3JlYWRfc2VnbWVudCwKKyAgICAucmVhZF9jciAgICAgICAgICAgICA9IHByaXZfb3Bf cmVhZF9jciwKKyAgICAud3JpdGVfY3IgICAgICAgICAgICA9IHByaXZfb3Bfd3JpdGVfY3IsCisg ICAgLnJlYWRfZHIgICAgICAgICAgICAgPSBwcml2X29wX3JlYWRfZHIsCisgICAgLndyaXRlX2Ry ICAgICAgICAgICAgPSBwcml2X29wX3dyaXRlX2RyLAorICAgIC5yZWFkX21zciAgICAgICAgICAg ID0gcHJpdl9vcF9yZWFkX21zciwKKyAgICAud3JpdGVfbXNyICAgICAgICAgICA9IHByaXZfb3Bf d3JpdGVfbXNyLAorICAgIC5jcHVpZCAgICAgICAgICAgICAgID0gcHZfZW11bF9jcHVpZCwKKyAg ICAud2JpbnZkICAgICAgICAgICAgICA9IHByaXZfb3Bfd2JpbnZkLAorfTsKKworaW50IGVtdWxh dGVfcHJpdmlsZWdlZF9vcChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKK3sKKyAgICBzdHJ1 Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7CisgICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJy LT5kb21haW47CisgICAgc3RydWN0IHByaXZfb3BfY3R4dCBjdHh0ID0geworICAgICAgICAuY3R4 dC5yZWdzID0gcmVncywKKyAgICAgICAgLmN0eHQudmVuZG9yID0gY3VycmQtPmFyY2guY3B1aWQt Png4Nl92ZW5kb3IsCisgICAgICAgIC5jdHh0LmxtYSA9ICFpc19wdl8zMmJpdF9kb21haW4oY3Vy cmQpLAorICAgIH07CisgICAgaW50IHJjOworICAgIHVuc2lnbmVkIGludCBlZmxhZ3MsIGFyOwor CisgICAgaWYgKCAhcmVhZF9kZXNjcmlwdG9yKHJlZ3MtPmNzLCBjdXJyLCAmY3R4dC5jcy5iYXNl LCAmY3R4dC5jcy5saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmFyLCAxKSB8fAor ICAgICAgICAgIShhciAmIF9TRUdNRU5UX1MpIHx8CisgICAgICAgICAhKGFyICYgX1NFR01FTlRf UCkgfHwKKyAgICAgICAgICEoYXIgJiBfU0VHTUVOVF9DT0RFKSApCisgICAgICAgIHJldHVybiAw OworCisgICAgLyogTWlycm9yIHZpcnR1YWxpemVkIHN0YXRlIGludG8gRUZMQUdTLiAqLworICAg IEFTU0VSVChyZWdzLT5lZmxhZ3MgJiBYODZfRUZMQUdTX0lGKTsKKyAgICBpZiAoIHZjcHVfaW5m byhjdXJyLCBldnRjaG5fdXBjYWxsX21hc2spICkKKyAgICAgICAgcmVncy0+ZWZsYWdzICY9IH5Y ODZfRUZMQUdTX0lGOworICAgIGVsc2UKKyAgICAgICAgcmVncy0+ZWZsYWdzIHw9IFg4Nl9FRkxB R1NfSUY7CisgICAgQVNTRVJUKCEocmVncy0+ZWZsYWdzICYgWDg2X0VGTEFHU19JT1BMKSk7Cisg ICAgcmVncy0+ZWZsYWdzIHw9IGN1cnItPmFyY2gucHZfdmNwdS5pb3BsOworICAgIGVmbGFncyA9 IHJlZ3MtPmVmbGFnczsKKworICAgIGN0eHQuY3R4dC5hZGRyX3NpemUgPSBhciAmIF9TRUdNRU5U X0wgPyA2NCA6IGFyICYgX1NFR01FTlRfREIgPyAzMiA6IDE2OworICAgIC8qIExlYXZlIHplcm8g aW4gY3R4dC5jdHh0LnNwX3NpemUsIGFzIGl0J3Mgbm90IG5lZWRlZC4gKi8KKyAgICByYyA9IHg4 Nl9lbXVsYXRlKCZjdHh0LmN0eHQsICZwcml2X29wX29wcyk7CisKKyAgICBpZiAoIGN0eHQuaW9f ZW11bF9zdHViICkKKyAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UoY3R4dC5pb19lbXVsX3N0dWIp OworCisgICAgLyoKKyAgICAgKiBVbi1taXJyb3IgdmlydHVhbGl6ZWQgc3RhdGUgZnJvbSBFRkxB R1MuCisgICAgICogTm90aGluZyB3ZSBhbGxvdyB0byBiZSBlbXVsYXRlZCBjYW4gY2hhbmdlIGFu eXRoaW5nIG90aGVyIHRoYW4gdGhlCisgICAgICogYXJpdGhtZXRpYyBiaXRzLCBhbmQgdGhlIHJl c3VtZSBmbGFnLgorICAgICAqLworICAgIEFTU0VSVCghKChyZWdzLT5lZmxhZ3MgXiBlZmxhZ3Mp ICYKKyAgICAgICAgICAgICB+KFg4Nl9FRkxBR1NfUkYgfCBYODZfRUZMQUdTX0FSSVRIX01BU0sp KSk7CisgICAgcmVncy0+ZWZsYWdzIHw9IFg4Nl9FRkxBR1NfSUY7CisgICAgcmVncy0+ZWZsYWdz ICY9IH5YODZfRUZMQUdTX0lPUEw7CisKKyAgICBzd2l0Y2ggKCByYyApCisgICAgeworICAgIGNh c2UgWDg2RU1VTF9PS0FZOgorICAgICAgICBpZiAoIGN0eHQudHNjICYgVFNDX0JBU0UgKQorICAg ICAgICB7CisgICAgICAgICAgICBpZiAoIGN0eHQudHNjICYgVFNDX0FVWCApCisgICAgICAgICAg ICAgICAgcHZfc29mdF9yZHRzYyhjdXJyLCByZWdzLCAxKTsKKyAgICAgICAgICAgIGVsc2UgaWYg KCBjdXJyZC0+YXJjaC52dHNjICkKKyAgICAgICAgICAgICAgICBwdl9zb2Z0X3JkdHNjKGN1cnIs IHJlZ3MsIDApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1zcl9zcGxpdChy ZWdzLCByZHRzYygpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggY3R4dC5jdHh0LnJldGly ZS5zaW5nbGVzdGVwICkKKyAgICAgICAgICAgIGN0eHQuYnBtYXRjaCB8PSBEUl9TVEVQOworICAg ICAgICBpZiAoIGN0eHQuYnBtYXRjaCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1cnItPmFy Y2guZGVidWdyZWdbNl0gfD0gY3R4dC5icG1hdGNoIHwgRFJfU1RBVFVTX1JFU0VSVkVEX09ORTsK KyAgICAgICAgICAgIGlmICggIShjdXJyLT5hcmNoLnB2X3ZjcHUudHJhcF9ib3VuY2UuZmxhZ3Mg JiBUQkZfRVhDRVBUSU9OKSApCisgICAgICAgICAgICAgICAgcHZfaW5qZWN0X2h3X2V4Y2VwdGlv bihUUkFQX2RlYnVnLCBYODZfRVZFTlRfTk9fRUMpOworICAgICAgICB9CisgICAgICAgIC8qIGZh bGwgdGhyb3VnaCAqLworICAgIGNhc2UgWDg2RU1VTF9SRVRSWToKKyAgICAgICAgcmV0dXJuIEVY Q1JFVF9mYXVsdF9maXhlZDsKKworICAgIGNhc2UgWDg2RU1VTF9FWENFUFRJT046CisgICAgICAg IHB2X2luamVjdF9ldmVudCgmY3R4dC5jdHh0LmV2ZW50KTsKKyAgICAgICAgcmV0dXJuIEVYQ1JF VF9mYXVsdF9maXhlZDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIExvY2Fs IHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFz aWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAor ICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvdHJhcHMuYyBiL3hlbi9hcmNo L3g4Ni90cmFwcy5jCmluZGV4IGNkOGNhMjAzOTguLmNkNDNlOWY0NGMgMTAwNjQ0Ci0tLSBhL3hl bi9hcmNoL3g4Ni90cmFwcy5jCisrKyBiL3hlbi9hcmNoL3g4Ni90cmFwcy5jCkBAIC03OCw2ICs3 OCw4IEBACiAjaW5jbHVkZSA8YXNtL2NwdWlkLmg+CiAjaW5jbHVkZSA8eHNtL3hzbS5oPgogCisj aW5jbHVkZSA8YXNtL3B2L3RyYXBzLmg+CisKIC8qCiAgKiBvcHRfbm1pOiBvbmUgb2YgJ2lnbm9y ZScsICdkb20wJywgb3IgJ2ZhdGFsJy4KICAqICBmYXRhbDogIFhlbiBwcmludHMgZGlhZ25vc3Rp YyBtZXNzYWdlIGFuZCB0aGVuIGhhbmdzLgpAQCAtNzA1LDQxICs3MDcsNiBAQCBzdGF0aWMgdm9p ZCBpbnN0cnVjdGlvbl9kb25lKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLCB1bnNpZ25lZCBs b25nIHJpcCkKICAgICB9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY2hlY2tfZ3Vlc3RfaW9f YnJlYWtwb2ludChzdHJ1Y3QgdmNwdSAqdiwKLSAgICB1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWdu ZWQgaW50IGxlbikKLXsKLSAgICB1bnNpZ25lZCBpbnQgd2lkdGgsIGksIG1hdGNoID0gMDsKLSAg ICB1bnNpZ25lZCBsb25nIHN0YXJ0OwotCi0gICAgaWYgKCAhKHYtPmFyY2guZGVidWdyZWdbNV0p IHx8Ci0gICAgICAgICAhKHYtPmFyY2gucHZfdmNwdS5jdHJscmVnWzRdICYgWDg2X0NSNF9ERSkg KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgNDsgaSsrICkKLSAg ICB7Ci0gICAgICAgIGlmICggISh2LT5hcmNoLmRlYnVncmVnWzVdICYKLSAgICAgICAgICAgICAg ICgzIDw8IChpICogRFJfRU5BQkxFX1NJWkUpKSkgKQotICAgICAgICAgICAgY29udGludWU7Ci0K LSAgICAgICAgc3RhcnQgPSB2LT5hcmNoLmRlYnVncmVnW2ldOwotICAgICAgICB3aWR0aCA9IDA7 Ci0KLSAgICAgICAgc3dpdGNoICggKHYtPmFyY2guZGVidWdyZWdbN10gPj4KLSAgICAgICAgICAg ICAgICAgIChEUl9DT05UUk9MX1NISUZUICsgaSAqIERSX0NPTlRST0xfU0laRSkpICYgMHhjICkK LSAgICAgICAgewotICAgICAgICBjYXNlIERSX0xFTl8xOiB3aWR0aCA9IDE7IGJyZWFrOwotICAg ICAgICBjYXNlIERSX0xFTl8yOiB3aWR0aCA9IDI7IGJyZWFrOwotICAgICAgICBjYXNlIERSX0xF Tl80OiB3aWR0aCA9IDQ7IGJyZWFrOwotICAgICAgICBjYXNlIERSX0xFTl84OiB3aWR0aCA9IDg7 IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCAoc3RhcnQgPCAocG9ydCArIGxlbikp ICYmICgoc3RhcnQgKyB3aWR0aCkgPiBwb3J0KSApCi0gICAgICAgICAgICBtYXRjaCB8PSAxIDw8 IGk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotfQotCiAvKgogICogQ2FsbGVkIGZyb20g YXNtIHRvIHNldCB1cCB0aGUgTUNFIHRyYXBib3VuY2UgaW5mby4KICAqIFJldHVybnMgMCBpZiBu byBjYWxsYmFjayBpcyBzZXQgdXAsIGVsc2UgMS4KQEAgLTE3MzMsMTMyNyArMTcwMCw2IEBAIHN0 YXRpYyBpbnQgcmVhZF9nYXRlX2Rlc2NyaXB0b3IodW5zaWduZWQgaW50IGdhdGVfc2VsLAogICAg IHJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHB2X2VtdWxfdmlydF90b19saW5lYXIodW5zaWdu ZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgbGltaXQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB4ODZfc2VnbWVudCBzZWcsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQg KmN0eHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAq YWRkcikKLXsKLSAgICBpbnQgcmMgPSBYODZFTVVMX09LQVk7Ci0KLSAgICAqYWRkciA9IGJhc2Ug KyBvZmZzZXQ7Ci0KLSAgICBpZiAoIGN0eHQtPmFkZHJfc2l6ZSA8IDY0ICkKLSAgICB7Ci0gICAg ICAgIGlmICggbGltaXQgPCBieXRlcyAtIDEgfHwgb2Zmc2V0ID4gbGltaXQgLSBieXRlcyArIDEg KQotICAgICAgICAgICAgcmMgPSBYODZFTVVMX0VYQ0VQVElPTjsKLSAgICAgICAgKmFkZHIgPSAo dWludDMyX3QpKmFkZHI7Ci0gICAgfQotICAgIGVsc2UgaWYgKCAhX19hZGRyX29rKCphZGRyKSAp Ci0gICAgICAgIHJjID0gWDg2RU1VTF9FWENFUFRJT047Ci0KLSAgICBpZiAoIHVubGlrZWx5KHJj ID09IFg4NkVNVUxfRVhDRVBUSU9OKSApCi0gICAgICAgIHg4Nl9lbXVsX2h3X2V4Y2VwdGlvbihz ZWcgIT0geDg2X3NlZ19zcyA/IFRSQVBfZ3BfZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogVFJBUF9zdGFja19lcnJvciwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDAsIGN0eHQpOwotCi0gICAgcmV0dXJuIHJjOwotfQotCi1zdHJ1 Y3QgcHJpdl9vcF9jdHh0IHsKLSAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCBjdHh0OwotICAg IHN0cnVjdCB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSwgbGltaXQ7Ci0gICAgfSBjczsK LSAgICBjaGFyICppb19lbXVsX3N0dWI7Ci0gICAgdW5zaWduZWQgaW50IGJwbWF0Y2g7Ci0gICAg dW5zaWduZWQgaW50IHRzYzsKLSNkZWZpbmUgVFNDX0JBU0UgMQotI2RlZmluZSBUU0NfQVVYIDIK LX07Ci0KLXN0YXRpYyBpbnQgcHJpdl9vcF9pbnNuX2ZldGNoKGVudW0geDg2X3NlZ21lbnQgc2Vn LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX2RhdGEsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKLXsKLSAgICBjb25zdCBz dHJ1Y3QgcHJpdl9vcF9jdHh0ICpwb2MgPQotICAgICAgICBjb250YWluZXJfb2YoY3R4dCwgc3Ry dWN0IHByaXZfb3BfY3R4dCwgY3R4dCk7Ci0gICAgdW5zaWduZWQgaW50IHJjOwotICAgIHVuc2ln bmVkIGxvbmcgYWRkciA9IHBvYy0+Y3MuYmFzZSArIG9mZnNldDsKLQotICAgIEFTU0VSVChzZWcg PT0geDg2X3NlZ19jcyk7Ci0KLSAgICAvKiBXZSBkb24ndCBtZWFuIHRvIGVtdWxhdGUgYW55IGJy YW5jaGVzLiAqLwotICAgIGlmICggIWJ5dGVzICkKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5I QU5ETEVBQkxFOwotCi0gICAgcmMgPSBwdl9lbXVsX3ZpcnRfdG9fbGluZWFyKHBvYy0+Y3MuYmFz ZSwgb2Zmc2V0LCBieXRlcywgcG9jLT5jcy5saW1pdCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeDg2X3NlZ19jcywgY3R4dCwgJmFkZHIpOwotICAgIGlmICggcmMgIT0gWDg2RU1V TF9PS0FZICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0gICAgaWYgKCAocmMgPSBfX2NvcHlfZnJv bV91c2VyKHBfZGF0YSwgKHZvaWQgKilhZGRyLCBieXRlcykpICE9IDAgKQotICAgIHsKLSAgICAg ICAgLyoKLSAgICAgICAgICogVE9ETzogVGhpcyBzaG91bGQgcmVwb3J0IFBGRUNfaW5zbl9mZXRj aCB3aGVuIGdvYy0+aW5zbl9mZXRjaCAmJgotICAgICAgICAgKiBjcHVfaGFzX254LCBidXQgd2Un ZCB0aGVuIG5lZWQgYSAiZmV0Y2giIHZhcmlhbnQgb2YKLSAgICAgICAgICogX19jb3B5X2Zyb21f dXNlcigpIHJlc3BlY3RpbmcgTlgsIFNNRVAsIGFuZCBwcm90ZWN0aW9uIGtleXMuCi0gICAgICAg ICAqLwotICAgICAgICB4ODZfZW11bF9wYWdlZmF1bHQoMCwgYWRkciArIGJ5dGVzIC0gcmMsIGN0 eHQpOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9FWENFUFRJT047Ci0gICAgfQotCi0gICAgcmV0 dXJuIFg4NkVNVUxfT0tBWTsKLX0KLQotc3RhdGljIGludCBwcml2X29wX3JlYWRfc2VnbWVudChl bnVtIHg4Nl9zZWdtZW50IHNlZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHNlZ21lbnRfcmVnaXN0ZXIgKnJlZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17Ci0gICAgLyogQ2hlY2sgaWYgdGhp cyBpcyBhbiBhdHRlbXB0IHRvIGFjY2VzcyB0aGUgSS9PIGJpdG1hcC4gKi8KLSAgICBpZiAoIHNl ZyA9PSB4ODZfc2VnX3RyICkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoIGN0eHQtPm9wY29kZSAp Ci0gICAgICAgIHsKLSAgICAgICAgY2FzZSAweDZjIC4uLiAweDZmOiAvKiBpbnMgLyBvdXRzICov Ci0gICAgICAgIGNhc2UgMHhlNCAuLi4gMHhlNzogLyogaW4gLyBvdXQgKGltbWVkaWF0ZSBwb3J0 KSAqLwotICAgICAgICBjYXNlIDB4ZWMgLi4uIDB4ZWY6IC8qIGluIC8gb3V0IChwb3J0IGluICVk eCkgKi8KLSAgICAgICAgICAgIC8qIERlZmVyIHRoZSBjaGVjayB0byBwcml2X29wX3tyZWFkLHdy aXRlfV9pbygpLiAqLwotICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfRE9ORTsKLSAgICAgICAg fQotICAgIH0KLQotICAgIGlmICggY3R4dC0+YWRkcl9zaXplIDwgNjQgKQotICAgIHsKLSAgICAg ICAgdW5zaWduZWQgbG9uZyBsaW1pdDsKLSAgICAgICAgdW5zaWduZWQgaW50IHNlbCwgYXI7Ci0K LSAgICAgICAgc3dpdGNoICggc2VnICkKLSAgICAgICAgewotICAgICAgICBjYXNlIHg4Nl9zZWdf Y3M6IHNlbCA9IGN0eHQtPnJlZ3MtPmNzOyBicmVhazsKLSAgICAgICAgY2FzZSB4ODZfc2VnX2Rz OiBzZWwgPSByZWFkX3NyZWcoZHMpOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgeDg2X3NlZ19lczog c2VsID0gcmVhZF9zcmVnKGVzKTsgIGJyZWFrOwotICAgICAgICBjYXNlIHg4Nl9zZWdfZnM6IHNl bCA9IHJlYWRfc3JlZyhmcyk7ICBicmVhazsKLSAgICAgICAgY2FzZSB4ODZfc2VnX2dzOiBzZWwg PSByZWFkX3NyZWcoZ3MpOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgeDg2X3NlZ19zczogc2VsID0g Y3R4dC0+cmVncy0+c3M7IGJyZWFrOwotICAgICAgICBkZWZhdWx0OiByZXR1cm4gWDg2RU1VTF9V TkhBTkRMRUFCTEU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoICFyZWFkX2Rlc2NyaXB0b3Io c2VsLCBjdXJyZW50LCAmcmVnLT5iYXNlLCAmbGltaXQsICZhciwgMCkgKQotICAgICAgICAgICAg cmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwotCi0gICAgICAgIHJlZy0+bGltaXQgPSBsaW1p dDsKLSAgICAgICAgcmVnLT5hdHRyLmJ5dGVzID0gYXIgPj4gODsKLSAgICB9Ci0gICAgZWxzZQot ICAgIHsKLSAgICAgICAgc3dpdGNoICggc2VnICkKLSAgICAgICAgewotICAgICAgICBkZWZhdWx0 OgotICAgICAgICAgICAgaWYgKCAhaXNfeDg2X3VzZXJfc2VnbWVudChzZWcpICkKLSAgICAgICAg ICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci0gICAgICAgICAgICByZWctPmJh c2UgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgeDg2X3NlZ19mczoKLSAg ICAgICAgICAgIHJlZy0+YmFzZSA9IHJkZnNiYXNlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgY2FzZSB4ODZfc2VnX2dzOgotICAgICAgICAgICAgcmVnLT5iYXNlID0gcmRnc2Jhc2Uo KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVnLT5saW1pdCA9 IH4wVTsKLQotICAgICAgICByZWctPmF0dHIuYnl0ZXMgPSAwOwotICAgICAgICByZWctPmF0dHIu ZmllbGRzLnR5cGUgPSBfU0VHTUVOVF9XUiA+PiA4OwotICAgICAgICBpZiAoIHNlZyA9PSB4ODZf c2VnX2NzICkKLSAgICAgICAgewotICAgICAgICAgICAgcmVnLT5hdHRyLmZpZWxkcy50eXBlIHw9 IF9TRUdNRU5UX0NPREUgPj4gODsKLSAgICAgICAgICAgIHJlZy0+YXR0ci5maWVsZHMubCA9IDE7 Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVnLT5hdHRyLmZpZWxkcy5k YiA9IDE7Ci0gICAgICAgIHJlZy0+YXR0ci5maWVsZHMucyAgID0gMTsKLSAgICAgICAgcmVnLT5h dHRyLmZpZWxkcy5kcGwgPSAzOwotICAgICAgICByZWctPmF0dHIuZmllbGRzLnAgICA9IDE7Ci0g ICAgICAgIHJlZy0+YXR0ci5maWVsZHMuZyAgID0gMTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAq IEZvciB4ODZfZW11bGF0ZS5jJ3MgbW9kZV9yaW5nMCgpIHRvIHdvcmssIGZha2UgYSBEUEwgb2Yg emVyby4KLSAgICAgKiBBbHNvIGRvIHRoaXMgZm9yIGNvbnNpc3RlbmN5IGZvciBub24tY29uZm9y bWluZyBjb2RlIHNlZ21lbnRzLgotICAgICAqLwotICAgIGlmICggKHNlZyA9PSB4ODZfc2VnX3Nz IHx8Ci0gICAgICAgICAgKHNlZyA9PSB4ODZfc2VnX2NzICYmCi0gICAgICAgICAgICEocmVnLT5h dHRyLmZpZWxkcy50eXBlICYgKF9TRUdNRU5UX0VDID4+IDgpKSkpICYmCi0gICAgICAgICBndWVz dF9rZXJuZWxfbW9kZShjdXJyZW50LCBjdHh0LT5yZWdzKSApCi0gICAgICAgIHJlZy0+YXR0ci5m aWVsZHMuZHBsID0gMDsKLQotICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci19Ci0KLS8qIFBlcmZv cm0gSU9QTCBjaGVjayBiZXR3ZWVuIHRoZSB2Y3B1J3Mgc2hhZG93ZWQgSU9QTCwgYW5kIHRoZSBh c3N1bWVkIGNwbC4gKi8KLXN0YXRpYyBib29sX3QgaW9wbF9vayhjb25zdCBzdHJ1Y3QgdmNwdSAq diwgY29uc3Qgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCi17Ci0gICAgdW5zaWduZWQgaW50 IGNwbCA9IGd1ZXN0X2tlcm5lbF9tb2RlKHYsIHJlZ3MpID8KLSAgICAgICAgKFZNX0FTU0lTVCh2 LT5kb21haW4sIGFyY2hpdGVjdHVyYWxfaW9wbCkgPyAwIDogMSkgOiAzOwotCi0gICAgQVNTRVJU KCh2LT5hcmNoLnB2X3ZjcHUuaW9wbCAmIH5YODZfRUZMQUdTX0lPUEwpID09IDApOwotCi0gICAg cmV0dXJuIElPUEwoY3BsKSA8PSB2LT5hcmNoLnB2X3ZjcHUuaW9wbDsKLX0KLQotLyogSGFzIHRo ZSBndWVzdCByZXF1ZXN0ZWQgc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciB0aGlzIEkvTyBhY2Nl c3M/ICovCi1zdGF0aWMgaW50IGd1ZXN0X2lvX29rYXkoCi0gICAgdW5zaWduZWQgaW50IHBvcnQs IHVuc2lnbmVkIGludCBieXRlcywKLSAgICBzdHJ1Y3QgdmNwdSAqdiwgc3RydWN0IGNwdV91c2Vy X3JlZ3MgKnJlZ3MpCi17Ci0gICAgLyogSWYgaW4gdXNlciBtb2RlLCBzd2l0Y2ggdG8ga2VybmVs IG1vZGUganVzdCB0byByZWFkIEkvTyBiaXRtYXAuICovCi0gICAgaW50IHVzZXJfbW9kZSA9ICEo di0+YXJjaC5mbGFncyAmIFRGX2tlcm5lbF9tb2RlKTsKLSNkZWZpbmUgVE9HR0xFX01PREUoKSBp ZiAoIHVzZXJfbW9kZSApIHRvZ2dsZV9ndWVzdF9tb2RlKHYpCi0KLSAgICBpZiAoIGlvcGxfb2so diwgcmVncykgKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGlmICggdi0+YXJjaC5wdl92Y3B1 LmlvYm1wX2xpbWl0ID4gKHBvcnQgKyBieXRlcykgKQotICAgIHsKLSAgICAgICAgdW5pb24geyB1 aW50OF90IGJ5dGVzWzJdOyB1aW50MTZfdCBtYXNrOyB9IHg7Ci0KLSAgICAgICAgLyoKLSAgICAg ICAgICogR3JhYiBwZXJtaXNzaW9uIGJ5dGVzIGZyb20gZ3Vlc3Qgc3BhY2UuIEluYWNjZXNzaWJs ZSBieXRlcyBhcmUKLSAgICAgICAgICogcmVhZCBhcyAweGZmIChubyBhY2Nlc3MgYWxsb3dlZCku Ci0gICAgICAgICAqLwotICAgICAgICBUT0dHTEVfTU9ERSgpOwotICAgICAgICBzd2l0Y2ggKCBf X2NvcHlfZnJvbV9ndWVzdF9vZmZzZXQoeC5ieXRlcywgdi0+YXJjaC5wdl92Y3B1LmlvYm1wLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydD4+MywgMikgKQot ICAgICAgICB7Ci0gICAgICAgIGRlZmF1bHQ6IHguYnl0ZXNbMF0gPSB+MDsKLSAgICAgICAgICAg IC8qIGZhbGx0aHJvdWdoICovCi0gICAgICAgIGNhc2UgMTogIHguYnl0ZXNbMV0gPSB+MDsKLSAg ICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCi0gICAgICAgIGNhc2UgMDogIGJyZWFrOwotICAg ICAgICB9Ci0gICAgICAgIFRPR0dMRV9NT0RFKCk7Ci0KLSAgICAgICAgaWYgKCAoeC5tYXNrICYg KCgoMTw8Ynl0ZXMpLTEpIDw8IChwb3J0JjcpKSkgPT0gMCApCi0gICAgICAgICAgICByZXR1cm4g MTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLyogSGFzIHRoZSBhZG1pbmlzdHJhdG9y IGdyYW50ZWQgc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciB0aGlzIEkvTyBhY2Nlc3M/ICovCi1z dGF0aWMgYm9vbF90IGFkbWluX2lvX29rYXkodW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGlu dCBieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZG9tYWlu ICpkKQotewotICAgIC8qCi0gICAgICogUG9ydCAweGNmOCAoQ09ORklHX0FERFJFU1MpIGlzIG9u bHkgdmlzaWJsZSBmb3IgRFdPUkQgYWNjZXNzZXMuCi0gICAgICogV2UgbmV2ZXIgcGVybWl0IGRp cmVjdCBhY2Nlc3MgdG8gdGhhdCByZWdpc3Rlci4KLSAgICAgKi8KLSAgICBpZiAoIChwb3J0ID09 IDB4Y2Y4KSAmJiAoYnl0ZXMgPT0gNCkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIFdl IGFsc28gbmV2ZXIgcGVybWl0IGRpcmVjdCBhY2Nlc3MgdG8gdGhlIFJUQy9DTU9TIHJlZ2lzdGVy cy4gKi8KLSAgICBpZiAoICgocG9ydCAmIH4xKSA9PSBSVENfUE9SVCgwKSkgKQotICAgICAgICBy ZXR1cm4gMDsKLQotICAgIHJldHVybiBpb3BvcnRzX2FjY2Vzc19wZXJtaXR0ZWQoZCwgcG9ydCwg cG9ydCArIGJ5dGVzIC0gMSk7Ci19Ci0KLXN0YXRpYyBib29sX3QgcGNpX2NmZ19vayhzdHJ1Y3Qg ZG9tYWluICpjdXJyZCwgdW5zaWduZWQgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBzaXplLCB1aW50MzJfdCAqd3JpdGUpCi17Ci0gICAgdWludDMyX3Qg bWFjaGluZV9iZGY7Ci0KLSAgICBpZiAoICFpc19oYXJkd2FyZV9kb21haW4oY3VycmQpICkKLSAg ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoICFDRjhfRU5BQkxFRChjdXJyZC0+YXJjaC5wY2lf Y2Y4KSApCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgbWFjaGluZV9iZGYgPSBDRjhfQkRGKGN1 cnJkLT5hcmNoLnBjaV9jZjgpOwotICAgIGlmICggd3JpdGUgKQotICAgIHsKLSAgICAgICAgY29u c3QgdW5zaWduZWQgbG9uZyAqcm9fbWFwID0gcGNpX2dldF9yb19tYXAoMCk7Ci0KLSAgICAgICAg aWYgKCByb19tYXAgJiYgdGVzdF9iaXQobWFjaGluZV9iZGYsIHJvX21hcCkgKQotICAgICAgICAg ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHN0YXJ0IHw9IENGOF9BRERSX0xPKGN1cnJkLT5hcmNo LnBjaV9jZjgpOwotICAgIC8qIEFNRCBleHRlbmRlZCBjb25maWd1cmF0aW9uIHNwYWNlIGFjY2Vz cz8gKi8KLSAgICBpZiAoIENGOF9BRERSX0hJKGN1cnJkLT5hcmNoLnBjaV9jZjgpICYmCi0gICAg ICAgICBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYKLSAgICAg ICAgIGJvb3RfY3B1X2RhdGEueDg2ID49IDB4MTAgJiYgYm9vdF9jcHVfZGF0YS54ODYgPD0gMHgx NyApCi0gICAgewotICAgICAgICB1aW50NjRfdCBtc3JfdmFsOwotCi0gICAgICAgIGlmICggcmRt c3Jfc2FmZShNU1JfQU1ENjRfTkJfQ0ZHLCBtc3JfdmFsKSApCi0gICAgICAgICAgICByZXR1cm4g MDsKLSAgICAgICAgaWYgKCBtc3JfdmFsICYgKDFVTEwgPDwgQU1ENjRfTkJfQ0ZHX0NGOF9FWFRf RU5BQkxFX0JJVCkgKQotICAgICAgICAgICAgc3RhcnQgfD0gQ0Y4X0FERFJfSEkoY3VycmQtPmFy Y2gucGNpX2NmOCk7Ci0gICAgfQotCi0gICAgcmV0dXJuICF3cml0ZSA/Ci0gICAgICAgICAgIHhz bV9wY2lfY29uZmlnX3Blcm1pc3Npb24oWFNNX0hPT0ssIGN1cnJkLCBtYWNoaW5lX2JkZiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgc3RhcnQgKyBzaXplIC0g MSwgMCkgPT0gMCA6Ci0gICAgICAgICAgIHBjaV9jb25mX3dyaXRlX2ludGVyY2VwdCgwLCBtYWNo aW5lX2JkZiwgc3RhcnQsIHNpemUsIHdyaXRlKSA+PSAwOwotfQotCi11aW50MzJfdCBndWVzdF9p b19yZWFkKHVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0gICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkb21haW4gKmN1cnJkKQotewotICAgIHVpbnQzMl90IGRhdGEg PSAwOwotICAgIHVuc2lnbmVkIGludCBzaGlmdCA9IDA7Ci0KLSAgICBpZiAoIGFkbWluX2lvX29r YXkocG9ydCwgYnl0ZXMsIGN1cnJkKSApCi0gICAgewotICAgICAgICBzd2l0Y2ggKCBieXRlcyAp Ci0gICAgICAgIHsKLSAgICAgICAgY2FzZSAxOiByZXR1cm4gaW5iKHBvcnQpOwotICAgICAgICBj YXNlIDI6IHJldHVybiBpbncocG9ydCk7Ci0gICAgICAgIGNhc2UgNDogcmV0dXJuIGlubChwb3J0 KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdoaWxlICggYnl0ZXMgIT0gMCApCi0gICAgewot ICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IDE7Ci0gICAgICAgIHVpbnQzMl90IHN1Yl9kYXRh ID0gfjA7Ci0KLSAgICAgICAgaWYgKCAocG9ydCA9PSAweDQyKSB8fCAocG9ydCA9PSAweDQzKSB8 fCAocG9ydCA9PSAweDYxKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN1Yl9kYXRhID0gcHZf cGl0X2hhbmRsZXIocG9ydCwgMCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIHBv cnQgPT0gUlRDX1BPUlQoMCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdWJfZGF0YSA9IGN1 cnJkLT5hcmNoLmNtb3NfaWR4OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCAocG9ydCA9 PSBSVENfUE9SVCgxKSkgJiYKLSAgICAgICAgICAgICAgICAgIGlvcG9ydHNfYWNjZXNzX3Blcm1p dHRlZChjdXJyZCwgUlRDX1BPUlQoMCksIFJUQ19QT1JUKDEpKSApCi0gICAgICAgIHsKLSAgICAg ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLSAgICAgICAgICAgIHNwaW5fbG9ja19pcnFz YXZlKCZydGNfbG9jaywgZmxhZ3MpOwotICAgICAgICAgICAgb3V0YihjdXJyZC0+YXJjaC5jbW9z X2lkeCAmIDB4N2YsIFJUQ19QT1JUKDApKTsKLSAgICAgICAgICAgIHN1Yl9kYXRhID0gaW5iKFJU Q19QT1JUKDEpKTsKLSAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2Nr LCBmbGFncyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIChwb3J0ID09IDB4Y2Y4KSAm JiAoYnl0ZXMgPT0gNCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzaXplID0gNDsKLSAgICAg ICAgICAgIHN1Yl9kYXRhID0gY3VycmQtPmFyY2gucGNpX2NmODsKLSAgICAgICAgfQotICAgICAg ICBlbHNlIGlmICggKHBvcnQgJiAweGZmZmMpID09IDB4Y2ZjICkKLSAgICAgICAgewotICAgICAg ICAgICAgc2l6ZSA9IG1pbihieXRlcywgNCAtIChwb3J0ICYgMykpOwotICAgICAgICAgICAgaWYg KCBzaXplID09IDMgKQotICAgICAgICAgICAgICAgIHNpemUgPSAyOwotICAgICAgICAgICAgaWYg KCBwY2lfY2ZnX29rKGN1cnJkLCBwb3J0ICYgMywgc2l6ZSwgTlVMTCkgKQotICAgICAgICAgICAg ICAgIHN1Yl9kYXRhID0gcGNpX2NvbmZfcmVhZChjdXJyZC0+YXJjaC5wY2lfY2Y4LCBwb3J0ICYg Mywgc2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIHNpemUgPT0gNCApCi0gICAgICAg ICAgICByZXR1cm4gc3ViX2RhdGE7Ci0KLSAgICAgICAgZGF0YSB8PSAoc3ViX2RhdGEgJiAoKDF1 IDw8IChzaXplICogOCkpIC0gMSkpIDw8IHNoaWZ0OwotICAgICAgICBzaGlmdCArPSBzaXplICog ODsKLSAgICAgICAgcG9ydCArPSBzaXplOwotICAgICAgICBieXRlcyAtPSBzaXplOwotICAgIH0K LQotICAgIHJldHVybiBkYXRhOwotfQotCi12b2lkIGd1ZXN0X2lvX3dyaXRlKHVuc2lnbmVkIGlu dCBwb3J0LCB1bnNpZ25lZCBpbnQgYnl0ZXMsIHVpbnQzMl90IGRhdGEsCi0gICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBkb21haW4gKmN1cnJkKQotewotICAgIGlmICggYWRtaW5faW9fb2theShw b3J0LCBieXRlcywgY3VycmQpICkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoIGJ5dGVzICkgewot ICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBvdXRiKCh1aW50OF90KWRhdGEsIHBvcnQpOwot ICAgICAgICAgICAgaWYgKCBwdl9wb3N0X291dGJfaG9vayApCi0gICAgICAgICAgICAgICAgcHZf cG9zdF9vdXRiX2hvb2socG9ydCwgKHVpbnQ4X3QpZGF0YSk7Ci0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgb3V0dygodWludDE2X3QpZGF0YSwgcG9ydCk7 Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgb3V0bChk YXRhLCBwb3J0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy bjsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIGJ5dGVzICE9IDAgKQotICAgIHsKLSAgICAgICAgdW5z aWduZWQgaW50IHNpemUgPSAxOwotCi0gICAgICAgIGlmICggKHBvcnQgPT0gMHg0MikgfHwgKHBv cnQgPT0gMHg0MykgfHwgKHBvcnQgPT0gMHg2MSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBw dl9waXRfaGFuZGxlcihwb3J0LCAodWludDhfdClkYXRhLCAxKTsKLSAgICAgICAgfQotICAgICAg ICBlbHNlIGlmICggcG9ydCA9PSBSVENfUE9SVCgwKSApCi0gICAgICAgIHsKLSAgICAgICAgICAg IGN1cnJkLT5hcmNoLmNtb3NfaWR4ID0gZGF0YTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlm ICggKHBvcnQgPT0gUlRDX1BPUlQoMSkpICYmCi0gICAgICAgICAgICAgICAgICBpb3BvcnRzX2Fj Y2Vzc19wZXJtaXR0ZWQoY3VycmQsIFJUQ19QT1JUKDApLCBSVENfUE9SVCgxKSkgKQotICAgICAg ICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0gICAgICAgICAgICBpZiAo IHB2X3J0Y19oYW5kbGVyICkKLSAgICAgICAgICAgICAgICBwdl9ydGNfaGFuZGxlcihjdXJyZC0+ YXJjaC5jbW9zX2lkeCAmIDB4N2YsIGRhdGEpOwotICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNh dmUoJnJ0Y19sb2NrLCBmbGFncyk7Ci0gICAgICAgICAgICBvdXRiKGN1cnJkLT5hcmNoLmNtb3Nf aWR4ICYgMHg3ZiwgUlRDX1BPUlQoMCkpOwotICAgICAgICAgICAgb3V0YihkYXRhLCBSVENfUE9S VCgxKSk7Ci0gICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxh Z3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCAocG9ydCA9PSAweGNmOCkgJiYgKGJ5 dGVzID09IDQpICkKLSAgICAgICAgewotICAgICAgICAgICAgc2l6ZSA9IDQ7Ci0gICAgICAgICAg ICBjdXJyZC0+YXJjaC5wY2lfY2Y4ID0gZGF0YTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlm ICggKHBvcnQgJiAweGZmZmMpID09IDB4Y2ZjICkKLSAgICAgICAgewotICAgICAgICAgICAgc2l6 ZSA9IG1pbihieXRlcywgNCAtIChwb3J0ICYgMykpOwotICAgICAgICAgICAgaWYgKCBzaXplID09 IDMgKQotICAgICAgICAgICAgICAgIHNpemUgPSAyOwotICAgICAgICAgICAgaWYgKCBwY2lfY2Zn X29rKGN1cnJkLCBwb3J0ICYgMywgc2l6ZSwgJmRhdGEpICkKLSAgICAgICAgICAgICAgICBwY2lf Y29uZl93cml0ZShjdXJyZC0+YXJjaC5wY2lfY2Y4LCBwb3J0ICYgMywgc2l6ZSwgZGF0YSk7Ci0g ICAgICAgIH0KLQotICAgICAgICBpZiAoIHNpemUgPT0gNCApCi0gICAgICAgICAgICByZXR1cm47 Ci0KLSAgICAgICAgcG9ydCArPSBzaXplOwotICAgICAgICBieXRlcyAtPSBzaXplOwotICAgICAg ICBkYXRhID4+PSBzaXplICogODsKLSAgICB9Ci19Ci0KLS8qIEkvTyBlbXVsYXRpb24gc3VwcG9y dC4gSGVscGVyIHJvdXRpbmVzIGZvciwgYW5kIHR5cGUgb2YsIHRoZSBzdGFjayBzdHViLiovCi12 b2lkIGhvc3RfdG9fZ3Vlc3RfZ3ByX3N3aXRjaChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqKTsKLXVu c2lnbmVkIGxvbmcgZ3Vlc3RfdG9faG9zdF9ncHJfc3dpdGNoKHVuc2lnbmVkIGxvbmcpOwotCi12 b2lkICgqcHZfcG9zdF9vdXRiX2hvb2spKHVuc2lnbmVkIGludCBwb3J0LCB1OCB2YWx1ZSk7Ci0K LXR5cGVkZWYgdm9pZCBpb19lbXVsX3N0dWJfdChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqKTsKLQot c3RhdGljIGlvX2VtdWxfc3R1Yl90ICppb19lbXVsX3N0dWJfc2V0dXAoc3RydWN0IHByaXZfb3Bf Y3R4dCAqY3R4dCwgdTggb3Bjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcykKLXsKLSAgICBp ZiAoICFjdHh0LT5pb19lbXVsX3N0dWIgKQotICAgICAgICBjdHh0LT5pb19lbXVsX3N0dWIgPSBt YXBfZG9tYWluX3BhZ2UoX21mbih0aGlzX2NwdShzdHVicy5tZm4pKSkgKwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXNfY3B1KHN0dWJzLmFkZHIpICYK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+UEFHRV9NQVNL KSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFVCX0JV Rl9TSVpFIC8gMjsKLQotICAgIC8qIG1vdnEgJGhvc3RfdG9fZ3Vlc3RfZ3ByX3N3aXRjaCwlcmN4 ICovCi0gICAgY3R4dC0+aW9fZW11bF9zdHViWzBdID0gMHg0ODsKLSAgICBjdHh0LT5pb19lbXVs X3N0dWJbMV0gPSAweGI5OwotICAgICoodm9pZCAqKikmY3R4dC0+aW9fZW11bF9zdHViWzJdID0g KHZvaWQgKilob3N0X3RvX2d1ZXN0X2dwcl9zd2l0Y2g7Ci0gICAgLyogY2FsbHEgKiVyY3ggKi8K LSAgICBjdHh0LT5pb19lbXVsX3N0dWJbMTBdID0gMHhmZjsKLSAgICBjdHh0LT5pb19lbXVsX3N0 dWJbMTFdID0gMHhkMTsKLSAgICAvKiBkYXRhMTYgb3Igbm9wICovCi0gICAgY3R4dC0+aW9fZW11 bF9zdHViWzEyXSA9IChieXRlcyAhPSAyKSA/IDB4OTAgOiAweDY2OwotICAgIC8qIDxpby1hY2Nl c3Mgb3Bjb2RlPiAqLwotICAgIGN0eHQtPmlvX2VtdWxfc3R1YlsxM10gPSBvcGNvZGU7Ci0gICAg LyogaW1tOCBvciBub3AgKi8KLSAgICBjdHh0LT5pb19lbXVsX3N0dWJbMTRdID0gIShvcGNvZGUg JiA4KSA/IHBvcnQgOiAweDkwOwotICAgIC8qIHJldCAoanVtcHMgdG8gZ3Vlc3RfdG9faG9zdF9n cHJfc3dpdGNoKSAqLwotICAgIGN0eHQtPmlvX2VtdWxfc3R1YlsxNV0gPSAweGMzOwotICAgIEJV SUxEX0JVR19PTihTVFVCX0JVRl9TSVpFIC8gMiA8IDE2KTsKLQotICAgIGlmICggaW9lbXVsX2hh bmRsZV9xdWlyayApCi0gICAgICAgIGlvZW11bF9oYW5kbGVfcXVpcmsob3Bjb2RlLCAmY3R4dC0+ aW9fZW11bF9zdHViWzEyXSwgY3R4dC0+Y3R4dC5yZWdzKTsKLQotICAgIC8qIEhhbmR5IGZ1bmN0 aW9uLXR5cGVkIHBvaW50ZXIgdG8gdGhlIHN0dWIuICovCi0gICAgcmV0dXJuICh2b2lkICopKHRo aXNfY3B1KHN0dWJzLmFkZHIpICsgU1RVQl9CVUZfU0laRSAvIDIpOwotfQotCi1zdGF0aWMgaW50 IHByaXZfb3BfcmVhZF9pbyh1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IGJ5dGVzLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqdmFsLCBzdHJ1Y3QgeDg2 X2VtdWxhdGVfY3R4dCAqY3R4dCkKLXsKLSAgICBzdHJ1Y3QgcHJpdl9vcF9jdHh0ICpwb2MgPSBj b250YWluZXJfb2YoY3R4dCwgc3RydWN0IHByaXZfb3BfY3R4dCwgY3R4dCk7Ci0gICAgc3RydWN0 IHZjcHUgKmN1cnIgPSBjdXJyZW50OwotICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3VycmVu dC0+ZG9tYWluOwotCi0gICAgLyogSU5TIG11c3Qgbm90IGNvbWUgaGVyZS4gKi8KLSAgICBBU1NF UlQoKGN0eHQtPm9wY29kZSAmIH45KSA9PSAweGU0KTsKLQotICAgIGlmICggIWd1ZXN0X2lvX29r YXkocG9ydCwgYnl0ZXMsIGN1cnIsIGN0eHQtPnJlZ3MpICkKLSAgICAgICAgcmV0dXJuIFg4NkVN VUxfVU5IQU5ETEVBQkxFOwotCi0gICAgcG9jLT5icG1hdGNoID0gY2hlY2tfZ3Vlc3RfaW9fYnJl YWtwb2ludChjdXJyLCBwb3J0LCBieXRlcyk7Ci0KLSAgICBpZiAoIGFkbWluX2lvX29rYXkocG9y dCwgYnl0ZXMsIGN1cnJkKSApCi0gICAgewotICAgICAgICBpb19lbXVsX3N0dWJfdCAqaW9fZW11 bCA9Ci0gICAgICAgICAgICBpb19lbXVsX3N0dWJfc2V0dXAocG9jLCBjdHh0LT5vcGNvZGUsIHBv cnQsIGJ5dGVzKTsKLQotICAgICAgICBtYXJrX3JlZ3NfZGlydHkoY3R4dC0+cmVncyk7Ci0gICAg ICAgIGlvX2VtdWwoY3R4dC0+cmVncyk7Ci0gICAgICAgIHJldHVybiBYODZFTVVMX0RPTkU7Ci0g ICAgfQotCi0gICAgKnZhbCA9IGd1ZXN0X2lvX3JlYWQocG9ydCwgYnl0ZXMsIGN1cnJkKTsKLQot ICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci19Ci0KLXN0YXRpYyBpbnQgcHJpdl9vcF93cml0ZV9p byh1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IGJ5dGVzLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAq Y3R4dCkKLXsKLSAgICBzdHJ1Y3QgcHJpdl9vcF9jdHh0ICpwb2MgPSBjb250YWluZXJfb2YoY3R4 dCwgc3RydWN0IHByaXZfb3BfY3R4dCwgY3R4dCk7Ci0gICAgc3RydWN0IHZjcHUgKmN1cnIgPSBj dXJyZW50OwotICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3VycmVudC0+ZG9tYWluOwotCi0g ICAgLyogT1VUUyBtdXN0IG5vdCBjb21lIGhlcmUuICovCi0gICAgQVNTRVJUKChjdHh0LT5vcGNv ZGUgJiB+OSkgPT0gMHhlNik7Ci0KLSAgICBpZiAoICFndWVzdF9pb19va2F5KHBvcnQsIGJ5dGVz LCBjdXJyLCBjdHh0LT5yZWdzKSApCi0gICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJM RTsKLQotICAgIHBvYy0+YnBtYXRjaCA9IGNoZWNrX2d1ZXN0X2lvX2JyZWFrcG9pbnQoY3Vyciwg cG9ydCwgYnl0ZXMpOwotCi0gICAgaWYgKCBhZG1pbl9pb19va2F5KHBvcnQsIGJ5dGVzLCBjdXJy ZCkgKQotICAgIHsKLSAgICAgICAgaW9fZW11bF9zdHViX3QgKmlvX2VtdWwgPQotICAgICAgICAg ICAgaW9fZW11bF9zdHViX3NldHVwKHBvYywgY3R4dC0+b3Bjb2RlLCBwb3J0LCBieXRlcyk7Ci0K LSAgICAgICAgbWFya19yZWdzX2RpcnR5KGN0eHQtPnJlZ3MpOwotICAgICAgICBpb19lbXVsKGN0 eHQtPnJlZ3MpOwotICAgICAgICBpZiAoIChieXRlcyA9PSAxKSAmJiBwdl9wb3N0X291dGJfaG9v ayApCi0gICAgICAgICAgICBwdl9wb3N0X291dGJfaG9vayhwb3J0LCB2YWwpOwotICAgICAgICBy ZXR1cm4gWDg2RU1VTF9ET05FOwotICAgIH0KLQotICAgIGd1ZXN0X2lvX3dyaXRlKHBvcnQsIGJ5 dGVzLCB2YWwsIGN1cnJkKTsKLQotICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci19Ci0KLXN0YXRp YyBpbnQgcHJpdl9vcF9yZXBfaW5zKHVpbnQxNl90IHBvcnQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBlbnVtIHg4Nl9zZWdtZW50IHNlZywgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXNfcGVyX3JlcCwgdW5zaWdu ZWQgbG9uZyAqcmVwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11 bGF0ZV9jdHh0ICpjdHh0KQotewotICAgIHN0cnVjdCBwcml2X29wX2N0eHQgKnBvYyA9IGNvbnRh aW5lcl9vZihjdHh0LCBzdHJ1Y3QgcHJpdl9vcF9jdHh0LCBjdHh0KTsKLSAgICBzdHJ1Y3QgdmNw dSAqY3VyciA9IGN1cnJlbnQ7Ci0gICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyZW50LT5k b21haW47Ci0gICAgdW5zaWduZWQgbG9uZyBnb2FsID0gKnJlcHM7Ci0gICAgc3RydWN0IHNlZ21l bnRfcmVnaXN0ZXIgc3JlZzsKLSAgICBpbnQgcmM7Ci0KLSAgICBBU1NFUlQoc2VnID09IHg4Nl9z ZWdfZXMpOwotCi0gICAgKnJlcHMgPSAwOwotCi0gICAgaWYgKCAhZ3Vlc3RfaW9fb2theShwb3J0 LCBieXRlc19wZXJfcmVwLCBjdXJyLCBjdHh0LT5yZWdzKSApCi0gICAgICAgIHJldHVybiBYODZF TVVMX1VOSEFORExFQUJMRTsKLQotICAgIHJjID0gcHJpdl9vcF9yZWFkX3NlZ21lbnQoeDg2X3Nl Z19lcywgJnNyZWcsIGN0eHQpOwotICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZICkKLSAgICAg ICAgcmV0dXJuIHJjOwotCi0gICAgaWYgKCAhc3JlZy5hdHRyLmZpZWxkcy5wICkKLSAgICAgICAg cmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwotICAgIGlmICggIXNyZWcuYXR0ci5maWVsZHMu cyB8fAotICAgICAgICAgKHNyZWcuYXR0ci5maWVsZHMudHlwZSAmIChfU0VHTUVOVF9DT0RFID4+ IDgpKSB8fAotICAgICAgICAgIShzcmVnLmF0dHIuZmllbGRzLnR5cGUgJiAoX1NFR01FTlRfV1Ig Pj4gOCkpICkKLSAgICB7Ci0gICAgICAgIHg4Nl9lbXVsX2h3X2V4Y2VwdGlvbihUUkFQX2dwX2Zh dWx0LCAwLCBjdHh0KTsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOwotICAgIH0K LQotICAgIHBvYy0+YnBtYXRjaCA9IGNoZWNrX2d1ZXN0X2lvX2JyZWFrcG9pbnQoY3VyciwgcG9y dCwgYnl0ZXNfcGVyX3JlcCk7Ci0KLSAgICB3aGlsZSAoICpyZXBzIDwgZ29hbCApCi0gICAgewot ICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YSA9IGd1ZXN0X2lvX3JlYWQocG9ydCwgYnl0ZXNfcGVy X3JlcCwgY3VycmQpOwotICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLSAgICAgICAgcmMg PSBwdl9lbXVsX3ZpcnRfdG9fbGluZWFyKHNyZWcuYmFzZSwgb2Zmc2V0LCBieXRlc19wZXJfcmVw LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JlZy5saW1pdCwgeDg2X3Nl Z19lcywgY3R4dCwgJmFkZHIpOwotICAgICAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSApCi0g ICAgICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICAgICAgaWYgKCAocmMgPSBfX2NvcHlfdG9fdXNl cigodm9pZCAqKWFkZHIsICZkYXRhLCBieXRlc19wZXJfcmVwKSkgIT0gMCApCi0gICAgICAgIHsK LSAgICAgICAgICAgIHg4Nl9lbXVsX3BhZ2VmYXVsdChQRkVDX3dyaXRlX2FjY2VzcywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyICsgYnl0ZXNfcGVyX3JlcCAtIHJjLCBjdHh0 KTsKLSAgICAgICAgICAgIHJldHVybiBYODZFTVVMX0VYQ0VQVElPTjsKLSAgICAgICAgfQotCi0g ICAgICAgICsrKnJlcHM7Ci0KLSAgICAgICAgaWYgKCBwb2MtPmJwbWF0Y2ggfHwgaHlwZXJjYWxs X3ByZWVtcHRfY2hlY2soKSApCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvKiB4ODZf ZW11bGF0ZSgpIGNsaXBzIHRoZSByZXBldGl0aW9uIGNvdW50IHRvIGVuc3VyZSB3ZSBkb24ndCB3 cmFwLiAqLwotICAgICAgICBpZiAoIHVubGlrZWx5KGN0eHQtPnJlZ3MtPmVmbGFncyAmIFg4Nl9F RkxBR1NfREYpICkKLSAgICAgICAgICAgIG9mZnNldCAtPSBieXRlc19wZXJfcmVwOwotICAgICAg ICBlbHNlCi0gICAgICAgICAgICBvZmZzZXQgKz0gYnl0ZXNfcGVyX3JlcDsKLSAgICB9Ci0KLSAg ICByZXR1cm4gWDg2RU1VTF9PS0FZOwotfQotCi1zdGF0aWMgaW50IHByaXZfb3BfcmVwX291dHMo ZW51bSB4ODZfc2VnbWVudCBzZWcsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQxNl90IHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9yZXAsIHVuc2lnbmVkIGxvbmcgKnJlcHMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17 Ci0gICAgc3RydWN0IHByaXZfb3BfY3R4dCAqcG9jID0gY29udGFpbmVyX29mKGN0eHQsIHN0cnVj dCBwcml2X29wX2N0eHQsIGN0eHQpOwotICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsK LSAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnJlbnQtPmRvbWFpbjsKLSAgICB1bnNpZ25l ZCBsb25nIGdvYWwgPSAqcmVwczsKLSAgICBzdHJ1Y3Qgc2VnbWVudF9yZWdpc3RlciBzcmVnOwot ICAgIGludCByYzsKLQotICAgICpyZXBzID0gMDsKLQotICAgIGlmICggIWd1ZXN0X2lvX29rYXko cG9ydCwgYnl0ZXNfcGVyX3JlcCwgY3VyciwgY3R4dC0+cmVncykgKQotICAgICAgICByZXR1cm4g WDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci0KLSAgICByYyA9IHByaXZfb3BfcmVhZF9zZWdtZW50KHNl ZywgJnNyZWcsIGN0eHQpOwotICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZICkKLSAgICAgICAg cmV0dXJuIHJjOwotCi0gICAgaWYgKCAhc3JlZy5hdHRyLmZpZWxkcy5wICkKLSAgICAgICAgcmV0 dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwotICAgIGlmICggIXNyZWcuYXR0ci5maWVsZHMucyB8 fAotICAgICAgICAgKChzcmVnLmF0dHIuZmllbGRzLnR5cGUgJiAoX1NFR01FTlRfQ09ERSA+PiA4 KSkgJiYKLSAgICAgICAgICAhKHNyZWcuYXR0ci5maWVsZHMudHlwZSAmIChfU0VHTUVOVF9XUiA+ PiA4KSkpICkKLSAgICB7Ci0gICAgICAgIHg4Nl9lbXVsX2h3X2V4Y2VwdGlvbihzZWcgIT0geDg2 X3NlZ19zcyA/IFRSQVBfZ3BfZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogVFJBUF9zdGFja19lcnJvciwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDAsIGN0eHQpOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9FWENFUFRJT047Ci0g ICAgfQotCi0gICAgcG9jLT5icG1hdGNoID0gY2hlY2tfZ3Vlc3RfaW9fYnJlYWtwb2ludChjdXJy LCBwb3J0LCBieXRlc19wZXJfcmVwKTsKLQotICAgIHdoaWxlICggKnJlcHMgPCBnb2FsICkKLSAg ICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBkYXRhID0gMDsKLSAgICAgICAgdW5zaWduZWQgbG9u ZyBhZGRyOwotCi0gICAgICAgIHJjID0gcHZfZW11bF92aXJ0X3RvX2xpbmVhcihzcmVnLmJhc2Us IG9mZnNldCwgYnl0ZXNfcGVyX3JlcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNyZWcubGltaXQsIHNlZywgY3R4dCwgJmFkZHIpOwotICAgICAgICBpZiAoIHJjICE9IFg4 NkVNVUxfT0tBWSApCi0gICAgICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICAgICAgaWYgKCAocmMg PSBfX2NvcHlfZnJvbV91c2VyKCZkYXRhLCAodm9pZCAqKWFkZHIsIGJ5dGVzX3Blcl9yZXApKSAh PSAwICkKLSAgICAgICAgewotICAgICAgICAgICAgeDg2X2VtdWxfcGFnZWZhdWx0KDAsIGFkZHIg KyBieXRlc19wZXJfcmVwIC0gcmMsIGN0eHQpOwotICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxf RVhDRVBUSU9OOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3Vlc3RfaW9fd3JpdGUocG9ydCwgYnl0 ZXNfcGVyX3JlcCwgZGF0YSwgY3VycmQpOwotCi0gICAgICAgICsrKnJlcHM7Ci0KLSAgICAgICAg aWYgKCBwb2MtPmJwbWF0Y2ggfHwgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCi0gICAgICAg ICAgICBicmVhazsKLQotICAgICAgICAvKiB4ODZfZW11bGF0ZSgpIGNsaXBzIHRoZSByZXBldGl0 aW9uIGNvdW50IHRvIGVuc3VyZSB3ZSBkb24ndCB3cmFwLiAqLwotICAgICAgICBpZiAoIHVubGlr ZWx5KGN0eHQtPnJlZ3MtPmVmbGFncyAmIFg4Nl9FRkxBR1NfREYpICkKLSAgICAgICAgICAgIG9m ZnNldCAtPSBieXRlc19wZXJfcmVwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvZmZzZXQg Kz0gYnl0ZXNfcGVyX3JlcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotfQot Ci1zdGF0aWMgaW50IHByaXZfb3BfcmVhZF9jcih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBs b25nICp2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVf Y3R4dCAqY3R4dCkKLXsKLSAgICBjb25zdCBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7Ci0K LSAgICBzd2l0Y2ggKCByZWcgKQotICAgIHsKLSAgICBjYXNlIDA6IC8qIFJlYWQgQ1IwICovCi0g ICAgICAgICp2YWwgPSAocmVhZF9jcjAoKSAmIH5YODZfQ1IwX1RTKSB8IGN1cnItPmFyY2gucHZf dmNwdS5jdHJscmVnWzBdOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2Fz ZSAyOiAvKiBSZWFkIENSMiAqLwotICAgIGNhc2UgNDogLyogUmVhZCBDUjQgKi8KLSAgICAgICAg KnZhbCA9IGN1cnItPmFyY2gucHZfdmNwdS5jdHJscmVnW3JlZ107Ci0gICAgICAgIHJldHVybiBY ODZFTVVMX09LQVk7Ci0KLSAgICBjYXNlIDM6IC8qIFJlYWQgQ1IzICovCi0gICAgewotICAgICAg ICBjb25zdCBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnItPmRvbWFpbjsKLSAgICAgICAgdW5z aWduZWQgbG9uZyBtZm47Ci0KLSAgICAgICAgaWYgKCAhaXNfcHZfMzJiaXRfZG9tYWluKGN1cnJk KSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1mbiA9IHBhZ2V0YWJsZV9nZXRfcGZuKGN1cnIt PmFyY2guZ3Vlc3RfdGFibGUpOwotICAgICAgICAgICAgKnZhbCA9IHhlbl9wZm5fdG9fY3IzKG1m bl90b19nbWZuKGN1cnJkLCBtZm4pKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg IHsKLSAgICAgICAgICAgIGw0X3BnZW50cnlfdCAqcGw0ZSA9Ci0gICAgICAgICAgICAgICAgbWFw X2RvbWFpbl9wYWdlKF9tZm4ocGFnZXRhYmxlX2dldF9wZm4oY3Vyci0+YXJjaC5ndWVzdF90YWJs ZSkpKTsKLQotICAgICAgICAgICAgbWZuID0gbDRlX2dldF9wZm4oKnBsNGUpOwotICAgICAgICAg ICAgdW5tYXBfZG9tYWluX3BhZ2UocGw0ZSk7Ci0gICAgICAgICAgICAqdmFsID0gY29tcGF0X3Bm bl90b19jcjMobWZuX3RvX2dtZm4oY3VycmQsIG1mbikpOwotICAgICAgICB9Ci0gICAgICAgIC8q IFBUcyBzaG91bGQgbm90IGJlIHNoYXJlZCAqLwotICAgICAgICBCVUdfT04ocGFnZV9nZXRfb3du ZXIobWZuX3RvX3BhZ2UobWZuKSkgPT0gZG9tX2Nvdyk7Ci0gICAgICAgIHJldHVybiBYODZFTVVM X09LQVk7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsK LX0KLQotc3RhdGljIGludCBwcml2X29wX3dyaXRlX2NyKHVuc2lnbmVkIGludCByZWcsIHVuc2ln bmVkIGxvbmcgdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11 bGF0ZV9jdHh0ICpjdHh0KQotewotICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsKLQot ICAgIHN3aXRjaCAoIHJlZyApCi0gICAgewotICAgIGNhc2UgMDogLyogV3JpdGUgQ1IwICovCi0g ICAgICAgIGlmICggKHZhbCBeIHJlYWRfY3IwKCkpICYgflg4Nl9DUjBfVFMgKQotICAgICAgICB7 Ci0gICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAg ICAgIkF0dGVtcHQgdG8gY2hhbmdlIHVubW9kaWZpYWJsZSBDUjAgZmxhZ3NcbiIpOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZG9fZnB1X3Rhc2tzd2l0Y2goISEodmFs ICYgWDg2X0NSMF9UUykpOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2Fz ZSAyOiAvKiBXcml0ZSBDUjIgKi8KLSAgICAgICAgY3Vyci0+YXJjaC5wdl92Y3B1LmN0cmxyZWdb Ml0gPSB2YWw7Ci0gICAgICAgIGFyY2hfc2V0X2NyMihjdXJyLCB2YWwpOwotICAgICAgICByZXR1 cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSAzOiAvKiBXcml0ZSBDUjMgKi8KLSAgICB7Ci0g ICAgICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3Vyci0+ZG9tYWluOwotICAgICAgICB1bnNp Z25lZCBsb25nIGdmbjsKLSAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKLSAgICAgICAg aW50IHJjOwotCi0gICAgICAgIGdmbiA9ICFpc19wdl8zMmJpdF9kb21haW4oY3VycmQpCi0gICAg ICAgICAgICAgID8geGVuX2NyM190b19wZm4odmFsKSA6IGNvbXBhdF9jcjNfdG9fcGZuKHZhbCk7 Ci0gICAgICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihjdXJyZCwgZ2ZuLCBOVUxMLCBQMk1f QUxMT0MpOwotICAgICAgICBpZiAoICFwYWdlICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICByYyA9IG5ld19ndWVzdF9jcjMocGFnZV90b19tZm4ocGFnZSkpOwotICAgICAgICBwdXRfcGFn ZShwYWdlKTsKLQotICAgICAgICBzd2l0Y2ggKCByYyApCi0gICAgICAgIHsKLSAgICAgICAgY2Fz ZSAwOgotICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLSAgICAgICAgY2FzZSAtRVJF U1RBUlQ6IC8qIHJldHJ5IGFmdGVyIHByZWVtcHRpb24gKi8KLSAgICAgICAgICAgIHJldHVybiBY ODZFTVVMX1JFVFJZOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNh c2UgNDogLyogV3JpdGUgQ1I0ICovCi0gICAgICAgIGN1cnItPmFyY2gucHZfdmNwdS5jdHJscmVn WzRdID0gcHZfZ3Vlc3RfY3I0X2ZpeHVwKGN1cnIsIHZhbCk7Ci0gICAgICAgIHdyaXRlX2NyNChw dl9ndWVzdF9jcjRfdG9fcmVhbF9jcjQoY3VycikpOwotICAgICAgICBjdHh0X3N3aXRjaF9sZXZl bGxpbmcoY3Vycik7Ci0gICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0gICAgfQotCi0gICAg cmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwotfQotCi1zdGF0aWMgaW50IHByaXZfb3BfcmVh ZF9kcih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nICp2YWwsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKLXsKLSAgICB1bnNp Z25lZCBsb25nIHJlcyA9IGRvX2dldF9kZWJ1Z3JlZyhyZWcpOwotCi0gICAgaWYgKCBJU19FUlJf VkFMVUUocmVzKSApCi0gICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLQotICAg ICp2YWwgPSByZXM7Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotfQotCi1zdGF0aWMgaW50 IHByaXZfb3Bfd3JpdGVfZHIodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyB2YWwsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQp Ci17Ci0gICAgcmV0dXJuIGRvX3NldF9kZWJ1Z3JlZyhyZWcsIHZhbCkgPT0gMAotICAgICAgICAg ICA/IFg4NkVNVUxfT0tBWSA6IFg4NkVNVUxfVU5IQU5ETEVBQkxFOwotfQotCi1zdGF0aWMgaW5s aW5lIHVpbnQ2NF90IGd1ZXN0X21pc2NfZW5hYmxlKHVpbnQ2NF90IHZhbCkKLXsKLSAgICB2YWwg Jj0gfihNU1JfSUEzMl9NSVNDX0VOQUJMRV9QRVJGX0FWQUlMIHwKLSAgICAgICAgICAgICBNU1Jf SUEzMl9NSVNDX0VOQUJMRV9NT05JVE9SX0VOQUJMRSk7Ci0gICAgdmFsIHw9IE1TUl9JQTMyX01J U0NfRU5BQkxFX0JUU19VTkFWQUlMIHwKLSAgICAgICAgICAgTVNSX0lBMzJfTUlTQ19FTkFCTEVf UEVCU19VTkFWQUlMIHwKLSAgICAgICAgICAgTVNSX0lBMzJfTUlTQ19FTkFCTEVfWFRQUl9ESVNB QkxFOwotICAgIHJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19jcHVmcmVx X2NvbnRyb2xsZXIoY29uc3Qgc3RydWN0IGRvbWFpbiAqZCkKLXsKLSAgICByZXR1cm4gKChjcHVm cmVxX2NvbnRyb2xsZXIgPT0gRlJFUUNUTF9kb20wX2tlcm5lbCkgJiYKLSAgICAgICAgICAgIGlz X2hhcmR3YXJlX2RvbWFpbihkKSk7Ci19Ci0KLXN0YXRpYyBpbnQgcHJpdl9vcF9yZWFkX21zcih1 bnNpZ25lZCBpbnQgcmVnLCB1aW50NjRfdCAqdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQotewotICAgIHN0cnVjdCBwcml2X29w X2N0eHQgKnBvYyA9IGNvbnRhaW5lcl9vZihjdHh0LCBzdHJ1Y3QgcHJpdl9vcF9jdHh0LCBjdHh0 KTsKLSAgICBjb25zdCBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7Ci0gICAgY29uc3Qgc3Ry dWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyLT5kb21haW47Ci0gICAgYm9vbCB2cG11X21zciA9IGZh bHNlOwotCi0gICAgc3dpdGNoICggcmVnICkKLSAgICB7Ci0gICAgICAgIGludCByYzsKLQotICAg IGNhc2UgTVNSX0ZTX0JBU0U6Ci0gICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGN1cnJk KSApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgKnZhbCA9IGNwdV9oYXNfZnNnc2Jhc2Ug PyBfX3JkZnNiYXNlKCkgOiBjdXJyLT5hcmNoLnB2X3ZjcHUuZnNfYmFzZTsKLSAgICAgICAgcmV0 dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgTVNSX0dTX0JBU0U6Ci0gICAgICAgIGlmICgg aXNfcHZfMzJiaXRfZG9tYWluKGN1cnJkKSApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg KnZhbCA9IGNwdV9oYXNfZnNnc2Jhc2UgPyBfX3JkZ3NiYXNlKCkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiBjdXJyLT5hcmNoLnB2X3ZjcHUuZ3NfYmFzZV9rZXJuZWw7Ci0gICAg ICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0KLSAgICBjYXNlIE1TUl9TSEFET1dfR1NfQkFTRToK LSAgICAgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oY3VycmQpICkKLSAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAqdmFsID0gY3Vyci0+YXJjaC5wdl92Y3B1LmdzX2Jhc2VfdXNlcjsKLSAg ICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIC8qCi0gICAgICogSW4gb3JkZXIgdG8g ZnVsbHkgcmV0YWluIG9yaWdpbmFsIGJlaGF2aW9yLCBkZWZlciBjYWxsaW5nCi0gICAgICogcHZf c29mdF9yZHRzYygpIHVudGlsIGFmdGVyIGVtdWxhdGlvbi4gVGhpcyBtYXkgd2FudC9uZWVkIHRv IGJlCi0gICAgICogcmVjb25zaWRlcmVkLgotICAgICAqLwotICAgIGNhc2UgTVNSX0lBMzJfVFND OgotICAgICAgICBwb2MtPnRzYyB8PSBUU0NfQkFTRTsKLSAgICAgICAgZ290byBub3JtYWw7Ci0K LSAgICBjYXNlIE1TUl9UU0NfQVVYOgotICAgICAgICBwb2MtPnRzYyB8PSBUU0NfQVVYOwotICAg ICAgICBpZiAoIGNwdV9oYXNfcmR0c2NwICkKLSAgICAgICAgICAgIGdvdG8gbm9ybWFsOwotICAg ICAgICAqdmFsID0gMDsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2Ug TVNSX0VGRVI6Ci0gICAgICAgICp2YWwgPSByZWFkX2VmZXIoKTsKLSAgICAgICAgaWYgKCBpc19w dl8zMmJpdF9kb21haW4oY3VycmQpICkKLSAgICAgICAgICAgICp2YWwgJj0gfihFRkVSX0xNRSB8 IEVGRVJfTE1BIHwgRUZFUl9MTVNMRSk7Ci0gICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0K LSAgICBjYXNlIE1TUl9LN19GSURfVklEX0NUTDoKLSAgICBjYXNlIE1TUl9LN19GSURfVklEX1NU QVRVUzoKLSAgICBjYXNlIE1TUl9LOF9QU1RBVEVfTElNSVQ6Ci0gICAgY2FzZSBNU1JfSzhfUFNU QVRFX0NUUkw6Ci0gICAgY2FzZSBNU1JfSzhfUFNUQVRFX1NUQVRVUzoKLSAgICBjYXNlIE1TUl9L OF9QU1RBVEUwOgotICAgIGNhc2UgTVNSX0s4X1BTVEFURTE6Ci0gICAgY2FzZSBNU1JfSzhfUFNU QVRFMjoKLSAgICBjYXNlIE1TUl9LOF9QU1RBVEUzOgotICAgIGNhc2UgTVNSX0s4X1BTVEFURTQ6 Ci0gICAgY2FzZSBNU1JfSzhfUFNUQVRFNToKLSAgICBjYXNlIE1TUl9LOF9QU1RBVEU2OgotICAg IGNhc2UgTVNSX0s4X1BTVEFURTc6Ci0gICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVu ZG9yICE9IFg4Nl9WRU5ET1JfQU1EICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAo IHVubGlrZWx5KGlzX2NwdWZyZXFfY29udHJvbGxlcihjdXJyZCkpICkKLSAgICAgICAgICAgIGdv dG8gbm9ybWFsOwotICAgICAgICAqdmFsID0gMDsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tB WTsKLQotICAgIGNhc2UgTVNSX0lBMzJfVUNPREVfUkVWOgotICAgICAgICBCVUlMRF9CVUdfT04o TVNSX0lBMzJfVUNPREVfUkVWICE9IE1TUl9BTURfUEFUQ0hMRVZFTCk7Ci0gICAgICAgIGlmICgg Ym9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgKQotICAgICAgICB7 Ci0gICAgICAgICAgICBpZiAoIHdybXNyX3NhZmUoTVNSX0lBMzJfVUNPREVfUkVWLCAwKSApCi0g ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAvKiBBcyBkb2N1bWVudGVkIGluIHRo ZSBTRE06IERvIGEgQ1BVSUQgMSBoZXJlICovCi0gICAgICAgICAgICBjcHVpZF9lYXgoMSk7Ci0g ICAgICAgIH0KLSAgICAgICAgZ290byBub3JtYWw7Ci0KLSAgICBjYXNlIE1TUl9JQTMyX01JU0Nf RU5BQkxFOgotICAgICAgICBpZiAoIHJkbXNyX3NhZmUocmVnLCAqdmFsKSApCi0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgKnZhbCA9IGd1ZXN0X21pc2NfZW5hYmxlKCp2YWwpOwotICAgICAg ICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfQU1ENjRfRFIwX0FERFJFU1Nf TUFTSzoKLSAgICAgICAgaWYgKCAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RCRVhUKSApCi0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgKnZhbCA9IGN1cnItPmFyY2gucHZfdmNwdS5kcl9t YXNrWzBdOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfQU1E NjRfRFIxX0FERFJFU1NfTUFTSyAuLi4gTVNSX0FNRDY0X0RSM19BRERSRVNTX01BU0s6Ci0gICAg ICAgIGlmICggIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9EQkVYVCkgKQotICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICp2YWwgPSBjdXJyLT5hcmNoLnB2X3ZjcHUuZHJfbWFza1tyZWcgLSBN U1JfQU1ENjRfRFIxX0FERFJFU1NfTUFTSyArIDFdOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9P S0FZOwotCi0gICAgY2FzZSBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUzoKLSAgICAgICAgLyog Tm8gZXh0cmEgY2FwYWJpbGl0aWVzIGFyZSBzdXBwb3J0ZWQuICovCi0gICAgICAgICp2YWwgPSAw OwotICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfSU5URUxfUExB VEZPUk1fSU5GTzoKLSAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2 X1ZFTkRPUl9JTlRFTCB8fAotICAgICAgICAgICAgIHJkbXNyX3NhZmUoTVNSX0lOVEVMX1BMQVRG T1JNX0lORk8sICp2YWwpICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAqdmFsID0gMDsK LSAgICAgICAgaWYgKCB0aGlzX2NwdShjcHVpZF9mYXVsdGluZ19lbmFibGVkKSApCi0gICAgICAg ICAgICAqdmFsIHw9IE1TUl9QTEFURk9STV9JTkZPX0NQVUlEX0ZBVUxUSU5HOwotICAgICAgICBy ZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfSU5URUxfTUlTQ19GRUFUVVJFU19F TkFCTEVTOgotICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVO RE9SX0lOVEVMIHx8Ci0gICAgICAgICAgICAgcmRtc3Jfc2FmZShNU1JfSU5URUxfTUlTQ19GRUFU VVJFU19FTkFCTEVTLCAqdmFsKSApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgKnZhbCA9 IDA7Ci0gICAgICAgIGlmICggY3Vyci0+YXJjaC5jcHVpZF9mYXVsdGluZyApCi0gICAgICAgICAg ICAqdmFsIHw9IE1TUl9NSVNDX0ZFQVRVUkVTX0NQVUlEX0ZBVUxUSU5HOwotICAgICAgICByZXR1 cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfUDZfUEVSRkNUUigwKS4uLk1TUl9QNl9Q RVJGQ1RSKDcpOgotICAgIGNhc2UgTVNSX1A2X0VWTlRTRUwoMCkuLi5NU1JfUDZfRVZOVFNFTCgz KToKLSAgICBjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMC4uLk1TUl9DT1JFX1BFUkZfRklY RURfQ1RSMjoKLSAgICBjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkwuLi5NU1JfQ09S RV9QRVJGX0dMT0JBTF9PVkZfQ1RSTDoKLSAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92 ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZwbXVf bXNyID0gdHJ1ZTsKLSAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgIGNhc2UgTVNS X0FNRF9GQU0xNUhfRVZOVFNFTDAuLi5NU1JfQU1EX0ZBTTE1SF9QRVJGQ1RSNToKLSAgICBjYXNl IE1TUl9LN19FVk5UU0VMMC4uLk1TUl9LN19QRVJGQ1RSMzoKLSAgICAgICAgICAgIGlmICggdnBt dV9tc3IgfHwgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgKQot ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICggdnBtdV9kb19yZG1zcihyZWcsIHZh bCkgKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICByZXR1cm4g WDg2RU1VTF9PS0FZOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIGZhbGwg dGhyb3VnaCAqLwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICggcmRtc3JfaHlwZXJ2aXNvcl9y ZWdzKHJlZywgdmFsKSApCi0gICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAg ICAgIHJjID0gdm1jZV9yZG1zcihyZWcsIHZhbCk7Ci0gICAgICAgIGlmICggcmMgPCAwICkKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoIHJjICkKLSAgICAgICAgICAgIHJldHVybiBY ODZFTVVMX09LQVk7Ci0gICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgIG5vcm1hbDoKLSAg ICAgICAgLyogRXZlcnlvbmUgY2FuIHJlYWQgdGhlIE1TUiBzcGFjZS4gKi8KLSAgICAgICAgLyog Z2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJEb21haW4gYXR0ZW1wdGVkIFJETVNSICUwOHhcbiIs IHJlZyk7ICovCi0gICAgICAgIGlmICggcmRtc3Jfc2FmZShyZWcsICp2YWwpICkKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotICAgIH0KLQotICAgIHJl dHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLX0KLQotI2luY2x1ZGUgIng4Nl82NC9tbWNvbmZp Zy5oIgotCi1zdGF0aWMgaW50IHByaXZfb3Bfd3JpdGVfbXNyKHVuc2lnbmVkIGludCByZWcsIHVp bnQ2NF90IHZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVs YXRlX2N0eHQgKmN0eHQpCi17Ci0gICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OwotICAg IGNvbnN0IHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3Vyci0+ZG9tYWluOwotICAgIGJvb2wgdnBt dV9tc3IgPSBmYWxzZTsKLQotICAgIHN3aXRjaCAoIHJlZyApCi0gICAgewotICAgICAgICB1aW50 NjRfdCB0ZW1wOwotICAgICAgICBpbnQgcmM7Ci0KLSAgICBjYXNlIE1TUl9GU19CQVNFOgotICAg ICAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihjdXJyZCkgfHwgIWlzX2Nhbm9uaWNhbF9hZGRy ZXNzKHZhbCkgKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHdyZnNiYXNlKHZhbCk7Ci0g ICAgICAgIGN1cnItPmFyY2gucHZfdmNwdS5mc19iYXNlID0gdmFsOwotICAgICAgICByZXR1cm4g WDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfR1NfQkFTRToKLSAgICAgICAgaWYgKCBpc19w dl8zMmJpdF9kb21haW4oY3VycmQpIHx8ICFpc19jYW5vbmljYWxfYWRkcmVzcyh2YWwpICkKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICB3cmdzYmFzZSh2YWwpOwotICAgICAgICBjdXJyLT5h cmNoLnB2X3ZjcHUuZ3NfYmFzZV9rZXJuZWwgPSB2YWw7Ci0gICAgICAgIHJldHVybiBYODZFTVVM X09LQVk7Ci0KLSAgICBjYXNlIE1TUl9TSEFET1dfR1NfQkFTRToKLSAgICAgICAgaWYgKCBpc19w dl8zMmJpdF9kb21haW4oY3VycmQpIHx8ICFpc19jYW5vbmljYWxfYWRkcmVzcyh2YWwpICkKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICB3cm1zcmwoTVNSX1NIQURPV19HU19CQVNFLCB2YWwp OwotICAgICAgICBjdXJyLT5hcmNoLnB2X3ZjcHUuZ3NfYmFzZV91c2VyID0gdmFsOwotICAgICAg ICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfSzdfRklEX1ZJRF9TVEFUVVM6 Ci0gICAgY2FzZSBNU1JfSzdfRklEX1ZJRF9DVEw6Ci0gICAgY2FzZSBNU1JfSzhfUFNUQVRFX0xJ TUlUOgotICAgIGNhc2UgTVNSX0s4X1BTVEFURV9DVFJMOgotICAgIGNhc2UgTVNSX0s4X1BTVEFU RV9TVEFUVVM6Ci0gICAgY2FzZSBNU1JfSzhfUFNUQVRFMDoKLSAgICBjYXNlIE1TUl9LOF9QU1RB VEUxOgotICAgIGNhc2UgTVNSX0s4X1BTVEFURTI6Ci0gICAgY2FzZSBNU1JfSzhfUFNUQVRFMzoK LSAgICBjYXNlIE1TUl9LOF9QU1RBVEU0OgotICAgIGNhc2UgTVNSX0s4X1BTVEFURTU6Ci0gICAg Y2FzZSBNU1JfSzhfUFNUQVRFNjoKLSAgICBjYXNlIE1TUl9LOF9QU1RBVEU3OgotICAgIGNhc2Ug TVNSX0s4X0hXQ1I6Ci0gICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4 Nl9WRU5ET1JfQU1EICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoIGxpa2VseSgh aXNfY3B1ZnJlcV9jb250cm9sbGVyKGN1cnJkKSkgfHwKLSAgICAgICAgICAgICB3cm1zcl9zYWZl KHJlZywgdmFsKSA9PSAwICkKLSAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0gICAg ICAgIGJyZWFrOwotCi0gICAgY2FzZSBNU1JfQU1ENjRfTkJfQ0ZHOgotICAgICAgICBpZiAoIGJv b3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCB8fAotICAgICAgICAgICAg IGJvb3RfY3B1X2RhdGEueDg2IDwgMHgxMCB8fCBib290X2NwdV9kYXRhLng4NiA+IDB4MTcgKQot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICggIWlzX2hhcmR3YXJlX2RvbWFpbihjdXJy ZCkgfHwgIWlzX3Bpbm5lZF92Y3B1KGN1cnIpICkKLSAgICAgICAgICAgIHJldHVybiBYODZFTVVM X09LQVk7Ci0gICAgICAgIGlmICggKHJkbXNyX3NhZmUoTVNSX0FNRDY0X05CX0NGRywgdGVtcCkg IT0gMCkgfHwKLSAgICAgICAgICAgICAoKHZhbCBeIHRlbXApICYgfigxVUxMIDw8IEFNRDY0X05C X0NGR19DRjhfRVhUX0VOQUJMRV9CSVQpKSApCi0gICAgICAgICAgICBnb3RvIGludmFsaWQ7Ci0g ICAgICAgIGlmICggd3Jtc3Jfc2FmZShNU1JfQU1ENjRfTkJfQ0ZHLCB2YWwpID09IDAgKQotICAg ICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl IE1TUl9GQU0xMEhfTU1JT19DT05GX0JBU0U6Ci0gICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54 ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EIHx8Ci0gICAgICAgICAgICAgYm9vdF9jcHVfZGF0 YS54ODYgPCAweDEwIHx8IGJvb3RfY3B1X2RhdGEueDg2ID4gMHgxNyApCi0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgaWYgKCAhaXNfaGFyZHdhcmVfZG9tYWluKGN1cnJkKSB8fCAhaXNfcGlu bmVkX3ZjcHUoY3VycikgKQotICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLSAgICAg ICAgaWYgKCByZG1zcl9zYWZlKE1TUl9GQU0xMEhfTU1JT19DT05GX0JBU0UsIHRlbXApICE9IDAg KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICggKHBjaV9wcm9iZSAmIFBDSV9QUk9C RV9NQVNLKSA9PSBQQ0lfUFJPQkVfTU1DT05GID8KLSAgICAgICAgICAgICB0ZW1wICE9IHZhbCA6 Ci0gICAgICAgICAgICAgKCh0ZW1wIF4gdmFsKSAmCi0gICAgICAgICAgICAgIH4oRkFNMTBIX01N SU9fQ09ORl9FTkFCTEUgfAotICAgICAgICAgICAgICAgIChGQU0xMEhfTU1JT19DT05GX0JVU1JB TkdFX01BU0sgPDwKLSAgICAgICAgICAgICAgICAgRkFNMTBIX01NSU9fQ09ORl9CVVNSQU5HRV9T SElGVCkgfAotICAgICAgICAgICAgICAgICgodTY0KUZBTTEwSF9NTUlPX0NPTkZfQkFTRV9NQVNL IDw8Ci0gICAgICAgICAgICAgICAgIEZBTTEwSF9NTUlPX0NPTkZfQkFTRV9TSElGVCkpKSApCi0g ICAgICAgICAgICBnb3RvIGludmFsaWQ7Ci0gICAgICAgIGlmICggd3Jtc3Jfc2FmZShNU1JfRkFN MTBIX01NSU9fQ09ORl9CQVNFLCB2YWwpID09IDAgKQotICAgICAgICAgICAgcmV0dXJuIFg4NkVN VUxfT0tBWTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1TUl9JQTMyX1VDT0RFX1JFVjoK LSAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRF TCApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKCAhaXNfaGFyZHdhcmVfZG9tYWlu KGN1cnJkKSB8fCAhaXNfcGlubmVkX3ZjcHUoY3VycikgKQotICAgICAgICAgICAgcmV0dXJuIFg4 NkVNVUxfT0tBWTsKLSAgICAgICAgaWYgKCByZG1zcl9zYWZlKHJlZywgdGVtcCkgKQotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICggdmFsICkKLSAgICAgICAgICAgIGdvdG8gaW52YWxp ZDsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgTVNSX0lBMzJfTUlT Q19FTkFCTEU6Ci0gICAgICAgIGlmICggcmRtc3Jfc2FmZShyZWcsIHRlbXApICkKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICBpZiAoIHZhbCAhPSBndWVzdF9taXNjX2VuYWJsZSh0ZW1wKSAp Ci0gICAgICAgICAgICBnb3RvIGludmFsaWQ7Ci0gICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7 Ci0KLSAgICBjYXNlIE1TUl9JQTMyX01QRVJGOgotICAgIGNhc2UgTVNSX0lBMzJfQVBFUkY6Ci0g ICAgICAgIGlmICggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVM KSAmJgotICAgICAgICAgICAgIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRP Ul9BTUQpICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoIGxpa2VseSghaXNfY3B1 ZnJlcV9jb250cm9sbGVyKGN1cnJkKSkgfHwKLSAgICAgICAgICAgICB3cm1zcl9zYWZlKHJlZywg dmFsKSA9PSAwICkKLSAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0gICAgICAgIGJy ZWFrOwotCi0gICAgY2FzZSBNU1JfSUEzMl9QRVJGX0NUTDoKLSAgICAgICAgaWYgKCBib290X2Nw dV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCApCi0gICAgICAgICAgICBicmVh azsKLSAgICAgICAgaWYgKCBsaWtlbHkoIWlzX2NwdWZyZXFfY29udHJvbGxlcihjdXJyZCkpIHx8 Ci0gICAgICAgICAgICAgd3Jtc3Jfc2FmZShyZWcsIHZhbCkgPT0gMCApCi0gICAgICAgICAgICBy ZXR1cm4gWDg2RU1VTF9PS0FZOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTVNSX0lBMzJf VEhFUk1fQ09OVFJPTDoKLSAgICBjYXNlIE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVM6Ci0gICAg ICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwgKQot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICggIWlzX2hhcmR3YXJlX2RvbWFpbihjdXJy ZCkgfHwgIWlzX3Bpbm5lZF92Y3B1KGN1cnIpIHx8Ci0gICAgICAgICAgICAgd3Jtc3Jfc2FmZShy ZWcsIHZhbCkgPT0gMCApCi0gICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotICAgICAg ICBicmVhazsKLQotICAgIGNhc2UgTVNSX0FNRDY0X0RSMF9BRERSRVNTX01BU0s6Ci0gICAgICAg IGlmICggIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9EQkVYVCkgfHwgKHZhbCA+PiAzMikgKQot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGN1cnItPmFyY2gucHZfdmNwdS5kcl9tYXNrWzBd ID0gdmFsOwotICAgICAgICBpZiAoIGN1cnItPmFyY2guZGVidWdyZWdbN10gJiBEUjdfQUNUSVZF X01BU0sgKQotICAgICAgICAgICAgd3Jtc3JsKE1TUl9BTUQ2NF9EUjBfQUREUkVTU19NQVNLLCB2 YWwpOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfQU1ENjRf RFIxX0FERFJFU1NfTUFTSyAuLi4gTVNSX0FNRDY0X0RSM19BRERSRVNTX01BU0s6Ci0gICAgICAg IGlmICggIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9EQkVYVCkgfHwgKHZhbCA+PiAzMikgKQot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGN1cnItPmFyY2gucHZfdmNwdS5kcl9tYXNrW3Jl ZyAtIE1TUl9BTUQ2NF9EUjFfQUREUkVTU19NQVNLICsgMV0gPSB2YWw7Ci0gICAgICAgIGlmICgg Y3Vyci0+YXJjaC5kZWJ1Z3JlZ1s3XSAmIERSN19BQ1RJVkVfTUFTSyApCi0gICAgICAgICAgICB3 cm1zcmwocmVnLCB2YWwpOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2Fz ZSBNU1JfSU5URUxfUExBVEZPUk1fSU5GTzoKLSAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4 Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCB8fAotICAgICAgICAgICAgIHZhbCB8fCByZG1z cl9zYWZlKE1TUl9JTlRFTF9QTEFURk9STV9JTkZPLCB2YWwpICkKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfSU5URUxfTUlT Q19GRUFUVVJFU19FTkFCTEVTOgotICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRv ciAhPSBYODZfVkVORE9SX0lOVEVMIHx8Ci0gICAgICAgICAgICAgKHZhbCAmIH5NU1JfTUlTQ19G RUFUVVJFU19DUFVJRF9GQVVMVElORykgfHwKLSAgICAgICAgICAgICByZG1zcl9zYWZlKE1TUl9J TlRFTF9NSVNDX0ZFQVRVUkVTX0VOQUJMRVMsIHRlbXApICkKLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICBpZiAoICh2YWwgJiBNU1JfTUlTQ19GRUFUVVJFU19DUFVJRF9GQVVMVElORykgJiYK LSAgICAgICAgICAgICAhdGhpc19jcHUoY3B1aWRfZmF1bHRpbmdfZW5hYmxlZCkgKQotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgIGN1cnItPmFyY2guY3B1aWRfZmF1bHRpbmcgPSAhISh2YWwg JiBNU1JfTUlTQ19GRUFUVVJFU19DUFVJRF9GQVVMVElORyk7Ci0gICAgICAgIHJldHVybiBYODZF TVVMX09LQVk7Ci0KLSAgICBjYXNlIE1TUl9QNl9QRVJGQ1RSKDApLi4uTVNSX1A2X1BFUkZDVFIo Nyk6Ci0gICAgY2FzZSBNU1JfUDZfRVZOVFNFTCgwKS4uLk1TUl9QNl9FVk5UU0VMKDMpOgotICAg IGNhc2UgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIwLi4uTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIy OgotICAgIGNhc2UgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTC4uLk1TUl9DT1JFX1BFUkZf R0xPQkFMX09WRl9DVFJMOgotICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9 PSBYODZfVkVORE9SX0lOVEVMICkKLSAgICAgICAgewotICAgICAgICAgICAgdnBtdV9tc3IgPSB0 cnVlOwotICAgIGNhc2UgTVNSX0FNRF9GQU0xNUhfRVZOVFNFTDAuLi5NU1JfQU1EX0ZBTTE1SF9Q RVJGQ1RSNToKLSAgICBjYXNlIE1TUl9LN19FVk5UU0VMMC4uLk1TUl9LN19QRVJGQ1RSMzoKLSAg ICAgICAgICAgIGlmICggdnBtdV9tc3IgfHwgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBY ODZfVkVORE9SX0FNRCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICggKHZw bXVfbW9kZSAmIFhFTlBNVV9NT0RFX0FMTCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICFpc19o YXJkd2FyZV9kb21haW4oY3VycmQpICkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFg4NkVN VUxfT0tBWTsKLQotICAgICAgICAgICAgICAgIGlmICggdnBtdV9kb193cm1zcihyZWcsIHZhbCwg MCkgKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICByZXR1cm4g WDg2RU1VTF9PS0FZOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIGZhbGwg dGhyb3VnaCAqLwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICggd3Jtc3JfaHlwZXJ2aXNvcl9y ZWdzKHJlZywgdmFsKSA9PSAxICkKLSAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0K LSAgICAgICAgcmMgPSB2bWNlX3dybXNyKHJlZywgdmFsKTsKLSAgICAgICAgaWYgKCByYyA8IDAg KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICggcmMgKQotICAgICAgICAgICAgcmV0 dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgICAgICBpZiAoIChyZG1zcl9zYWZlKHJlZywgdGVtcCkg IT0gMCkgfHwgKHZhbCAhPSB0ZW1wKSApCi0gICAgaW52YWxpZDoKLSAgICAgICAgICAgIGdkcHJp bnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgIkRvbWFpbiBhdHRlbXB0 ZWQgV1JNU1IgJTA4eCBmcm9tIDB4JTAxNiJQUkl4NjQiIHRvIDB4JTAxNiJQUkl4NjQiXG4iLAot ICAgICAgICAgICAgICAgICAgICAgcmVnLCB0ZW1wLCB2YWwpOwotICAgICAgICByZXR1cm4gWDg2 RU1VTF9PS0FZOwotICAgIH0KLQotICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLX0K LQotc3RhdGljIGludCBwcml2X29wX3diaW52ZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4 dCkKLXsKLSAgICAvKiBJZ25vcmUgdGhlIGluc3RydWN0aW9uIGlmIHVucHJpdmlsZWdlZC4gKi8K LSAgICBpZiAoICFjYWNoZV9mbHVzaF9wZXJtaXR0ZWQoY3VycmVudC0+ZG9tYWluKSApCi0gICAg ICAgIC8qCi0gICAgICAgICAqIE5vbi1waHlzZGV2IGRvbWFpbiBhdHRlbXB0ZWQgV0JJTlZEOyBp Z25vcmUgZm9yIG5vdyBzaW5jZQotICAgICAgICAgKiBuZXdlciBsaW51eCB1c2VzIHRoaXMgaW4g c29tZSBzdGFydC1vZi1kYXkgdGltaW5nIGxvb3BzLgotICAgICAgICAgKi8KLSAgICAgICAgOwot ICAgIGVsc2UKLSAgICAgICAgd2JpbnZkKCk7Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwot fQotCi1pbnQgcHZfZW11bF9jcHVpZCh1aW50MzJfdCBsZWFmLCB1aW50MzJfdCBzdWJsZWFmLAot ICAgICAgICAgICAgICAgICAgc3RydWN0IGNwdWlkX2xlYWYgKnJlcywgc3RydWN0IHg4Nl9lbXVs YXRlX2N0eHQgKmN0eHQpCi17Ci0gICAgZ3Vlc3RfY3B1aWQoY3VycmVudCwgbGVhZiwgc3VibGVh ZiwgcmVzKTsKLQotICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci19Ci0KLXN0YXRpYyBpbnQgcHJp dl9vcF92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfc3RhdGUgKnN0YXRlLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQot ewotICAgIHN3aXRjaCAoIGN0eHQtPm9wY29kZSApCi0gICAgewotICAgIGNhc2UgMHg2YyAuLi4g MHg2ZjogLyogaW5zIC8gb3V0cyAqLwotICAgIGNhc2UgMHhlNCAuLi4gMHhlNzogLyogaW4gLyBv dXQgKGltbWVkaWF0ZSBwb3J0KSAqLwotICAgIGNhc2UgMHhlYyAuLi4gMHhlZjogLyogaW4gLyBv dXQgKHBvcnQgaW4gJWR4KSAqLwotICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHgwNik6IC8q IGNsdHMgKi8KLSAgICBjYXNlIFg4NkVNVUxfT1BDKDB4MGYsIDB4MDkpOiAvKiB3YmludmQgKi8K LSAgICBjYXNlIFg4NkVNVUxfT1BDKDB4MGYsIDB4MjApIC4uLgotICAgICAgICAgWDg2RU1VTF9P UEMoMHgwZiwgMHgyMyk6IC8qIG1vdiB0by9mcm9tIGNyL2RyICovCi0gICAgY2FzZSBYODZFTVVM X09QQygweDBmLCAweDMwKTogLyogd3Jtc3IgKi8KLSAgICBjYXNlIFg4NkVNVUxfT1BDKDB4MGYs IDB4MzEpOiAvKiByZHRzYyAqLwotICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHgzMik6IC8q IHJkbXNyICovCi0gICAgY2FzZSBYODZFTVVMX09QQygweDBmLCAweGEyKTogLyogY3B1aWQgKi8K LSAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgMHhmYTogY2FzZSAweGZi OiAvKiBjbGkgLyBzdGkgKi8KLSAgICAgICAgaWYgKCAhaW9wbF9vayhjdXJyZW50LCBjdHh0LT5y ZWdzKSApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBp cyBqdXN0IHRvbyBkYW5nZXJvdXMgdG8gYWxsb3csIGluIG15IG9waW5pb24uIENvbnNpZGVyIGlm IHRoZQotICAgICAgICAgKiBjYWxsZXIgdGhlbiB0cmllcyB0byByZWVuYWJsZSBpbnRlcnJ1cHRz IHVzaW5nIFBPUEY6IHdlIGNhbid0IHRyYXAKLSAgICAgICAgICogdGhhdCBhbmQgd2UnbGwgZW5k IHVwIHdpdGggaGFyZC10by1kZWJ1ZyBsb2NrdXBzLiBGYXN0ICYgbG9vc2Ugd2lsbAotICAgICAg ICAgKiBkbyBmb3IgdXMuIDotKQotICAgICAgICB2Y3B1X2luZm8oY3VycmVudCwgZXZ0Y2huX3Vw Y2FsbF9tYXNrKSA9IChjdHh0LT5vcGNvZGUgPT0gMHhmYSk7Ci0gICAgICAgICAqLwotICAgICAg ICByZXR1cm4gWDg2RU1VTF9ET05FOwotCi0gICAgY2FzZSBYODZFTVVMX09QQygweDBmLCAweDAx KToKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBtb2RybV9ybSwgbW9kcm1fcmVnOwotCi0g ICAgICAgIGlmICggeDg2X2luc25fbW9kcm0oc3RhdGUsICZtb2RybV9ybSwgJm1vZHJtX3JlZykg IT0gMyB8fAotICAgICAgICAgICAgIChtb2RybV9ybSAmIDcpICE9IDEgKQotICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgIHN3aXRjaCAoIG1vZHJtX3JlZyAmIDcgKQotICAgICAgICB7Ci0gICAg ICAgIGNhc2UgMjogLyogeHNldGJ2ICovCi0gICAgICAgIGNhc2UgNzogLyogcmR0c2NwICovCi0g ICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr OwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci19Ci0K LXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHByaXZfb3Bfb3BzID0gewotICAg IC5pbnNuX2ZldGNoICAgICAgICAgID0gcHJpdl9vcF9pbnNuX2ZldGNoLAotICAgIC5yZWFkICAg ICAgICAgICAgICAgID0geDg2ZW11bF91bmhhbmRsZWFibGVfcncsCi0gICAgLnZhbGlkYXRlICAg ICAgICAgICAgPSBwcml2X29wX3ZhbGlkYXRlLAotICAgIC5yZWFkX2lvICAgICAgICAgICAgID0g cHJpdl9vcF9yZWFkX2lvLAotICAgIC53cml0ZV9pbyAgICAgICAgICAgID0gcHJpdl9vcF93cml0 ZV9pbywKLSAgICAucmVwX2lucyAgICAgICAgICAgICA9IHByaXZfb3BfcmVwX2lucywKLSAgICAu cmVwX291dHMgICAgICAgICAgICA9IHByaXZfb3BfcmVwX291dHMsCi0gICAgLnJlYWRfc2VnbWVu dCAgICAgICAgPSBwcml2X29wX3JlYWRfc2VnbWVudCwKLSAgICAucmVhZF9jciAgICAgICAgICAg ICA9IHByaXZfb3BfcmVhZF9jciwKLSAgICAud3JpdGVfY3IgICAgICAgICAgICA9IHByaXZfb3Bf d3JpdGVfY3IsCi0gICAgLnJlYWRfZHIgICAgICAgICAgICAgPSBwcml2X29wX3JlYWRfZHIsCi0g ICAgLndyaXRlX2RyICAgICAgICAgICAgPSBwcml2X29wX3dyaXRlX2RyLAotICAgIC5yZWFkX21z ciAgICAgICAgICAgID0gcHJpdl9vcF9yZWFkX21zciwKLSAgICAud3JpdGVfbXNyICAgICAgICAg ICA9IHByaXZfb3Bfd3JpdGVfbXNyLAotICAgIC5jcHVpZCAgICAgICAgICAgICAgID0gcHZfZW11 bF9jcHVpZCwKLSAgICAud2JpbnZkICAgICAgICAgICAgICA9IHByaXZfb3Bfd2JpbnZkLAotfTsK LQotc3RhdGljIGludCBlbXVsYXRlX3ByaXZpbGVnZWRfb3Aoc3RydWN0IGNwdV91c2VyX3JlZ3Mg KnJlZ3MpCi17Ci0gICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OwotICAgIHN0cnVjdCBk b21haW4gKmN1cnJkID0gY3Vyci0+ZG9tYWluOwotICAgIHN0cnVjdCBwcml2X29wX2N0eHQgY3R4 dCA9IHsKLSAgICAgICAgLmN0eHQucmVncyA9IHJlZ3MsCi0gICAgICAgIC5jdHh0LnZlbmRvciA9 IGN1cnJkLT5hcmNoLmNwdWlkLT54ODZfdmVuZG9yLAotICAgICAgICAuY3R4dC5sbWEgPSAhaXNf cHZfMzJiaXRfZG9tYWluKGN1cnJkKSwKLSAgICB9OwotICAgIGludCByYzsKLSAgICB1bnNpZ25l ZCBpbnQgZWZsYWdzLCBhcjsKLQotICAgIGlmICggIXJlYWRfZGVzY3JpcHRvcihyZWdzLT5jcywg Y3VyciwgJmN0eHQuY3MuYmFzZSwgJmN0eHQuY3MubGltaXQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICZhciwgMSkgfHwKLSAgICAgICAgICEoYXIgJiBfU0VHTUVOVF9TKSB8fAotICAgICAg ICAgIShhciAmIF9TRUdNRU5UX1ApIHx8Ci0gICAgICAgICAhKGFyICYgX1NFR01FTlRfQ09ERSkg KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIE1pcnJvciB2aXJ0dWFsaXplZCBzdGF0ZSBp bnRvIEVGTEFHUy4gKi8KLSAgICBBU1NFUlQocmVncy0+ZWZsYWdzICYgWDg2X0VGTEFHU19JRik7 Ci0gICAgaWYgKCB2Y3B1X2luZm8oY3VyciwgZXZ0Y2huX3VwY2FsbF9tYXNrKSApCi0gICAgICAg IHJlZ3MtPmVmbGFncyAmPSB+WDg2X0VGTEFHU19JRjsKLSAgICBlbHNlCi0gICAgICAgIHJlZ3Mt PmVmbGFncyB8PSBYODZfRUZMQUdTX0lGOwotICAgIEFTU0VSVCghKHJlZ3MtPmVmbGFncyAmIFg4 Nl9FRkxBR1NfSU9QTCkpOwotICAgIHJlZ3MtPmVmbGFncyB8PSBjdXJyLT5hcmNoLnB2X3ZjcHUu aW9wbDsKLSAgICBlZmxhZ3MgPSByZWdzLT5lZmxhZ3M7Ci0KLSAgICBjdHh0LmN0eHQuYWRkcl9z aXplID0gYXIgJiBfU0VHTUVOVF9MID8gNjQgOiBhciAmIF9TRUdNRU5UX0RCID8gMzIgOiAxNjsK LSAgICAvKiBMZWF2ZSB6ZXJvIGluIGN0eHQuY3R4dC5zcF9zaXplLCBhcyBpdCdzIG5vdCBuZWVk ZWQuICovCi0gICAgcmMgPSB4ODZfZW11bGF0ZSgmY3R4dC5jdHh0LCAmcHJpdl9vcF9vcHMpOwot Ci0gICAgaWYgKCBjdHh0LmlvX2VtdWxfc3R1YiApCi0gICAgICAgIHVubWFwX2RvbWFpbl9wYWdl KGN0eHQuaW9fZW11bF9zdHViKTsKLQotICAgIC8qCi0gICAgICogVW4tbWlycm9yIHZpcnR1YWxp emVkIHN0YXRlIGZyb20gRUZMQUdTLgotICAgICAqIE5vdGhpbmcgd2UgYWxsb3cgdG8gYmUgZW11 bGF0ZWQgY2FuIGNoYW5nZSBhbnl0aGluZyBvdGhlciB0aGFuIHRoZQotICAgICAqIGFyaXRobWV0 aWMgYml0cywgYW5kIHRoZSByZXN1bWUgZmxhZy4KLSAgICAgKi8KLSAgICBBU1NFUlQoISgocmVn cy0+ZWZsYWdzIF4gZWZsYWdzKSAmCi0gICAgICAgICAgICAgfihYODZfRUZMQUdTX1JGIHwgWDg2 X0VGTEFHU19BUklUSF9NQVNLKSkpOwotICAgIHJlZ3MtPmVmbGFncyB8PSBYODZfRUZMQUdTX0lG OwotICAgIHJlZ3MtPmVmbGFncyAmPSB+WDg2X0VGTEFHU19JT1BMOwotCi0gICAgc3dpdGNoICgg cmMgKQotICAgIHsKLSAgICBjYXNlIFg4NkVNVUxfT0tBWToKLSAgICAgICAgaWYgKCBjdHh0LnRz YyAmIFRTQ19CQVNFICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCBjdHh0LnRzYyAmIFRT Q19BVVggKQotICAgICAgICAgICAgICAgIHB2X3NvZnRfcmR0c2MoY3VyciwgcmVncywgMSk7Ci0g ICAgICAgICAgICBlbHNlIGlmICggY3VycmQtPmFyY2gudnRzYyApCi0gICAgICAgICAgICAgICAg cHZfc29mdF9yZHRzYyhjdXJyLCByZWdzLCAwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg ICAgICAgICBtc3Jfc3BsaXQocmVncywgcmR0c2MoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp ZiAoIGN0eHQuY3R4dC5yZXRpcmUuc2luZ2xlc3RlcCApCi0gICAgICAgICAgICBjdHh0LmJwbWF0 Y2ggfD0gRFJfU1RFUDsKLSAgICAgICAgaWYgKCBjdHh0LmJwbWF0Y2ggKQotICAgICAgICB7Ci0g ICAgICAgICAgICBjdXJyLT5hcmNoLmRlYnVncmVnWzZdIHw9IGN0eHQuYnBtYXRjaCB8IERSX1NU QVRVU19SRVNFUlZFRF9PTkU7Ci0gICAgICAgICAgICBpZiAoICEoY3Vyci0+YXJjaC5wdl92Y3B1 LnRyYXBfYm91bmNlLmZsYWdzICYgVEJGX0VYQ0VQVElPTikgKQotICAgICAgICAgICAgICAgIHB2 X2luamVjdF9od19leGNlcHRpb24oVFJBUF9kZWJ1ZywgWDg2X0VWRU5UX05PX0VDKTsKLSAgICAg ICAgfQotICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICBjYXNlIFg4NkVNVUxfUkVUUlk6 Ci0gICAgICAgIHJldHVybiBFWENSRVRfZmF1bHRfZml4ZWQ7Ci0KLSAgICBjYXNlIFg4NkVNVUxf RVhDRVBUSU9OOgotICAgICAgICBwdl9pbmplY3RfZXZlbnQoJmN0eHQuY3R4dC5ldmVudCk7Ci0g ICAgICAgIHJldHVybiBFWENSRVRfZmF1bHRfZml4ZWQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7 Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3N0YWNrX2xpbWl0KHVuc2lnbmVkIGludCBh ciwgdW5zaWduZWQgaW50IGxpbWl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IGVzcCwgdW5zaWduZWQgaW50IGRlY3IpCiB7CmRpZmYgLS1naXQgYS94 ZW4vaW5jbHVkZS9hc20teDg2L3B2L3RyYXBzLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L3B2L3Ry YXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMzJjN2JhYzU4Nwot LS0gL2Rldi9udWxsCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvcHYvdHJhcHMuaApAQCAtMCww ICsxLDQ4IEBACisvKgorICogcHYvdHJhcHMuaAorICoKKyAqIFBWIGd1ZXN0IHRyYXBzIGludGVy ZmFjZSBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBXZWkgTGl1IDx3ZWku bGl1MkBjaXRyaXguY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSwg dmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgorICovCisKKyNpZm5kZWYgX19YODZfUFZfVFJBUFNfSF9fCisjZGVmaW5lIF9fWDg2X1BWX1RS QVBTX0hfXworCisjaWZkZWYgQ09ORklHX1BWCisKKyNpbmNsdWRlIDxwdWJsaWMveGVuLmg+CisK K2ludCBlbXVsYXRlX3ByaXZpbGVnZWRfb3Aoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpOwor CisjZWxzZSAgLyogIUNPTkZJR19QViAqLworCisjaW5jbHVkZSA8eGVuL2Vycm5vLmg+CisKK2lu dCBlbXVsYXRlX3ByaXZpbGVnZWRfb3Aoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpIHsgcmV0 dXJuIC1FT1BOT1RTVVBQOyB9CisKKyNlbmRpZgkvKiBDT05GSUdfUFYgKi8KKworI2VuZGlmCS8q IF9fWDg2X1BWX1RSQVBTX0hfXyAqLworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9k ZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRh Yi13aWR0aDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjIu MTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhl bi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0 cy54ZW4ub3JnL3hlbi1kZXZlbAo=