ZGlmZiAtLWdpdCBhL2F1dG8vbW9kdWxlcyBiL2F1dG8vbW9kdWxlcwppbmRleCA2NzA0MDQ2Li5mZmUwNzQ5IDEwMDY0NAotLS0gYS9hdXRvL21vZHVsZXMKKysrIGIvYXV0by9tb2R1bGVzCkBAIC0xMjgsNiArMTI4LDcgQEAKIEhUVFBfTU9EVUxFUz0iJEhUVFBfTU9EVUxFUyAkSFRUUF9TVEFUSUNfTU9EVUxFIgogCiBpZiBbICRIVFRQX0RBViA9IFlFUyBdOyB0aGVuCisgICAgaGF2ZT1OR1hfSFRUUF9EQVYgLiBhdXRvL2hhdmUKICAgICBIVFRQX01PRFVMRVM9IiRIVFRQX01PRFVMRVMgJEhUVFBfREFWX01PRFVMRSIKICAgICBIVFRQX1NSQ1M9IiRIVFRQX1NSQ1MgJEhUVFBfREFWX1NSQ1MiCiBmaQpkaWZmIC0tZ2l0IGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAppbmRleCA5OWU4OWY4Li4yMGU1ZDBjIDEwMDY0NAotLS0gYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAorKysgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbApAQCAtOSw2ICs5LDM4IEBACiA8dGl0bGUgbGFuZz0iZW4iPm5naW54IGNoYW5nZWxvZzwvdGl0bGU+CiAKIAorPGNoYW5nZXMgdmVyPSIwLjMuNDAiIGRhdGU9IjE5LjA0LjIwMDYiPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgorzc/E1czYIG5neF9odHRwX2Rhdl9tb2R1bGUg0M/ExMXS1snXwcXUIM3F1M/EIE1LQ09MLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIG5neF9odHRwX2Rhdl9tb2R1bGUgc3VwcG9ydHMgdGhlIE1LQ09MIG1ldGhvZC4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfBIGNyZWF0ZV9mdWxsX3B1dF9wYXRoLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJjcmVhdGVfZnVsbF9wdXRfcGF0aCIgZGlyZWN0aXZlLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivQxdLFzcXOzsHRICRsaW1pdF9yYXRlLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICIkbGltaXRfcmF0ZSIgdmFyaWFibGUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4zLjM5IiBkYXRlPSIxNy4wNC4yMDA2Ij4KIAogPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmggYi9zcmMvY29yZS9uZ2lueC5oCmluZGV4IDFkYTkxYjcuLjJlMTNlNmIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmgKKysrIGIvc3JjL2NvcmUvbmdpbnguaApAQCAtOCw3ICs4LDcgQEAKICNkZWZpbmUgX05HSU5YX0hfSU5DTFVERURfCiAKIAotI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy4zOSIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuNDAiCiAKICNkZWZpbmUgTkdJTlhfVkFSICAgICAgICAgICJOR0lOWCIKICNkZWZpbmUgTkdYX09MRFBJRF9FWFQgICAgICIub2xkYmluIgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2ZpbGUuYyBiL3NyYy9jb3JlL25neF9maWxlLmMKaW5kZXggMGEyYzM3MS4uYzNjNDU5MiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2ZpbGUuYworKysgYi9zcmMvY29yZS9uZ3hfZmlsZS5jCkBAIC0yNSw4ICsyNSwxMiBAQAogICAgICAgICAgICAgcmV0dXJuIHJjOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCF0Zi0+cGVyc2lzdGVudCAmJiB0Zi0+d2FybikgewotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX1dBUk4sIHRmLT5maWxlLmxvZywgMCwgdGYtPndhcm4pOworICAgICAgICBpZiAodGYtPmxvZ19sZXZlbCA9PSBOR1hfTE9HX05PVElDRSkgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgdGYtPmZpbGUubG9nLCAwLCB0Zi0+d2Fybik7CisKKyAgICAgICAgfSBlbHNlIGlmICh0Zi0+bG9nX2xldmVsID09IE5HWF9MT0dfV0FSTikgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX1dBUk4sIHRmLT5maWxlLmxvZywgMCwgIiVzICVWIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGYtPndhcm4sICZ0Zi0+ZmlsZS5uYW1lKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTgyLDYgKzE4NiwzNSBAQAogfQogCiAKK25neF9lcnJfdAorbmd4X2NyZWF0ZV9mdWxsX3BhdGgodV9jaGFyICpkaXIpCit7CisgICAgdV9jaGFyICAgICAqcCwgY2g7CisgICAgbmd4X2Vycl90ICAgZXJyOworCisgICAgZm9yIChwID0gZGlyICsgMTsgKnA7IHArKykgeworICAgICAgICBjaCA9ICpwOworCisgICAgICAgIGlmIChjaCAhPSAnLycpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgKnAgPSAnXDAnOworCisgICAgICAgIGlmIChuZ3hfY3JlYXRlX2RpcihkaXIpID09IE5HWF9GSUxFX0VSUk9SKSB7CisgICAgICAgICAgICBlcnIgPSBuZ3hfZXJybm87CisgICAgICAgICAgICBpZiAoZXJyICE9IE5HWF9FRVhJU1QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKnAgPSAnLyc7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKwogdm9pZAogbmd4X2luaXRfdGVtcF9udW1iZXIodm9pZCkKIHsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9maWxlLmggYi9zcmMvY29yZS9uZ3hfZmlsZS5oCmluZGV4IDQ4OGMxMGEuLjNlYzMwNTYgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9maWxlLmgKKysrIGIvc3JjL2NvcmUvbmd4X2ZpbGUuaApAQCAtNTEsNiArNTEsNyBAQAogCiAgICAgbmd4X3VpbnRfdCAgICAgICAgICBtb2RlOwogCisgICAgdW5zaWduZWQgICAgICAgICAgICBsb2dfbGV2ZWw6ODsKICAgICB1bnNpZ25lZCAgICAgICAgICAgIHBlcnNpc3RlbnQ6MTsKIH0gbmd4X3RlbXBfZmlsZV90OwogCkBAIC02MCw2ICs2MSw3IEBACiAgICAgbmd4X3Bvb2xfdCAqcG9vbCwgbmd4X3VpbnRfdCBwZXJzaXN0ZW50LG5neF91aW50X3QgbW9kZSk7CiB2b2lkIG5neF9jcmVhdGVfaGFzaGVkX2ZpbGVuYW1lKG5neF9maWxlX3QgKmZpbGUsIG5neF9wYXRoX3QgKnBhdGgpOwogbmd4X2ludF90IG5neF9jcmVhdGVfcGF0aChuZ3hfZmlsZV90ICpmaWxlLCBuZ3hfcGF0aF90ICpwYXRoKTsKK25neF9lcnJfdCBuZ3hfY3JlYXRlX2Z1bGxfcGF0aCh1X2NoYXIgKmRpcik7CiBuZ3hfaW50X3Qgbmd4X2FkZF9wYXRoKG5neF9jb25mX3QgKmNmLCBuZ3hfcGF0aF90ICoqc2xvdCk7CiBuZ3hfaW50X3Qgbmd4X2NyZWF0ZV9wYXRoZXMobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfdWlkX3QgdXNlcik7CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKaW5kZXggOGUyYWQwMi4uZTFhMGU4NiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKQEAgLTE2Miw2ICsxNjIsMTAgQEAKICAgICAgICAgcmV0dXJuIE5HWF9ERUNMSU5FRDsKICAgICB9CiAKKyAgICBpZiAoci0+bWV0aG9kICE9IE5HWF9IVFRQX0dFVCAmJiByLT5tZXRob2QgIT0gTkdYX0hUVFBfSEVBRCkgeworICAgICAgICByZXR1cm4gTkdYX0RFQ0xJTkVEOworICAgIH0KKwogICAgIGFsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2F1dG9pbmRleF9tb2R1bGUpOwogCiAgICAgaWYgKCFhbGNmLT5lbmFibGUpIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZGF2X21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9kYXZfbW9kdWxlLmMKaW5kZXggMWI5ODIwNC4uZTYwYjhjZiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9kYXZfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9kYXZfbW9kdWxlLmMKQEAgLTEzLDExICsxMywxNSBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgbmd4X3VpbnRfdCAgbWV0aG9kczsKKyAgICBuZ3hfZmxhZ190ICBjcmVhdGVfZnVsbF9wdXRfcGF0aDsKIH0gbmd4X2h0dHBfZGF2X2xvY19jb25mX3Q7CiAKIAogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9kYXZfaGFuZGxlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwogc3RhdGljIHZvaWQgbmd4X2h0dHBfZGF2X3B1dF9oYW5kbGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcik7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2Rhdl9lcnJvcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKiwgbmd4X2Vycl90IGVyciwKKyAgICBuZ3hfaW50X3Qgbm90X2ZvdW5kLCBjaGFyICpmYWlsZWQsIHVfY2hhciAqcGF0aCk7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2Rhdl9sb2NhdGlvbihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIHVfY2hhciAqcGF0aCk7CiBzdGF0aWMgdm9pZCAqbmd4X2h0dHBfZGF2X2NyZWF0ZV9sb2NfY29uZihuZ3hfY29uZl90ICpjZik7CiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfZGF2X21lcmdlX2xvY19jb25mKG5neF9jb25mX3QgKmNmLAogICAgIHZvaWQgKnBhcmVudCwgdm9pZCAqY2hpbGQpOwpAQCAtMjgsNiArMzIsNyBAQAogICAgIHsgbmd4X3N0cmluZygib2ZmIiksIE5HWF9IVFRQX0RBVl9PRkYgfSwKICAgICB7IG5neF9zdHJpbmcoInB1dCIpLCBOR1hfSFRUUF9QVVQgfSwKICAgICB7IG5neF9zdHJpbmcoImRlbGV0ZSIpLCBOR1hfSFRUUF9ERUxFVEUgfSwKKyAgICB7IG5neF9zdHJpbmcoIm1rY29sIiksIE5HWF9IVFRQX01LQ09MIH0sCiAgICAgeyBuZ3hfbnVsbF9zdHJpbmcsIDAgfQogfTsKIApAQCAtNDEsNiArNDYsMTMgQEAKICAgICAgIG9mZnNldG9mKG5neF9odHRwX2Rhdl9sb2NfY29uZl90LCBtZXRob2RzKSwKICAgICAgICZuZ3hfaHR0cF9kYXZfbWV0aG9kc19tYXNrIH0sCiAKKyAgICB7IG5neF9zdHJpbmcoImNyZWF0ZV9mdWxsX3B1dF9wYXRoIiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfRkxBRywKKyAgICAgIG5neF9jb25mX3NldF9mbGFnX3Nsb3QsCisgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9kYXZfbG9jX2NvbmZfdCwgY3JlYXRlX2Z1bGxfcHV0X3BhdGgpLAorICAgICAgTlVMTCB9LAorCiAgICAgICBuZ3hfbnVsbF9jb21tYW5kCiB9OwogCkBAIC03OSw4ICs5MSwxMCBAQAogc3RhdGljIG5neF9pbnRfdAogbmd4X2h0dHBfZGF2X2hhbmRsZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKQogeworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAqZmFpbGVkOwogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgcmM7CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICBwYXRoOworICAgIG5neF9maWxlX2luZm9fdCAgICAgICAgICAgZmk7CiAgICAgbmd4X2h0dHBfZGF2X2xvY19jb25mX3QgICpkbGNmOwogCiAgICAgLyogVE9ETzogV2luMzIgKi8KQEAgLTEwMiwxMCArMTE2LDE1IEBACiAgICAgICAgICAgICByZXR1cm4gTkdYX0RFQ0xJTkVEOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHItPmhlYWRlcnNfaW4uY29udGVudF9sZW5ndGhfbiA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9CQURfUkVRVUVTVDsKKyAgICAgICAgfQorCiAgICAgICAgIHItPnJlcXVlc3RfYm9keV9pbl9maWxlX29ubHkgPSAxOwogICAgICAgICByLT5yZXF1ZXN0X2JvZHlfaW5fcGVyc2lzdGVudF9maWxlID0gMTsKICAgICAgICAgci0+cmVxdWVzdF9ib2R5X2RlbGV0ZV9pbmNvbXBsZXRlX2ZpbGUgPSAxOwogICAgICAgICByLT5yZXF1ZXN0X2JvZHlfZmlsZV9ncm91cF9hY2Nlc3MgPSAxOworICAgICAgICByLT5yZXF1ZXN0X2JvZHlfZmlsZV9sb2dfbGV2ZWwgPSAwOwogCiAgICAgICAgIHJjID0gbmd4X2h0dHBfcmVhZF9jbGllbnRfcmVxdWVzdF9ib2R5KHIsIG5neF9odHRwX2Rhdl9wdXRfaGFuZGxlcik7CiAKQEAgLTExNyw4ICsxMzYsMTQgQEAKIAogICAgIGNhc2UgTkdYX0hUVFBfREVMRVRFOgogCi0gICAgICAgIGlmIChyLT51cmkuZGF0YVtyLT51cmkubGVuIC0gMV0gPT0gJy8nKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0RFQ0xJTkVEOworICAgICAgICBpZiAoci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uID4gMCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1VOU1VQUE9SVEVEX01FRElBX1RZUEU7CisgICAgICAgIH0KKworICAgICAgICByYyA9IG5neF9odHRwX2Rpc2NhcmRfYm9keShyKTsKKworICAgICAgICBpZiAocmMgIT0gTkdYX09LICYmIHJjICE9IE5HWF9BR0FJTikgeworICAgICAgICAgICAgcmV0dXJuIHJjOwogICAgICAgICB9CiAKICAgICAgICAgbmd4X2h0dHBfbWFwX3VyaV90b19wYXRoKHIsICZwYXRoLCAwKTsKQEAgLTEyNiwxNCArMTUxLDgzIEBACiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBkZWxldGUgZmlsZW5hbWU6IFwiJXNcIiIsIHBhdGguZGF0YSk7CiAKLSAgICAgICAgaWYgKG5neF9kZWxldGVfZmlsZShwYXRoLmRhdGEpID09IE5HWF9GSUxFX0VSUk9SKSB7Ci0gICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgci0+Y29ubmVjdGlvbi0+bG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9kZWxldGVfZmlsZV9uICIgXCIlc1wiIGZhaWxlZCIsIHBhdGguZGF0YSk7CisgICAgICAgIGlmIChuZ3hfZmlsZV9pbmZvKHBhdGguZGF0YSwgJmZpKSAhPSAtMSkgewogCi0gICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOworICAgICAgICAgICAgaWYgKG5neF9pc19kaXIoJmZpKSkgeworCisgICAgICAgICAgICAgICAgaWYgKHItPnVyaS5kYXRhW3ItPnVyaS5sZW4gLSAxXSAhPSAnLycKKyAgICAgICAgICAgICAgICAgICAgfHwgci0+aGVhZGVyc19pbi5kZXB0aCA9PSBOVUxMCisgICAgICAgICAgICAgICAgICAgIHx8IHItPmhlYWRlcnNfaW4uZGVwdGgtPnZhbHVlLmxlbiAhPSBzaXplb2YoImluZmluaXR5IikgLSAxCisgICAgICAgICAgICAgICAgICAgIHx8IG5neF9zdHJjbXAoci0+aGVhZGVyc19pbi5kZXB0aC0+dmFsdWUuZGF0YSwgImluZmluaXR5IikKKyAgICAgICAgICAgICAgICAgICAgICAgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9CQURfUkVRVUVTVDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobmd4X2RlbGV0ZV9kaXIocGF0aC5kYXRhKSAhPSBOR1hfRklMRV9FUlJPUikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfTk9fQ09OVEVOVDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSBuZ3hfZGVsZXRlX2Rpcl9uOworCisgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgaWYgKHItPnVyaS5kYXRhW3ItPnVyaS5sZW4gLSAxXSA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0JBRF9SRVFVRVNUOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChyLT5oZWFkZXJzX2luLmRlcHRoCisgICAgICAgICAgICAgICAgICAgICYmIHItPmhlYWRlcnNfaW4uZGVwdGgtPnZhbHVlLmxlbiA9PSAxCisgICAgICAgICAgICAgICAgICAgICYmIHItPmhlYWRlcnNfaW4uZGVwdGgtPnZhbHVlLmRhdGFbMF0gPT0gJzEnKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0JBRF9SRVFVRVNUOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChuZ3hfZGVsZXRlX2ZpbGUocGF0aC5kYXRhKSAhPSBOR1hfRklMRV9FUlJPUikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfTk9fQ09OVEVOVDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSBuZ3hfZGVsZXRlX2ZpbGVfbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmFpbGVkID0gbmd4X2ZpbGVfaW5mb19uOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIE5HWF9IVFRQX05PX0NPTlRFTlQ7CisgICAgICAgIHJldHVybiBuZ3hfaHR0cF9kYXZfZXJyb3Iociwgbmd4X2Vycm5vLCBOR1hfSFRUUF9OT1RfRk9VTkQsIGZhaWxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmRhdGEpOworCisgICAgY2FzZSBOR1hfSFRUUF9NS0NPTDoKKworICAgICAgICBpZiAoci0+dXJpLmRhdGFbci0+dXJpLmxlbiAtIDFdICE9ICcvJykgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9ERUNMSU5FRDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyLT5oZWFkZXJzX2luLmNvbnRlbnRfbGVuZ3RoX24gPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfVU5TVVBQT1JURURfTUVESUFfVFlQRTsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0gbmd4X2h0dHBfZGlzY2FyZF9ib2R5KHIpOworCisgICAgICAgIGlmIChyYyAhPSBOR1hfT0sgJiYgcmMgIT0gTkdYX0FHQUlOKSB7CisgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIH0KKworICAgICAgICBuZ3hfaHR0cF9tYXBfdXJpX3RvX3BhdGgociwgJnBhdGgsIDApOworCisgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBta2NvbCBwYXRoOiBcIiVzXCIiLCBwYXRoLmRhdGEpOworCisgICAgICAgIGlmIChuZ3hfY3JlYXRlX2RpcihwYXRoLmRhdGEpICE9IE5HWF9GSUxFX0VSUk9SKSB7CisgICAgICAgICAgICBpZiAobmd4X2h0dHBfZGF2X2xvY2F0aW9uKHIsIHBhdGguZGF0YSkgIT0gTkdYX09LKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0NSRUFURUQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmd4X2h0dHBfZGF2X2Vycm9yKHIsIG5neF9lcnJubywgTkdYX0hUVFBfQ09ORkxJQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2NyZWF0ZV9kaXJfbiwgcGF0aC5kYXRhKTsKICAgICB9CiAKICAgICByZXR1cm4gTkdYX0RFQ0xJTkVEOwpAQCAtMTQzLDEyICsyMzcsMTEgQEAKIHN0YXRpYyB2b2lkCiBuZ3hfaHR0cF9kYXZfcHV0X2hhbmRsZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKQogewotICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgKmxvY2F0aW9uOwotICAgIG5neF9lcnJfdCAgICAgICAgICAgICAgICAgIGVycjsKLSAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICp0ZW1wLCBwYXRoOwotICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIHN0YXR1czsKLSAgICBuZ3hfZmlsZV9pbmZvX3QgICAgICAgICAgICBmaTsKLSAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICpjbGNmOworICAgIG5neF9lcnJfdCAgICAgICAgICAgICAgICAgZXJyOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAqdGVtcCwgcGF0aDsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgIHN0YXR1czsKKyAgICBuZ3hfZmlsZV9pbmZvX3QgICAgICAgICAgIGZpOworICAgIG5neF9odHRwX2Rhdl9sb2NfY29uZl90ICAqZGxjZjsKIAogICAgIG5neF9odHRwX21hcF91cmlfdG9fcGF0aChyLCAmcGF0aCwgMCk7CiAKQEAgLTE2NCwxMiArMjU3LDM0IEBACiAgICAgICAgIHN0YXR1cyA9IE5HWF9IVFRQX05PX0NPTlRFTlQ7CiAgICAgfQogCisgICAgaWYgKG5neF9pc19kaXIoJmZpKSkgeworICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX0NPTkZMSUNUKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChuZ3hfcmVuYW1lX2ZpbGUodGVtcC0+ZGF0YSwgcGF0aC5kYXRhKSAhPSBOR1hfRklMRV9FUlJPUikgewogICAgICAgICBnb3RvIG9rOwogICAgIH0KIAogICAgIGVyciA9IG5neF9lcnJubzsKIAorICAgIGlmIChlcnIgPT0gTkdYX0VOT0VOVCkgeworCisgICAgICAgIGRsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2Rhdl9tb2R1bGUpOworCisgICAgICAgIGlmIChkbGNmLT5jcmVhdGVfZnVsbF9wdXRfcGF0aCkgeworICAgICAgICAgICAgZXJyID0gbmd4X2NyZWF0ZV9mdWxsX3BhdGgocGF0aC5kYXRhKTsKKworICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKG5neF9yZW5hbWVfZmlsZSh0ZW1wLT5kYXRhLCBwYXRoLmRhdGEpICE9IE5HWF9GSUxFX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gb2s7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZXJyID0gbmd4X2Vycm5vOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAjaWYgKE5HWF9XSU4zMikKIAogICAgIGlmIChlcnIgPT0gTkdYX0VFWElTVCkgewpAQCAtMTg1LDQ1ICszMDAsMTggQEAKIAogI2VuZGlmCiAKLSAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgci0+Y29ubmVjdGlvbi0+bG9nLCBlcnIsCi0gICAgICAgICAgICAgICAgICBuZ3hfcmVuYW1lX2ZpbGVfbiAiIFwiJXNcIiBmYWlsZWQiLCBwYXRoLmRhdGEpOwotCi0gICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1IpOworICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3Qociwgbmd4X2h0dHBfZGF2X2Vycm9yKHIsIGVyciwgTkdYX0hUVFBfQ09ORkxJQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JlbmFtZV9maWxlX24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5kYXRhKSk7CiAgICAgcmV0dXJuOwogCiBvazoKIAogICAgIGlmIChzdGF0dXMgPT0gTkdYX0hUVFBfQ1JFQVRFRCkgewotCi0gICAgICAgIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uID0gbmd4X3BhbGxvYyhyLT5wb29sLCBzaXplb2Yobmd4X3RhYmxlX2VsdF90KSk7Ci0gICAgICAgIGlmIChyLT5oZWFkZXJzX291dC5sb2NhdGlvbiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChuZ3hfaHR0cF9kYXZfbG9jYXRpb24ociwgcGF0aC5kYXRhKSAhPSBOR1hfT0spIHsKICAgICAgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotCi0gICAgICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKLQotICAgICAgICBpZiAoIWNsY2YtPmFsaWFzICYmIGNsY2YtPnJvb3RfbGVuZ3RocyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBsb2NhdGlvbiA9IHBhdGguZGF0YSArIGNsY2YtPnJvb3QubGVuOwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2NhdGlvbiA9IG5neF9wYWxsb2Moci0+cG9vbCwgci0+dXJpLmxlbik7Ci0gICAgICAgICAgICBpZiAobG9jYXRpb24gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5neF9tZW1jcHkobG9jYXRpb24sIHItPnVyaS5kYXRhLCByLT51cmkubGVuKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIHdlIGRvIG5vdCBuZWVkIHRvIHNldCB0aGUgci0+aGVhZGVyc19vdXQubG9jYXRpb24tPmhhc2ggYW5kCi0gICAgICAgICAqIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uLT5rZXkgZmllbGRzCi0gICAgICAgICAqLwotCi0gICAgICAgIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uLT52YWx1ZS5sZW4gPSByLT51cmkubGVuOwotICAgICAgICByLT5oZWFkZXJzX291dC5sb2NhdGlvbi0+dmFsdWUuZGF0YSA9IGxvY2F0aW9uOwotCiAgICAgfQogCiAgICAgci0+aGVhZGVyc19vdXQuc3RhdHVzID0gc3RhdHVzOwpAQCAtMjM0LDYgKzMyMiw3OCBAQAogfQogCiAKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX2Rhdl9lcnJvcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9lcnJfdCBlcnIsIG5neF9pbnRfdCBub3RfZm91bmQsCisgICAgY2hhciAqZmFpbGVkLCB1X2NoYXIgKnBhdGgpCit7CisgICAgbmd4X2ludF90ICAgcmM7CisgICAgbmd4X3VpbnRfdCAgbGV2ZWw7CisKKyAgICBpZiAoZXJyID09IE5HWF9FTk9FTlQgfHwgZXJyID09IE5HWF9FTk9URElSIHx8IGVyciA9PSBOR1hfRU5BTUVUT09MT05HKSB7CisgICAgICAgIGxldmVsID0gTkdYX0xPR19FUlI7CisgICAgICAgIHJjID0gbm90X2ZvdW5kOworCisgICAgfSBlbHNlIGlmIChlcnIgPT0gTkdYX0VBQ0NFUyB8fCBlcnIgPT0gTkdYX0VQRVJNKSB7CisgICAgICAgIGxldmVsID0gTkdYX0xPR19FUlI7CisgICAgICAgIHJjID0gTkdYX0hUVFBfRk9SQklEREVOOworCisgICAgfSBlbHNlIGlmIChlcnIgPT0gTkdYX0VFWElTVCkgeworICAgICAgICBsZXZlbCA9IE5HWF9MT0dfRVJSOworICAgICAgICByYyA9IE5HWF9IVFRQX05PVF9BTExPV0VEOworCisgICAgfSBlbHNlIGlmIChlcnIgPT0gTkdYX0VOT1NQQykgeworICAgICAgICBsZXZlbCA9IE5HWF9MT0dfQ1JJVDsKKyAgICAgICAgcmMgPSBOR1hfSFRUUF9JTlNVRkZJQ0lFTlRfU1RPUkFHRTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIGxldmVsID0gTkdYX0xPR19DUklUOworICAgICAgICByYyA9IE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKKyAgICB9CisKKyAgICBuZ3hfbG9nX2Vycm9yKGxldmVsLCByLT5jb25uZWN0aW9uLT5sb2csIGVyciwKKyAgICAgICAgICAgICAgICAgICIlcyBcIiVzXCIgZmFpbGVkIiwgZmFpbGVkLCBwYXRoKTsKKworICAgIHJldHVybiByYzsKK30KKworCitzdGF0aWMgbmd4X2ludF90CituZ3hfaHR0cF9kYXZfbG9jYXRpb24obmd4X2h0dHBfcmVxdWVzdF90ICpyLCB1X2NoYXIgKnBhdGgpCit7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAqbG9jYXRpb247CisgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAqY2xjZjsKKworICAgIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uID0gbmd4X3BhbGxvYyhyLT5wb29sLCBzaXplb2Yobmd4X3RhYmxlX2VsdF90KSk7CisgICAgaWYgKHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CisKKyAgICBpZiAoIWNsY2YtPmFsaWFzICYmIGNsY2YtPnJvb3RfbGVuZ3RocyA9PSBOVUxMKSB7CisgICAgICAgIGxvY2F0aW9uID0gcGF0aCArIGNsY2YtPnJvb3QubGVuOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9jYXRpb24gPSBuZ3hfcGFsbG9jKHItPnBvb2wsIHItPnVyaS5sZW4pOworICAgICAgICBpZiAobG9jYXRpb24gPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIG5neF9tZW1jcHkobG9jYXRpb24sIHItPnVyaS5kYXRhLCByLT51cmkubGVuKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHdlIGRvIG5vdCBuZWVkIHRvIHNldCB0aGUgci0+aGVhZGVyc19vdXQubG9jYXRpb24tPmhhc2ggYW5kCisgICAgICogci0+aGVhZGVyc19vdXQubG9jYXRpb24tPmtleSBmaWVsZHMKKyAgICAgKi8KKworICAgIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uLT52YWx1ZS5sZW4gPSByLT51cmkubGVuOworICAgIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uLT52YWx1ZS5kYXRhID0gbG9jYXRpb247CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKIHN0YXRpYyB2b2lkICoKIG5neF9odHRwX2Rhdl9jcmVhdGVfbG9jX2NvbmYobmd4X2NvbmZfdCAqY2YpCiB7CkBAIC0yNTAsNiArNDEwLDggQEAKICAgICAgKiAgICAgY29uZi0+bWV0aG9kcyA9IDA7CiAgICAgICovCiAKKyAgICBjb25mLT5jcmVhdGVfZnVsbF9wdXRfcGF0aCA9IE5HWF9DT05GX1VOU0VUOworCiAgICAgcmV0dXJuIGNvbmY7CiB9CiAKQEAgLTI2MSw3ICs0MjMsMTAgQEAKICAgICBuZ3hfaHR0cF9kYXZfbG9jX2NvbmZfdCAgKmNvbmYgPSBjaGlsZDsKIAogICAgIG5neF9jb25mX21lcmdlX2JpdG1hc2tfdmFsdWUoY29uZi0+bWV0aG9kcywgcHJldi0+bWV0aG9kcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOR1hfQ09ORl9CSVRNQVNLX1NFVHxOR1hfSFRUUF9EQVZfT0ZGKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgKE5HWF9DT05GX0JJVE1BU0tfU0VUfE5HWF9IVFRQX0RBVl9PRkYpKTsKKworICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPmNyZWF0ZV9mdWxsX3B1dF9wYXRoLCBwcmV2LT5jcmVhdGVfZnVsbF9wdXRfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKIAogICAgIHJldHVybiBOR1hfQ09ORl9PSzsKIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYwppbmRleCBlZTYwM2QxLi5mOTAxYTUyIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCkBAIC0xNDQ1LDcgKzE0NDUsNyBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIHZhci0+aGFuZGxlciA9IG5neF9odHRwX2Zhc3RjZ2lfc2NyaXB0X25hbWVfdmFyaWFibGU7CisgICAgdmFyLT5nZXRfaGFuZGxlciA9IG5neF9odHRwX2Zhc3RjZ2lfc2NyaXB0X25hbWVfdmFyaWFibGU7CiAKICAgICByZXR1cm4gTkdYX09LOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nZW9fbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2dlb19tb2R1bGUuYwppbmRleCBhNmU4ZGIzLi42MmVmNzJjIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2dlb19tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2dlb19tb2R1bGUuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSAgICB2YXItPmhhbmRsZXIgPSBuZ3hfaHR0cF9nZW9fdmFyaWFibGU7CisgICAgdmFyLT5nZXRfaGFuZGxlciA9IG5neF9odHRwX2dlb192YXJpYWJsZTsKICAgICB2YXItPmRhdGEgPSAodWludHB0cl90KSB0cmVlOwogCiAgICAgcG9vbCA9IG5neF9jcmVhdGVfcG9vbCgxNjM4NCwgY2YtPmxvZyk7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlcl9tb2R1bGUuYwppbmRleCA2NjNmN2YyLi5hMDhmMzFjIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ3ppcF9maWx0ZXJfbW9kdWxlLmMKQEAgLTk2OSw3ICs5NjksNyBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIHZhci0+aGFuZGxlciA9IG5neF9odHRwX2d6aXBfcmF0aW9fdmFyaWFibGU7CisgICAgdmFyLT5nZXRfaGFuZGxlciA9IG5neF9odHRwX2d6aXBfcmF0aW9fdmFyaWFibGU7CiAKICAgICBmb3IgKG9wID0gbmd4X2h0dHBfZ3ppcF9sb2dfZm10X29wczsgb3AtPm5hbWUubGVuOyBvcCsrKSB7IC8qIHZvaWQgKi8gfQogICAgIG9wLT5ydW4gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9pbmRleF9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaW5kZXhfbW9kdWxlLmMKaW5kZXggNGVmMjkxMC4uNDMyNmU3MyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9pbmRleF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2luZGV4X21vZHVsZS5jCkBAIC0xNDMsNiArMTQzLDEwIEBACiAgICAgICAgIHJldHVybiBOR1hfREVDTElORUQ7CiAgICAgfQogCisgICAgaWYgKHItPm1ldGhvZCAhPSBOR1hfSFRUUF9HRVQgJiYgci0+bWV0aG9kICE9IE5HWF9IVFRQX0hFQUQpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9ERUNMSU5FRDsKKyAgICB9CisKICAgICBsb2cgPSByLT5jb25uZWN0aW9uLT5sb2c7CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9tYXBfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX21hcF9tb2R1bGUuYwppbmRleCAyY2ZiNDQzLi4wYTUzM2MwIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX21hcF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX21hcF9tb2R1bGUuYwpAQCAtMjM3LDcgKzIzNyw3IEBACiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSAgICB2YXItPmhhbmRsZXIgPSBuZ3hfaHR0cF9tYXBfdmFyaWFibGU7CisgICAgdmFyLT5nZXRfaGFuZGxlciA9IG5neF9odHRwX21hcF92YXJpYWJsZTsKICAgICB2YXItPmRhdGEgPSAodWludHB0cl90KSBtYXA7CiAKICAgICBwb29sID0gbmd4X2NyZWF0ZV9wb29sKDE2Mzg0LCBjZi0+bG9nKTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCmluZGV4IGU5NmJhMDQuLjBlM2M5NDkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYwpAQCAtMzY2LDIzICszNjYsMjMgQEAKIAogc3RhdGljIG5neF9odHRwX3ZhcmlhYmxlX3QgIG5neF9odHRwX3Byb3h5X3ZhcnNbXSA9IHsKIAotICAgIHsgbmd4X3N0cmluZygicHJveHlfaG9zdCIpLCBuZ3hfaHR0cF9wcm94eV9ob3N0X3ZhcmlhYmxlLCAwLAorICAgIHsgbmd4X3N0cmluZygicHJveHlfaG9zdCIpLCBOVUxMLCBuZ3hfaHR0cF9wcm94eV9ob3N0X3ZhcmlhYmxlLCAwLAogICAgICAgTkdYX0hUVFBfVkFSX0NIQU5HQUJMRXxOR1hfSFRUUF9WQVJfTk9IQVNILCAwIH0sCiAKLSAgICB7IG5neF9zdHJpbmcoInByb3h5X3BvcnQiKSwgbmd4X2h0dHBfcHJveHlfcG9ydF92YXJpYWJsZSwgMCwKKyAgICB7IG5neF9zdHJpbmcoInByb3h5X3BvcnQiKSwgTlVMTCwgbmd4X2h0dHBfcHJveHlfcG9ydF92YXJpYWJsZSwgMCwKICAgICAgIE5HWF9IVFRQX1ZBUl9DSEFOR0FCTEV8TkdYX0hUVFBfVkFSX05PSEFTSCwgMCB9LAogCi0gICAgeyBuZ3hfc3RyaW5nKCJwcm94eV9hZGRfeF9mb3J3YXJkZWRfZm9yIiksCisgICAgeyBuZ3hfc3RyaW5nKCJwcm94eV9hZGRfeF9mb3J3YXJkZWRfZm9yIiksIE5VTEwsCiAgICAgICBuZ3hfaHR0cF9wcm94eV9hZGRfeF9mb3J3YXJkZWRfZm9yX3ZhcmlhYmxlLCAwLCBOR1hfSFRUUF9WQVJfTk9IQVNILCAwIH0sCiAKICNpZiAwCi0gICAgeyBuZ3hfc3RyaW5nKCJwcm94eV9hZGRfdmlhIiksIE5VTEwsIDAsIE5HWF9IVFRQX1ZBUl9OT0hBU0gsIDAgfSwKKyAgICB7IG5neF9zdHJpbmcoInByb3h5X2FkZF92aWEiKSwgTlVMTCwgTlVMTCwgMCwgTkdYX0hUVFBfVkFSX05PSEFTSCwgMCB9LAogI2VuZGlmCiAKLSAgICB7IG5neF9zdHJpbmcoInByb3h5X2ludGVybmFsX2JvZHlfbGVuZ3RoIiksCisgICAgeyBuZ3hfc3RyaW5nKCJwcm94eV9pbnRlcm5hbF9ib2R5X2xlbmd0aCIpLCBOVUxMLAogICAgICAgbmd4X2h0dHBfcHJveHlfaW50ZXJuYWxfYm9keV9sZW5ndGhfdmFyaWFibGUsIDAsIE5HWF9IVFRQX1ZBUl9OT0hBU0gsIDAgfSwKIAotICAgIHsgbmd4X251bGxfc3RyaW5nLCBOVUxMLCAwLCAwLCAwIH0KKyAgICB7IG5neF9udWxsX3N0cmluZywgTlVMTCwgTlVMTCwgMCwgMCwgMCB9CiB9OwogCiAKQEAgLTEzODIsNyArMTM4Miw3IEBACiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICB9CiAKLSAgICAgICAgdmFyLT5oYW5kbGVyID0gdi0+aGFuZGxlcjsKKyAgICAgICAgdmFyLT5nZXRfaGFuZGxlciA9IHYtPmdldF9oYW5kbGVyOwogICAgICAgICB2YXItPmRhdGEgPSB2LT5kYXRhOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZWZlcmVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZWZlcmVyX21vZHVsZS5jCmluZGV4IGViMDE4NTcuLmYzNTk3YTEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmVmZXJlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JlZmVyZXJfbW9kdWxlLmMKQEAgLTI5OCw3ICsyOTgsNyBAQAogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCi0gICAgdmFyLT5oYW5kbGVyID0gbmd4X2h0dHBfcmVmZXJlcl92YXJpYWJsZTsKKyAgICB2YXItPmdldF9oYW5kbGVyID0gbmd4X2h0dHBfcmVmZXJlcl92YXJpYWJsZTsKIAogICAgIGlmIChybGNmLT5rZXlzID09IE5VTEwpIHsKICAgICAgICAgcmxjZi0+a2V5cyA9IG5neF9wY2FsbG9jKGNmLT50ZW1wX3Bvb2wsIHNpemVvZihuZ3hfaGFzaF9rZXlzX2FycmF5c190KSk7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Jld3JpdGVfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Jld3JpdGVfbW9kdWxlLmMKaW5kZXggZTNiMmVkYy4uMzcyNjZhNCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZXdyaXRlX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmV3cml0ZV9tb2R1bGUuYwpAQCAtNzQsMTUgKzc0LDYgQEAKICAgICAgIDAsCiAgICAgICBOVUxMIH0sCiAKLSNpZiAwCi0gICAgeyBuZ3hfc3RyaW5nKCJ2YWxpZF9yZWZlcmVycyIpLAotICAgICAgTkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfMU1PUkUsCi0gICAgICBuZ3hfaHR0cF9yZXdyaXRlX3ZhbGlkX3JlZmVyZXJzLAotICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAotICAgICAgMCwKLSAgICAgIE5VTEwgfSwKLSNlbmRpZgotCiAgICAgeyBuZ3hfc3RyaW5nKCJzZXQiKSwKICAgICAgIE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX1NJRl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9IVFRQX0xJRl9DT05GCiAgICAgICAgICAgICAgICAgICAgICAgIHxOR1hfQ09ORl9UQUtFMiwKQEAgLTg3OSwxMCArODcwLDExIEBACiB7CiAgICAgbmd4X2h0dHBfcmV3cml0ZV9sb2NfY29uZl90ICAqbGNmID0gY29uZjsKIAotICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgIGluZGV4OwotICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgKnZhbHVlOwotICAgIG5neF9odHRwX3ZhcmlhYmxlX3QgICAgICAgICAgKnY7Ci0gICAgbmd4X2h0dHBfc2NyaXB0X3Zhcl9jb2RlX3QgICAqdmFyOworICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAqdmFsdWU7CisgICAgbmd4X2h0dHBfdmFyaWFibGVfdCAgICAgICAgICAgICAgICAgKnY7CisgICAgbmd4X2h0dHBfc2NyaXB0X3Zhcl9jb2RlX3QgICAgICAgICAgKnZjb2RlOworICAgIG5neF9odHRwX3NjcmlwdF92YXJfaGFuZGxlcl9jb2RlX3QgICp2aGNvZGU7CiAKICAgICB2YWx1ZSA9IGNmLT5hcmdzLT5lbHRzOwogCkBAIC05MDUsOCArODk3LDggQEAKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAotICAgIGlmICh2LT5oYW5kbGVyID09IE5VTEwpIHsKLSAgICAgICAgdi0+aGFuZGxlciA9IG5neF9odHRwX3Jld3JpdGVfdmFyOworICAgIGlmICh2LT5nZXRfaGFuZGxlciA9PSBOVUxMKSB7CisgICAgICAgIHYtPmdldF9oYW5kbGVyID0gbmd4X2h0dHBfcmV3cml0ZV92YXI7CiAgICAgICAgIHYtPmRhdGEgPSBpbmRleDsKICAgICB9CiAKQEAgLTkxNCwxNCArOTA2LDI4IEBACiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSAgICB2YXIgPSBuZ3hfaHR0cF9zY3JpcHRfc3RhcnRfY29kZShjZi0+cG9vbCwgJmxjZi0+Y29kZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9odHRwX3NjcmlwdF92YXJfY29kZV90KSk7Ci0gICAgaWYgKHZhciA9PSBOVUxMKSB7CisgICAgaWYgKHYtPnNldF9oYW5kbGVyKSB7CisgICAgICAgIHZoY29kZSA9IG5neF9odHRwX3NjcmlwdF9zdGFydF9jb2RlKGNmLT5wb29sLCAmbGNmLT5jb2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9odHRwX3NjcmlwdF92YXJfaGFuZGxlcl9jb2RlX3QpKTsKKyAgICAgICAgaWYgKHZoY29kZSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICB2aGNvZGUtPmNvZGUgPSBuZ3hfaHR0cF9zY3JpcHRfdmFyX3NldF9oYW5kbGVyX2NvZGU7CisgICAgICAgIHZoY29kZS0+aGFuZGxlciA9IHYtPnNldF9oYW5kbGVyOworICAgICAgICB2aGNvZGUtPmRhdGEgPSB2LT5kYXRhOworCisgICAgICAgIHJldHVybiBOR1hfQ09ORl9PSzsKKyAgICB9CisKKyAgICB2Y29kZSA9IG5neF9odHRwX3NjcmlwdF9zdGFydF9jb2RlKGNmLT5wb29sLCAmbGNmLT5jb2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF9zY3JpcHRfdmFyX2NvZGVfdCkpOworICAgIGlmICh2Y29kZSA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSAgICB2YXItPmNvZGUgPSBuZ3hfaHR0cF9zY3JpcHRfc2V0X3Zhcl9jb2RlOwotICAgIHZhci0+aW5kZXggPSAodWludHB0cl90KSBpbmRleDsKKyAgICB2Y29kZS0+Y29kZSA9IG5neF9odHRwX3NjcmlwdF9zZXRfdmFyX2NvZGU7CisgICAgdmNvZGUtPmluZGV4ID0gKHVpbnRwdHJfdCkgaW5kZXg7CiAKICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMKaW5kZXggNTQxYjQzOC4uMTVjYjBjMyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYwpAQCAtMjYyLDEzICsyNjIsMTMgQEAKIAogc3RhdGljIG5neF9odHRwX3ZhcmlhYmxlX3QgIG5neF9odHRwX3NzaV92YXJzW10gPSB7CiAKLSAgICB7IG5neF9zdHJpbmcoImRhdGVfbG9jYWwiKSwgbmd4X2h0dHBfc3NpX2RhdGVfZ210X2xvY2FsX3ZhcmlhYmxlLCAwLAorICAgIHsgbmd4X3N0cmluZygiZGF0ZV9sb2NhbCIpLCBOVUxMLCBuZ3hfaHR0cF9zc2lfZGF0ZV9nbXRfbG9jYWxfdmFyaWFibGUsIDAsCiAgICAgICBOR1hfSFRUUF9WQVJfTk9DQUNIQUJMRSwgMCB9LAogCi0gICAgeyBuZ3hfc3RyaW5nKCJkYXRlX2dtdCIpLCBuZ3hfaHR0cF9zc2lfZGF0ZV9nbXRfbG9jYWxfdmFyaWFibGUsIDEsCisgICAgeyBuZ3hfc3RyaW5nKCJkYXRlX2dtdCIpLCBOVUxMLCBuZ3hfaHR0cF9zc2lfZGF0ZV9nbXRfbG9jYWxfdmFyaWFibGUsIDEsCiAgICAgICBOR1hfSFRUUF9WQVJfTk9DQUNIQUJMRSwgMCB9LAogCi0gICAgeyBuZ3hfbnVsbF9zdHJpbmcsIE5VTEwsIDAsIDAsIDAgfQorICAgIHsgbmd4X251bGxfc3RyaW5nLCBOVUxMLCBOVUxMLCAwLCAwLCAwIH0KIH07CiAKIApAQCAtMjE1Myw3ICsyMTUzLDcgQEAKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KIAotICAgICAgICB2YXItPmhhbmRsZXIgPSB2LT5oYW5kbGVyOworICAgICAgICB2YXItPmdldF9oYW5kbGVyID0gdi0+Z2V0X2hhbmRsZXI7CiAgICAgICAgIHZhci0+ZGF0YSA9IHYtPmRhdGE7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzbF9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NsX21vZHVsZS5jCmluZGV4IGE3MGM3ZjIuLmUyMTkxZWYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NsX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NsX21vZHVsZS5jCkBAIC0xMzYsMTMgKzEzNiwxMyBAQAogCiBzdGF0aWMgbmd4X2h0dHBfdmFyaWFibGVfdCAgbmd4X2h0dHBfc3NsX3ZhcnNbXSA9IHsKIAotICAgIHsgbmd4X3N0cmluZygic3NsX3Byb3RvY29sIiksIG5neF9odHRwX3NzbF92YXJpYWJsZSwKKyAgICB7IG5neF9zdHJpbmcoInNzbF9wcm90b2NvbCIpLCBOVUxMLCBuZ3hfaHR0cF9zc2xfdmFyaWFibGUsCiAgICAgICAodWludHB0cl90KSBuZ3hfc3NsX2dldF9wcm90b2NvbCwgTkdYX0hUVFBfVkFSX0NIQU5HQUJMRSwgMCB9LAogCi0gICAgeyBuZ3hfc3RyaW5nKCJzc2xfY2lwaGVyIiksIG5neF9odHRwX3NzbF92YXJpYWJsZSwKKyAgICB7IG5neF9zdHJpbmcoInNzbF9jaXBoZXIiKSwgTlVMTCwgbmd4X2h0dHBfc3NsX3ZhcmlhYmxlLAogICAgICAgKHVpbnRwdHJfdCkgbmd4X3NzbF9nZXRfY2lwaGVyX25hbWUsIE5HWF9IVFRQX1ZBUl9DSEFOR0FCTEUsIDAgfSwKIAotICAgIHsgbmd4X251bGxfc3RyaW5nLCBOVUxMLCAwLCAwLCAwIH0KKyAgICB7IG5neF9udWxsX3N0cmluZywgTlVMTCwgTlVMTCwgMCwgMCwgMCB9CiB9OwogCiAKQEAgLTE5MCw3ICsxOTAsNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogCi0gICAgICAgIHZhci0+aGFuZGxlciA9IHYtPmhhbmRsZXI7CisgICAgICAgIHZhci0+Z2V0X2hhbmRsZXIgPSB2LT5nZXRfaGFuZGxlcjsKICAgICAgICAgdmFyLT5kYXRhID0gdi0+ZGF0YTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfdXNlcmlkX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfdXNlcmlkX2ZpbHRlcl9tb2R1bGUuYwppbmRleCBhN2NkYTMyLi44MTBlYjNhIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyX21vZHVsZS5jCkBAIC01NTksNyArNTU5LDcgQEAKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKLSAgICB2YXItPmhhbmRsZXIgPSBuZ3hfaHR0cF91c2VyaWRfdmFyaWFibGU7CisgICAgdmFyLT5nZXRfaGFuZGxlciA9IG5neF9odHRwX3VzZXJpZF92YXJpYWJsZTsKICAgICB2YXItPmRhdGEgPSBvZmZzZXRvZihuZ3hfaHR0cF91c2VyaWRfY3R4X3QsIHVpZF9nb3QpOwogCiAgICAgdmFyID0gbmd4X2h0dHBfYWRkX3ZhcmlhYmxlKGNmLCAmbmd4X2h0dHBfdXNlcmlkX3NldCwgTkdYX0hUVFBfVkFSX05PSEFTSCk7CkBAIC01NjcsNyArNTY3LDcgQEAKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKLSAgICB2YXItPmhhbmRsZXIgPSBuZ3hfaHR0cF91c2VyaWRfdmFyaWFibGU7CisgICAgdmFyLT5nZXRfaGFuZGxlciA9IG5neF9odHRwX3VzZXJpZF92YXJpYWJsZTsKICAgICB2YXItPmRhdGEgPSBvZmZzZXRvZihuZ3hfaHR0cF91c2VyaWRfY3R4X3QsIHVpZF9zZXQpOwogCiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ3hfaHR0cF9wZXJsX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25neF9odHRwX3BlcmxfbW9kdWxlLmMKaW5kZXggMTk4OTcxZC4uMTM2YmFjMyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25neF9odHRwX3BlcmxfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25neF9odHRwX3BlcmxfbW9kdWxlLmMKQEAgLTE5MCw2ICsxOTAsMTAgQEAKICAgICByLT5yZXF1ZXN0X2JvZHlfaW5fcGVyc2lzdGVudF9maWxlID0gMTsKICAgICByLT5yZXF1ZXN0X2JvZHlfZGVsZXRlX2luY29tcGxldGVfZmlsZSA9IDE7CiAKKyAgICBpZiAoci0+cmVxdWVzdF9ib2R5X2luX2ZpbGVfb25seSkgeworICAgICAgICByLT5yZXF1ZXN0X2JvZHlfZmlsZV9sb2dfbGV2ZWwgPSAwOworICAgIH0KKwogICAgIHJjID0gbmd4X2h0dHBfcmVhZF9jbGllbnRfcmVxdWVzdF9ib2R5KHIsIG5neF9odHRwX3BlcmxfaGFuZGxlX3JlcXVlc3QpOwogCiAgICAgaWYgKHJjID49IE5HWF9IVFRQX1NQRUNJQUxfUkVTUE9OU0UpIHsKQEAgLTEwMTEsNyArMTAxNSw3IEBACiAKICAgICB9CiAKLSAgICB2LT5oYW5kbGVyID0gbmd4X2h0dHBfcGVybF92YXJpYWJsZTsKKyAgICB2LT5nZXRfaGFuZGxlciA9IG5neF9odHRwX3BlcmxfdmFyaWFibGU7CiAgICAgdi0+ZGF0YSA9ICh1aW50cHRyX3QpIHB2OwogCiAgICAgcmV0dXJuIE5HWF9DT05GX09LOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHAuYyBiL3NyYy9odHRwL25neF9odHRwLmMKaW5kZXggNWEyM2QxZC4uNWMxZTBhMCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHAuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cC5jCkBAIC0zNzMsNyArMzczLDcgQEAKICAgICBjbWNmLT5waGFzZXNbTkdYX0hUVFBfTE9HX1BIQVNFXS50eXBlID0gTkdYX09LOwogCiAKLSAgICBjbWNmLT5oZWFkZXJzX2luX2hhc2gubWF4X3NpemUgPSAxMDA7CisgICAgY21jZi0+aGVhZGVyc19pbl9oYXNoLm1heF9zaXplID0gMjAwOwogICAgIGNtY2YtPmhlYWRlcnNfaW5faGFzaC5idWNrZXRfbGltaXQgPSAxOwogICAgIGNtY2YtPmhlYWRlcnNfaW5faGFzaC5idWNrZXRfc2l6ZSA9IHNpemVvZihuZ3hfaHR0cF9oZWFkZXJfdCk7CiAgICAgY21jZi0+aGVhZGVyc19pbl9oYXNoLm5hbWUgPSAiaHR0cCBoZWFkZXJzX2luIjsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IGI4OTdmZTEuLjRhOWMyMDggMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtNzUzLDYgKzc1MywxMCBAQAogICAgIGlmIChjbGNmLT5jbGllbnRfYm9keV9pbl9maWxlX29ubHkpIHsKICAgICAgICAgci0+cmVxdWVzdF9ib2R5X2luX2ZpbGVfb25seSA9IDE7CiAgICAgICAgIHItPnJlcXVlc3RfYm9keV9pbl9wZXJzaXN0ZW50X2ZpbGUgPSAxOworICAgICAgICByLT5yZXF1ZXN0X2JvZHlfZmlsZV9sb2dfbGV2ZWwgPSBOR1hfTE9HX05PVElDRTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIHItPnJlcXVlc3RfYm9keV9maWxlX2xvZ19sZXZlbCA9IE5HWF9MT0dfV0FSTjsKICAgICB9CiAKICAgICBpZiAoci0+a2VlcGFsaXZlICYmIGNsY2YtPmtlZXBhbGl2ZV90aW1lb3V0ID09IDApIHsKQEAgLTE2OTIsOSArMTY5NiwxOCBAQAogc3RhdGljIGNoYXIgKgogbmd4X2h0dHBfY29yZV90eXBlcyhuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQogeworICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAqbGNmID0gY29uZjsKKwogICAgIGNoYXIgICAgICAgICpydjsKICAgICBuZ3hfY29uZl90ICAgc2F2ZTsKIAorICAgIGlmIChsY2YtPnR5cGVzID09IE5VTEwpIHsKKyAgICAgICAgbGNmLT50eXBlcyA9IG5neF9hcnJheV9jcmVhdGUoY2YtPnBvb2wsIDY0LCBzaXplb2Yobmd4X2hhc2hfa2V5X3QpKTsKKyAgICAgICAgaWYgKGxjZi0+dHlwZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICB9CisgICAgfQorCiAgICAgc2F2ZSA9ICpjZjsKICAgICBjZi0+aGFuZGxlciA9IG5neF9odHRwX2NvcmVfdHlwZTsKICAgICBjZi0+aGFuZGxlcl9jb25mID0gY29uZjsKQEAgLTE3MTYsMTMgKzE3MjksNiBAQAogICAgIG5neF91aW50X3QgICAgICAgaSwgbjsKICAgICBuZ3hfaGFzaF9rZXlfdCAgKnR5cGU7CiAKLSAgICBpZiAobGNmLT50eXBlcyA9PSBOVUxMKSB7Ci0gICAgICAgIGxjZi0+dHlwZXMgPSBuZ3hfYXJyYXlfY3JlYXRlKGNmLT5wb29sLCA2NCwgc2l6ZW9mKG5neF9oYXNoX2tleV90KSk7Ci0gICAgICAgIGlmIChsY2YtPnR5cGVzID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLQogICAgIGNvbnRlbnRfdHlwZSA9IG5neF9wYWxsb2MoY2YtPnBvb2wsIHNpemVvZihuZ3hfc3RyX3QpKTsKICAgICBpZiAoY29udGVudF90eXBlID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfaGVhZGVyX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXJfbW9kdWxlLmMKaW5kZXggNjliNjI0Yi4uNzdhOTIyNCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfaGVhZGVyX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyX21vZHVsZS5jCkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICogYmVjYXVzZSB3ZSB0cmVhdCBzdWNoIHJlcXVlc3RzIGFzIHRoZSBIVFRQLzAuOQogICAgICAgICAgICAgICAgICAgICAgICAqIHJlcXVlc3RzIGFuZCBzZW5kIG9ubHkgYSBib2R5IHdpdGhvdXQgYSBoZWFkZXIKICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBuZ3hfbnVsbF9zdHJpbmcsICAvKiAiNDE1IFVuc3VwcG9ydGVkIE1lZGlhIFR5cGUiICovCisgICAgbmd4X3N0cmluZygiNDE1IFVuc3VwcG9ydGVkIE1lZGlhIFR5cGUiKSwKICAgICBuZ3hfc3RyaW5nKCI0MTYgUmVxdWVzdGVkIFJhbmdlIE5vdCBTYXRpc2ZpYWJsZSIpLAogCiAgICAgLyogbmd4X251bGxfc3RyaW5nLCAqLyAgLyogIjQxNyBFeHBlY3RhdGlvbiBGYWlsZWQiICovCkBAIC0xMTEsMTEgKzExMSwxMSBAQAogICAgIG5neF9zdHJpbmcoIjUwMSBNZXRob2QgTm90IEltcGxlbWVudGVkIiksCiAgICAgbmd4X3N0cmluZygiNTAyIEJhZCBHYXRld2F5IiksCiAgICAgbmd4X3N0cmluZygiNTAzIFNlcnZpY2UgVGVtcG9yYXJpbHkgVW5hdmFpbGFibGUiKSwKLSAgICBuZ3hfc3RyaW5nKCI1MDQgR2F0ZXdheSBUaW1lLW91dCIpCisgICAgbmd4X3N0cmluZygiNTA0IEdhdGV3YXkgVGltZS1vdXQiKSwKIAotICAgIC8qIG5neF9udWxsX3N0cmluZywgKi8gIC8qICI1MDUgSFRUUCBWZXJzaW9uIE5vdCBTdXBwb3J0ZWQiICovCi0gICAgLyogbmd4X251bGxfc3RyaW5nLCAqLyAgLyogIjUwNiBWYXJpYW50IEFsc28gTmVnb3RpYXRlcyIgKi8KLSAgICAvKiBuZ3hfbnVsbF9zdHJpbmcsICovICAvKiAiNTA3IEluc3VmZmljaWVudCBTdG9yYWdlIiAqLworICAgIG5neF9udWxsX3N0cmluZywgICAgICAgIC8qICI1MDUgSFRUUCBWZXJzaW9uIE5vdCBTdXBwb3J0ZWQiICovCisgICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgLyogIjUwNiBWYXJpYW50IEFsc28gTmVnb3RpYXRlcyIgKi8KKyAgICBuZ3hfc3RyaW5nKCI1MDcgSW5zdWZmaWNpZW50IFN0b3JhZ2UiKSwKICAgICAvKiBuZ3hfbnVsbF9zdHJpbmcsICovICAvKiAiNTA4IHVudXNlZCIgKi8KICAgICAvKiBuZ3hfbnVsbF9zdHJpbmcsICovICAvKiAiNTA5IHVudXNlZCIgKi8KICAgICAvKiBuZ3hfbnVsbF9zdHJpbmcsICovICAvKiAiNTEwIE5vdCBFeHRlbmRlZCIgKi8KZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3BhcnNlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9wYXJzZS5jCmluZGV4IGM4NDMxNzcuLjExYzE2MzIgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3BhcnNlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcGFyc2UuYwpAQCAtODksNiArODksMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHItPm1ldGhvZCA9IE5HWF9IVFRQX0hFQUQ7CiAgICAgICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocCAtIG0gPT0gNSkgeworCisgICAgICAgICAgICAgICAgICAgIGlmIChtWzBdID09ICdNJyAmJiBtWzFdID09ICdLJworICAgICAgICAgICAgICAgICAgICAgICAgJiYgbVsyXSA9PSAnQycgJiYgbVszXSA9PSAnTycgJiYgbVs0XSA9PSAnTCcpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHItPm1ldGhvZCA9IE5HWF9IVFRQX01LQ09MOworICAgICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAgLSBtID09IDYpIHsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobVswXSA9PSAnRCcgJiYgbVsxXSA9PSAnRScgJiYgbVsyXSA9PSAnTCcKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwppbmRleCBmNDdmZGUzLi42YmJhZjQ0IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCkBAIC0xMzMsNiArMTMzLDE0IEBACiAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Byb2Nlc3NfaGVhZGVyX2xpbmUgfSwKICNlbmRpZgogCisjaWYgKE5HWF9IVFRQX0RBVikKKyAgICB7IG5neF9zdHJpbmcoIkRlcHRoIiksIG9mZnNldG9mKG5neF9odHRwX2hlYWRlcnNfaW5fdCwgZGVwdGgpLAorICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9wcm9jZXNzX2hlYWRlcl9saW5lIH0sCisKKyAgICB7IG5neF9zdHJpbmcoIkRlc3RpbmF0aW9uIiksIG9mZnNldG9mKG5neF9odHRwX2hlYWRlcnNfaW5fdCwgZGVzdGluYXRpb24pLAorICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9wcm9jZXNzX2hlYWRlcl9saW5lIH0sCisjZW5kaWYKKwogICAgIHsgbmd4X3N0cmluZygiQ29va2llIiksIDAsIG5neF9odHRwX3Byb2Nlc3NfY29va2llIH0sCiAKICAgICB7IG5neF9udWxsX3N0cmluZywgMCwgTlVMTCB9CkBAIC0xNDAzLDcgKzE0MTEsMTAgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyYyA+PSBOR1hfSFRUUF9TUEVDSUFMX1JFU1BPTlNFIHx8IHJjID09IE5HWF9IVFRQX05PX0NPTlRFTlQpIHsKKyAgICBpZiAocmMgPj0gTkdYX0hUVFBfU1BFQ0lBTF9SRVNQT05TRQorICAgICAgICB8fCByYyA9PSBOR1hfSFRUUF9DUkVBVEVECisgICAgICAgIHx8IHJjID09IE5HWF9IVFRQX05PX0NPTlRFTlQpCisgICAgewogCiAgICAgICAgIGlmIChyYyA9PSBOR1hfSFRUUF9DTE9TRSkgewogICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfcmVxdWVzdChyLCByYyk7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmggYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKaW5kZXggMTgyZTU3ZC4uY2M0MGY0NCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaApAQCAtMjUsNiArMjUsNyBAQAogI2RlZmluZSBOR1hfSFRUUF9QT1NUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAogI2RlZmluZSBOR1hfSFRUUF9QVVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAogI2RlZmluZSBOR1hfSFRUUF9ERUxFVEUgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBOR1hfSFRUUF9NS0NPTCAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAogCiAjZGVmaW5lIE5HWF9IVFRQX0NPTk5FQ1RJT05fQ0xPU0UgICAgICAgICAgMQogI2RlZmluZSBOR1hfSFRUUF9DT05ORUNUSU9OX0tFRVBfQUxJVkUgICAgIDIKQEAgLTYxLDkgKzYyLDExIEBACiAjZGVmaW5lIE5HWF9IVFRQX05PVF9GT1VORCAgICAgICAgICAgICAgICAgNDA0CiAjZGVmaW5lIE5HWF9IVFRQX05PVF9BTExPV0VEICAgICAgICAgICAgICAgNDA1CiAjZGVmaW5lIE5HWF9IVFRQX1JFUVVFU1RfVElNRV9PVVQgICAgICAgICAgNDA4CisjZGVmaW5lIE5HWF9IVFRQX0NPTkZMSUNUICAgICAgICAgICAgICAgICAgNDA5CiAjZGVmaW5lIE5HWF9IVFRQX0xFTkdUSF9SRVFVSVJFRCAgICAgICAgICAgNDExCiAjZGVmaW5lIE5HWF9IVFRQX1JFUVVFU1RfRU5USVRZX1RPT19MQVJHRSAgNDEzCiAjZGVmaW5lIE5HWF9IVFRQX1JFUVVFU1RfVVJJX1RPT19MQVJHRSAgICAgNDE0CisjZGVmaW5lIE5HWF9IVFRQX1VOU1VQUE9SVEVEX01FRElBX1RZUEUgICAgNDE1CiAjZGVmaW5lIE5HWF9IVFRQX1JBTkdFX05PVF9TQVRJU0ZJQUJMRSAgICAgNDE2CiAKIApAQCAtOTYsNiArOTksNyBAQAogI2RlZmluZSBOR1hfSFRUUF9CQURfR0FURVdBWSAgICAgICAgICAgICAgIDUwMgogI2RlZmluZSBOR1hfSFRUUF9TRVJWSUNFX1VOQVZBSUxBQkxFICAgICAgIDUwMwogI2RlZmluZSBOR1hfSFRUUF9HQVRFV0FZX1RJTUVfT1VUICAgICAgICAgIDUwNAorI2RlZmluZSBOR1hfSFRUUF9JTlNVRkZJQ0lFTlRfU1RPUkFHRSAgICAgIDUwNwogCiAKICNkZWZpbmUgTkdYX0hUVFBfTE9XTEVWRUxfQlVGRkVSRUQgICAgICAgICAweDAwMDAwMGYwCkBAIC0xNzAsNiArMTc0LDExIEBACiAgICAgbmd4X3RhYmxlX2VsdF90ICAgICAgICAgICAgICAgICAgKmFjY2VwdF9sYW5ndWFnZTsKICNlbmRpZgogCisjaWYgKE5HWF9IVFRQX0RBVikKKyAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICAgICAqZGVwdGg7CisgICAgbmd4X3RhYmxlX2VsdF90ICAgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uOworI2VuZGlmCisKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcjsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dkOwogCkBAIC0zODQsNiArMzkzLDcgQEAKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9ib2R5X2luX3BlcnNpc3RlbnRfZmlsZToxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2JvZHlfZGVsZXRlX2luY29tcGxldGVfZmlsZToxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2JvZHlfZmlsZV9ncm91cF9hY2Nlc3M6MTsKKyAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9ib2R5X2ZpbGVfbG9nX2xldmVsOjM7CiAKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgZmFzdF9zdWJyZXF1ZXN0OjE7CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3RfYm9keS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMKaW5kZXggY2RhN2Y3ZC4uNjA1YzhhZCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMKQEAgLTM1NCw2ICszNTQsNyBAQAogICAgICAgICB0Zi0+cGF0aCA9IGNsY2YtPmNsaWVudF9ib2R5X3RlbXBfcGF0aDsKICAgICAgICAgdGYtPnBvb2wgPSByLT5wb29sOwogICAgICAgICB0Zi0+d2FybiA9ICJhIGNsaWVudCByZXF1ZXN0IGJvZHkgaXMgYnVmZmVyZWQgdG8gYSB0ZW1wb3JhcnkgZmlsZSI7CisgICAgICAgIHRmLT5sb2dfbGV2ZWwgPSByLT5yZXF1ZXN0X2JvZHlfZmlsZV9sb2dfbGV2ZWw7CiAgICAgICAgIHRmLT5wZXJzaXN0ZW50ID0gci0+cmVxdWVzdF9ib2R5X2luX3BlcnNpc3RlbnRfZmlsZTsKIAogICAgICAgICBpZiAoci0+cmVxdWVzdF9ib2R5X2ZpbGVfZ3JvdXBfYWNjZXNzKSB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYyBiL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5jCmluZGV4IGFiNmYzYTAuLjVhNTI0NTYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5jCkBAIC0xMDc0LDYgKzEwNzQsMjQgQEAKIAogCiB2b2lkCituZ3hfaHR0cF9zY3JpcHRfdmFyX3NldF9oYW5kbGVyX2NvZGUobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICplKQoreworICAgIG5neF9odHRwX3NjcmlwdF92YXJfaGFuZGxlcl9jb2RlX3QgICpjb2RlOworCisgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCBlLT5yZXF1ZXN0LT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgImh0dHAgc2NyaXB0IHNldCB2YXIgaGFuZGxlciIpOworCisgICAgY29kZSA9IChuZ3hfaHR0cF9zY3JpcHRfdmFyX2hhbmRsZXJfY29kZV90ICopIGUtPmlwOworCisgICAgZS0+aXAgKz0gc2l6ZW9mKG5neF9odHRwX3NjcmlwdF92YXJfaGFuZGxlcl9jb2RlX3QpOworCisgICAgZS0+c3AtLTsKKworICAgIGNvZGUtPmhhbmRsZXIoZS0+cmVxdWVzdCwgZS0+c3AsIGNvZGUtPmRhdGEpOworfQorCisKK3ZvaWQKIG5neF9odHRwX3NjcmlwdF92YXJfY29kZShuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgKmUpCiB7CiAgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAgICp2YWx1ZTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmgKaW5kZXggYWJiYmY0My4uM2VmNGQ0MiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmgKQEAgLTc2LDYgKzc2LDEzIEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgeworICAgIG5neF9odHRwX3NjcmlwdF9jb2RlX3B0ICAgICAgICAgY29kZTsKKyAgICBuZ3hfaHR0cF9zZXRfdmFyaWFibGVfcHQgICAgICAgIGhhbmRsZXI7CisgICAgdWludHB0cl90ICAgICAgICAgICAgICAgICAgICAgICBkYXRhOworfSBuZ3hfaHR0cF9zY3JpcHRfdmFyX2hhbmRsZXJfY29kZV90OworCisKK3R5cGVkZWYgc3RydWN0IHsKICAgICBuZ3hfaHR0cF9zY3JpcHRfY29kZV9wdCAgICAgICAgICBjb2RlOwogICAgIHVpbnRwdHJfdCAgICAgICAgICAgICAgICAgICAgICAgIG47CiB9IG5neF9odHRwX3NjcmlwdF9jb3B5X2NhcHR1cmVfY29kZV90OwpAQCAtMTkzLDYgKzIwMCw3IEBACiB2b2lkIG5neF9odHRwX3NjcmlwdF9jb21wbGV4X3ZhbHVlX2NvZGUobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICplKTsKIHZvaWQgbmd4X2h0dHBfc2NyaXB0X3ZhbHVlX2NvZGUobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICplKTsKIHZvaWQgbmd4X2h0dHBfc2NyaXB0X3NldF92YXJfY29kZShuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgKmUpOwordm9pZCBuZ3hfaHR0cF9zY3JpcHRfdmFyX3NldF9oYW5kbGVyX2NvZGUobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICplKTsKIHZvaWQgbmd4X2h0dHBfc2NyaXB0X3Zhcl9jb2RlKG5neF9odHRwX3NjcmlwdF9lbmdpbmVfdCAqZSk7CiB2b2lkIG5neF9odHRwX3NjcmlwdF9ub3BfY29kZShuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgKmUpOwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMKaW5kZXggZjIyMTI3Ni4uZDEwNzJhOSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYwpAQCAtMTA3LDYgKzEwNywxNCBAQAogOwogCiAKK3N0YXRpYyBjaGFyIGVycm9yXzQwOV9wYWdlW10gPQorIjxodG1sPiIgQ1JMRgorIjxoZWFkPjx0aXRsZT40MDkgQ29uZmxpY3Q8L3RpdGxlPjwvaGVhZD4iIENSTEYKKyI8Ym9keSBiZ2NvbG9yPVwid2hpdGVcIj4iIENSTEYKKyI8Y2VudGVyPjxoMT40MDkgQ29uZmxpY3Q8L2gxPjwvY2VudGVyPiIgQ1JMRgorOworCisKIHN0YXRpYyBjaGFyIGVycm9yXzQxMF9wYWdlW10gPQogIjxodG1sPiIgQ1JMRgogIjxoZWFkPjx0aXRsZT40MTAgR29uZTwvdGl0bGU+PC9oZWFkPiIgQ1JMRgpAQCAtMTM5LDYgKzE0NywxNCBAQAogOwogCiAKK3N0YXRpYyBjaGFyIGVycm9yXzQxNV9wYWdlW10gPQorIjxodG1sPiIgQ1JMRgorIjxoZWFkPjx0aXRsZT40MTUgVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZTwvdGl0bGU+PC9oZWFkPiIgQ1JMRgorIjxib2R5IGJnY29sb3I9XCJ3aGl0ZVwiPiIgQ1JMRgorIjxjZW50ZXI+PGgxPjQxNSBVbnN1cHBvcnRlZCBNZWRpYSBUeXBlPC9oMT48L2NlbnRlcj4iIENSTEYKKzsKKworCiBzdGF0aWMgY2hhciBlcnJvcl80MTZfcGFnZVtdID0KICI8aHRtbD4iIENSTEYKICI8aGVhZD48dGl0bGU+NDE2IFJlcXVlc3RlZCBSYW5nZSBOb3QgU2F0aXNmaWFibGU8L3RpdGxlPjwvaGVhZD4iIENSTEYKQEAgLTE5Nyw2ICsyMTMsMTQgQEAKIDsKIAogCitzdGF0aWMgY2hhciBlcnJvcl81MDdfcGFnZVtdID0KKyI8aHRtbD4iIENSTEYKKyI8aGVhZD48dGl0bGU+NTA3IEluc3VmZmljaWVudCBTdG9yYWdlPC90aXRsZT48L2hlYWQ+IiBDUkxGCisiPGJvZHkgYmdjb2xvcj1cIndoaXRlXCI+IiBDUkxGCisiPGNlbnRlcj48aDE+NTA3IEluc3VmZmljaWVudCBTdG9yYWdlPC9oMT48L2NlbnRlcj4iIENSTEYKKzsKKworCiBzdGF0aWMgbmd4X3N0cl90IGVycm9yX3BhZ2VzW10gPSB7CiAKICAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgIC8qIDIwMSwgMjA0ICovCkBAIC0yMTksMTMgKzI0MywxMyBAQAogICAgIG5neF9zdHJpbmcoZXJyb3JfNDA2X3BhZ2UpLAogICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgLyogNDA3ICovCiAgICAgbmd4X3N0cmluZyhlcnJvcl80MDhfcGFnZSksCi0gICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAvKiA0MDkgKi8KKyAgICBuZ3hfc3RyaW5nKGVycm9yXzQwOV9wYWdlKSwKICAgICBuZ3hfc3RyaW5nKGVycm9yXzQxMF9wYWdlKSwKICAgICBuZ3hfc3RyaW5nKGVycm9yXzQxMV9wYWdlKSwKICAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgIC8qIDQxMiAqLwogICAgIG5neF9zdHJpbmcoZXJyb3JfNDEzX3BhZ2UpLAogICAgIG5neF9zdHJpbmcoZXJyb3JfNDE0X3BhZ2UpLAotICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgLyogNDE1ICovCisgICAgbmd4X3N0cmluZyhlcnJvcl80MTVfcGFnZSksCiAgICAgbmd4X3N0cmluZyhlcnJvcl80MTZfcGFnZSksCiAKICNkZWZpbmUgTkdYX0hUVFBfTEVWRUxfNDAwICAxNwpAQCAtMjM4LDcgKzI2MiwxMCBAQAogICAgIG5neF9zdHJpbmcoZXJyb3JfNTAxX3BhZ2UpLAogICAgIG5neF9zdHJpbmcoZXJyb3JfNTAyX3BhZ2UpLAogICAgIG5neF9zdHJpbmcoZXJyb3JfNTAzX3BhZ2UpLAotICAgIG5neF9zdHJpbmcoZXJyb3JfNTA0X3BhZ2UpCisgICAgbmd4X3N0cmluZyhlcnJvcl81MDRfcGFnZSksCisgICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAvKiA1MDUgKi8KKyAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgIC8qIDUwNiAqLworICAgIG5neF9zdHJpbmcoZXJyb3JfNTA3X3BhZ2UpCiB9OwogCiAKQEAgLTMyMyw2ICszNTAsNyBAQAogICAgIGlmIChlcnJvciA9PSBOR1hfSFRUUF9DUkVBVEVEKSB7CiAgICAgICAgIC8qIDIwMSAqLwogICAgICAgICBlcnIgPSAwOworICAgICAgICByLT5oZWFkZXJfb25seSA9IDE7CiAKICAgICB9IGVsc2UgaWYgKGVycm9yID09IE5HWF9IVFRQX05PX0NPTlRFTlQpIHsKICAgICAgICAgLyogMjA0ICovCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwppbmRleCBiZmFlZDcwLi45OTcwMzhjIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKQEAgLTI0OSwxMyArMjQ5LDEzIEBACiAKIHN0YXRpYyBuZ3hfaHR0cF92YXJpYWJsZV90ICBuZ3hfaHR0cF91cHN0cmVhbV92YXJzW10gPSB7CiAKLSAgICB7IG5neF9zdHJpbmcoInVwc3RyZWFtX3N0YXR1cyIpLAorICAgIHsgbmd4X3N0cmluZygidXBzdHJlYW1fc3RhdHVzIiksIE5VTEwsCiAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9zdGF0dXNfdmFyaWFibGUsIDAsIE5HWF9IVFRQX1ZBUl9OT0hBU0gsIDAgfSwKIAotICAgIHsgbmd4X3N0cmluZygidXBzdHJlYW1fcmVzcG9uc2VfdGltZSIpLAorICAgIHsgbmd4X3N0cmluZygidXBzdHJlYW1fcmVzcG9uc2VfdGltZSIpLCBOVUxMLAogICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fcmVzcG9uc2VfdGltZV92YXJpYWJsZSwgMCwgTkdYX0hUVFBfVkFSX05PSEFTSCwgMCB9LAogCi0gICAgeyBuZ3hfbnVsbF9zdHJpbmcsIE5VTEwsIDAsIDAsIDAgfQorICAgIHsgbmd4X251bGxfc3RyaW5nLCBOVUxMLCBOVUxMLCAwLCAwLCAwIH0KIH07CiAKIApAQCAtMjM5OSw3ICsyMzk5LDcgQEAKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KIAotICAgICAgICB2YXItPmhhbmRsZXIgPSB2LT5oYW5kbGVyOworICAgICAgICB2YXItPmdldF9oYW5kbGVyID0gdi0+Z2V0X2hhbmRsZXI7CiAgICAgICAgIHZhci0+ZGF0YSA9IHYtPmRhdGE7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYyBiL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCmluZGV4IDlkMzAwZTYuLjY5YmZlM2EgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCkBAIC0xMiw2ICsxMiw4IEBACiAKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCiAgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwgdWludHB0cl90IGRhdGEpOworc3RhdGljIHZvaWQgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdF9zZXRfc2l6ZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwgdWludHB0cl90IGRhdGEpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF92YXJpYWJsZV9oZWFkZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfdmFyaWFibGVfaGVhZGVycyhuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCkBAIC01OSw4OCArNjEsOTcgQEAKIAogc3RhdGljIG5neF9odHRwX3ZhcmlhYmxlX3QgIG5neF9odHRwX2NvcmVfdmFyaWFibGVzW10gPSB7CiAKLSAgICB7IG5neF9zdHJpbmcoImh0dHBfaG9zdCIpLCBuZ3hfaHR0cF92YXJpYWJsZV9oZWFkZXIsCisgICAgeyBuZ3hfc3RyaW5nKCJodHRwX2hvc3QiKSwgTlVMTCwgbmd4X2h0dHBfdmFyaWFibGVfaGVhZGVyLAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcmVxdWVzdF90LCBoZWFkZXJzX2luLmhvc3QpLCAwLCAwIH0sCiAKLSAgICB7IG5neF9zdHJpbmcoImh0dHBfdXNlcl9hZ2VudCIpLCBuZ3hfaHR0cF92YXJpYWJsZV9oZWFkZXIsCisgICAgeyBuZ3hfc3RyaW5nKCJodHRwX3VzZXJfYWdlbnQiKSwgTlVMTCwgbmd4X2h0dHBfdmFyaWFibGVfaGVhZGVyLAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcmVxdWVzdF90LCBoZWFkZXJzX2luLnVzZXJfYWdlbnQpLCAwLCAwIH0sCiAKLSAgICB7IG5neF9zdHJpbmcoImh0dHBfcmVmZXJlciIpLCBuZ3hfaHR0cF92YXJpYWJsZV9oZWFkZXIsCisgICAgeyBuZ3hfc3RyaW5nKCJodHRwX3JlZmVyZXIiKSwgTlVMTCwgbmd4X2h0dHBfdmFyaWFibGVfaGVhZGVyLAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcmVxdWVzdF90LCBoZWFkZXJzX2luLnJlZmVyZXIpLCAwLCAwIH0sCiAKICNpZiAoTkdYX0hUVFBfR1pJUCkKLSAgICB7IG5neF9zdHJpbmcoImh0dHBfdmlhIiksIG5neF9odHRwX3ZhcmlhYmxlX2hlYWRlciwKKyAgICB7IG5neF9zdHJpbmcoImh0dHBfdmlhIiksIE5VTEwsIG5neF9odHRwX3ZhcmlhYmxlX2hlYWRlciwKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3JlcXVlc3RfdCwgaGVhZGVyc19pbi52aWEpLCAwLCAwIH0sCiAjZW5kaWYKIAogI2lmIChOR1hfSFRUUF9QUk9YWSkKLSAgICB7IG5neF9zdHJpbmcoImh0dHBfeF9mb3J3YXJkZWRfZm9yIiksIG5neF9odHRwX3ZhcmlhYmxlX2hlYWRlciwKKyAgICB7IG5neF9zdHJpbmcoImh0dHBfeF9mb3J3YXJkZWRfZm9yIiksIE5VTEwsIG5neF9odHRwX3ZhcmlhYmxlX2hlYWRlciwKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3JlcXVlc3RfdCwgaGVhZGVyc19pbi54X2ZvcndhcmRlZF9mb3IpLCAwLCAwIH0sCiAjZW5kaWYKIAotICAgIHsgbmd4X3N0cmluZygiaHR0cF9jb29raWUiKSwgbmd4X2h0dHBfdmFyaWFibGVfaGVhZGVycywKKyAgICB7IG5neF9zdHJpbmcoImh0dHBfY29va2llIiksIE5VTEwsIG5neF9odHRwX3ZhcmlhYmxlX2hlYWRlcnMsCiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9yZXF1ZXN0X3QsIGhlYWRlcnNfaW4uY29va2llcyksIDAsIDAgfSwKIAotICAgIHsgbmd4X3N0cmluZygiY29udGVudF9sZW5ndGgiKSwgbmd4X2h0dHBfdmFyaWFibGVfaGVhZGVyLAorICAgIHsgbmd4X3N0cmluZygiY29udGVudF9sZW5ndGgiKSwgTlVMTCwgbmd4X2h0dHBfdmFyaWFibGVfaGVhZGVyLAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcmVxdWVzdF90LCBoZWFkZXJzX2luLmNvbnRlbnRfbGVuZ3RoKSwgMCwgMCB9LAogCi0gICAgeyBuZ3hfc3RyaW5nKCJjb250ZW50X3R5cGUiKSwgbmd4X2h0dHBfdmFyaWFibGVfaGVhZGVyLAorICAgIHsgbmd4X3N0cmluZygiY29udGVudF90eXBlIiksIE5VTEwsIG5neF9odHRwX3ZhcmlhYmxlX2hlYWRlciwKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3JlcXVlc3RfdCwgaGVhZGVyc19pbi5jb250ZW50X3R5cGUpLCAwLCAwIH0sCiAKLSAgICB7IG5neF9zdHJpbmcoImhvc3QiKSwgbmd4X2h0dHBfdmFyaWFibGVfaG9zdCwgMCwgMCwgMCB9LAorICAgIHsgbmd4X3N0cmluZygiaG9zdCIpLCBOVUxMLCBuZ3hfaHR0cF92YXJpYWJsZV9ob3N0LCAwLCAwLCAwIH0sCiAKLSAgICB7IG5neF9zdHJpbmcoInJlbW90ZV9hZGRyIiksIG5neF9odHRwX3ZhcmlhYmxlX3JlbW90ZV9hZGRyLCAwLCAwLCAwIH0sCisgICAgeyBuZ3hfc3RyaW5nKCJyZW1vdGVfYWRkciIpLCBOVUxMLCBuZ3hfaHR0cF92YXJpYWJsZV9yZW1vdGVfYWRkciwgMCwgMCwgMCB9LAogCi0gICAgeyBuZ3hfc3RyaW5nKCJyZW1vdGVfcG9ydCIpLCBuZ3hfaHR0cF92YXJpYWJsZV9yZW1vdGVfcG9ydCwgMCwgMCwgMCB9LAorICAgIHsgbmd4X3N0cmluZygicmVtb3RlX3BvcnQiKSwgTlVMTCwgbmd4X2h0dHBfdmFyaWFibGVfcmVtb3RlX3BvcnQsIDAsIDAsIDAgfSwKIAotICAgIHsgbmd4X3N0cmluZygic2VydmVyX2FkZHIiKSwgbmd4X2h0dHBfdmFyaWFibGVfc2VydmVyX2FkZHIsIDAsIDAsIDAgfSwKKyAgICB7IG5neF9zdHJpbmcoInNlcnZlcl9hZGRyIiksIE5VTEwsIG5neF9odHRwX3ZhcmlhYmxlX3NlcnZlcl9hZGRyLCAwLCAwLCAwIH0sCiAKLSAgICB7IG5neF9zdHJpbmcoInNlcnZlcl9wb3J0IiksIG5neF9odHRwX3ZhcmlhYmxlX3NlcnZlcl9wb3J0LCAwLCAwLCAwIH0sCisgICAgeyBuZ3hfc3RyaW5nKCJzZXJ2ZXJfcG9ydCIpLCBOVUxMLCBuZ3hfaHR0cF92YXJpYWJsZV9zZXJ2ZXJfcG9ydCwgMCwgMCwgMCB9LAogCi0gICAgeyBuZ3hfc3RyaW5nKCJzZXJ2ZXJfcHJvdG9jb2wiKSwgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdCwKKyAgICB7IG5neF9zdHJpbmcoInNlcnZlcl9wcm90b2NvbCIpLCBOVUxMLCBuZ3hfaHR0cF92YXJpYWJsZV9yZXF1ZXN0LAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcmVxdWVzdF90LCBodHRwX3Byb3RvY29sKSwgMCwgMCB9LAogCi0gICAgeyBuZ3hfc3RyaW5nKCJyZXF1ZXN0X3VyaSIpLCBuZ3hfaHR0cF92YXJpYWJsZV9yZXF1ZXN0LAorICAgIHsgbmd4X3N0cmluZygicmVxdWVzdF91cmkiKSwgTlVMTCwgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdCwKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3JlcXVlc3RfdCwgdW5wYXJzZWRfdXJpKSwgMCwgMCB9LAogCi0gICAgeyBuZ3hfc3RyaW5nKCJ1cmkiKSwgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdCwKKyAgICB7IG5neF9zdHJpbmcoInVyaSIpLCBOVUxMLCBuZ3hfaHR0cF92YXJpYWJsZV9yZXF1ZXN0LAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcmVxdWVzdF90LCB1cmkpLAogICAgICAgTkdYX0hUVFBfVkFSX05PQ0FDSEFCTEUsIDAgfSwKIAotICAgIHsgbmd4X3N0cmluZygiZG9jdW1lbnRfdXJpIiksIG5neF9odHRwX3ZhcmlhYmxlX3JlcXVlc3QsCisgICAgeyBuZ3hfc3RyaW5nKCJkb2N1bWVudF91cmkiKSwgTlVMTCwgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdCwKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3JlcXVlc3RfdCwgdXJpKSwKICAgICAgIE5HWF9IVFRQX1ZBUl9OT0NBQ0hBQkxFLCAwIH0sCiAKLSAgICB7IG5neF9zdHJpbmcoInJlcXVlc3QiKSwgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdCwKKyAgICB7IG5neF9zdHJpbmcoInJlcXVlc3QiKSwgTlVMTCwgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdCwKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3JlcXVlc3RfdCwgcmVxdWVzdF9saW5lKSwgMCwgMCB9LAogCi0gICAgeyBuZ3hfc3RyaW5nKCJkb2N1bWVudF9yb290IiksIG5neF9odHRwX3ZhcmlhYmxlX2RvY3VtZW50X3Jvb3QsIDAsIDAsIDAgfSwKKyAgICB7IG5neF9zdHJpbmcoImRvY3VtZW50X3Jvb3QiKSwgTlVMTCwKKyAgICAgIG5neF9odHRwX3ZhcmlhYmxlX2RvY3VtZW50X3Jvb3QsIDAsIDAsIDAgfSwKIAotICAgIHsgbmd4X3N0cmluZygicXVlcnlfc3RyaW5nIiksIG5neF9odHRwX3ZhcmlhYmxlX3JlcXVlc3QsCisgICAgeyBuZ3hfc3RyaW5nKCJxdWVyeV9zdHJpbmciKSwgTlVMTCwgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdCwKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3JlcXVlc3RfdCwgYXJncyksCiAgICAgICBOR1hfSFRUUF9WQVJfTk9DQUNIQUJMRSwgMCB9LAogCi0gICAgeyBuZ3hfc3RyaW5nKCJhcmdzIiksIG5neF9odHRwX3ZhcmlhYmxlX3JlcXVlc3QsCisgICAgeyBuZ3hfc3RyaW5nKCJhcmdzIiksIE5VTEwsIG5neF9odHRwX3ZhcmlhYmxlX3JlcXVlc3QsCiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9yZXF1ZXN0X3QsIGFyZ3MpLAogICAgICAgTkdYX0hUVFBfVkFSX05PQ0FDSEFCTEUsIDAgfSwKIAotICAgIHsgbmd4X3N0cmluZygicmVxdWVzdF9maWxlbmFtZSIpLCBuZ3hfaHR0cF92YXJpYWJsZV9yZXF1ZXN0X2ZpbGVuYW1lLCAwLAorICAgIHsgbmd4X3N0cmluZygicmVxdWVzdF9maWxlbmFtZSIpLCBOVUxMLAorICAgICAgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdF9maWxlbmFtZSwgMCwKICAgICAgIE5HWF9IVFRQX1ZBUl9OT0NBQ0hBQkxFLCAwIH0sCiAKLSAgICB7IG5neF9zdHJpbmcoInNlcnZlcl9uYW1lIiksIG5neF9odHRwX3ZhcmlhYmxlX3JlcXVlc3QsCisgICAgeyBuZ3hfc3RyaW5nKCJzZXJ2ZXJfbmFtZSIpLCBOVUxMLCBuZ3hfaHR0cF92YXJpYWJsZV9yZXF1ZXN0LAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcmVxdWVzdF90LCBzZXJ2ZXJfbmFtZSksIDAsIDAgfSwKIAotICAgIHsgbmd4X3N0cmluZygicmVxdWVzdF9tZXRob2QiKSwgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdF9tZXRob2QsIDAsIDAsIDAgfSwKKyAgICB7IG5neF9zdHJpbmcoInJlcXVlc3RfbWV0aG9kIiksIE5VTEwsCisgICAgICBuZ3hfaHR0cF92YXJpYWJsZV9yZXF1ZXN0X21ldGhvZCwgMCwgMCwgMCB9LAogCi0gICAgeyBuZ3hfc3RyaW5nKCJyZW1vdGVfdXNlciIpLCBuZ3hfaHR0cF92YXJpYWJsZV9yZW1vdGVfdXNlciwgMCwgMCwgMCB9LAorICAgIHsgbmd4X3N0cmluZygicmVtb3RlX3VzZXIiKSwgTlVMTCwgbmd4X2h0dHBfdmFyaWFibGVfcmVtb3RlX3VzZXIsIDAsIDAsIDAgfSwKIAotICAgIHsgbmd4X3N0cmluZygiYm9keV9ieXRlc19zZW50IiksIG5neF9odHRwX3ZhcmlhYmxlX2JvZHlfYnl0ZXNfc2VudCwKKyAgICB7IG5neF9zdHJpbmcoImJvZHlfYnl0ZXNfc2VudCIpLCBOVUxMLCBuZ3hfaHR0cF92YXJpYWJsZV9ib2R5X2J5dGVzX3NlbnQsCiAgICAgICAwLCAwLCAwIH0sCiAKLSAgICB7IG5neF9zdHJpbmcoInJlcXVlc3RfY29tcGxldGlvbiIpLCBuZ3hfaHR0cF92YXJpYWJsZV9yZXF1ZXN0X2NvbXBsZXRpb24sCisgICAgeyBuZ3hfc3RyaW5nKCJyZXF1ZXN0X2NvbXBsZXRpb24iKSwgTlVMTCwKKyAgICAgIG5neF9odHRwX3ZhcmlhYmxlX3JlcXVlc3RfY29tcGxldGlvbiwKICAgICAgIDAsIDAsIDAgfSwKIAotICAgIHsgbmd4X251bGxfc3RyaW5nLCBOVUxMLCAwLCAwLCAwIH0KKyAgICB7IG5neF9zdHJpbmcoImxpbWl0X3JhdGUiKSwgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdF9zZXRfc2l6ZSwKKyAgICAgIG5neF9odHRwX3ZhcmlhYmxlX3JlcXVlc3QsCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9yZXF1ZXN0X3QsIGxpbWl0X3JhdGUpLAorICAgICAgTkdYX0hUVFBfVkFSX0NIQU5HQUJMRXxOR1hfSFRUUF9WQVJfTk9DQUNIQUJMRSwgMCB9LAorCisgICAgeyBuZ3hfbnVsbF9zdHJpbmcsIE5VTEwsIE5VTEwsIDAsIDAsIDAgfQogfTsKIAogCkBAIC0xOTUsNyArMjA2LDggQEAKICAgICAgICAgdi0+bmFtZS5kYXRhW2ldID0gbmd4X3RvbG93ZXIobmFtZS0+ZGF0YVtpXSk7CiAgICAgfQogCi0gICAgdi0+aGFuZGxlciA9IE5VTEw7CisgICAgdi0+c2V0X2hhbmRsZXIgPSBOVUxMOworICAgIHYtPmdldF9oYW5kbGVyID0gTlVMTDsKICAgICB2LT5kYXRhID0gMDsKICAgICB2LT5mbGFncyA9IGZsYWdzOwogICAgIHYtPmluZGV4ID0gMDsKQEAgLTI2MSw3ICsyNzMsOCBAQAogICAgICAgICB2LT5uYW1lLmRhdGFbaV0gPSBuZ3hfdG9sb3dlcihuYW1lLT5kYXRhW2ldKTsKICAgICB9CiAKLSAgICB2LT5oYW5kbGVyID0gTlVMTDsKKyAgICB2LT5zZXRfaGFuZGxlciA9IE5VTEw7CisgICAgdi0+Z2V0X2hhbmRsZXIgPSBOVUxMOwogICAgIHYtPmRhdGEgPSAwOwogICAgIHYtPmZsYWdzID0gMDsKICAgICB2LT5pbmRleCA9IGNtY2YtPnZhcmlhYmxlcy5uZWx0cyAtIDE7CkBAIC0yOTAsOCArMzAzLDkgQEAKIAogICAgIHYgPSBjbWNmLT52YXJpYWJsZXMuZWx0czsKIAotICAgIGlmICh2W2luZGV4XS5oYW5kbGVyKHIsICZyLT52YXJpYWJsZXNbaW5kZXhdLCB2W2luZGV4XS5kYXRhKSA9PSBOR1hfT0spIHsKLQorICAgIGlmICh2W2luZGV4XS5nZXRfaGFuZGxlcihyLCAmci0+dmFyaWFibGVzW2luZGV4XSwgdltpbmRleF0uZGF0YSkKKyAgICAgICAgPT0gTkdYX09LKQorICAgIHsKICAgICAgICAgaWYgKHZbaW5kZXhdLmZsYWdzICYgTkdYX0hUVFBfVkFSX05PQ0FDSEFCTEUpIHsKICAgICAgICAgICAgIHItPnZhcmlhYmxlc1tpbmRleF0ubm9fY2FjaGFibGUgPSAxOwogICAgICAgICB9CkBAIC0zNDMsNyArMzU3LDcgQEAKIAogICAgICAgICAgICAgdnYgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIHNpemVvZihuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90KSk7CiAKLSAgICAgICAgICAgIGlmICh2diAmJiB2LT5oYW5kbGVyKHIsIHZ2LCB2LT5kYXRhKSA9PSBOR1hfT0spIHsKKyAgICAgICAgICAgIGlmICh2diAmJiB2LT5nZXRfaGFuZGxlcihyLCB2diwgdi0+ZGF0YSkgPT0gTkdYX09LKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZ2OwogICAgICAgICAgICAgfQogCkBAIC00MTIsNiArNDI2LDMyIEBACiB9CiAKIAorc3RhdGljIHZvaWQKK25neF9odHRwX3ZhcmlhYmxlX3JlcXVlc3Rfc2V0X3NpemUobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKQoreworICAgIHNzaXplX3QgICAgcywgKnNwOworICAgIG5neF9zdHJfdCAgdmFsOworCisgICAgdmFsLmxlbiA9IHYtPmxlbiAmIDB4ZmZmZjsKKyAgICB2YWwuZGF0YSA9IHYtPmRhdGE7CisKKyAgICBzID0gbmd4X3BhcnNlX3NpemUoJnZhbCk7CisKKyAgICBpZiAocyA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHNpemUgXCIlVlwiIiwgJnZhbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzcCA9IChzc2l6ZV90ICopICgoY2hhciAqKSByICsgZGF0YSk7CisKKyAgICAqc3AgPSBzOworCisgICAgcmV0dXJuOworfQorCisKIHN0YXRpYyBuZ3hfaW50X3QKIG5neF9odHRwX3ZhcmlhYmxlX2hlYWRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsCiAgICAgdWludHB0cl90IGRhdGEpCkBAIC05MDAsNyArOTQwLDcgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBhdiA9IGtleVtuXS52YWx1ZTsKIAotICAgICAgICAgICAgICAgIHZbaV0uaGFuZGxlciA9IGF2LT5oYW5kbGVyOworICAgICAgICAgICAgICAgIHZbaV0uZ2V0X2hhbmRsZXIgPSBhdi0+Z2V0X2hhbmRsZXI7CiAgICAgICAgICAgICAgICAgdltpXS5kYXRhID0gYXYtPmRhdGE7CiAKICAgICAgICAgICAgICAgICBhdi0+ZmxhZ3MgfD0gTkdYX0hUVFBfVkFSX0lOREVYRUQ7CkBAIC05MTMsMTQgKzk1MywxNCBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKG5neF9zdHJuY21wKHZbaV0ubmFtZS5kYXRhLCAiaHR0cF8iLCA1KSA9PSAwKSB7Ci0gICAgICAgICAgICB2W2ldLmhhbmRsZXIgPSBuZ3hfaHR0cF92YXJpYWJsZV91bmtub3duX2hlYWRlcl9pbjsKKyAgICAgICAgICAgIHZbaV0uZ2V0X2hhbmRsZXIgPSBuZ3hfaHR0cF92YXJpYWJsZV91bmtub3duX2hlYWRlcl9pbjsKICAgICAgICAgICAgIHZbaV0uZGF0YSA9ICh1aW50cHRyX3QpICZ2W2ldLm5hbWU7CiAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG5neF9zdHJuY21wKHZbaV0ubmFtZS5kYXRhLCAic2VudF9odHRwXyIsIDEwKSA9PSAwKSB7Ci0gICAgICAgICAgICB2W2ldLmhhbmRsZXIgPSBuZ3hfaHR0cF92YXJpYWJsZV91bmtub3duX2hlYWRlcl9vdXQ7CisgICAgICAgICAgICB2W2ldLmdldF9oYW5kbGVyID0gbmd4X2h0dHBfdmFyaWFibGVfdW5rbm93bl9oZWFkZXJfb3V0OwogICAgICAgICAgICAgdltpXS5kYXRhID0gKHVpbnRwdHJfdCkgJnZbaV0ubmFtZTsKIAogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuaCBiL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5oCmluZGV4IDIwNDNhMDUuLjhhMjRmZmIgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5oCkBAIC0yOCw2ICsyOCw4IEBACiAKIHR5cGVkZWYgc3RydWN0IG5neF9odHRwX3ZhcmlhYmxlX3MgIG5neF9odHRwX3ZhcmlhYmxlX3Q7CiAKK3R5cGVkZWYgdm9pZCAoKm5neF9odHRwX3NldF92YXJpYWJsZV9wdCkgKG5neF9odHRwX3JlcXVlc3RfdCAqciwKKyAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LCB1aW50cHRyX3QgZGF0YSk7CiB0eXBlZGVmIG5neF9pbnRfdCAoKm5neF9odHRwX2dldF92YXJpYWJsZV9wdCkgKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LCB1aW50cHRyX3QgZGF0YSk7CiAKQEAgLTQwLDcgKzQyLDggQEAKIAogc3RydWN0IG5neF9odHRwX3ZhcmlhYmxlX3MgewogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgIG5hbWU7ICAgLyogbXVzdCBiZSBmaXJzdCB0byBidWlsZCB0aGUgaGFzaCAqLwotICAgIG5neF9odHRwX2dldF92YXJpYWJsZV9wdCAgICAgIGhhbmRsZXI7CisgICAgbmd4X2h0dHBfc2V0X3ZhcmlhYmxlX3B0ICAgICAgc2V0X2hhbmRsZXI7CisgICAgbmd4X2h0dHBfZ2V0X3ZhcmlhYmxlX3B0ICAgICAgZ2V0X2hhbmRsZXI7CiAgICAgdWludHB0cl90ICAgICAgICAgICAgICAgICAgICAgZGF0YTsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICBmbGFnczsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICBpbmRleDsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9lcnJuby5oIGIvc3JjL29zL3VuaXgvbmd4X2Vycm5vLmgKaW5kZXggZGFlOTU3MS4uZTBjNGExOSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2Vycm5vLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2Vycm5vLmgKQEAgLTE0LDYgKzE0LDcgQEAKIAogdHlwZWRlZiBpbnQgICAgICAgICAgICAgICBuZ3hfZXJyX3Q7CiAKKyNkZWZpbmUgTkdYX0VQRVJNICAgICAgICAgRVBFUk0KICNkZWZpbmUgTkdYX0VOT0VOVCAgICAgICAgRU5PRU5UCiAjZGVmaW5lIE5HWF9FU1JDSCAgICAgICAgIEVTUkNICiAjZGVmaW5lIE5HWF9FSU5UUiAgICAgICAgIEVJTlRSCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X2Vycm5vLmggYi9zcmMvb3Mvd2luMzIvbmd4X2Vycm5vLmgKaW5kZXggOTc1NjU3Ni4uOWI2YzdiNSAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF9lcnJuby5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfZXJybm8uaApAQCAtMTksNiArMTksNyBAQAogI2RlZmluZSBuZ3hfc29ja2V0X2Vycm5vICAgICAgICAgICBXU0FHZXRMYXN0RXJyb3IoKQogI2RlZmluZSBuZ3hfc2V0X3NvY2tldF9lcnJubyhlcnIpICBXU0FTZXRMYXN0RXJyb3IoZXJyKQogCisjZGVmaW5lIE5HWF9FUEVSTSAgICAgICAgICAgICAgICAgIEVSUk9SX0FDQ0VTU19ERU5JRUQKICNkZWZpbmUgTkdYX0VOT0VOVCAgICAgICAgICAgICAgICAgRVJST1JfRklMRV9OT1RfRk9VTkQKICNkZWZpbmUgTkdYX0VBQ0NFUyAgICAgICAgICAgICAgICAgRVJST1JfQUNDRVNTX0RFTklFRAogI2lmIDAK