ZGlmZiAtLWdpdCBhL2F1dG8vb3B0aW9ucyBiL2F1dG8vb3B0aW9ucwppbmRleCBiZWNlMjkwLi4zZmNjMDcxIDEwMDY0NAotLS0gYS9hdXRvL29wdGlvbnMKKysrIGIvYXV0by9vcHRpb25zCkBAIC0yMzYsNiArMjM2LDkgQEAKIAogICAtLXdpdGgtaHR0cF9zc2xfbW9kdWxlICAgICAgICAgICAgIGVuYWJsZSBuZ3hfaHR0cF9zc2xfbW9kdWxlCiAgIC0td2l0aC1odHRwX3JlYWxpcF9tb2R1bGUgICAgICAgICAgZW5hYmxlIG5neF9odHRwX3JlYWxpcF9tb2R1bGUKKyAgLS13aXRoLWh0dHBfYWRkaXRpb25fbW9kdWxlICAgICAgICBlbmFibGUgbmd4X2h0dHBfYWRkaXRpb25fbW9kdWxlCisgIC0td2l0aC1odHRwX2Rhdl9tb2R1bGUgICAgICAgICAgICAgZW5hYmxlIG5neF9odHRwX2Rhdl9tb2R1bGUKKwogICAtLXdpdGhvdXQtaHR0cF9jaGFyc2V0X21vZHVsZSAgICAgIGRpc2FibGUgbmd4X2h0dHBfY2hhcnNldF9tb2R1bGUKICAgLS13aXRob3V0LWh0dHBfZ3ppcF9tb2R1bGUgICAgICAgICBkaXNhYmxlIG5neF9odHRwX2d6aXBfbW9kdWxlCiAgIC0td2l0aG91dC1odHRwX3NzaV9tb2R1bGUgICAgICAgICAgZGlzYWJsZSBuZ3hfaHR0cF9zc2lfbW9kdWxlCkBAIC0yNTcsMTEgKzI2MCwxMCBAQAogCiAgIC0taHR0cC1sb2ctcGF0aD1QQVRIICAgICAgICAgICAgICAgc2V0IHBhdGggdG8gdGhlIGh0dHAgYWNjZXNzIGxvZwogICAtLWh0dHAtY2xpZW50LWJvZHktdGVtcC1wYXRoPVBBVEggIHNldCBwYXRoIHRvIHRoZSBodHRwIGNsaWVudCByZXF1ZXN0IGJvZHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnkgZmlsZXMgcGF0aAotICAtLWh0dHAtcHJveHktdGVtcC1wYXRoPVBBVEggICAgICAgIHNldCBwYXRoIHRvIHRoZSBodHRwIHByb3h5IHRlbXBvcmFyeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnkgZmlsZXMKKyAgLS1odHRwLXByb3h5LXRlbXAtcGF0aD1QQVRIICAgICAgICBzZXQgcGF0aCB0byB0aGUgaHR0cCBwcm94eSB0ZW1wb3JhcnkgZmlsZXMKICAgLS1odHRwLWZhc3RjZ2ktdGVtcC1wYXRoPVBBVEggICAgICBzZXQgcGF0aCB0byB0aGUgaHR0cCBmYXN0Y2dpIHRlbXBvcmFyeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcwogCiAgIC0td2l0aG91dC1odHRwICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZSBIVFRQIHNlcnZlcgogCmRpZmYgLS1naXQgYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbCBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCmluZGV4IGI4NjJlODUuLjk5ZTg5ZjggMTAwNjQ0Ci0tLSBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCisrKyBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCkBAIC05LDYgKzksNjYgQEAKIDx0aXRsZSBsYW5nPSJlbiI+bmdpbnggY2hhbmdlbG9nPC90aXRsZT4KIAogCis8Y2hhbmdlcyB2ZXI9IjAuMy4zOSIgZGF0ZT0iMTcuMDQuMjAwNiI+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivEydLFy9TJ18EgdW5pbml0aWFsaXplZF92YXJpYWJsZV93YXJuOyDV0s/Xxc7YIMzPx8fJ0s/Xwc7J0SDTz8/C3cXOydEKK88gzsXJzsnDycHMydrJ0s/Xwc7Oz8og0MXSxc3Fzs7PyiDQz87J1sXOINMg1dLP187RIGFsZXJ0IM7BIHdhcm4uCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgInVuaW5pdGlhbGl6ZWRfdmFyaWFibGVfd2FybiIgZGlyZWN0aXZlOyB0aGUgbG9nZ2luZyBsZXZlbCBvZiB0aGUKKyJ1bmluaXRpYWxpemVkIHZhcmlhYmxlIiBtZXNzYWdlIHdhcyBsb3dlcmVkIGZyb20gImFsZXJ0IiB0byAid2FybiIuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSBvdmVycmlkZV9jaGFyc2V0LgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJvdmVycmlkZV9jaGFyc2V0IiBkaXJlY3RpdmUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJjaGFuZ2UiPgorPHBhcmEgbGFuZz0icnUiPgor0NLJIMnT0M/M2NrP18HOyckgzsXJ2tfF09TOz8og0MXSxc3Fzs7PyiDXIFNTSS3Lz83BzsTByCBlY2hvIMkgaWYgZXhwcj0nJG5hbWUnCivUxdDF0tggzsUg2sHQydPZ18HF1NPRINcgzM/HINPPz8Ldxc7JxSDPIM7FydrXxdPUzs/KINDF0sXNxc7Oz8ouCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Citub3cgaWYgdGhlIHVua25vd24gdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgImVjaG8iIGFuZCAiaWYgZXhwcj0nJG5hbWUnIgorU1NJLWNvbW1hbmRzLCB0aGVuIHRoZSAidW5rbm93biB2YXJpYWJsZSIgbWVzc2FnZSBpcyBub3QgbG9nZ2VkLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9Peo9TeycsgwcvUydfO2cgg08/FxMnOxc7JyiDSz9Mg0NLJINDSxdfZ28XOyckgzMnNydTBINPPxcTJzsXOycosCivawcTBzs7Px88gxMnSxcvUydfPyiB3b3JrZXJfY29ubmVjdGlvbnM7CivP28nCy8Eg0M/R18nMwdPYINcgMC4yLjAuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgYWN0aXZlIGNvbm5lY3Rpb24gY291bnRlciBpbmNyZWFzZWQgb24gdGhlIGV4Y2VlZGluZyBvZiB0aGUgY29ubmVjdGlvbgorbGltaXQgc3BlY2lmaWVkIGJ5IHRoZSAid29ya2VyX2Nvbm5lY3Rpb25zIiBkaXJlY3RpdmU7CitidWcgYXBwZWFyZWQgaW4gMC4yLjAuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgor0NLJIM7Fy8/Uz9LZyCDV08zP18nRIM/H0sHOyd7FzsnFINPLz9LP09TJINPPxcTJzsXOydEgzc/HzM8gzsUg0sHCz9TB1Ng7CivP28nCy8Eg0M/R18nMwdPYINcgMC4zLjM4LgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIGxpbWl0IHJhdGUgbWlnaHQgbm90IHdvcmsgb24gc29tZSBjb25kaXRpb247CitidWcgYXBwZWFyZWQgaW4gMC4zLjM4LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKworCiA8Y2hhbmdlcyB2ZXI9IjAuMy4zOCIgZGF0ZT0iMTQuMDQuMjAwNiI+CiAKIDxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5oIGIvc3JjL2NvcmUvbmdpbnguaAppbmRleCBmNDdjMzZhLi4xZGE5MWI3IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5oCisrKyBiL3NyYy9jb3JlL25naW54LmgKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIF9OR0lOWF9IX0lOQ0xVREVEXwogCiAKLSNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuMzgiCisjZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjM5IgogCiAjZGVmaW5lIE5HSU5YX1ZBUiAgICAgICAgICAiTkdJTlgiCiAjZGVmaW5lIE5HWF9PTERQSURfRVhUICAgICAiLm9sZGJpbiIKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMgYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jCmluZGV4IDhkYmFiYzIuLjlhZmI5NTIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMKKysrIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uYwpAQCAtMzg2LDYgKzM4NiwyMSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyNpZiAwCisgICAgICAgIGlmICgxKSB7CisgICAgICAgICAgICBpbnQgdGNwX25vZGVsYXkgPSAxOworCisgICAgICAgICAgICBpZiAoc2V0c29ja29wdChsc1tpXS5mZCwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSAmdGNwX25vZGVsYXksIHNpemVvZihpbnQpKQorICAgICAgICAgICAgICAgID09IC0xKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgbmd4X3NvY2tldF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRzb2Nrb3B0KFRDUF9OT0RFTEFZKSAlViBmYWlsZWQsIGlnbm9yZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxzW2ldLmFkZHJfdGV4dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgIGlmIChsc1tpXS5saXN0ZW4pIHsKICAgICAgICAgICAgIGlmIChsaXN0ZW4obHNbaV0uZmQsIGxzW2ldLmJhY2tsb2cpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBuZ3hfc29ja2V0X2Vycm5vLApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMKaW5kZXggMjg3Nzc3ZC4uZWJiYTg3MiAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jCkBAIC03OCw3ICs3OCw2IEBACiAKICNpZiAoTkdYX1NUQVRfU1RVQikKICAgICAgICAgbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X3N0YXRfYWNjZXB0ZWQsIDEpOwotICAgICAgICBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfc3RhdF9hY3RpdmUsIDEpOwogI2VuZGlmCiAKICAgICAgICAgbmd4X2FjY2VwdF9kaXNhYmxlZCA9IE5HWF9BQ0NFUFRfVEhSRVNIT0xECkBAIC05NSw2ICs5NCwxMCBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyNpZiAoTkdYX1NUQVRfU1RVQikKKyAgICAgICAgbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X3N0YXRfYWN0aXZlLCAxKTsKKyNlbmRpZgorCiAgICAgICAgIGMtPnBvb2wgPSBuZ3hfY3JlYXRlX3Bvb2wobHMtPnBvb2xfc2l6ZSwgZXYtPmxvZyk7CiAgICAgICAgIGlmIChjLT5wb29sID09IE5VTEwpIHsKICAgICAgICAgICAgIG5neF9jbG9zZV9hY2NlcHRlZF9jb25uZWN0aW9uKGMpOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlLmMKaW5kZXggY2Y0MWI2Mi4uM2M5ZTAxYiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZS5jCkBAIC0xMyw0NyArMTMsNDggQEAKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgY2hhciAgICAgICAqKnRhYmxlczsKLSAgICBuZ3hfc3RyX3QgICAgbmFtZTsKKyAgICB1X2NoYXIgICAgICoqdGFibGVzOworICAgIG5neF9zdHJfdCAgICAgbmFtZTsKIAotICAgIG5neF91aW50X3QgICB1dGY4OyAgIC8qIHVuc2lnbmVkICAgICB1dGY4OjE7ICovCisgICAgbmd4X3VpbnRfdCAgICB1dGY4OyAgIC8qIHVuc2lnbmVkICAgICB1dGY4OjE7ICovCiB9IG5neF9odHRwX2NoYXJzZXRfdDsKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgbmd4X2ludF90ICAgIHNyYzsKLSAgICBuZ3hfaW50X3QgICAgZHN0OworICAgIG5neF9pbnRfdCAgICAgc3JjOworICAgIG5neF9pbnRfdCAgICAgZHN0OwogfSBuZ3hfaHR0cF9jaGFyc2V0X3JlY29kZV90OwogCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBuZ3hfaW50X3QgICAgc3JjOwotICAgIG5neF9pbnRfdCAgICBkc3Q7Ci0gICAgY2hhciAgICAgICAgKnNyYzJkc3Q7Ci0gICAgY2hhciAgICAgICAgKmRzdDJzcmM7CisgICAgbmd4X2ludF90ICAgICBzcmM7CisgICAgbmd4X2ludF90ICAgICBkc3Q7CisgICAgdV9jaGFyICAgICAgICpzcmMyZHN0OworICAgIHVfY2hhciAgICAgICAqZHN0MnNyYzsKIH0gbmd4X2h0dHBfY2hhcnNldF90YWJsZXNfdDsKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgbmd4X2FycmF5X3QgIGNoYXJzZXRzOyAgICAgICAgICAgICAgIC8qIG5neF9odHRwX2NoYXJzZXRfdCAqLwotICAgIG5neF9hcnJheV90ICB0YWJsZXM7ICAgICAgICAgICAgICAgICAvKiBuZ3hfaHR0cF9jaGFyc2V0X3RhYmxlc190ICovCi0gICAgbmd4X2FycmF5X3QgIHJlY29kZXM7ICAgICAgICAgICAgICAgIC8qIG5neF9odHRwX2NoYXJzZXRfcmVjb2RlX3QgKi8KKyAgICBuZ3hfYXJyYXlfdCAgIGNoYXJzZXRzOyAgICAgICAgICAgICAgIC8qIG5neF9odHRwX2NoYXJzZXRfdCAqLworICAgIG5neF9hcnJheV90ICAgdGFibGVzOyAgICAgICAgICAgICAgICAgLyogbmd4X2h0dHBfY2hhcnNldF90YWJsZXNfdCAqLworICAgIG5neF9hcnJheV90ICAgcmVjb2RlczsgICAgICAgICAgICAgICAgLyogbmd4X2h0dHBfY2hhcnNldF9yZWNvZGVfdCAqLwogfSBuZ3hfaHR0cF9jaGFyc2V0X21haW5fY29uZl90OwogCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBuZ3hfaW50X3QgICAgY2hhcnNldDsKLSAgICBuZ3hfaW50X3QgICAgc291cmNlX2NoYXJzZXQ7CisgICAgbmd4X2ludF90ICAgICBjaGFyc2V0OworICAgIG5neF9pbnRfdCAgICAgc291cmNlX2NoYXJzZXQ7CisgICAgbmd4X2ZsYWdfdCAgICBvdmVycmlkZV9jaGFyc2V0OwogfSBuZ3hfaHR0cF9jaGFyc2V0X2xvY19jb25mX3Q7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIG5neF9pbnRfdCAgICBzZXJ2ZXI7Ci0gICAgbmd4X2ludF90ICAgIGNsaWVudDsKKyAgICB1X2NoYXIgICAgICAgKnRhYmxlOworICAgIG5neF9pbnRfdCAgICAgY2hhcnNldDsKIH0gbmd4X2h0dHBfY2hhcnNldF9jdHhfdDsKIAogCi1zdGF0aWMgbmd4X3VpbnRfdCBuZ3hfaHR0cF9jaGFyc2V0X3JlY29kZShuZ3hfYnVmX3QgKmIsIGNoYXIgKnRhYmxlKTsKK3N0YXRpYyBuZ3hfdWludF90IG5neF9odHRwX2NoYXJzZXRfcmVjb2RlKG5neF9idWZfdCAqYiwgdV9jaGFyICp0YWJsZSk7CiAKIHN0YXRpYyBjaGFyICpuZ3hfY2hhcnNldF9tYXBfYmxvY2sobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwKICAgICB2b2lkICpjb25mKTsKQEAgLTkwLDYgKzkxLDE0IEBACiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9jaGFyc2V0X2xvY19jb25mX3QsIHNvdXJjZV9jaGFyc2V0KSwKICAgICAgIE5VTEwgfSwKIAorICAgIHsgbmd4X3N0cmluZygib3ZlcnJpZGVfY2hhcnNldCIpLAorICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GCisgICAgICAgICAgICAgICAgICAgICAgICB8TkdYX0hUVFBfTElGX0NPTkZ8TkdYX0NPTkZfRkxBRywKKyAgICAgIG5neF9jb25mX3NldF9mbGFnX3Nsb3QsCisgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9jaGFyc2V0X2xvY19jb25mX3QsIG92ZXJyaWRlX2NoYXJzZXQpLAorICAgICAgTlVMTCB9LAorCiAgICAgeyBuZ3hfc3RyaW5nKCJjaGFyc2V0X21hcCIpLAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9DT05GX0JMT0NLfE5HWF9DT05GX1RBS0UyLAogICAgICAgbmd4X2NoYXJzZXRfbWFwX2Jsb2NrLApAQCAtMTM5LDE2ICsxNDgsMzAgQEAKIHN0YXRpYyBuZ3hfaW50X3QKIG5neF9odHRwX2NoYXJzZXRfaGVhZGVyX2ZpbHRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgIGxlbjsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICAqcDsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldCwgc291cmNlX2NoYXJzZXQ7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgIGk7CiAgICAgbmd4X2h0dHBfY2hhcnNldF90ICAgICAgICAgICAgKmNoYXJzZXRzOwogICAgIG5neF9odHRwX2NoYXJzZXRfY3R4X3QgICAgICAgICpjdHg7CiAgICAgbmd4X2h0dHBfY2hhcnNldF9sb2NfY29uZl90ICAgKmxjZjsKICAgICBuZ3hfaHR0cF9jaGFyc2V0X21haW5fY29uZl90ICAqbWNmOwogCiAgICAgbWNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9tYWluX2NvbmYociwgbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlKTsKLSAgICBsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZSk7CiAKLSAgICBpZiAobGNmLT5jaGFyc2V0ID09IE5HWF9IVFRQX05PX0NIQVJTRVQpIHsKLSAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKKyAgICBjdHggPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2N0eChyLT5tYWluLCBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUpOworCisgICAgaWYgKGN0eCA9PSBOVUxMKSB7CisgICAgICAgIGxjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYoci0+bWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUpOworICAgICAgICBjaGFyc2V0ID0gbGNmLT5jaGFyc2V0OworCisgICAgICAgIGlmIChjaGFyc2V0ID09IE5HWF9IVFRQX05PX0NIQVJTRVQpIHsKKyAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAgICAgIGNoYXJzZXQgPSBjdHgtPmNoYXJzZXQ7CiAgICAgfQogCiAgICAgaWYgKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5sZW4gPT0gMCkgewpAQCAtMTYyLDkgKzE4NSw3MiBAQAogICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwogICAgIH0KIAotICAgIGlmIChyID09IHItPm1haW4KLSAgICAgICAgJiYgbmd4X3N0cnN0cihyLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUuZGF0YSwgImNoYXJzZXQiKSAhPSBOVUxMKQotICAgIHsKKyAgICBjaGFyc2V0cyA9IG1jZi0+Y2hhcnNldHMuZWx0czsKKworICAgIGxjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlKTsKKworICAgIGxlbiA9IDA7CisKKyAgICBmb3IgKHAgPSByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUuZGF0YTsgKnA7IHArKykgeworICAgICAgICBpZiAoKnAgPT0gJzsnKSB7CisgICAgICAgICAgICBsZW4gPSBwIC0gci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLmRhdGE7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmd4X3N0cm5jYXNlY21wKHAsICJjaGFyc2V0PSIsIDgpICE9IDApIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgcCArPSA4OworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtY2YtPmNoYXJzZXRzLm5lbHRzOyBpKyspIHsKKworICAgICAgICAgICAgaWYgKG5neF9zdHJjYXNlY21wKHAsIGNoYXJzZXRzW2ldLm5hbWUuZGF0YSkgPT0gMCkgeworCisgICAgICAgICAgICAgICAgaWYgKHIgPT0gci0+bWFpbiAmJiBsY2YtPm92ZXJyaWRlX2NoYXJzZXQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjdHggPSBuZ3hfcGNhbGxvYyhyLT5wb29sLCBzaXplb2Yobmd4X2h0dHBfY2hhcnNldF9jdHhfdCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoY3R4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9zZXRfY3R4KHIsIGN0eCwgbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlKTsKKworICAgICAgICAgICAgICAgICAgICBjdHgtPmNoYXJzZXQgPSBpOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGkgIT0gKG5neF91aW50X3QpIGNoYXJzZXQKKyAgICAgICAgICAgICAgICAgICAgJiYgKGNoYXJzZXRzW2ldLnRhYmxlcyA9PSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBjaGFyc2V0c1tpXS50YWJsZXNbY2hhcnNldF0gPT0gTlVMTCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gXCJjaGFyc2V0X21hcFwiIGJldHdlZW4gdGhlIGNoYXJzZXRzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIlVlwiIGFuZCBcIiVWXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGFyc2V0c1tpXS5uYW1lLCAmY2hhcnNldHNbY2hhcnNldF0ubmFtZSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUubGVuID0gbGVuOworCisgICAgICAgICAgICAgICAgaWYgKHItPmhlYWRlcnNfb3V0LnN0YXR1cyA9PSBOR1hfSFRUUF9NT1ZFRF9QRVJNQU5FTlRMWQorICAgICAgICAgICAgICAgICAgICB8fCByLT5oZWFkZXJzX291dC5zdGF0dXMgPT0gTkdYX0hUVFBfTU9WRURfVEVNUE9SQVJJTFkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBkbyBub3Qgc2V0IGNoYXJzZXQgZm9yIHRoZSByZWRpcmVjdCBiZWNhdXNlIE5OIDQueAorICAgICAgICAgICAgICAgICAgICAgKiB1c2VzIHRoaXMgY2hhcnNldCBpbnN0ZWFkIG9mIHRoZSBuZXh0IHBhZ2UgY2hhcnNldAorICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5jaGFyc2V0LmxlbiA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc291cmNlX2NoYXJzZXQgPSBpOworCisgICAgICAgICAgICAgICAgZ290byBmb3VuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CiAgICAgfQogCkBAIC0xNzIsOCArMjU4LDggQEAKICAgICAgICAgfHwgci0+aGVhZGVyc19vdXQuc3RhdHVzID09IE5HWF9IVFRQX01PVkVEX1RFTVBPUkFSSUxZKQogICAgIHsKICAgICAgICAgLyoKLSAgICAgICAgICogZG8gbm90IHNldCBjaGFyc2V0IGZvciB0aGUgcmVkaXJlY3QgYmVjYXVzZSBOTiA0LnggdXNlcyB0aGlzCi0gICAgICAgICAqIGNoYXJzZXQgaW5zdGVhZCBvZiB0aGUgbmV4dCBwYWdlIGNoYXJzZXQKKyAgICAgICAgICogZG8gbm90IHNldCBjaGFyc2V0IGZvciB0aGUgcmVkaXJlY3QgYmVjYXVzZSBOTiA0LngKKyAgICAgICAgICogdXNlIHRoaXMgY2hhcnNldCBpbnN0ZWFkIG9mIHRoZSBuZXh0IHBhZ2UgY2hhcnNldAogICAgICAgICAgKi8KIAogICAgICAgICByLT5oZWFkZXJzX291dC5jaGFyc2V0LmxlbiA9IDA7CkBAIC0xODQsMTcgKzI3MCwxNyBAQAogICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwogICAgIH0KIAotICAgIGNoYXJzZXRzID0gbWNmLT5jaGFyc2V0cy5lbHRzOwotICAgIHItPmhlYWRlcnNfb3V0LmNoYXJzZXQgPSBjaGFyc2V0c1tsY2YtPmNoYXJzZXRdLm5hbWU7Ci0gICAgci0+dXRmOCA9IGNoYXJzZXRzW2xjZi0+Y2hhcnNldF0udXRmODsKKyAgICBzb3VyY2VfY2hhcnNldCA9IGxjZi0+c291cmNlX2NoYXJzZXQ7CiAKLSAgICBpZiAobGNmLT5zb3VyY2VfY2hhcnNldCA9PSBOR1hfQ09ORl9VTlNFVAotICAgICAgICB8fCBsY2YtPnNvdXJjZV9jaGFyc2V0ID09IGxjZi0+Y2hhcnNldCkKLSAgICB7Citmb3VuZDoKKworICAgIHItPmhlYWRlcnNfb3V0LmNoYXJzZXQgPSBjaGFyc2V0c1tjaGFyc2V0XS5uYW1lOworICAgIHItPnV0ZjggPSBjaGFyc2V0c1tjaGFyc2V0XS51dGY4OworCisgICAgaWYgKHNvdXJjZV9jaGFyc2V0ID09IE5HWF9DT05GX1VOU0VUIHx8IHNvdXJjZV9jaGFyc2V0ID09IGNoYXJzZXQpIHsKICAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKICAgICB9CiAKLQogICAgIGN0eCA9IG5neF9wY2FsbG9jKHItPnBvb2wsIHNpemVvZihuZ3hfaHR0cF9jaGFyc2V0X2N0eF90KSk7CiAgICAgaWYgKGN0eCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CkBAIC0yMDIsNiArMjg4LDggQEAKIAogICAgIG5neF9odHRwX3NldF9jdHgociwgY3R4LCBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUpOwogCisgICAgY3R4LT50YWJsZSA9IGNoYXJzZXRzW3NvdXJjZV9jaGFyc2V0XS50YWJsZXNbY2hhcnNldF07CisgICAgY3R4LT5jaGFyc2V0ID0gY2hhcnNldDsKIAogICAgIHItPmZpbHRlcl9uZWVkX2luX21lbW9yeSA9IDE7CiAKQEAgLTIxMiwyNyArMzAwLDE3IEBACiBzdGF0aWMgbmd4X2ludF90CiBuZ3hfaHR0cF9jaGFyc2V0X2JvZHlfZmlsdGVyKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2NoYWluX3QgKmluKQogewotICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICp0YWJsZTsKLSAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAgICAgICAgICAqY2w7Ci0gICAgbmd4X2h0dHBfY2hhcnNldF90ICAgICAgICAgICAgKmNoYXJzZXRzOwotICAgIG5neF9odHRwX2NoYXJzZXRfY3R4X3QgICAgICAgICpjdHg7Ci0gICAgbmd4X2h0dHBfY2hhcnNldF9sb2NfY29uZl90ICAgKmxjZjsKLSAgICBuZ3hfaHR0cF9jaGFyc2V0X21haW5fY29uZl90ICAqbWNmOworICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICpjbDsKKyAgICBuZ3hfaHR0cF9jaGFyc2V0X2N0eF90ICAqY3R4OwogCiAgICAgY3R4ID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9jdHgociwgbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlKTsKIAotICAgIGlmIChjdHggPT0gTlVMTCkgeworICAgIGlmIChjdHggPT0gTlVMTCB8fCBjdHgtPnRhYmxlID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfYm9keV9maWx0ZXIociwgaW4pOwogICAgIH0KIAotICAgIG1jZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbWFpbl9jb25mKHIsIG5neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZSk7Ci0gICAgbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUpOwotCi0gICAgY2hhcnNldHMgPSBtY2YtPmNoYXJzZXRzLmVsdHM7Ci0gICAgdGFibGUgPSBjaGFyc2V0c1tsY2YtPnNvdXJjZV9jaGFyc2V0XS50YWJsZXNbbGNmLT5jaGFyc2V0XTsKLQogICAgIGZvciAoY2wgPSBpbjsgY2w7IGNsID0gY2wtPm5leHQpIHsKLSAgICAgICAgbmd4X2h0dHBfY2hhcnNldF9yZWNvZGUoY2wtPmJ1ZiwgdGFibGUpOworICAgICAgICAodm9pZCkgbmd4X2h0dHBfY2hhcnNldF9yZWNvZGUoY2wtPmJ1ZiwgY3R4LT50YWJsZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG5neF9odHRwX25leHRfYm9keV9maWx0ZXIociwgaW4pOwpAQCAtMjQwLDIxICszMTgsMTUgQEAKIAogCiBzdGF0aWMgbmd4X3VpbnRfdAotbmd4X2h0dHBfY2hhcnNldF9yZWNvZGUobmd4X2J1Zl90ICpiLCBjaGFyICp0YWJsZSkKK25neF9odHRwX2NoYXJzZXRfcmVjb2RlKG5neF9idWZfdCAqYiwgdV9jaGFyICp0YWJsZSkKIHsKLSAgICB1X2NoYXIgICAgICAqcDsKLSAgICBuZ3hfdWludF90ICAgY2hhbmdlOwotCi0gICAgY2hhbmdlID0gMDsKKyAgICB1X2NoYXIgICpwOwogCiAgICAgZm9yIChwID0gYi0+cG9zOyBwIDwgYi0+bGFzdDsgcCsrKSB7Ci0gICAgICAgIGlmICgqcCAhPSB0YWJsZVsqcF0pIHsKLSAgICAgICAgICAgIGNoYW5nZSA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KIAotICAgIGlmIChjaGFuZ2UpIHsKKyAgICAgICAgaWYgKCpwID09IHRhYmxlWypwXSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KIAogICAgICAgICB3aGlsZSAocCA8IGItPmxhc3QpIHsKICAgICAgICAgICAgICpwID0gdGFibGVbKnBdOwpAQCAtMjYyLDkgKzMzNCwxMSBAQAogICAgICAgICB9CiAKICAgICAgICAgYi0+aW5fZmlsZSA9IDA7CisKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCi0gICAgcmV0dXJuIGNoYW5nZTsKKyAgICByZXR1cm4gMDsKIH0KIAogCkBAIC0zMzAsOCArNDA0LDggQEAKICAgICB9CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKLSAgICAgICAgdGFibGUtPnNyYzJkc3RbaV0gPSAoY2hhcikgaTsKLSAgICAgICAgdGFibGUtPmRzdDJzcmNbaV0gPSAoY2hhcikgaTsKKyAgICAgICAgdGFibGUtPnNyYzJkc3RbaV0gPSAodV9jaGFyKSBpOworICAgICAgICB0YWJsZS0+ZHN0MnNyY1tpXSA9ICh1X2NoYXIpIGk7CiAgICAgfQogCiAgICAgZm9yICgvKiB2b2lkICovOyBpIDwgMjU2OyBpKyspIHsKQEAgLTM4Miw4ICs0NTYsOCBAQAogCiAgICAgdGFibGUgPSBjZi0+Y3R4OwogCi0gICAgdGFibGUtPnNyYzJkc3Rbc3JjXSA9IChjaGFyKSBkc3Q7Ci0gICAgdGFibGUtPmRzdDJzcmNbZHN0XSA9IChjaGFyKSBzcmM7CisgICAgdGFibGUtPnNyYzJkc3Rbc3JjXSA9ICh1X2NoYXIpIGRzdDsKKyAgICB0YWJsZS0+ZHN0MnNyY1tkc3RdID0gKHVfY2hhcikgc3JjOwogCiAgICAgcmV0dXJuIE5HWF9DT05GX09LOwogfQpAQCAtNTE5LDYgKzU5Myw3IEBACiAKICAgICBsY2YtPmNoYXJzZXQgPSBOR1hfQ09ORl9VTlNFVDsKICAgICBsY2YtPnNvdXJjZV9jaGFyc2V0ID0gTkdYX0NPTkZfVU5TRVQ7CisgICAgbGNmLT5vdmVycmlkZV9jaGFyc2V0ID0gTkdYX0NPTkZfVU5TRVQ7CiAKICAgICByZXR1cm4gbGNmOwogfQpAQCAtNTM0LDYgKzYwOSw3IEBACiAgICAgbmd4X2h0dHBfY2hhcnNldF9yZWNvZGVfdCAgICAgKnJlY29kZTsKICAgICBuZ3hfaHR0cF9jaGFyc2V0X21haW5fY29uZl90ICAqbWNmOwogCisgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+b3ZlcnJpZGVfY2hhcnNldCwgcHJldi0+b3ZlcnJpZGVfY2hhcnNldCwgMCk7CiAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+Y2hhcnNldCwgcHJldi0+Y2hhcnNldCwgTkdYX0hUVFBfTk9fQ0hBUlNFVCk7CiAKICAgICBpZiAoY29uZi0+c291cmNlX2NoYXJzZXQgPT0gTkdYX0NPTkZfVU5TRVQpIHsKQEAgLTU3Myw2ICs2NDksNyBAQAogc3RhdGljIG5neF9pbnRfdAogbmd4X2h0dHBfY2hhcnNldF9wb3N0Y29uZmlndXJhdGlvbihuZ3hfY29uZl90ICpjZikKIHsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICoqc3JjLCAqKmRzdDsKICAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgICAgYzsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgaSwgdDsKICAgICBuZ3hfaHR0cF9jaGFyc2V0X3QgICAgICAgICAgICAqY2hhcnNldDsKQEAgLTU5MSwyMSArNjY4LDEzIEBACiAKICAgICAgICAgYyA9IHJlY29kZVtpXS5zcmM7CiAKLSAgICAgICAgY2hhcnNldFtjXS50YWJsZXMgPSBuZ3hfcGNhbGxvYyhjZi0+cG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY2hhciAqKSAqIG1jZi0+Y2hhcnNldHMubmVsdHMpOwotICAgICAgICBpZiAoY2hhcnNldFtjXS50YWJsZXMgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgfQotCiAgICAgICAgIGZvciAodCA9IDA7IHQgPCBtY2YtPnRhYmxlcy5uZWx0czsgdCsrKSB7CiAKICAgICAgICAgICAgIGlmIChjID09IHRhYmxlc1t0XS5zcmMgJiYgcmVjb2RlW2ldLmRzdCA9PSB0YWJsZXNbdF0uZHN0KSB7Ci0gICAgICAgICAgICAgICAgY2hhcnNldFtjXS50YWJsZXNbdGFibGVzW3RdLmRzdF0gPSB0YWJsZXNbdF0uc3JjMmRzdDsKICAgICAgICAgICAgICAgICBnb3RvIG5leHQ7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjID09IHRhYmxlc1t0XS5kc3QgJiYgcmVjb2RlW2ldLmRzdCA9PSB0YWJsZXNbdF0uc3JjKSB7Ci0gICAgICAgICAgICAgICAgY2hhcnNldFtjXS50YWJsZXNbdGFibGVzW3RdLnNyY10gPSB0YWJsZXNbdF0uZHN0MnNyYzsKICAgICAgICAgICAgICAgICBnb3RvIG5leHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTYyMCw1ICs2ODksMzQgQEAKICAgICAgICAgY29udGludWU7CiAgICAgfQogCisKKyAgICBmb3IgKHQgPSAwOyB0IDwgbWNmLT50YWJsZXMubmVsdHM7IHQrKykgeworCisgICAgICAgIHNyYyA9IGNoYXJzZXRbdGFibGVzW3RdLnNyY10udGFibGVzOworCisgICAgICAgIGlmIChzcmMgPT0gTlVMTCkgeworICAgICAgICAgICAgc3JjID0gbmd4X3BjYWxsb2MoY2YtPnBvb2wsIHNpemVvZih1X2NoYXIgKikgKiBtY2YtPmNoYXJzZXRzLm5lbHRzKTsKKyAgICAgICAgICAgIGlmIChzcmMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNoYXJzZXRbdGFibGVzW3RdLnNyY10udGFibGVzID0gc3JjOworICAgICAgICB9CisKKyAgICAgICAgZHN0ID0gY2hhcnNldFt0YWJsZXNbdF0uZHN0XS50YWJsZXM7CisKKyAgICAgICAgaWYgKGRzdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBkc3QgPSBuZ3hfcGNhbGxvYyhjZi0+cG9vbCwgc2l6ZW9mKHVfY2hhciAqKSAqIG1jZi0+Y2hhcnNldHMubmVsdHMpOworICAgICAgICAgICAgaWYgKGRzdCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2hhcnNldFt0YWJsZXNbdF0uZHN0XS50YWJsZXMgPSBkc3Q7CisgICAgICAgIH0KKworICAgICAgICBzcmNbdGFibGVzW3RdLmRzdF0gPSB0YWJsZXNbdF0uc3JjMmRzdDsKKyAgICAgICAgZHN0W3RhYmxlc1t0XS5zcmNdID0gdGFibGVzW3RdLmRzdDJzcmM7CisgICAgfQorCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmV3cml0ZV9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmV3cml0ZV9tb2R1bGUuYwppbmRleCA1NzA5YjU2Li5lM2IyZWRjIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Jld3JpdGVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZXdyaXRlX21vZHVsZS5jCkBAIC0xNiw2ICsxNiw3IEBACiAgICAgbmd4X3VpbnRfdCAgICBzdGFja19zaXplOwogCiAgICAgbmd4X2ZsYWdfdCAgICBsb2c7CisgICAgbmd4X2ZsYWdfdCAgICB1bmluaXRpYWxpemVkX3ZhcmlhYmxlX3dhcm47CiB9IG5neF9odHRwX3Jld3JpdGVfbG9jX2NvbmZfdDsKIAogCkBAIC05MSwxMyArOTIsMjEgQEAKICAgICAgIE5VTEwgfSwKIAogICAgIHsgbmd4X3N0cmluZygicmV3cml0ZV9sb2ciKSwKLSAgICAgIE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX1NJRl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9IVFRQX0xJRl9DT05GCi0gICAgICAgICAgICAgICAgICAgICAgIHxOR1hfQ09ORl9UQUtFMSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9TSUZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORgorICAgICAgICAgICAgICAgICAgICAgICAgfE5HWF9IVFRQX0xJRl9DT05GfE5HWF9DT05GX0ZMQUcsCiAgICAgICBuZ3hfY29uZl9zZXRfZmxhZ19zbG90LAogICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcmV3cml0ZV9sb2NfY29uZl90LCBsb2cpLAogICAgICAgTlVMTCB9LAogCisgICAgeyBuZ3hfc3RyaW5nKCJ1bmluaXRpYWxpemVkX3ZhcmlhYmxlX3dhcm4iKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9TSUZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORgorICAgICAgICAgICAgICAgICAgICAgICAgfE5HWF9IVFRQX0xJRl9DT05GfE5HWF9DT05GX0ZMQUcsCisgICAgICBuZ3hfY29uZl9zZXRfZmxhZ19zbG90LAorICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAorICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcmV3cml0ZV9sb2NfY29uZl90LCB1bmluaXRpYWxpemVkX3ZhcmlhYmxlX3dhcm4pLAorICAgICAgTlVMTCB9LAorCiAgICAgICBuZ3hfbnVsbF9jb21tYW5kCiB9OwogCkBAIC0xMzgsMTEgKzE0NywxMSBAQAogewogICAgIG5neF9odHRwX3NjcmlwdF9jb2RlX3B0ICAgICAgIGNvZGU7CiAgICAgbmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICAgICAqZTsKLSAgICBuZ3hfaHR0cF9yZXdyaXRlX2xvY19jb25mX3QgICpjZjsKKyAgICBuZ3hfaHR0cF9yZXdyaXRlX2xvY19jb25mX3QgICpybGNmOwogCi0gICAgY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX3Jld3JpdGVfbW9kdWxlKTsKKyAgICBybGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9yZXdyaXRlX21vZHVsZSk7CiAKLSAgICBpZiAoY2YtPmNvZGVzID09IE5VTEwpIHsKKyAgICBpZiAocmxjZi0+Y29kZXMgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTkdYX0RFQ0xJTkVEOwogICAgIH0KIApAQCAtMTUyLDEzICsxNjEsMTMgQEAKICAgICB9CiAKICAgICBlLT5zcCA9IG5neF9wY2FsbG9jKHItPnBvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICBjZi0+c3RhY2tfc2l6ZSAqIHNpemVvZihuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBybGNmLT5zdGFja19zaXplICogc2l6ZW9mKG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QpKTsKICAgICBpZiAoZS0+c3AgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogICAgIH0KIAotICAgIGlmIChjZi0+Y2FwdHVyZXMpIHsKLSAgICAgICAgZS0+Y2FwdHVyZXMgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIGNmLT5jYXB0dXJlcyAqIHNpemVvZihpbnQpKTsKKyAgICBpZiAocmxjZi0+Y2FwdHVyZXMpIHsKKyAgICAgICAgZS0+Y2FwdHVyZXMgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIHJsY2YtPmNhcHR1cmVzICogc2l6ZW9mKGludCkpOwogICAgICAgICBpZiAoZS0+Y2FwdHVyZXMgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKICAgICAgICAgfQpAQCAtMTY3LDEwICsxNzYsMTAgQEAKICAgICAgICAgZS0+Y2FwdHVyZXMgPSBOVUxMOwogICAgIH0KIAotICAgIGUtPmlwID0gY2YtPmNvZGVzLT5lbHRzOworICAgIGUtPmlwID0gcmxjZi0+Y29kZXMtPmVsdHM7CiAgICAgZS0+cmVxdWVzdCA9IHI7CiAgICAgZS0+cXVvdGUgPSAxOwotICAgIGUtPmxvZyA9IGNmLT5sb2c7CisgICAgZS0+bG9nID0gcmxjZi0+bG9nOwogICAgIGUtPnN0YXR1cyA9IE5HWF9ERUNMSU5FRDsKIAogICAgIHdoaWxlICgqKHVpbnRwdHJfdCAqKSBlLT5pcCkgewpAQCAtMTg2LDggKzE5NSwxNiBAQAogbmd4X2h0dHBfcmV3cml0ZV92YXIobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LAogICAgIHVpbnRwdHJfdCBkYXRhKQogewotICAgIG5neF9odHRwX3ZhcmlhYmxlX3QgICAgICAgICp2YXI7Ci0gICAgbmd4X2h0dHBfY29yZV9tYWluX2NvbmZfdCAgKmNtY2Y7CisgICAgbmd4X2h0dHBfdmFyaWFibGVfdCAgICAgICAgICAqdmFyOworICAgIG5neF9odHRwX2NvcmVfbWFpbl9jb25mX3QgICAgKmNtY2Y7CisgICAgbmd4X2h0dHBfcmV3cml0ZV9sb2NfY29uZl90ICAqcmxjZjsKKworICAgIHJsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX3Jld3JpdGVfbW9kdWxlKTsKKworICAgIGlmIChybGNmLT51bmluaXRpYWxpemVkX3ZhcmlhYmxlX3dhcm4gPT0gMCkgeworICAgICAgICAqdiA9IG5neF9odHRwX3ZhcmlhYmxlX251bGxfdmFsdWU7CisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQogCiAgICAgY21jZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbWFpbl9jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKIApAQCAtMTk5LDcgKzIxNiw3IEBACiAgICAgICogc28gdGhlIGhhbmRsZXIgaXMgY2FsbGVkIG9ubHkgaWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBpbml0aWFsaXplZAogICAgICAqLwogCi0gICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX1dBUk4sIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICJ1c2luZyB1bmluaXRpYWxpemVkIFwiJVZcIiB2YXJpYWJsZSIsICZ2YXJbZGF0YV0ubmFtZSk7CiAKICAgICAqdiA9IG5neF9odHRwX3ZhcmlhYmxlX251bGxfdmFsdWU7CkBAIC0yMjAsNiArMjM3LDcgQEAKIAogICAgIGNvbmYtPnN0YWNrX3NpemUgPSBOR1hfQ09ORl9VTlNFVF9VSU5UOwogICAgIGNvbmYtPmxvZyA9IE5HWF9DT05GX1VOU0VUOworICAgIGNvbmYtPnVuaW5pdGlhbGl6ZWRfdmFyaWFibGVfd2FybiA9IE5HWF9DT05GX1VOU0VUOwogCiAgICAgcmV0dXJuIGNvbmY7CiB9CkBAIC0yMzQsNiArMjUyLDggQEAKICAgICB1aW50cHRyX3QgICpjb2RlOwogCiAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+bG9nLCBwcmV2LT5sb2csIDApOworICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnVuaW5pdGlhbGl6ZWRfdmFyaWFibGVfd2FybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51bmluaXRpYWxpemVkX3ZhcmlhYmxlX3dhcm4sIDEpOwogICAgIG5neF9jb25mX21lcmdlX3Vuc2lnbmVkX3ZhbHVlKGNvbmYtPnN0YWNrX3NpemUsIHByZXYtPnN0YWNrX3NpemUsIDEwKTsKIAogICAgIGlmIChjb25mLT5jb2RlcyA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMKaW5kZXggZjExNjYzNC4uNTQxYjQzOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYwpAQCAtMTQsNiArMTQsNyBAQAogCiAjZGVmaW5lIE5HWF9IVFRQX1NTSV9BRERfUFJFRklYICAgICAxCiAjZGVmaW5lIE5HWF9IVFRQX1NTSV9BRERfWkVSTyAgICAgICAyCisjZGVmaW5lIE5HWF9IVFRQX1NTSV9FWFBSX1RFU1QgICAgICA0CiAKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtMTUwMiw4ICsxNTAzLDggQEAKICAgICAgICAgICAgIHZhbCA9IG5neF9odHRwX3NzaV9nZXRfdmFyaWFibGUociwgJnZhciwga2V5KTsKIAogICAgICAgICAgICAgaWYgKHZhbCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgdnYgPSBuZ3hfaHR0cF9nZXRfdmFyaWFibGUociwgJnZhciwga2V5KTsKLQorICAgICAgICAgICAgICAgIHZ2ID0gbmd4X2h0dHBfZ2V0X3ZhcmlhYmxlKHIsICZ2YXIsIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyAmIE5HWF9IVFRQX1NTSV9FWFBSX1RFU1QpOwogICAgICAgICAgICAgICAgIGlmICh2diA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTY4MSw3ICsxNjgyLDcgQEAKICAgICB2YWx1ZSA9IG5neF9odHRwX3NzaV9nZXRfdmFyaWFibGUociwgdmFyLCBrZXkpOwogCiAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKLSAgICAgICAgdnYgPSBuZ3hfaHR0cF9nZXRfdmFyaWFibGUociwgdmFyLCBrZXkpOworICAgICAgICB2diA9IG5neF9odHRwX2dldF92YXJpYWJsZShyLCB2YXIsIGtleSwgMSk7CiAKICAgICAgICAgaWYgKHZ2ID09IE5VTEwpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9TU0lfRVJST1I7CkBAIC0xODczLDEwICsxODc0LDEyIEBACiAgICAgICAgIHArKzsKICAgICB9CiAKKyAgICBmbGFncyA9IChwID09IGxhc3QpID8gTkdYX0hUVFBfU1NJX0VYUFJfVEVTVCA6IDA7CisKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAibGVmdDogXCIlVlwiIiwgJmxlZnQpOwogCi0gICAgaWYgKG5neF9odHRwX3NzaV9ldmFsdWF0ZV9zdHJpbmcociwgY3R4LCAmbGVmdCwgMCkgIT0gTkdYX09LKSB7CisgICAgaWYgKG5neF9odHRwX3NzaV9ldmFsdWF0ZV9zdHJpbmcociwgY3R4LCAmbGVmdCwgZmxhZ3MpICE9IE5HWF9PSykgewogICAgICAgICByZXR1cm4gTkdYX0hUVFBfU1NJX0VSUk9SOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25neF9odHRwX3BlcmxfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL3Blcmwvbmd4X2h0dHBfcGVybF9tb2R1bGUuYwppbmRleCA4NGRlMjYyLi4xOTg5NzFkIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3Blcmwvbmd4X2h0dHBfcGVybF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL3Blcmwvbmd4X2h0dHBfcGVybF9tb2R1bGUuYwpAQCAtMTg4LDYgKzE4OCw3IEBACiAKICAgICByLT5yZXF1ZXN0X2JvZHlfaW5fc2luZ2xlX2J1ZiA9IDE7CiAgICAgci0+cmVxdWVzdF9ib2R5X2luX3BlcnNpc3RlbnRfZmlsZSA9IDE7CisgICAgci0+cmVxdWVzdF9ib2R5X2RlbGV0ZV9pbmNvbXBsZXRlX2ZpbGUgPSAxOwogCiAgICAgcmMgPSBuZ3hfaHR0cF9yZWFkX2NsaWVudF9yZXF1ZXN0X2JvZHkociwgbmd4X2h0dHBfcGVybF9oYW5kbGVfcmVxdWVzdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IDZhMDhjNGIuLmI4OTdmZTEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtNDg2LDggKzQ4Niw4IEBACiAgICAgICAgIGlmIChyLT5rZWVwYWxpdmUgJiYgci0+aGVhZGVyc19pbi5tc2llICYmIHItPm1ldGhvZCA9PSBOR1hfSFRUUF9QT1NUKSB7CiAKICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBNU0lFIG1heSB3YWl0IGZvciBzb21lIHRpbWUgaWYgdGhlIHJlc3BvbnNlIGZvciB0aGUgUE9TVCByZXF1ZXN0Ci0gICAgICAgICAgICAgKiBpcyBzZW50IG92ZXIgdGhlIGtlZXBhbGl2ZSBjb25uZWN0aW9uCisgICAgICAgICAgICAgKiBNU0lFIG1heSB3YWl0IGZvciBzb21lIHRpbWUgaWYgdGhlIHJlc3BvbnNlIGZvcgorICAgICAgICAgICAgICogdGhlIFBPU1QgcmVxdWVzdCBpcyBzZW50IG92ZXIgdGhlIGtlZXBhbGl2ZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgci0+a2VlcGFsaXZlID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwppbmRleCBjMjk2Yzk0Li5mNDdmZGUzIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCkBAIC0xNDczLDIxICsxNDczLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwci0+dXJpLCAmcHItPmFyZ3MpOwogCiAgICAgICAgICAgICBwci0+d3JpdGVfZXZlbnRfaGFuZGxlcihwcik7Ci0KLSNpZiAwCi0gICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIHJlcXVlc3Q6IFwiJVY/JVZcIiBzdGlsbCBoYXMgcG9zdHBvbmVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZwci0+dXJpLCAmcHItPmFyZ3MpOwotCi0gICAgICAgICAgICBpZiAocHItPmRvbmUgfHwgcHItPnBvc3Rwb25lZC0+b3V0KSB7Ci0gICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgd2FrZSBwYXJlbnQgcmVxdWVzdDogXCIlVj8lVlwiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHItPnVyaSwgJnByLT5hcmdzKTsKLQotICAgICAgICAgICAgICAgIHByLT53cml0ZV9ldmVudF9oYW5kbGVyKHByKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm47CkBAIC0xODU2LDcgKzE4NDEsOCBAQAogICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwgInRjcF9ub2RlbGF5Iik7CiAKICAgICAgICAgaWYgKHNldHNvY2tvcHQoYy0+ZmQsIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopICZ0Y3Bfbm9kZWxheSwgc2l6ZW9mKGludCkpID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSAmdGNwX25vZGVsYXksIHNpemVvZihpbnQpKQorICAgICAgICAgICAgPT0gLTEpCiAgICAgICAgIHsKICAgICAgICAgICAgIG5neF9jb25uZWN0aW9uX2Vycm9yKGMsIG5neF9zb2NrZXRfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdChUQ1BfTk9ERUxBWSkgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYyBiL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCmluZGV4IDI2MTU5MjkuLjlkMzAwZTYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCkBAIC0zMjQsNyArMzI0LDggQEAKIAogCiBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICoKLW5neF9odHRwX2dldF92YXJpYWJsZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9zdHJfdCAqbmFtZSwgbmd4X3VpbnRfdCBrZXkpCituZ3hfaHR0cF9nZXRfdmFyaWFibGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfc3RyX3QgKm5hbWUsIG5neF91aW50X3Qga2V5LAorICAgIG5neF91aW50X3Qgbm93YXJuKQogewogICAgIG5neF9odHRwX3ZhcmlhYmxlX3QgICAgICAgICp2OwogICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgICp2djsKQEAgLTM3NywxMSArMzc4LDEzIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICJ1bmtub3duIFwiJVZcIiB2YXJpYWJsZSIsIG5hbWUpOwotCiAgICAgdnYtPm5vdF9mb3VuZCA9IDE7CiAKKyAgICBpZiAobm93YXJuID09IDApIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIFwiJVZcIiB2YXJpYWJsZSIsIG5hbWUpOworICAgIH0KKwogICAgIHJldHVybiB2djsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmggYi9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuaAppbmRleCBmM2YxZmU4Li4yMDQzYTA1IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuaApAQCAtNTYsNyArNTYsNyBAQAogICAgIG5neF91aW50X3QgaW5kZXgpOwogCiBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICpuZ3hfaHR0cF9nZXRfdmFyaWFibGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLAotICAgIG5neF9zdHJfdCAqbmFtZSwgbmd4X3VpbnRfdCBrZXkpOworICAgIG5neF9zdHJfdCAqbmFtZSwgbmd4X3VpbnRfdCBrZXksIG5neF91aW50X3Qgbm93YXJuKTsKIAogI2RlZmluZSBuZ3hfaHR0cF9jbGVhcl92YXJpYWJsZShyLCBpbmRleCkgci0+dmFyaWFibGVzMFtpbmRleF0udGV4dC5kYXRhID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfd3JpdGVfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfd3JpdGVfZmlsdGVyX21vZHVsZS5jCmluZGV4IDVhZTI0YjAuLjVmNjcxNWMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3dyaXRlX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF93cml0ZV9maWx0ZXJfbW9kdWxlLmMKQEAgLTIwOSw5ICsyMDksMjAgQEAKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKLSAgICB0b19zZW5kID0gci0+bGltaXRfcmF0ZSAqIChuZ3hfdGltZSgpIC0gci0+c3RhcnRfdGltZSArIDEpIC0gYy0+c2VudDsKKyAgICBpZiAoci0+bGltaXRfcmF0ZSkgeworICAgICAgICB0b19zZW5kID0gci0+bGltaXRfcmF0ZSAqIChuZ3hfdGltZSgpIC0gci0+c3RhcnRfdGltZSArIDEpIC0gYy0+c2VudDsKIAotICAgIGlmICh0b19zZW5kIDwgMCkgeworICAgICAgICBpZiAodG9fc2VuZCA8PSAwKSB7CisgICAgICAgICAgICBjLT53cml0ZS0+ZGVsYXllZCA9IDE7CisgICAgICAgICAgICBuZ3hfYWRkX3RpbWVyKHItPmNvbm5lY3Rpb24tPndyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAobmd4X21zZWNfdCkgKC0gdG9fc2VuZCAqIDEwMDAgLyByLT5saW1pdF9yYXRlKSk7CisKKyAgICAgICAgICAgIGMtPmJ1ZmZlcmVkIHw9IE5HWF9IVFRQX1dSSVRFX0JVRkZFUkVEOworCisgICAgICAgICAgICByZXR1cm4gTkdYX0FHQUlOOworICAgICAgICB9CisKKyAgICB9IGVsc2UgewogICAgICAgICB0b19zZW5kID0gMDsKICAgICB9CiAK