From mboxrd@z Thu Jan 1 00:00:00 1970 From: AKASHI Takahiro Date: Wed, 13 Nov 2019 09:45:00 +0900 Subject: [U-Boot] [PATCH v3 14/16] lib: crypto: add x509 parser In-Reply-To: <20191113004502.29986-1-takahiro.akashi@linaro.org> References: <20191113004502.29986-1-takahiro.akashi@linaro.org> Message-ID: <20191113004502.29986-15-takahiro.akashi@linaro.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="tis-620" Content-Transfer-Encoding: base64 To: u-boot@lists.denx.de SW1wb3J0ZWQgZnJvbSBsaW51eCBrZXJuZWwgdjUuMzoKIHg1MDkuYXNuMSB3aXRob3V0IGNoYW5n ZXMKIHg1MDlfYWtpZC5hc24xIHdpdGhvdXQgY2hhbmdlcwogeDUwOV9wYXJzZXIuaCB3aXRob3V0 IGNoYW5nZXMKIHg1MDlfY2VydF9wYXJzZXIuYyB3aXRoIGNoYW5nZXMgbWFya2VkIGFzIF9fVUJP T1RfXwogeDUwOV9wdWJsaWNfa2V5LmMgd2l0aCBjaGFuZ2VzIG1hcmtlZCBhcyBfX1VCT09UX18K ClNpZ25lZC1vZmYtYnk6IEFLQVNISSBUYWthaGlybyA8dGFrYWhpcm8uYWthc2hpQGxpbmFyby5v cmc+Ci0tLQogbGliL0tjb25maWcgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogbGliL01ha2Vm aWxlICAgICAgICAgICAgICAgICAgfCAgIDEgKwogbGliL2NyeXB0by9LY29uZmlnICAgICAgICAg ICAgfCAgMTIgKwogbGliL2NyeXB0by9NYWtlZmlsZSAgICAgICAgICAgfCAgMTcgKwogbGliL2Ny eXB0by94NTA5LmFzbjEgICAgICAgICAgfCAgNjAgKysrCiBsaWIvY3J5cHRvL3g1MDlfYWtpZC5h c24xICAgICB8ICAzNSArKwogbGliL2NyeXB0by94NTA5X2NlcnRfcGFyc2VyLmMgfCA2OTcgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliL2NyeXB0by94NTA5X3BhcnNlci5o ICAgICAgfCAgNTcgKysrCiBsaWIvY3J5cHRvL3g1MDlfcHVibGljX2tleS5jICB8IDI5MiArKysr KysrKysrKysrKwogOSBmaWxlcyBjaGFuZ2VkLCAxMTcyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBsaWIvY3J5cHRvL3g1MDkuYXNuMQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9j cnlwdG8veDUwOV9ha2lkLmFzbjEKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvY3J5cHRvL3g1MDlf Y2VydF9wYXJzZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9jcnlwdG8veDUwOV9wYXJzZXIu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9jcnlwdG8veDUwOV9wdWJsaWNfa2V5LmMKCmRpZmYg LS1naXQgYS9saWIvS2NvbmZpZyBiL2xpYi9LY29uZmlnCmluZGV4IDA0MzFjZmJkMjFmOC4uMDUx ZmZjZTIzYjQyIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZworKysgYi9saWIvS2NvbmZpZwpAQCAt MjY1LDYgKzI2NSw3IEBAIGNvbmZpZyBBRVMKIAkgIHByZXNlbnQuCiAKIHNvdXJjZSBsaWIvcnNh L0tjb25maWcKK3NvdXJjZSBsaWIvY3J5cHRvL0tjb25maWcKIAogY29uZmlnIFRQTQogCWJvb2wg IlRydXN0ZWQgUGxhdGZvcm0gTW9kdWxlIChUUE0pIFN1cHBvcnQiCmRpZmYgLS1naXQgYS9saWIv TWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKaW5kZXggOWI4MzA1ZTMxOTBmLi4wZmIxNzEwZjVhY2Eg MTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQorKysgYi9saWIvTWFrZWZpbGUKQEAgLTE4LDYgKzE4 LDcgQEAgb2JqLSQoQ09ORklHX0NNRF9ESFJZU1RPTkUpICs9IGRocnkvCiBvYmotJChDT05GSUdf QVJDSF9BVDkxKSArPSBhdDkxLwogb2JqLSQoQ09ORklHX09QVEVFKSArPSBvcHRlZS8KIG9iai0k KENPTkZJR19BU04xX0RFQ09ERVIpICs9IGFzbjFfZGVjb2Rlci5vCitvYmoteSArPSBjcnlwdG8v CiAKIG9iai0kKENPTkZJR19BRVMpICs9IGFlcy5vCiAKZGlmZiAtLWdpdCBhL2xpYi9jcnlwdG8v S2NvbmZpZyBiL2xpYi9jcnlwdG8vS2NvbmZpZwppbmRleCA5NTcyZWE4Yzg3ZjMuLmFlYjU5OWM1 OTNhYyAxMDA2NDQKLS0tIGEvbGliL2NyeXB0by9LY29uZmlnCisrKyBiL2xpYi9jcnlwdG8vS2Nv bmZpZwpAQCAtMjcsNCArMjcsMTYgQEAgY29uZmlnIFJTQV9QVUJMSUNfS0VZX1BBUlNFUgogCSAg cHVibGljIGtleSBkYXRhIGFuZCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBpbnN0YW50aWF0ZSBh IHB1YmxpYwogCSAga2V5LgogCitjb25maWcgWDUwOV9DRVJUSUZJQ0FURV9QQVJTRVIKKwlib29s ICJYLjUwOSBjZXJ0aWZpY2F0ZSBwYXJzZXIiCisJZGVwZW5kcyBvbiBBU1lNTUVUUklDX1BVQkxJ Q19LRVlfU1VCVFlQRQorCXNlbGVjdCBBU04xX0RFQ09ERVIKKwlzZWxlY3QgQVNOMV9DT01QSUxF UgorCXNlbGVjdCBPSURfUkVHSVNUUlkKKwlzZWxlY3QgTElCX0RBVEUKKwloZWxwCisJICBUaGlz IG9wdGlvbiBwcm92aWRlcyBzdXBwb3J0IGZvciBwYXJzaW5nIFguNTA5IGZvcm1hdCBibG9icyBm b3Iga2V5CisJICBkYXRhIGFuZCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBpbnN0YW50aWF0ZSBh IGNyeXB0byBrZXkgZnJvbSBhCisJICBwdWJsaWMga2V5IHBhY2tldCBmb3VuZCBpbnNpZGUgdGhl IGNlcnRpZmljYXRlLgorCiBlbmRpZiAjIEFTWU1NRVRSSUNfS0VZX1RZUEUKZGlmZiAtLWdpdCBh L2xpYi9jcnlwdG8vTWFrZWZpbGUgYi9saWIvY3J5cHRvL01ha2VmaWxlCmluZGV4IDY5MzMwYTll YmQyNy4uZDdlMjdiZTU2OGExIDEwMDY0NAotLS0gYS9saWIvY3J5cHRvL01ha2VmaWxlCisrKyBi L2xpYi9jcnlwdG8vTWFrZWZpbGUKQEAgLTE5LDMgKzE5LDIwIEBAIHJzYV9wdWJsaWNfa2V5LXkg Oj0gXAogCiAkKG9iaikvcnNhcHVia2V5LmFzbjEubzogJChvYmopL3JzYXB1YmtleS5hc24xLmMg JChvYmopL3JzYXB1YmtleS5hc24xLmgKICQob2JqKS9yc2FfaGVscGVyLm86ICQob2JqKS9yc2Fw dWJrZXkuYXNuMS5oCisKKyMKKyMgWC41MDkgQ2VydGlmaWNhdGUgaGFuZGxpbmcKKyMKK29iai0k KENPTkZJR19YNTA5X0NFUlRJRklDQVRFX1BBUlNFUikgKz0geDUwOV9rZXlfcGFyc2VyLm8KK3g1 MDlfa2V5X3BhcnNlci15IDo9IFwKKwl4NTA5LmFzbjEubyBcCisJeDUwOV9ha2lkLmFzbjEubyBc CisJeDUwOV9jZXJ0X3BhcnNlci5vIFwKKwl4NTA5X3B1YmxpY19rZXkubworCiskKG9iaikveDUw OV9jZXJ0X3BhcnNlci5vOiBcCisJJChvYmopL3g1MDkuYXNuMS5oIFwKKwkkKG9iaikveDUwOV9h a2lkLmFzbjEuaAorCiskKG9iaikveDUwOS5hc24xLm86ICQob2JqKS94NTA5LmFzbjEuYyAkKG9i aikveDUwOS5hc24xLmgKKyQob2JqKS94NTA5X2FraWQuYXNuMS5vOiAkKG9iaikveDUwOV9ha2lk LmFzbjEuYyAkKG9iaikveDUwOV9ha2lkLmFzbjEuaApkaWZmIC0tZ2l0IGEvbGliL2NyeXB0by94 NTA5LmFzbjEgYi9saWIvY3J5cHRvL3g1MDkuYXNuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjVjOWY0ZTRhNTIzMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jcnlw dG8veDUwOS5hc24xCkBAIC0wLDAgKzEsNjAgQEAKK0NlcnRpZmljYXRlIDo6PSBTRVFVRU5DRSB7 CisJdGJzQ2VydGlmaWNhdGUJCVRCU0NlcnRpZmljYXRlICh7IHg1MDlfbm90ZV90YnNfY2VydGlm aWNhdGUgfSksCisJc2lnbmF0dXJlQWxnb3JpdGhtCUFsZ29yaXRobUlkZW50aWZpZXIsCisJc2ln bmF0dXJlCQlCSVQgU1RSSU5HICh7IHg1MDlfbm90ZV9zaWduYXR1cmUgfSkKKwl9CisKK1RCU0Nl cnRpZmljYXRlIDo6PSBTRVFVRU5DRSB7CisJdmVyc2lvbiAgICAgICAgICAgWyAwIF0JVmVyc2lv biBERUZBVUxULAorCXNlcmlhbE51bWJlcgkJQ2VydGlmaWNhdGVTZXJpYWxOdW1iZXIgKHsgeDUw OV9ub3RlX3NlcmlhbCB9KSwKKwlzaWduYXR1cmUJCUFsZ29yaXRobUlkZW50aWZpZXIgKHsgeDUw OV9ub3RlX3BrZXlfYWxnbyB9KSwKKwlpc3N1ZXIJCQlOYW1lICh7IHg1MDlfbm90ZV9pc3N1ZXIg fSksCisJdmFsaWRpdHkJCVZhbGlkaXR5LAorCXN1YmplY3QJCQlOYW1lICh7IHg1MDlfbm90ZV9z dWJqZWN0IH0pLAorCXN1YmplY3RQdWJsaWNLZXlJbmZvCVN1YmplY3RQdWJsaWNLZXlJbmZvLAor CWlzc3VlclVuaXF1ZUlEICAgIFsgMSBdCUlNUExJQ0lUIFVuaXF1ZUlkZW50aWZpZXIgT1BUSU9O QUwsCisJc3ViamVjdFVuaXF1ZUlEICAgWyAyIF0JSU1QTElDSVQgVW5pcXVlSWRlbnRpZmllciBP UFRJT05BTCwKKwlleHRlbnNpb25zICAgICAgICBbIDMgXQlFeHRlbnNpb25zIE9QVElPTkFMCisJ fQorCitWZXJzaW9uIDo6PSBJTlRFR0VSCitDZXJ0aWZpY2F0ZVNlcmlhbE51bWJlciA6Oj0gSU5U RUdFUgorCitBbGdvcml0aG1JZGVudGlmaWVyIDo6PSBTRVFVRU5DRSB7CisJYWxnb3JpdGhtCQlP QkpFQ1QgSURFTlRJRklFUiAoeyB4NTA5X25vdGVfT0lEIH0pLAorCXBhcmFtZXRlcnMJCUFOWSBP UFRJT05BTCAoeyB4NTA5X25vdGVfcGFyYW1zIH0pCit9CisKK05hbWUgOjo9IFNFUVVFTkNFIE9G IFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUKKworUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSA6 Oj0gU0VUIE9GIEF0dHJpYnV0ZVZhbHVlQXNzZXJ0aW9uCisKK0F0dHJpYnV0ZVZhbHVlQXNzZXJ0 aW9uIDo6PSBTRVFVRU5DRSB7CisJYXR0cmlidXRlVHlwZQkJT0JKRUNUIElERU5USUZJRVIgKHsg eDUwOV9ub3RlX09JRCB9KSwKKwlhdHRyaWJ1dGVWYWx1ZQkJQU5ZICh7IHg1MDlfZXh0cmFjdF9u YW1lX3NlZ21lbnQgfSkKKwl9CisKK1ZhbGlkaXR5IDo6PSBTRVFVRU5DRSB7CisJbm90QmVmb3Jl CQlUaW1lICh7IHg1MDlfbm90ZV9ub3RfYmVmb3JlIH0pLAorCW5vdEFmdGVyCQlUaW1lICh7IHg1 MDlfbm90ZV9ub3RfYWZ0ZXIgfSkKKwl9CisKK1RpbWUgOjo9IENIT0lDRSB7CisJdXRjVGltZQkJ CVVUQ1RpbWUsCisJZ2VuZXJhbFRpbWUJCUdlbmVyYWxpemVkVGltZQorCX0KKworU3ViamVjdFB1 YmxpY0tleUluZm8gOjo9IFNFUVVFTkNFIHsKKwlhbGdvcml0aG0JCUFsZ29yaXRobUlkZW50aWZp ZXIsCisJc3ViamVjdFB1YmxpY0tleQlCSVQgU1RSSU5HICh7IHg1MDlfZXh0cmFjdF9rZXlfZGF0 YSB9KQorCX0KKworVW5pcXVlSWRlbnRpZmllciA6Oj0gQklUIFNUUklORworCitFeHRlbnNpb25z IDo6PSBTRVFVRU5DRSBPRiBFeHRlbnNpb24KKworRXh0ZW5zaW9uIDo6PSBTRVFVRU5DRSB7CisJ ZXh0bmlkCQkJT0JKRUNUIElERU5USUZJRVIgKHsgeDUwOV9ub3RlX09JRCB9KSwKKwljcml0aWNh bAkJQk9PTEVBTiBERUZBVUxULAorCWV4dG5WYWx1ZQkJT0NURVQgU1RSSU5HICh7IHg1MDlfcHJv Y2Vzc19leHRlbnNpb24gfSkKKwl9CmRpZmYgLS1naXQgYS9saWIvY3J5cHRvL3g1MDlfYWtpZC5h c24xIGIvbGliL2NyeXB0by94NTA5X2FraWQuYXNuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjFhMzMyMzFhNzVhOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jcnlw dG8veDUwOV9ha2lkLmFzbjEKQEAgLTAsMCArMSwzNSBAQAorLS0gWC41MDkgQXV0aG9yaXR5S2V5 SWRlbnRpZmllcgorLS0gcmZjNTI4MCBzZWN0aW9uIDQuMi4xLjEKKworQXV0aG9yaXR5S2V5SWRl bnRpZmllciA6Oj0gU0VRVUVOQ0UgeworCWtleUlkZW50aWZpZXIJCQlbMF0gSU1QTElDSVQgS2V5 SWRlbnRpZmllcgkJT1BUSU9OQUwsCisJYXV0aG9yaXR5Q2VydElzc3VlcgkJWzFdIElNUExJQ0lU IEdlbmVyYWxOYW1lcwkJT1BUSU9OQUwsCisJYXV0aG9yaXR5Q2VydFNlcmlhbE51bWJlcglbMl0g SU1QTElDSVQgQ2VydGlmaWNhdGVTZXJpYWxOdW1iZXIJT1BUSU9OQUwKKwl9CisKK0tleUlkZW50 aWZpZXIgOjo9IE9DVEVUIFNUUklORyAoeyB4NTA5X2FraWRfbm90ZV9raWQgfSkKKworQ2VydGlm aWNhdGVTZXJpYWxOdW1iZXIgOjo9IElOVEVHRVIgKHsgeDUwOV9ha2lkX25vdGVfc2VyaWFsIH0p CisKK0dlbmVyYWxOYW1lcyA6Oj0gU0VRVUVOQ0UgT0YgR2VuZXJhbE5hbWUKKworR2VuZXJhbE5h bWUgOjo9IENIT0lDRSB7CisJb3RoZXJOYW1lCQkJWzBdIEFOWSwKKwlyZmM4MjJOYW1lCQkJWzFd IElBNVN0cmluZywKKwlkTlNOYW1lCQkJCVsyXSBJQTVTdHJpbmcsCisJeDQwMEFkZHJlc3MJCQlb M10gQU5ZLAorCWRpcmVjdG9yeU5hbWUJCQlbNF0gTmFtZSAoeyB4NTA5X2FraWRfbm90ZV9uYW1l IH0pLAorCWVkaVBhcnR5TmFtZQkJCVs1XSBBTlksCisJdW5pZm9ybVJlc291cmNlSWRlbnRpZmll cglbNl0gSUE1U3RyaW5nLAorCWlQQWRkcmVzcwkJCVs3XSBPQ1RFVCBTVFJJTkcsCisJcmVnaXN0 ZXJlZElECQkJWzhdIE9CSkVDVCBJREVOVElGSUVSCisJfQorCitOYW1lIDo6PSBTRVFVRU5DRSBP RiBSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lCisKK1JlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUg Ojo9IFNFVCBPRiBBdHRyaWJ1dGVWYWx1ZUFzc2VydGlvbgorCitBdHRyaWJ1dGVWYWx1ZUFzc2Vy dGlvbiA6Oj0gU0VRVUVOQ0UgeworCWF0dHJpYnV0ZVR5cGUJCU9CSkVDVCBJREVOVElGSUVSICh7 IHg1MDlfbm90ZV9PSUQgfSksCisJYXR0cmlidXRlVmFsdWUJCUFOWSAoeyB4NTA5X2V4dHJhY3Rf bmFtZV9zZWdtZW50IH0pCisJfQpkaWZmIC0tZ2l0IGEvbGliL2NyeXB0by94NTA5X2NlcnRfcGFy c2VyLmMgYi9saWIvY3J5cHRvL3g1MDlfY2VydF9wYXJzZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLmU2ZDJhNDI2YTBiYwotLS0gL2Rldi9udWxsCisrKyBiL2xp Yi9jcnlwdG8veDUwOV9jZXJ0X3BhcnNlci5jCkBAIC0wLDAgKzEsNjk3IEBACisvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgorLyogWC41MDkgY2VydGlmaWNhdGUg cGFyc2VyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0 cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHMgYXQgcmVk aGF0LmNvbSkKKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpICJYLjUwOTogImZtdAorI2luY2x1 ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2lmbmRlZiBfX1VCT09UX18KKyNpbmNsdWRlIDxsaW51eC9l eHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaW51 eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9vaWRfcmVnaXN0cnkuaD4KKyNpZmRlZiBfX1VCT09U X18KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGNyeXB0by9w dWJsaWNfa2V5Lmg+CisjaW5jbHVkZSAieDUwOV9wYXJzZXIuaCIKKyNpbmNsdWRlICJ4NTA5LmFz bjEuaCIKKyNpbmNsdWRlICJ4NTA5X2FraWQuYXNuMS5oIgorCitzdHJ1Y3QgeDUwOV9wYXJzZV9j b250ZXh0IHsKKwlzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZQkqY2VydDsJCS8qIENlcnRpZmljYXRl IGJlaW5nIGNvbnN0cnVjdGVkICovCisJdW5zaWduZWQgbG9uZwlkYXRhOwkJCS8qIFN0YXJ0IG9m IGRhdGEgKi8KKwljb25zdCB2b2lkCSpjZXJ0X3N0YXJ0OwkJLyogU3RhcnQgb2YgY2VydCBjb250 ZW50ICovCisJY29uc3Qgdm9pZAkqa2V5OwkJCS8qIEtleSBkYXRhICovCisJc2l6ZV90CQlrZXlf c2l6ZTsJCS8qIFNpemUgb2Yga2V5IGRhdGEgKi8KKwljb25zdCB2b2lkCSpwYXJhbXM7CQkvKiBL ZXkgcGFyYW1ldGVycyAqLworCXNpemVfdAkJcGFyYW1zX3NpemU7CQkvKiBTaXplIG9mIGtleSBw YXJhbWV0ZXJzICovCisJZW51bSBPSUQJa2V5X2FsZ287CQkvKiBQdWJsaWMga2V5IGFsZ29yaXRo bSAqLworCWVudW0gT0lECWxhc3Rfb2lkOwkJLyogTGFzdCBPSUQgZW5jb3VudGVyZWQgKi8KKwll bnVtIE9JRAlhbGdvX29pZDsJCS8qIEFsZ29yaXRobSBPSUQgKi8KKwl1bnNpZ25lZCBjaGFyCW5y X21waTsJCQkvKiBOdW1iZXIgb2YgTVBJcyBzdG9yZWQgKi8KKwl1OAkJb19zaXplOwkJCS8qIFNp emUgb2Ygb3JnYW5pemF0aW9uTmFtZSAoTykgKi8KKwl1OAkJY25fc2l6ZTsJCS8qIFNpemUgb2Yg Y29tbW9uTmFtZSAoQ04pICovCisJdTgJCWVtYWlsX3NpemU7CQkvKiBTaXplIG9mIGVtYWlsQWRk cmVzcyAqLworCXUxNgkJb19vZmZzZXQ7CQkvKiBPZmZzZXQgb2Ygb3JnYW5pemF0aW9uTmFtZSAo TykgKi8KKwl1MTYJCWNuX29mZnNldDsJCS8qIE9mZnNldCBvZiBjb21tb25OYW1lIChDTikgKi8K Kwl1MTYJCWVtYWlsX29mZnNldDsJCS8qIE9mZnNldCBvZiBlbWFpbEFkZHJlc3MgKi8KKwl1bnNp Z25lZAlyYXdfYWtpZF9zaXplOworCWNvbnN0IHZvaWQJKnJhd19ha2lkOwkJLyogUmF3IGF1dGhv cml0eUtleUlkIGluIEFTTi4xICovCisJY29uc3Qgdm9pZAkqYWtpZF9yYXdfaXNzdWVyOwkvKiBS YXcgZGlyZWN0b3J5TmFtZSBpbiBhdXRob3JpdHlLZXlJZCAqLworCXVuc2lnbmVkCWFraWRfcmF3 X2lzc3Vlcl9zaXplOworfTsKKworLyoKKyAqIEZyZWUgYW4gWC41MDkgY2VydGlmaWNhdGUKKyAq Lwordm9pZCB4NTA5X2ZyZWVfY2VydGlmaWNhdGUoc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKmNl cnQpCit7CisJaWYgKGNlcnQpIHsKKwkJcHVibGljX2tleV9mcmVlKGNlcnQtPnB1Yik7CisJCXB1 YmxpY19rZXlfc2lnbmF0dXJlX2ZyZWUoY2VydC0+c2lnKTsKKwkJa2ZyZWUoY2VydC0+aXNzdWVy KTsKKwkJa2ZyZWUoY2VydC0+c3ViamVjdCk7CisJCWtmcmVlKGNlcnQtPmlkKTsKKwkJa2ZyZWUo Y2VydC0+c2tpZCk7CisJCWtmcmVlKGNlcnQpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHg1 MDlfZnJlZV9jZXJ0aWZpY2F0ZSk7CisKKy8qCisgKiBQYXJzZSBhbiBYLjUwOSBjZXJ0aWZpY2F0 ZQorICovCitzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqeDUwOV9jZXJ0X3BhcnNlKGNvbnN0IHZv aWQgKmRhdGEsIHNpemVfdCBkYXRhbGVuKQoreworCXN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpj ZXJ0OworCXN0cnVjdCB4NTA5X3BhcnNlX2NvbnRleHQgKmN0eDsKKwlzdHJ1Y3QgYXN5bW1ldHJp Y19rZXlfaWQgKmtpZDsKKwlsb25nIHJldDsKKworCXJldCA9IC1FTk9NRU07CisJY2VydCA9IGt6 YWxsb2Moc2l6ZW9mKHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFjZXJ0KQorCQlnb3RvIGVycm9yX25vX2NlcnQ7CisJY2VydC0+cHViID0ga3phbGxvYyhzaXpl b2Yoc3RydWN0IHB1YmxpY19rZXkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNlcnQtPnB1YikKKwkJ Z290byBlcnJvcl9ub19jdHg7CisJY2VydC0+c2lnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHB1 YmxpY19rZXlfc2lnbmF0dXJlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZXJ0LT5zaWcpCisJCWdv dG8gZXJyb3Jfbm9fY3R4OworCWN0eCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB4NTA5X3BhcnNl X2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0eCkKKwkJZ290byBlcnJvcl9ub19jdHg7 CisKKwljdHgtPmNlcnQgPSBjZXJ0OworCWN0eC0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRhdGE7 CisKKwkvKiBBdHRlbXB0IHRvIGRlY29kZSB0aGUgY2VydGlmaWNhdGUgKi8KKwlyZXQgPSBhc24x X2Jlcl9kZWNvZGVyKCZ4NTA5X2RlY29kZXIsIGN0eCwgZGF0YSwgZGF0YWxlbik7CisJaWYgKHJl dCA8IDApCisJCWdvdG8gZXJyb3JfZGVjb2RlOworCisJLyogRGVjb2RlIHRoZSBBdXRob3JpdHlL ZXlJZGVudGlmaWVyICovCisJaWYgKGN0eC0+cmF3X2FraWQpIHsKKwkJcHJfZGV2ZWwoIkFLSUQ6 ICV1ICUqcGhOXG4iLAorCQkJIGN0eC0+cmF3X2FraWRfc2l6ZSwgY3R4LT5yYXdfYWtpZF9zaXpl LCBjdHgtPnJhd19ha2lkKTsKKwkJcmV0ID0gYXNuMV9iZXJfZGVjb2RlcigmeDUwOV9ha2lkX2Rl Y29kZXIsIGN0eCwKKwkJCQkgICAgICAgY3R4LT5yYXdfYWtpZCwgY3R4LT5yYXdfYWtpZF9zaXpl KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX3dhcm4oIkNvdWxkbid0IGRlY29kZSBBdXRoS2V5 SWRlbnRpZmllclxuIik7CisJCQlnb3RvIGVycm9yX2RlY29kZTsKKwkJfQorCX0KKworCXJldCA9 IC1FTk9NRU07CisJY2VydC0+cHViLT5rZXkgPSBrbWVtZHVwKGN0eC0+a2V5LCBjdHgtPmtleV9z aXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNlcnQtPnB1Yi0+a2V5KQorCQlnb3RvIGVycm9yX2Rl Y29kZTsKKworCWNlcnQtPnB1Yi0+a2V5bGVuID0gY3R4LT5rZXlfc2l6ZTsKKworCWNlcnQtPnB1 Yi0+cGFyYW1zID0ga21lbWR1cChjdHgtPnBhcmFtcywgY3R4LT5wYXJhbXNfc2l6ZSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFjZXJ0LT5wdWItPnBhcmFtcykKKwkJZ290byBlcnJvcl9kZWNvZGU7CisK KwljZXJ0LT5wdWItPnBhcmFtbGVuID0gY3R4LT5wYXJhbXNfc2l6ZTsKKwljZXJ0LT5wdWItPmFs Z28gPSBjdHgtPmtleV9hbGdvOworCisJLyogR3JhYiB0aGUgc2lnbmF0dXJlIGJpdHMgKi8KKwly ZXQgPSB4NTA5X2dldF9zaWdfcGFyYW1zKGNlcnQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVy cm9yX2RlY29kZTsKKworCS8qIEdlbmVyYXRlIGNlcnQgaXNzdWVyICsgc2VyaWFsIG51bWJlciBr ZXkgSUQgKi8KKwlraWQgPSBhc3ltbWV0cmljX2tleV9nZW5lcmF0ZV9pZChjZXJ0LT5yYXdfc2Vy aWFsLAorCQkJCQkgY2VydC0+cmF3X3NlcmlhbF9zaXplLAorCQkJCQkgY2VydC0+cmF3X2lzc3Vl ciwKKwkJCQkJIGNlcnQtPnJhd19pc3N1ZXJfc2l6ZSk7CisJaWYgKElTX0VSUihraWQpKSB7CisJ CXJldCA9IFBUUl9FUlIoa2lkKTsKKwkJZ290byBlcnJvcl9kZWNvZGU7CisJfQorCWNlcnQtPmlk ID0ga2lkOworCisjaWZuZGVmIF9fVUJPT1RfXworCS8qIERldGVjdCBzZWxmLXNpZ25lZCBjZXJ0 aWZpY2F0ZXMgKi8KKwlyZXQgPSB4NTA5X2NoZWNrX2Zvcl9zZWxmX3NpZ25lZChjZXJ0KTsKKwlp ZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl9kZWNvZGU7CisjZW5kaWYKKworCWtmcmVlKGN0eCk7 CisJcmV0dXJuIGNlcnQ7CisKK2Vycm9yX2RlY29kZToKKwlrZnJlZShjdHgpOworZXJyb3Jfbm9f Y3R4OgorCXg1MDlfZnJlZV9jZXJ0aWZpY2F0ZShjZXJ0KTsKK2Vycm9yX25vX2NlcnQ6CisJcmV0 dXJuIEVSUl9QVFIocmV0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHg1MDlfY2VydF9wYXJzZSk7 CisKKy8qCisgKiBOb3RlIGFuIE9JRCB3aGVuIHdlIGZpbmQgb25lIGZvciBsYXRlciBwcm9jZXNz aW5nIHdoZW4gd2Uga25vdyBob3cKKyAqIHRvIGludGVycHJldCBpdC4KKyAqLworaW50IHg1MDlf bm90ZV9PSUQodm9pZCAqY29udGV4dCwgc2l6ZV90IGhkcmxlbiwKKwkgICAgIHVuc2lnbmVkIGNo YXIgdGFnLAorCSAgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2bGVuKQoreworCXN0cnVj dCB4NTA5X3BhcnNlX2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7CisKKwljdHgtPmxhc3Rfb2lkID0g bG9va191cF9PSUQodmFsdWUsIHZsZW4pOworCWlmIChjdHgtPmxhc3Rfb2lkID09IE9JRF9fTlIp IHsKKwkJY2hhciBidWZmZXJbNTBdOworCQlzcHJpbnRfb2lkKHZhbHVlLCB2bGVuLCBidWZmZXIs IHNpemVvZihidWZmZXIpKTsKKwkJcHJfZGVidWcoIlVua25vd24gT0lEOiBbJWx1XSAlc1xuIiwK KwkJCSAodW5zaWduZWQgbG9uZyl2YWx1ZSAtIGN0eC0+ZGF0YSwgYnVmZmVyKTsKKwl9CisJcmV0 dXJuIDA7Cit9CisKKy8qCisgKiBTYXZlIHRoZSBwb3NpdGlvbiBvZiB0aGUgVEJTIGRhdGEgc28g dGhhdCB3ZSBjYW4gY2hlY2sgdGhlIHNpZ25hdHVyZSBvdmVyIGl0CisgKiBsYXRlci4KKyAqLwor aW50IHg1MDlfbm90ZV90YnNfY2VydGlmaWNhdGUodm9pZCAqY29udGV4dCwgc2l6ZV90IGhkcmxl biwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgdGFnLAorCQkJICAgICAgY29uc3Qgdm9pZCAqdmFs dWUsIHNpemVfdCB2bGVuKQoreworCXN0cnVjdCB4NTA5X3BhcnNlX2NvbnRleHQgKmN0eCA9IGNv bnRleHQ7CisKKwlwcl9kZWJ1ZygieDUwOV9ub3RlX3Ric19jZXJ0aWZpY2F0ZSgsJXp1LCUwMngs JWxkLCV6dSkhXG4iLAorCQkgaGRybGVuLCB0YWcsICh1bnNpZ25lZCBsb25nKXZhbHVlIC0gY3R4 LT5kYXRhLCB2bGVuKTsKKworCWN0eC0+Y2VydC0+dGJzID0gdmFsdWUgLSBoZHJsZW47CisJY3R4 LT5jZXJ0LT50YnNfc2l6ZSA9IHZsZW4gKyBoZHJsZW47CisJcmV0dXJuIDA7Cit9CisKKy8qCisg KiBSZWNvcmQgdGhlIHB1YmxpYyBrZXkgYWxnb3JpdGhtCisgKi8KK2ludCB4NTA5X25vdGVfcGtl eV9hbGdvKHZvaWQgKmNvbnRleHQsIHNpemVfdCBoZHJsZW4sCisJCQl1bnNpZ25lZCBjaGFyIHRh ZywKKwkJCWNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmxlbikKK3sKKwlzdHJ1Y3QgeDUwOV9w YXJzZV9jb250ZXh0ICpjdHggPSBjb250ZXh0OworCisJcHJfZGVidWcoIlB1YktleSBBbGdvOiAl dVxuIiwgY3R4LT5sYXN0X29pZCk7CisKKwlzd2l0Y2ggKGN0eC0+bGFzdF9vaWQpIHsKKwljYXNl IE9JRF9tZDJXaXRoUlNBRW5jcnlwdGlvbjoKKwljYXNlIE9JRF9tZDNXaXRoUlNBRW5jcnlwdGlv bjoKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1BLRzsgLyogVW5zdXBwb3J0ZWQgY29tYmluYXRp b24gKi8KKworCWNhc2UgT0lEX21kNFdpdGhSU0FFbmNyeXB0aW9uOgorCQljdHgtPmNlcnQtPnNp Zy0+aGFzaF9hbGdvID0gIm1kNCI7CisJCWdvdG8gcnNhX3BrY3MxOworCisJY2FzZSBPSURfc2hh MVdpdGhSU0FFbmNyeXB0aW9uOgorCQljdHgtPmNlcnQtPnNpZy0+aGFzaF9hbGdvID0gInNoYTEi OworCQlnb3RvIHJzYV9wa2NzMTsKKworCWNhc2UgT0lEX3NoYTI1NldpdGhSU0FFbmNyeXB0aW9u OgorCQljdHgtPmNlcnQtPnNpZy0+aGFzaF9hbGdvID0gInNoYTI1NiI7CisJCWdvdG8gcnNhX3Br Y3MxOworCisJY2FzZSBPSURfc2hhMzg0V2l0aFJTQUVuY3J5cHRpb246CisJCWN0eC0+Y2VydC0+ c2lnLT5oYXNoX2FsZ28gPSAic2hhMzg0IjsKKwkJZ290byByc2FfcGtjczE7CisKKwljYXNlIE9J RF9zaGE1MTJXaXRoUlNBRW5jcnlwdGlvbjoKKwkJY3R4LT5jZXJ0LT5zaWctPmhhc2hfYWxnbyA9 ICJzaGE1MTIiOworCQlnb3RvIHJzYV9wa2NzMTsKKworCWNhc2UgT0lEX3NoYTIyNFdpdGhSU0FF bmNyeXB0aW9uOgorCQljdHgtPmNlcnQtPnNpZy0+aGFzaF9hbGdvID0gInNoYTIyNCI7CisJCWdv dG8gcnNhX3BrY3MxOworCisJY2FzZSBPSURfZ29zdDIwMTJTaWduYXR1cmUyNTY6CisJCWN0eC0+ Y2VydC0+c2lnLT5oYXNoX2FsZ28gPSAic3RyZWVib2cyNTYiOworCQlnb3RvIGVjcmRzYTsKKwor CWNhc2UgT0lEX2dvc3QyMDEyU2lnbmF0dXJlNTEyOgorCQljdHgtPmNlcnQtPnNpZy0+aGFzaF9h bGdvID0gInN0cmVlYm9nNTEyIjsKKwkJZ290byBlY3Jkc2E7CisJfQorCityc2FfcGtjczE6CisJ Y3R4LT5jZXJ0LT5zaWctPnBrZXlfYWxnbyA9ICJyc2EiOworCWN0eC0+Y2VydC0+c2lnLT5lbmNv ZGluZyA9ICJwa2NzMSI7CisJY3R4LT5hbGdvX29pZCA9IGN0eC0+bGFzdF9vaWQ7CisJcmV0dXJu IDA7CitlY3Jkc2E6CisJY3R4LT5jZXJ0LT5zaWctPnBrZXlfYWxnbyA9ICJlY3Jkc2EiOworCWN0 eC0+Y2VydC0+c2lnLT5lbmNvZGluZyA9ICJyYXciOworCWN0eC0+YWxnb19vaWQgPSBjdHgtPmxh c3Rfb2lkOworCXJldHVybiAwOworfQorCisvKgorICogTm90ZSB0aGUgd2hlcmVhYm91dHMgYW5k IHR5cGUgb2YgdGhlIHNpZ25hdHVyZS4KKyAqLworaW50IHg1MDlfbm90ZV9zaWduYXR1cmUodm9p ZCAqY29udGV4dCwgc2l6ZV90IGhkcmxlbiwKKwkJCXVuc2lnbmVkIGNoYXIgdGFnLAorCQkJY29u c3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2bGVuKQoreworCXN0cnVjdCB4NTA5X3BhcnNlX2NvbnRl eHQgKmN0eCA9IGNvbnRleHQ7CisKKwlwcl9kZWJ1ZygiU2lnbmF0dXJlIHR5cGU6ICV1IHNpemUg JXp1XG4iLCBjdHgtPmxhc3Rfb2lkLCB2bGVuKTsKKworCWlmIChjdHgtPmxhc3Rfb2lkICE9IGN0 eC0+YWxnb19vaWQpIHsKKwkJcHJfd2FybigiR290IGNlcnQgd2l0aCBwa2V5ICgldSkgYW5kIHNp ZyAoJXUpIGFsZ29yaXRobSBPSURzXG4iLAorCQkJY3R4LT5hbGdvX29pZCwgY3R4LT5sYXN0X29p ZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzdHJjbXAoY3R4LT5jZXJ0LT5zaWct PnBrZXlfYWxnbywgInJzYSIpID09IDAgfHwKKwkgICAgc3RyY21wKGN0eC0+Y2VydC0+c2lnLT5w a2V5X2FsZ28sICJlY3Jkc2EiKSA9PSAwKSB7CisJCS8qIERpc2NhcmQgdGhlIEJJVCBTVFJJTkcg bWV0YWRhdGEgKi8KKwkJaWYgKHZsZW4gPCAxIHx8ICooY29uc3QgdTggKil2YWx1ZSAhPSAwKQor CQkJcmV0dXJuIC1FQkFETVNHOworCisJCXZhbHVlKys7CisJCXZsZW4tLTsKKwl9CisKKwljdHgt PmNlcnQtPnJhd19zaWcgPSB2YWx1ZTsKKwljdHgtPmNlcnQtPnJhd19zaWdfc2l6ZSA9IHZsZW47 CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBOb3RlIHRoZSBjZXJ0aWZpY2F0ZSBzZXJpYWwgbnVt YmVyCisgKi8KK2ludCB4NTA5X25vdGVfc2VyaWFsKHZvaWQgKmNvbnRleHQsIHNpemVfdCBoZHJs ZW4sCisJCSAgICAgdW5zaWduZWQgY2hhciB0YWcsCisJCSAgICAgY29uc3Qgdm9pZCAqdmFsdWUs IHNpemVfdCB2bGVuKQoreworCXN0cnVjdCB4NTA5X3BhcnNlX2NvbnRleHQgKmN0eCA9IGNvbnRl eHQ7CisJY3R4LT5jZXJ0LT5yYXdfc2VyaWFsID0gdmFsdWU7CisJY3R4LT5jZXJ0LT5yYXdfc2Vy aWFsX3NpemUgPSB2bGVuOworCXJldHVybiAwOworfQorCisvKgorICogTm90ZSBzb21lIG9mIHRo ZSBuYW1lIHNlZ21lbnRzIGZyb20gd2hpY2ggd2UnbGwgZmFicmljYXRlIGEgbmFtZS4KKyAqLwor aW50IHg1MDlfZXh0cmFjdF9uYW1lX3NlZ21lbnQodm9pZCAqY29udGV4dCwgc2l6ZV90IGhkcmxl biwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgdGFnLAorCQkJICAgICAgY29uc3Qgdm9pZCAqdmFs dWUsIHNpemVfdCB2bGVuKQoreworCXN0cnVjdCB4NTA5X3BhcnNlX2NvbnRleHQgKmN0eCA9IGNv bnRleHQ7CisKKwlzd2l0Y2ggKGN0eC0+bGFzdF9vaWQpIHsKKwljYXNlIE9JRF9jb21tb25OYW1l OgorCQljdHgtPmNuX3NpemUgPSB2bGVuOworCQljdHgtPmNuX29mZnNldCA9ICh1bnNpZ25lZCBs b25nKXZhbHVlIC0gY3R4LT5kYXRhOworCQlicmVhazsKKwljYXNlIE9JRF9vcmdhbml6YXRpb25O YW1lOgorCQljdHgtPm9fc2l6ZSA9IHZsZW47CisJCWN0eC0+b19vZmZzZXQgPSAodW5zaWduZWQg bG9uZyl2YWx1ZSAtIGN0eC0+ZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBPSURfZW1haWxfYWRkcmVz czoKKwkJY3R4LT5lbWFpbF9zaXplID0gdmxlbjsKKwkJY3R4LT5lbWFpbF9vZmZzZXQgPSAodW5z aWduZWQgbG9uZyl2YWx1ZSAtIGN0eC0+ZGF0YTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJl YWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGYWJyaWNhdGUgYW5kIHNhdmUgdGhl IGlzc3VlciBhbmQgc3ViamVjdCBuYW1lcworICovCitzdGF0aWMgaW50IHg1MDlfZmFicmljYXRl X25hbWUoc3RydWN0IHg1MDlfcGFyc2VfY29udGV4dCAqY3R4LCBzaXplX3QgaGRybGVuLAorCQkJ ICAgICAgIHVuc2lnbmVkIGNoYXIgdGFnLAorCQkJICAgICAgIGNoYXIgKipfbmFtZSwgc2l6ZV90 IHZsZW4pCit7CisJY29uc3Qgdm9pZCAqbmFtZSwgKmRhdGEgPSAoY29uc3Qgdm9pZCAqKWN0eC0+ ZGF0YTsKKwlzaXplX3QgbmFtZXNpemU7CisJY2hhciAqYnVmZmVyOworCisJaWYgKCpfbmFtZSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBFbXB0eSBuYW1lIHN0cmluZyBpZiBubyBtYXRlcmlh bCAqLworCWlmICghY3R4LT5jbl9zaXplICYmICFjdHgtPm9fc2l6ZSAmJiAhY3R4LT5lbWFpbF9z aXplKSB7CisJCWJ1ZmZlciA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmZmVy KQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWJ1ZmZlclswXSA9IDA7CisJCWdvdG8gZG9uZTsKKwl9 CisKKwlpZiAoY3R4LT5jbl9zaXplICYmIGN0eC0+b19zaXplKSB7CisJCS8qIENvbnNpZGVyIGNv bWJpbmluZyBPIGFuZCBDTiwgYnV0IHVzZSBvbmx5IHRoZSBDTiBpZiBpdCBpcworCQkgKiBwcmVm aXhlZCBieSB0aGUgTywgb3IgYSBzaWduaWZpY2FudCBwb3J0aW9uIHRoZXJlb2YuCisJCSAqLwor CQluYW1lc2l6ZSA9IGN0eC0+Y25fc2l6ZTsKKwkJbmFtZSA9IGRhdGEgKyBjdHgtPmNuX29mZnNl dDsKKwkJaWYgKGN0eC0+Y25fc2l6ZSA+PSBjdHgtPm9fc2l6ZSAmJgorCQkgICAgbWVtY21wKGRh dGEgKyBjdHgtPmNuX29mZnNldCwgZGF0YSArIGN0eC0+b19vZmZzZXQsCisJCQkgICBjdHgtPm9f c2l6ZSkgPT0gMCkKKwkJCWdvdG8gc2luZ2xlX2NvbXBvbmVudDsKKwkJaWYgKGN0eC0+Y25fc2l6 ZSA+PSA3ICYmCisJCSAgICBjdHgtPm9fc2l6ZSA+PSA3ICYmCisJCSAgICBtZW1jbXAoZGF0YSAr IGN0eC0+Y25fb2Zmc2V0LCBkYXRhICsgY3R4LT5vX29mZnNldCwgNykgPT0gMCkKKwkJCWdvdG8g c2luZ2xlX2NvbXBvbmVudDsKKworCQlidWZmZXIgPSBrbWFsbG9jKGN0eC0+b19zaXplICsgMiAr IGN0eC0+Y25fc2l6ZSArIDEsCisJCQkJIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1ZmZlcikKKwkJ CXJldHVybiAtRU5PTUVNOworCisJCW1lbWNweShidWZmZXIsCisJCSAgICAgICBkYXRhICsgY3R4 LT5vX29mZnNldCwgY3R4LT5vX3NpemUpOworCQlidWZmZXJbY3R4LT5vX3NpemUgKyAwXSA9ICc6 JzsKKwkJYnVmZmVyW2N0eC0+b19zaXplICsgMV0gPSAnICc7CisJCW1lbWNweShidWZmZXIgKyBj dHgtPm9fc2l6ZSArIDIsCisJCSAgICAgICBkYXRhICsgY3R4LT5jbl9vZmZzZXQsIGN0eC0+Y25f c2l6ZSk7CisJCWJ1ZmZlcltjdHgtPm9fc2l6ZSArIDIgKyBjdHgtPmNuX3NpemVdID0gMDsKKwkJ Z290byBkb25lOworCisJfSBlbHNlIGlmIChjdHgtPmNuX3NpemUpIHsKKwkJbmFtZXNpemUgPSBj dHgtPmNuX3NpemU7CisJCW5hbWUgPSBkYXRhICsgY3R4LT5jbl9vZmZzZXQ7CisJfSBlbHNlIGlm IChjdHgtPm9fc2l6ZSkgeworCQluYW1lc2l6ZSA9IGN0eC0+b19zaXplOworCQluYW1lID0gZGF0 YSArIGN0eC0+b19vZmZzZXQ7CisJfSBlbHNlIHsKKwkJbmFtZXNpemUgPSBjdHgtPmVtYWlsX3Np emU7CisJCW5hbWUgPSBkYXRhICsgY3R4LT5lbWFpbF9vZmZzZXQ7CisJfQorCitzaW5nbGVfY29t cG9uZW50OgorCWJ1ZmZlciA9IGttYWxsb2MobmFtZXNpemUgKyAxLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGJ1ZmZlciwgbmFtZSwgbmFt ZXNpemUpOworCWJ1ZmZlcltuYW1lc2l6ZV0gPSAwOworCitkb25lOgorCSpfbmFtZSA9IGJ1ZmZl cjsKKwljdHgtPmNuX3NpemUgPSAwOworCWN0eC0+b19zaXplID0gMDsKKwljdHgtPmVtYWlsX3Np emUgPSAwOworCXJldHVybiAwOworfQorCitpbnQgeDUwOV9ub3RlX2lzc3Vlcih2b2lkICpjb250 ZXh0LCBzaXplX3QgaGRybGVuLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgdGFnLAorCQkgICAgIGNv bnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmxlbikKK3sKKwlzdHJ1Y3QgeDUwOV9wYXJzZV9jb250 ZXh0ICpjdHggPSBjb250ZXh0OworCWN0eC0+Y2VydC0+cmF3X2lzc3VlciA9IHZhbHVlOworCWN0 eC0+Y2VydC0+cmF3X2lzc3Vlcl9zaXplID0gdmxlbjsKKwlyZXR1cm4geDUwOV9mYWJyaWNhdGVf bmFtZShjdHgsIGhkcmxlbiwgdGFnLCAmY3R4LT5jZXJ0LT5pc3N1ZXIsIHZsZW4pOworfQorCitp bnQgeDUwOV9ub3RlX3N1YmplY3Qodm9pZCAqY29udGV4dCwgc2l6ZV90IGhkcmxlbiwKKwkJICAg ICAgdW5zaWduZWQgY2hhciB0YWcsCisJCSAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qg dmxlbikKK3sKKwlzdHJ1Y3QgeDUwOV9wYXJzZV9jb250ZXh0ICpjdHggPSBjb250ZXh0OworCWN0 eC0+Y2VydC0+cmF3X3N1YmplY3QgPSB2YWx1ZTsKKwljdHgtPmNlcnQtPnJhd19zdWJqZWN0X3Np emUgPSB2bGVuOworCXJldHVybiB4NTA5X2ZhYnJpY2F0ZV9uYW1lKGN0eCwgaGRybGVuLCB0YWcs ICZjdHgtPmNlcnQtPnN1YmplY3QsIHZsZW4pOworfQorCisvKgorICogRXh0cmFjdCB0aGUgcGFy YW1ldGVycyBmb3IgdGhlIHB1YmxpYyBrZXkKKyAqLworaW50IHg1MDlfbm90ZV9wYXJhbXModm9p ZCAqY29udGV4dCwgc2l6ZV90IGhkcmxlbiwKKwkJICAgICB1bnNpZ25lZCBjaGFyIHRhZywKKwkJ ICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZsZW4pCit7CisJc3RydWN0IHg1MDlfcGFy c2VfY29udGV4dCAqY3R4ID0gY29udGV4dDsKKworCS8qCisJICogQWxnb3JpdGhtSWRlbnRpZmll ciBpcyB1c2VkIHRocmVlIHRpbWVzIGluIHRoZSB4NTA5LCB3ZSBzaG91bGQgc2tpcAorCSAqIGZp cnN0IGFuZCBpZ25vcmUgdGhpcmQsIHVzaW5nIHNlY29uZCBvbmUgd2hpY2ggaXMgYWZ0ZXIgc3Vi amVjdCBhbmQKKwkgKiBiZWZvcmUgc3ViamVjdFB1YmxpY0tleS4KKwkgKi8KKwlpZiAoIWN0eC0+ Y2VydC0+cmF3X3N1YmplY3QgfHwgY3R4LT5rZXkpCisJCXJldHVybiAwOworCWN0eC0+cGFyYW1z ID0gdmFsdWUgLSBoZHJsZW47CisJY3R4LT5wYXJhbXNfc2l6ZSA9IHZsZW4gKyBoZHJsZW47CisJ cmV0dXJuIDA7Cit9CisKKy8qCisgKiBFeHRyYWN0IHRoZSBkYXRhIGZvciB0aGUgcHVibGljIGtl eSBhbGdvcml0aG0KKyAqLworaW50IHg1MDlfZXh0cmFjdF9rZXlfZGF0YSh2b2lkICpjb250ZXh0 LCBzaXplX3QgaGRybGVuLAorCQkJICB1bnNpZ25lZCBjaGFyIHRhZywKKwkJCSAgY29uc3Qgdm9p ZCAqdmFsdWUsIHNpemVfdCB2bGVuKQoreworCXN0cnVjdCB4NTA5X3BhcnNlX2NvbnRleHQgKmN0 eCA9IGNvbnRleHQ7CisKKwljdHgtPmtleV9hbGdvID0gY3R4LT5sYXN0X29pZDsKKwlpZiAoY3R4 LT5sYXN0X29pZCA9PSBPSURfcnNhRW5jcnlwdGlvbikKKwkJY3R4LT5jZXJ0LT5wdWItPnBrZXlf YWxnbyA9ICJyc2EiOworCWVsc2UgaWYgKGN0eC0+bGFzdF9vaWQgPT0gT0lEX2dvc3QyMDEyUEtl eTI1NiB8fAorCQkgY3R4LT5sYXN0X29pZCA9PSBPSURfZ29zdDIwMTJQS2V5NTEyKQorCQljdHgt PmNlcnQtPnB1Yi0+cGtleV9hbGdvID0gImVjcmRzYSI7CisJZWxzZQorCQlyZXR1cm4gLUVOT1BL RzsKKworCS8qIERpc2NhcmQgdGhlIEJJVCBTVFJJTkcgbWV0YWRhdGEgKi8KKwlpZiAodmxlbiA8 IDEgfHwgKihjb25zdCB1OCAqKXZhbHVlICE9IDApCisJCXJldHVybiAtRUJBRE1TRzsKKwljdHgt PmtleSA9IHZhbHVlICsgMTsKKwljdHgtPmtleV9zaXplID0gdmxlbiAtIDE7CisJcmV0dXJuIDA7 Cit9CisKKy8qIFRoZSBrZXlJZGVudGlmaWVyIGluIEF1dGhvcml0eUtleUlkZW50aWZpZXIgU0VR VUVOQ0UgaXMgdGFnKENPTlQsUFJJTSwwKSAqLworI2RlZmluZSBTRVFfVEFHX0tFWUlEIChBU04x X0NPTlQgPDwgNikKKworLyoKKyAqIFByb2Nlc3MgY2VydGlmaWNhdGUgZXh0ZW5zaW9ucyB0aGF0 IGFyZSB1c2VkIHRvIHF1YWxpZnkgdGhlIGNlcnRpZmljYXRlLgorICovCitpbnQgeDUwOV9wcm9j ZXNzX2V4dGVuc2lvbih2b2lkICpjb250ZXh0LCBzaXplX3QgaGRybGVuLAorCQkJICAgdW5zaWdu ZWQgY2hhciB0YWcsCisJCQkgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZsZW4pCit7CisJ c3RydWN0IHg1MDlfcGFyc2VfY29udGV4dCAqY3R4ID0gY29udGV4dDsKKwlzdHJ1Y3QgYXN5bW1l dHJpY19rZXlfaWQgKmtpZDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICp2ID0gdmFsdWU7CisKKwlw cl9kZWJ1ZygiRXh0ZW5zaW9uOiAldVxuIiwgY3R4LT5sYXN0X29pZCk7CisKKwlpZiAoY3R4LT5s YXN0X29pZCA9PSBPSURfc3ViamVjdEtleUlkZW50aWZpZXIpIHsKKwkJLyogR2V0IGhvbGQgb2Yg dGhlIGtleSBmaW5nZXJwcmludCAqLworCQlpZiAoY3R4LT5jZXJ0LT5za2lkIHx8IHZsZW4gPCAz KQorCQkJcmV0dXJuIC1FQkFETVNHOworCQlpZiAodlswXSAhPSBBU04xX09UUyB8fCB2WzFdICE9 IHZsZW4gLSAyKQorCQkJcmV0dXJuIC1FQkFETVNHOworCQl2ICs9IDI7CisJCXZsZW4gLT0gMjsK KworCQljdHgtPmNlcnQtPnJhd19za2lkX3NpemUgPSB2bGVuOworCQljdHgtPmNlcnQtPnJhd19z a2lkID0gdjsKKwkJa2lkID0gYXN5bW1ldHJpY19rZXlfZ2VuZXJhdGVfaWQodiwgdmxlbiwgIiIs IDApOworCQlpZiAoSVNfRVJSKGtpZCkpCisJCQlyZXR1cm4gUFRSX0VSUihraWQpOworCQljdHgt PmNlcnQtPnNraWQgPSBraWQ7CisJCXByX2RlYnVnKCJzdWJqa2V5aWQgJSpwaE5cbiIsIGtpZC0+ bGVuLCBraWQtPmRhdGEpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoY3R4LT5sYXN0X29pZCA9 PSBPSURfYXV0aG9yaXR5S2V5SWRlbnRpZmllcikgeworCQkvKiBHZXQgaG9sZCBvZiB0aGUgQ0Eg a2V5IGZpbmdlcnByaW50ICovCisJCWN0eC0+cmF3X2FraWQgPSB2OworCQljdHgtPnJhd19ha2lk X3NpemUgPSB2bGVuOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisg KiB4NTA5X2RlY29kZV90aW1lIC0gRGVjb2RlIGFuIFguNTA5IHRpbWUgQVNOLjEgb2JqZWN0Cisg KiBAX3Q6IFRoZSB0aW1lIHRvIGZpbGwgaW4KKyAqIEBoZHJsZW46IFRoZSBsZW5ndGggb2YgdGhl IG9iamVjdCBoZWFkZXIKKyAqIEB0YWc6IFRoZSBvYmplY3QgdGFnCisgKiBAdmFsdWU6IFRoZSBv YmplY3QgdmFsdWUKKyAqIEB2bGVuOiBUaGUgc2l6ZSBvZiB0aGUgb2JqZWN0IHZhbHVlCisgKgor ICogRGVjb2RlIGFuIEFTTi4xIHVuaXZlcnNhbCB0aW1lIG9yIGdlbmVyYWxpc2VkIHRpbWUgZmll bGQgaW50byBhIHN0cnVjdCB0aGUKKyAqIGtlcm5lbCBjYW4gaGFuZGxlIGFuZCBjaGVjayBpdCBm b3IgdmFsaWRpdHkuICBUaGUgdGltZSBpcyBkZWNvZGVkIHRodXM6CisgKgorICoJW1JGQzUyODAg wqc0LjEuMi41XQorICoJQ0FzIGNvbmZvcm1pbmcgdG8gdGhpcyBwcm9maWxlIE1VU1QgYWx3YXlz IGVuY29kZSBjZXJ0aWZpY2F0ZSB2YWxpZGl0eQorICoJZGF0ZXMgdGhyb3VnaCB0aGUgeWVhciAy MDQ5IGFzIFVUQ1RpbWU7IGNlcnRpZmljYXRlIHZhbGlkaXR5IGRhdGVzIGluCisgKgkyMDUwIG9y IGxhdGVyIE1VU1QgYmUgZW5jb2RlZCBhcyBHZW5lcmFsaXplZFRpbWUuICBDb25mb3JtaW5nCisg KglhcHBsaWNhdGlvbnMgTVVTVCBiZSBhYmxlIHRvIHByb2Nlc3MgdmFsaWRpdHkgZGF0ZXMgdGhh dCBhcmUgZW5jb2RlZCBpbgorICoJZWl0aGVyIFVUQ1RpbWUgb3IgR2VuZXJhbGl6ZWRUaW1lLgor ICovCitpbnQgeDUwOV9kZWNvZGVfdGltZSh0aW1lNjRfdCAqX3QsICBzaXplX3QgaGRybGVuLAor CQkgICAgIHVuc2lnbmVkIGNoYXIgdGFnLAorCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZh bHVlLCBzaXplX3QgdmxlbikKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb250aF9s ZW5ndGhzW10gPSB7IDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsCisJCQkJCQkgICAgICAgMzEsIDMx LCAzMCwgMzEsIDMwLCAzMSB9OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSB2YWx1ZTsKKwl1 bnNpZ25lZCB5ZWFyLCBtb24sIGRheSwgaG91ciwgbWluLCBzZWMsIG1vbl9sZW47CisKKyNkZWZp bmUgZGVjMmJpbihYKSAoeyB1bnNpZ25lZCBjaGFyIHggPSAoWCkgLSAnMCc7IGlmICh4ID4gOSkg Z290byBpbnZhbGlkX3RpbWU7IHg7IH0pCisjZGVmaW5lIEREMmJpbihQKSAoeyB1bnNpZ25lZCB4 ID0gZGVjMmJpbihQWzBdKSAqIDEwICsgZGVjMmJpbihQWzFdKTsgUCArPSAyOyB4OyB9KQorCisJ aWYgKHRhZyA9PSBBU04xX1VOSVRJTSkgeworCQkvKiBVVENUaW1lOiBZWU1NRERISE1NU1NaICov CisJCWlmICh2bGVuICE9IDEzKQorCQkJZ290byB1bnN1cHBvcnRlZF90aW1lOworCQl5ZWFyID0g REQyYmluKHApOworCQlpZiAoeWVhciA+PSA1MCkKKwkJCXllYXIgKz0gMTkwMDsKKwkJZWxzZQor CQkJeWVhciArPSAyMDAwOworCX0gZWxzZSBpZiAodGFnID09IEFTTjFfR0VOVElNKSB7CisJCS8q IEdlblRpbWU6IFlZWVlNTURESEhNTVNTWiAqLworCQlpZiAodmxlbiAhPSAxNSkKKwkJCWdvdG8g dW5zdXBwb3J0ZWRfdGltZTsKKwkJeWVhciA9IEREMmJpbihwKSAqIDEwMCArIEREMmJpbihwKTsK KwkJaWYgKHllYXIgPj0gMTk1MCAmJiB5ZWFyIDw9IDIwNDkpCisJCQlnb3RvIGludmFsaWRfdGlt ZTsKKwl9IGVsc2UgeworCQlnb3RvIHVuc3VwcG9ydGVkX3RpbWU7CisJfQorCisJbW9uICA9IERE MmJpbihwKTsKKwlkYXkgPSBERDJiaW4ocCk7CisJaG91ciA9IEREMmJpbihwKTsKKwltaW4gID0g REQyYmluKHApOworCXNlYyAgPSBERDJiaW4ocCk7CisKKwlpZiAoKnAgIT0gJ1onKQorCQlnb3Rv IHVuc3VwcG9ydGVkX3RpbWU7CisKKwlpZiAoeWVhciA8IDE5NzAgfHwKKwkgICAgbW9uIDwgMSB8 fCBtb24gPiAxMikKKwkJZ290byBpbnZhbGlkX3RpbWU7CisKKwltb25fbGVuID0gbW9udGhfbGVu Z3Roc1ttb24gLSAxXTsKKwlpZiAobW9uID09IDIpIHsKKwkJaWYgKHllYXIgJSA0ID09IDApIHsK KwkJCW1vbl9sZW4gPSAyOTsKKwkJCWlmICh5ZWFyICUgMTAwID09IDApIHsKKwkJCQltb25fbGVu ID0gMjg7CisJCQkJaWYgKHllYXIgJSA0MDAgPT0gMCkKKwkJCQkJbW9uX2xlbiA9IDI5OworCQkJ fQorCQl9CisJfQorCisJaWYgKGRheSA8IDEgfHwgZGF5ID4gbW9uX2xlbiB8fAorCSAgICBob3Vy ID4gMjQgfHwgLyogSVNPIDg2MDEgcGVybWl0cyAyNDowMDowMCBhcyBtaWRuaWdodCB0b21vcnJv dyAqLworCSAgICBtaW4gPiA1OSB8fAorCSAgICBzZWMgPiA2MCkgLyogSVNPIDg2MDEgcGVybWl0 cyBsZWFwIHNlY29uZHMgW1guNjgwIDQ2LjNdICovCisJCWdvdG8gaW52YWxpZF90aW1lOworCisJ Kl90ID0gbWt0aW1lNjQoeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKTsKKwlyZXR1cm4g MDsKKwordW5zdXBwb3J0ZWRfdGltZToKKwlwcl9kZWJ1ZygiR290IHVuc3VwcG9ydGVkIHRpbWUg W3RhZyAlMDJ4XTogJyUqcGhOJ1xuIiwKKwkJIHRhZywgKGludCl2bGVuLCB2YWx1ZSk7CisJcmV0 dXJuIC1FQkFETVNHOworaW52YWxpZF90aW1lOgorCXByX2RlYnVnKCJHb3QgaW52YWxpZCB0aW1l IFt0YWcgJTAyeF06ICclKnBoTidcbiIsCisJCSB0YWcsIChpbnQpdmxlbiwgdmFsdWUpOworCXJl dHVybiAtRUJBRE1TRzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHg1MDlfZGVjb2RlX3RpbWUpOwor CitpbnQgeDUwOV9ub3RlX25vdF9iZWZvcmUodm9pZCAqY29udGV4dCwgc2l6ZV90IGhkcmxlbiwK KwkJCSB1bnNpZ25lZCBjaGFyIHRhZywKKwkJCSBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZs ZW4pCit7CisJc3RydWN0IHg1MDlfcGFyc2VfY29udGV4dCAqY3R4ID0gY29udGV4dDsKKwlyZXR1 cm4geDUwOV9kZWNvZGVfdGltZSgmY3R4LT5jZXJ0LT52YWxpZF9mcm9tLCBoZHJsZW4sIHRhZywg dmFsdWUsIHZsZW4pOworfQorCitpbnQgeDUwOV9ub3RlX25vdF9hZnRlcih2b2lkICpjb250ZXh0 LCBzaXplX3QgaGRybGVuLAorCQkJdW5zaWduZWQgY2hhciB0YWcsCisJCQljb25zdCB2b2lkICp2 YWx1ZSwgc2l6ZV90IHZsZW4pCit7CisJc3RydWN0IHg1MDlfcGFyc2VfY29udGV4dCAqY3R4ID0g Y29udGV4dDsKKwlyZXR1cm4geDUwOV9kZWNvZGVfdGltZSgmY3R4LT5jZXJ0LT52YWxpZF90bywg aGRybGVuLCB0YWcsIHZhbHVlLCB2bGVuKTsKK30KKworLyoKKyAqIE5vdGUgYSBrZXkgaWRlbnRp Zmllci1iYXNlZCBBdXRob3JpdHlLZXlJZGVudGlmaWVyCisgKi8KK2ludCB4NTA5X2FraWRfbm90 ZV9raWQodm9pZCAqY29udGV4dCwgc2l6ZV90IGhkcmxlbiwKKwkJICAgICAgIHVuc2lnbmVkIGNo YXIgdGFnLAorCQkgICAgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2bGVuKQoreworCXN0 cnVjdCB4NTA5X3BhcnNlX2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7CisJc3RydWN0IGFzeW1tZXRy aWNfa2V5X2lkICpraWQ7CisKKwlwcl9kZWJ1ZygiQUtJRDoga2V5aWQ6ICUqcGhOXG4iLCAoaW50 KXZsZW4sIHZhbHVlKTsKKworCWlmIChjdHgtPmNlcnQtPnNpZy0+YXV0aF9pZHNbMV0pCisJCXJl dHVybiAwOworCisJa2lkID0gYXN5bW1ldHJpY19rZXlfZ2VuZXJhdGVfaWQodmFsdWUsIHZsZW4s ICIiLCAwKTsKKwlpZiAoSVNfRVJSKGtpZCkpCisJCXJldHVybiBQVFJfRVJSKGtpZCk7CisJcHJf ZGVidWcoImF1dGhrZXlpZCAlKnBoTlxuIiwga2lkLT5sZW4sIGtpZC0+ZGF0YSk7CisJY3R4LT5j ZXJ0LT5zaWctPmF1dGhfaWRzWzFdID0ga2lkOworCXJldHVybiAwOworfQorCisvKgorICogTm90 ZSBhIGRpcmVjdG9yeU5hbWUgaW4gYW4gQXV0aG9yaXR5S2V5SWRlbnRpZmllcgorICovCitpbnQg eDUwOV9ha2lkX25vdGVfbmFtZSh2b2lkICpjb250ZXh0LCBzaXplX3QgaGRybGVuLAorCQkJdW5z aWduZWQgY2hhciB0YWcsCisJCQljb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZsZW4pCit7CisJ c3RydWN0IHg1MDlfcGFyc2VfY29udGV4dCAqY3R4ID0gY29udGV4dDsKKworCXByX2RlYnVnKCJB S0lEOiBuYW1lOiAlKnBoTlxuIiwgKGludCl2bGVuLCB2YWx1ZSk7CisKKwljdHgtPmFraWRfcmF3 X2lzc3VlciA9IHZhbHVlOworCWN0eC0+YWtpZF9yYXdfaXNzdWVyX3NpemUgPSB2bGVuOworCXJl dHVybiAwOworfQorCisvKgorICogTm90ZSBhIHNlcmlhbCBudW1iZXIgaW4gYW4gQXV0aG9yaXR5 S2V5SWRlbnRpZmllcgorICovCitpbnQgeDUwOV9ha2lkX25vdGVfc2VyaWFsKHZvaWQgKmNvbnRl eHQsIHNpemVfdCBoZHJsZW4sCisJCQkgIHVuc2lnbmVkIGNoYXIgdGFnLAorCQkJICBjb25zdCB2 b2lkICp2YWx1ZSwgc2l6ZV90IHZsZW4pCit7CisJc3RydWN0IHg1MDlfcGFyc2VfY29udGV4dCAq Y3R4ID0gY29udGV4dDsKKwlzdHJ1Y3QgYXN5bW1ldHJpY19rZXlfaWQgKmtpZDsKKworCXByX2Rl YnVnKCJBS0lEOiBzZXJpYWw6ICUqcGhOXG4iLCAoaW50KXZsZW4sIHZhbHVlKTsKKworCWlmICgh Y3R4LT5ha2lkX3Jhd19pc3N1ZXIgfHwgY3R4LT5jZXJ0LT5zaWctPmF1dGhfaWRzWzBdKQorCQly ZXR1cm4gMDsKKworCWtpZCA9IGFzeW1tZXRyaWNfa2V5X2dlbmVyYXRlX2lkKHZhbHVlLAorCQkJ CQkgdmxlbiwKKwkJCQkJIGN0eC0+YWtpZF9yYXdfaXNzdWVyLAorCQkJCQkgY3R4LT5ha2lkX3Jh d19pc3N1ZXJfc2l6ZSk7CisJaWYgKElTX0VSUihraWQpKQorCQlyZXR1cm4gUFRSX0VSUihraWQp OworCisJcHJfZGVidWcoImF1dGhrZXlpZCAlKnBoTlxuIiwga2lkLT5sZW4sIGtpZC0+ZGF0YSk7 CisJY3R4LT5jZXJ0LT5zaWctPmF1dGhfaWRzWzBdID0ga2lkOworCXJldHVybiAwOworfQpkaWZm IC0tZ2l0IGEvbGliL2NyeXB0by94NTA5X3BhcnNlci5oIGIvbGliL2NyeXB0by94NTA5X3BhcnNl ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzIzM2YxMzZmYjM1 Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2NyeXB0by94NTA5X3BhcnNlci5oCkBAIC0wLDAgKzEs NTcgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCisv KiBYLjUwOSBjZXJ0aWZpY2F0ZSBwYXJzZXIgaW50ZXJuYWwgZGVmaW5pdGlvbnMKKyAqCisgKiBD b3B5cmlnaHQgKEMpIDIwMTIgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICog V3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxscyBhdCByZWRoYXQuY29tKQorICovCisK KyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3B1YmxpY19rZXkuaD4K KyNpbmNsdWRlIDxrZXlzL2FzeW1tZXRyaWMtdHlwZS5oPgorCitzdHJ1Y3QgeDUwOV9jZXJ0aWZp Y2F0ZSB7CisJc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKm5leHQ7CisJc3RydWN0IHg1MDlfY2Vy dGlmaWNhdGUgKnNpZ25lcjsJLyogQ2VydGlmaWNhdGUgdGhhdCBzaWduZWQgdGhpcyBvbmUgKi8K KwlzdHJ1Y3QgcHVibGljX2tleSAqcHViOwkJCS8qIFB1YmxpYyBrZXkgZGV0YWlscyAqLworCXN0 cnVjdCBwdWJsaWNfa2V5X3NpZ25hdHVyZSAqc2lnOwkvKiBTaWduYXR1cmUgcGFyYW1ldGVycyAq LworCWNoYXIJCSppc3N1ZXI7CQkvKiBOYW1lIG9mIGNlcnRpZmljYXRlIGlzc3VlciAqLworCWNo YXIJCSpzdWJqZWN0OwkJLyogTmFtZSBvZiBjZXJ0aWZpY2F0ZSBzdWJqZWN0ICovCisJc3RydWN0 IGFzeW1tZXRyaWNfa2V5X2lkICppZDsJCS8qIElzc3VlciArIFNlcmlhbCBudW1iZXIgKi8KKwlz dHJ1Y3QgYXN5bW1ldHJpY19rZXlfaWQgKnNraWQ7CQkvKiBTdWJqZWN0ICsgc3ViamVjdEtleUlk IChvcHRpb25hbCkgKi8KKwl0aW1lNjRfdAl2YWxpZF9mcm9tOworCXRpbWU2NF90CXZhbGlkX3Rv OworCWNvbnN0IHZvaWQJKnRiczsJCQkvKiBTaWduZWQgZGF0YSAqLworCXVuc2lnbmVkCXRic19z aXplOwkJLyogU2l6ZSBvZiBzaWduZWQgZGF0YSAqLworCXVuc2lnbmVkCXJhd19zaWdfc2l6ZTsJ CS8qIFNpemUgb2Ygc2lnYXR1cmUgKi8KKwljb25zdCB2b2lkCSpyYXdfc2lnOwkJLyogU2lnbmF0 dXJlIGRhdGEgKi8KKwljb25zdCB2b2lkCSpyYXdfc2VyaWFsOwkJLyogUmF3IHNlcmlhbCBudW1i ZXIgaW4gQVNOLjEgKi8KKwl1bnNpZ25lZAlyYXdfc2VyaWFsX3NpemU7CisJdW5zaWduZWQJcmF3 X2lzc3Vlcl9zaXplOworCWNvbnN0IHZvaWQJKnJhd19pc3N1ZXI7CQkvKiBSYXcgaXNzdWVyIG5h bWUgaW4gQVNOLjEgKi8KKwljb25zdCB2b2lkCSpyYXdfc3ViamVjdDsJCS8qIFJhdyBzdWJqZWN0 IG5hbWUgaW4gQVNOLjEgKi8KKwl1bnNpZ25lZAlyYXdfc3ViamVjdF9zaXplOworCXVuc2lnbmVk CXJhd19za2lkX3NpemU7CisJY29uc3Qgdm9pZAkqcmF3X3NraWQ7CQkvKiBSYXcgc3ViamVjdEtl eUlkIGluIEFTTi4xICovCisJdW5zaWduZWQJaW5kZXg7CisJYm9vbAkJc2VlbjsJCQkvKiBJbmZp bml0ZSByZWN1cnNpb24gcHJldmVudGlvbiAqLworCWJvb2wJCXZlcmlmaWVkOworCWJvb2wJCXNl bGZfc2lnbmVkOwkJLyogVCBpZiBzZWxmLXNpZ25lZCAoY2hlY2sgdW5zdXBwb3J0ZWRfc2lnIHRv bykgKi8KKwlib29sCQl1bnN1cHBvcnRlZF9rZXk7CS8qIFQgaWYga2V5IHVzZXMgdW5zdXBwb3J0 ZWQgY3J5cHRvICovCisJYm9vbAkJdW5zdXBwb3J0ZWRfc2lnOwkvKiBUIGlmIHNpZ25hdHVyZSB1 c2VzIHVuc3VwcG9ydGVkIGNyeXB0byAqLworCWJvb2wJCWJsYWNrbGlzdGVkOworfTsKKworLyoK KyAqIHg1MDlfY2VydF9wYXJzZXIuYworICovCitleHRlcm4gdm9pZCB4NTA5X2ZyZWVfY2VydGlm aWNhdGUoc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKmNlcnQpOworZXh0ZXJuIHN0cnVjdCB4NTA5 X2NlcnRpZmljYXRlICp4NTA5X2NlcnRfcGFyc2UoY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRh dGFsZW4pOworZXh0ZXJuIGludCB4NTA5X2RlY29kZV90aW1lKHRpbWU2NF90ICpfdCwgIHNpemVf dCBoZHJsZW4sCisJCQkgICAgdW5zaWduZWQgY2hhciB0YWcsCisJCQkgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqdmFsdWUsIHNpemVfdCB2bGVuKTsKKworLyoKKyAqIHg1MDlfcHVibGljX2tleS5j CisgKi8KK2V4dGVybiBpbnQgeDUwOV9nZXRfc2lnX3BhcmFtcyhzdHJ1Y3QgeDUwOV9jZXJ0aWZp Y2F0ZSAqY2VydCk7CitleHRlcm4gaW50IHg1MDlfY2hlY2tfZm9yX3NlbGZfc2lnbmVkKHN0cnVj dCB4NTA5X2NlcnRpZmljYXRlICpjZXJ0KTsKZGlmZiAtLWdpdCBhL2xpYi9jcnlwdG8veDUwOV9w dWJsaWNfa2V5LmMgYi9saWIvY3J5cHRvL3g1MDlfcHVibGljX2tleS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDRiZGI2NzJiNDk2Ci0tLSAvZGV2L251bGwKKysr IGIvbGliL2NyeXB0by94NTA5X3B1YmxpY19rZXkuYwpAQCAtMCwwICsxLDI5MiBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKKy8qIEluc3RhbnRpYXRlIGEg cHVibGljIGtleSBjcnlwdG8ga2V5IGZyb20gYW4gWC41MDkgQ2VydGlmaWNhdGUKKyAqCisgKiBD b3B5cmlnaHQgKEMpIDIwMTIgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICog V3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxscyBhdCByZWRoYXQuY29tKQorICovCisK KyNkZWZpbmUgcHJfZm10KGZtdCkgIlguNTA5OiAiZm10CisjaWZkZWYgX19VQk9PVF9fCisjaW5j bHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGlu dXgvZXJybm8uaD4KKyNlbHNlCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjZW5kaWYKKyNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpZm5kZWYgX19VQk9PVF9fCisjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPgorI2luY2x1ZGUgPGtleXMvYXN5bW1ldHJpYy1zdWJ0eXBlLmg+CisjaW5jbHVk ZSA8a2V5cy9hc3ltbWV0cmljLXBhcnNlci5oPgorI2luY2x1ZGUgPGtleXMvc3lzdGVtX2tleXJp bmcuaD4KKyNpbmNsdWRlIDxjcnlwdG8vaGFzaC5oPgorI2luY2x1ZGUgImFzeW1tZXRyaWNfa2V5 cy5oIgorI2VuZGlmCisjaW5jbHVkZSAieDUwOV9wYXJzZXIuaCIKKworLyoKKyAqIFNldCB1cCB0 aGUgc2lnbmF0dXJlIHBhcmFtZXRlcnMgaW4gYW4gWC41MDkgY2VydGlmaWNhdGUuICBUaGlzIGlu dm9sdmVzCisgKiBkaWdlc3RpbmcgdGhlIHNpZ25lZCBkYXRhIGFuZCBleHRyYWN0aW5nIHRoZSBz aWduYXR1cmUuCisgKi8KK2ludCB4NTA5X2dldF9zaWdfcGFyYW1zKHN0cnVjdCB4NTA5X2NlcnRp ZmljYXRlICpjZXJ0KQoreworCXN0cnVjdCBwdWJsaWNfa2V5X3NpZ25hdHVyZSAqc2lnID0gY2Vy dC0+c2lnOworI2lmbmRlZiBfX1VCT09UX18KKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoICp0Zm07CisJ c3RydWN0IHNoYXNoX2Rlc2MgKmRlc2M7CisJc2l6ZV90IGRlc2Nfc2l6ZTsKKyNlbmRpZgorCWlu dCByZXQ7CisKKwlwcl9kZXZlbCgiPT0+JXMoKVxuIiwgX19mdW5jX18pOworCisJaWYgKCFjZXJ0 LT5wdWItPnBrZXlfYWxnbykKKwkJY2VydC0+dW5zdXBwb3J0ZWRfa2V5ID0gdHJ1ZTsKKworCWlm ICghc2lnLT5wa2V5X2FsZ28pCisJCWNlcnQtPnVuc3VwcG9ydGVkX3NpZyA9IHRydWU7CisKKwkv KiBXZSBjaGVjayB0aGUgaGFzaCBpZiB3ZSBjYW4gLSBldmVuIGlmIHdlIGNhbid0IHRoZW4gdmVy aWZ5IGl0ICovCisJaWYgKCFzaWctPmhhc2hfYWxnbykgeworCQljZXJ0LT51bnN1cHBvcnRlZF9z aWcgPSB0cnVlOworCQlyZXR1cm4gMDsKKwl9CisKKwlzaWctPnMgPSBrbWVtZHVwKGNlcnQtPnJh d19zaWcsIGNlcnQtPnJhd19zaWdfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzaWctPnMpCisJ CXJldHVybiAtRU5PTUVNOworCisJc2lnLT5zX3NpemUgPSBjZXJ0LT5yYXdfc2lnX3NpemU7CisK KyNpZmRlZiBfX1VCT09UX18KKwkvKgorCSAqIE5vdGU6CisJICogVGhpcyBwYXJ0IChmaWxsaW5n IHNpZy0+ZGlnZXN0KSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaWYKKwkgKiB4NTA5X2NoZWNrX2Zv cl9zZWxmX3NpZ25lZCgpIGlzIGVuYWJsZWQgeDUwOV9jZXJ0X3BhcnNlKCkuCisJICogQ3VycmVu dGx5LCB0aGlzIGNoZWNrIHdvbid0IGFmZmVjdCBVRUZJIHNlY3VyZSBib290LgorCSAqLworCXJl dCA9IDA7CisjZWxzZQorCS8qIEFsbG9jYXRlIHRoZSBoYXNoaW5nIGFsZ29yaXRobSB3ZSdyZSBn b2luZyB0byBuZWVkIGFuZCBmaW5kIG91dCBob3cKKwkgKiBiaWcgdGhlIGhhc2ggb3BlcmF0aW9u YWwgZGF0YSB3aWxsIGJlLgorCSAqLworCXRmbSA9IGNyeXB0b19hbGxvY19zaGFzaChzaWctPmhh c2hfYWxnbywgMCwgMCk7CisJaWYgKElTX0VSUih0Zm0pKSB7CisJCWlmIChQVFJfRVJSKHRmbSkg PT0gLUVOT0VOVCkgeworCQkJY2VydC0+dW5zdXBwb3J0ZWRfc2lnID0gdHJ1ZTsKKwkJCXJldHVy biAwOworCQl9CisJCXJldHVybiBQVFJfRVJSKHRmbSk7CisJfQorCisJZGVzY19zaXplID0gY3J5 cHRvX3NoYXNoX2Rlc2NzaXplKHRmbSkgKyBzaXplb2YoKmRlc2MpOworCXNpZy0+ZGlnZXN0X3Np emUgPSBjcnlwdG9fc2hhc2hfZGlnZXN0c2l6ZSh0Zm0pOworCisJcmV0ID0gLUVOT01FTTsKKwlz aWctPmRpZ2VzdCA9IGttYWxsb2Moc2lnLT5kaWdlc3Rfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFzaWctPmRpZ2VzdCkKKwkJZ290byBlcnJvcjsKKworCWRlc2MgPSBremFsbG9jKGRlc2Nfc2l6 ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXNjKQorCQlnb3RvIGVycm9yOworCisJZGVzYy0+dGZt ID0gdGZtOworCisJcmV0ID0gY3J5cHRvX3NoYXNoX2RpZ2VzdChkZXNjLCBjZXJ0LT50YnMsIGNl cnQtPnRic19zaXplLCBzaWctPmRpZ2VzdCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3Jf MjsKKworCXJldCA9IGlzX2hhc2hfYmxhY2tsaXN0ZWQoc2lnLT5kaWdlc3QsIHNpZy0+ZGlnZXN0 X3NpemUsICJ0YnMiKTsKKwlpZiAocmV0ID09IC1FS0VZUkVKRUNURUQpIHsKKwkJcHJfZXJyKCJD ZXJ0ICUqcGhOIGlzIGJsYWNrbGlzdGVkXG4iLAorCQkgICAgICAgc2lnLT5kaWdlc3Rfc2l6ZSwg c2lnLT5kaWdlc3QpOworCQljZXJ0LT5ibGFja2xpc3RlZCA9IHRydWU7CisJCXJldCA9IDA7CisJ fQorCitlcnJvcl8yOgorCWtmcmVlKGRlc2MpOworZXJyb3I6CisJY3J5cHRvX2ZyZWVfc2hhc2go dGZtKTsKKyNlbmRpZiAvKiBfX1VCT09UX18gKi8KKwlwcl9kZXZlbCgiPD09JXMoKSA9ICVkXG4i LCBfX2Z1bmNfXywgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisjaWZuZGVmIF9fVUJPT1RfXwor LyoKKyAqIENoZWNrIGZvciBzZWxmLXNpZ25lZG5lc3MgaW4gYW4gWC41MDkgY2VydCBhbmQgaWYg Zm91bmQsIGNoZWNrIHRoZSBzaWduYXR1cmUKKyAqIGltbWVkaWF0ZWx5IGlmIHdlIGNhbi4KKyAq LworaW50IHg1MDlfY2hlY2tfZm9yX3NlbGZfc2lnbmVkKHN0cnVjdCB4NTA5X2NlcnRpZmljYXRl ICpjZXJ0KQoreworCWludCByZXQgPSAwOworCisJcHJfZGV2ZWwoIj09PiVzKClcbiIsIF9fZnVu Y19fKTsKKworCWlmIChjZXJ0LT5yYXdfc3ViamVjdF9zaXplICE9IGNlcnQtPnJhd19pc3N1ZXJf c2l6ZSB8fAorCSAgICBtZW1jbXAoY2VydC0+cmF3X3N1YmplY3QsIGNlcnQtPnJhd19pc3N1ZXIs CisJCSAgIGNlcnQtPnJhd19pc3N1ZXJfc2l6ZSkgIT0gMCkKKwkJZ290byBub3Rfc2VsZl9zaWdu ZWQ7CisKKwlpZiAoY2VydC0+c2lnLT5hdXRoX2lkc1swXSB8fCBjZXJ0LT5zaWctPmF1dGhfaWRz WzFdKSB7CisJCS8qIElmIHRoZSBBS0lEIGlzIHByZXNlbnQgaXQgbWF5IGhhdmUgb25lIG9yIHR3 byBwYXJ0cy4gIElmCisJCSAqIGJvdGggYXJlIHN1cHBsaWVkLCBib3RoIG11c3QgbWF0Y2guCisJ CSAqLworCQlib29sIGEgPSBhc3ltbWV0cmljX2tleV9pZF9zYW1lKGNlcnQtPnNraWQsIGNlcnQt PnNpZy0+YXV0aF9pZHNbMV0pOworCQlib29sIGIgPSBhc3ltbWV0cmljX2tleV9pZF9zYW1lKGNl cnQtPmlkLCBjZXJ0LT5zaWctPmF1dGhfaWRzWzBdKTsKKworCQlpZiAoIWEgJiYgIWIpCisJCQln b3RvIG5vdF9zZWxmX3NpZ25lZDsKKworCQlyZXQgPSAtRUtFWVJFSkVDVEVEOworCQlpZiAoKChh ICYmICFiKSB8fCAoYiAmJiAhYSkpICYmCisJCSAgICBjZXJ0LT5zaWctPmF1dGhfaWRzWzBdICYm IGNlcnQtPnNpZy0+YXV0aF9pZHNbMV0pCisJCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSAtRUtF WVJFSkVDVEVEOworCWlmIChzdHJjbXAoY2VydC0+cHViLT5wa2V5X2FsZ28sIGNlcnQtPnNpZy0+ cGtleV9hbGdvKSAhPSAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHB1YmxpY19rZXlfdmVyaWZ5 X3NpZ25hdHVyZShjZXJ0LT5wdWIsIGNlcnQtPnNpZyk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYg KHJldCA9PSAtRU5PUEtHKSB7CisJCQljZXJ0LT51bnN1cHBvcnRlZF9zaWcgPSB0cnVlOworCQkJ cmV0ID0gMDsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwlwcl9kZXZlbCgiQ2VydCBTZWxmLXNp Z25hdHVyZSB2ZXJpZmllZCIpOworCWNlcnQtPnNlbGZfc2lnbmVkID0gdHJ1ZTsKKworb3V0Ogor CXByX2RldmVsKCI8PT0lcygpID0gJWRcbiIsIF9fZnVuY19fLCByZXQpOworCXJldHVybiByZXQ7 CisKK25vdF9zZWxmX3NpZ25lZDoKKwlwcl9kZXZlbCgiPD09JXMoKSA9IDAgW25vdF1cbiIsIF9f ZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEF0dGVtcHQgdG8gcGFyc2UgYSBkYXRh IGJsb2IgZm9yIGEga2V5IGFzIGFuIFg1MDkgY2VydGlmaWNhdGUuCisgKi8KK3N0YXRpYyBpbnQg eDUwOV9rZXlfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCkKK3sK KwlzdHJ1Y3QgYXN5bW1ldHJpY19rZXlfaWRzICpraWRzOworCXN0cnVjdCB4NTA5X2NlcnRpZmlj YXRlICpjZXJ0OworCWNvbnN0IGNoYXIgKnE7CisJc2l6ZV90IHNybGVuLCBzdWxlbjsKKwljaGFy ICpkZXNjID0gTlVMTCwgKnA7CisJaW50IHJldDsKKworCWNlcnQgPSB4NTA5X2NlcnRfcGFyc2Uo cHJlcC0+ZGF0YSwgcHJlcC0+ZGF0YWxlbik7CisJaWYgKElTX0VSUihjZXJ0KSkKKwkJcmV0dXJu IFBUUl9FUlIoY2VydCk7CisKKwlwcl9kZXZlbCgiQ2VydCBJc3N1ZXI6ICVzXG4iLCBjZXJ0LT5p c3N1ZXIpOworCXByX2RldmVsKCJDZXJ0IFN1YmplY3Q6ICVzXG4iLCBjZXJ0LT5zdWJqZWN0KTsK KworCWlmIChjZXJ0LT51bnN1cHBvcnRlZF9rZXkpIHsKKwkJcmV0ID0gLUVOT1BLRzsKKwkJZ290 byBlcnJvcl9mcmVlX2NlcnQ7CisJfQorCisJcHJfZGV2ZWwoIkNlcnQgS2V5IEFsZ286ICVzXG4i LCBjZXJ0LT5wdWItPnBrZXlfYWxnbyk7CisJcHJfZGV2ZWwoIkNlcnQgVmFsaWQgcGVyaW9kOiAl bGxkLSVsbGRcbiIsIGNlcnQtPnZhbGlkX2Zyb20sIGNlcnQtPnZhbGlkX3RvKTsKKworCWNlcnQt PnB1Yi0+aWRfdHlwZSA9ICJYNTA5IjsKKworCWlmIChjZXJ0LT51bnN1cHBvcnRlZF9zaWcpIHsK KwkJcHVibGljX2tleV9zaWduYXR1cmVfZnJlZShjZXJ0LT5zaWcpOworCQljZXJ0LT5zaWcgPSBO VUxMOworCX0gZWxzZSB7CisJCXByX2RldmVsKCJDZXJ0IFNpZ25hdHVyZTogJXMgKyAlc1xuIiwK KwkJCSBjZXJ0LT5zaWctPnBrZXlfYWxnbywgY2VydC0+c2lnLT5oYXNoX2FsZ28pOworCX0KKwor CS8qIERvbid0IHBlcm1pdCBhZGRpdGlvbiBvZiBibGFja2xpc3RlZCBrZXlzICovCisJcmV0ID0g LUVLRVlSRUpFQ1RFRDsKKwlpZiAoY2VydC0+YmxhY2tsaXN0ZWQpCisJCWdvdG8gZXJyb3JfZnJl ZV9jZXJ0OworCisJLyogUHJvcG9zZSBhIGRlc2NyaXB0aW9uICovCisJc3VsZW4gPSBzdHJsZW4o Y2VydC0+c3ViamVjdCk7CisJaWYgKGNlcnQtPnJhd19za2lkKSB7CisJCXNybGVuID0gY2VydC0+ cmF3X3NraWRfc2l6ZTsKKwkJcSA9IGNlcnQtPnJhd19za2lkOworCX0gZWxzZSB7CisJCXNybGVu ID0gY2VydC0+cmF3X3NlcmlhbF9zaXplOworCQlxID0gY2VydC0+cmF3X3NlcmlhbDsKKwl9CisK KwlyZXQgPSAtRU5PTUVNOworCWRlc2MgPSBrbWFsbG9jKHN1bGVuICsgMiArIHNybGVuICogMiAr IDEsIEdGUF9LRVJORUwpOworCWlmICghZGVzYykKKwkJZ290byBlcnJvcl9mcmVlX2NlcnQ7CisJ cCA9IG1lbWNweShkZXNjLCBjZXJ0LT5zdWJqZWN0LCBzdWxlbik7CisJcCArPSBzdWxlbjsKKwkq cCsrID0gJzonOworCSpwKysgPSAnICc7CisJcCA9IGJpbjJoZXgocCwgcSwgc3JsZW4pOworCSpw ID0gMDsKKworCWtpZHMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXN5bW1ldHJpY19rZXlfaWRz KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFraWRzKQorCQlnb3RvIGVycm9yX2ZyZWVfZGVzYzsKKwlr aWRzLT5pZFswXSA9IGNlcnQtPmlkOworCWtpZHMtPmlkWzFdID0gY2VydC0+c2tpZDsKKworCS8q IFdlJ3JlIHBpbm5pbmcgdGhlIG1vZHVsZSBieSBiZWluZyBsaW5rZWQgYWdhaW5zdCBpdCAqLwor CV9fbW9kdWxlX2dldChwdWJsaWNfa2V5X3N1YnR5cGUub3duZXIpOworCXByZXAtPnBheWxvYWQu ZGF0YVthc3ltX3N1YnR5cGVdID0gJnB1YmxpY19rZXlfc3VidHlwZTsKKwlwcmVwLT5wYXlsb2Fk LmRhdGFbYXN5bV9rZXlfaWRzXSA9IGtpZHM7CisJcHJlcC0+cGF5bG9hZC5kYXRhW2FzeW1fY3J5 cHRvXSA9IGNlcnQtPnB1YjsKKwlwcmVwLT5wYXlsb2FkLmRhdGFbYXN5bV9hdXRoXSA9IGNlcnQt PnNpZzsKKwlwcmVwLT5kZXNjcmlwdGlvbiA9IGRlc2M7CisJcHJlcC0+cXVvdGFsZW4gPSAxMDA7 CisKKwkvKiBXZSd2ZSBmaW5pc2hlZCB3aXRoIHRoZSBjZXJ0aWZpY2F0ZSAqLworCWNlcnQtPnB1 YiA9IE5VTEw7CisJY2VydC0+aWQgPSBOVUxMOworCWNlcnQtPnNraWQgPSBOVUxMOworCWNlcnQt PnNpZyA9IE5VTEw7CisJZGVzYyA9IE5VTEw7CisJcmV0ID0gMDsKKworZXJyb3JfZnJlZV9kZXNj OgorCWtmcmVlKGRlc2MpOworZXJyb3JfZnJlZV9jZXJ0OgorCXg1MDlfZnJlZV9jZXJ0aWZpY2F0 ZShjZXJ0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGFzeW1tZXRyaWNfa2V5 X3BhcnNlciB4NTA5X2tleV9wYXJzZXIgPSB7CisJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJLm5h bWUJPSAieDUwOSIsCisJLnBhcnNlCT0geDUwOV9rZXlfcHJlcGFyc2UsCit9OworCisvKgorICog TW9kdWxlIHN0dWZmCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHg1MDlfa2V5X2luaXQodm9pZCkK K3sKKwlyZXR1cm4gcmVnaXN0ZXJfYXN5bW1ldHJpY19rZXlfcGFyc2VyKCZ4NTA5X2tleV9wYXJz ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgeDUwOV9rZXlfZXhpdCh2b2lkKQoreworCXVu cmVnaXN0ZXJfYXN5bW1ldHJpY19rZXlfcGFyc2VyKCZ4NTA5X2tleV9wYXJzZXIpOworfQorCitt b2R1bGVfaW5pdCh4NTA5X2tleV9pbml0KTsKK21vZHVsZV9leGl0KHg1MDlfa2V5X2V4aXQpOwor I2VuZGlmIC8qICFfX1VCT09UX18gKi8KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJYLjUwOSBjZXJ0 aWZpY2F0ZSBwYXJzZXIiKTsKK01PRFVMRV9BVVRIT1IoIlJlZCBIYXQsIEluYy4iKTsKK01PRFVM RV9MSUNFTlNFKCJHUEwiKTsKLS0gCjIuMjEuMAoK