ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3RvZG8udHh0IGIvcnVudGltZS9kb2MvdG9kby50eHQKaW5kZXggNGFmOGQ5Ni4uMGRjZThlMCAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvdG9kby50eHQKKysrIGIvcnVudGltZS9kb2MvdG9kby50eHQKQEAgLTEsNCArMSw0IEBACi0qdG9kby50eHQqICAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgTWF5IDE4CisqdG9kby50eHQqICAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgTWF5IDE5CiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCSAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTg4LDEwICs4OCw2IEBACiAKIHNldGxpbmUoKSBzaG91bGQgYWNjZXB0IGEgTGlzdC4KIAotc21zZygpIHVzZXMgSU9idWZmLiAgVGhlIGNoZWNrcyBmb3IgdGhlIHJlc3VsdCBub3QgZml0dGluZyBhcmUgY29tcGxpY2F0ZWQsCi1maW5kIGFub3RoZXIgc29sdXRpb24uICBBZGQgdnNucHJpbnRmKCkgYW5kIHNucHJpbnRmKCkgZnVuY3Rpb25zPwotICAgIGh0dHA6Ly93d3cuaWpzLnNpL3NvZnR3YXJlL3NucHJpbnRmLwotCiBBZGQgIjpbcmFuZ2Vdc29ydCIgY29tbWFuZC4gIFNvcnQgb24gc3BlY2lmaWVkIGZpZWxkLCB1c2luZyBhIHJlZ2V4cD8gIFJlbW92ZQogZHVwbGljYXRlcz8KIApkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdmVyc2lvbjcudHh0IGIvcnVudGltZS9kb2MvdmVyc2lvbjcudHh0CmluZGV4IDkzMjI1NjcuLjFjZGU0NzAgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3ZlcnNpb243LnR4dAorKysgYi9ydW50aW1lL2RvYy92ZXJzaW9uNy50eHQKQEAgLTEsNCArMSw0IEBACi0qdmVyc2lvbjcudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgTWF5IDE4CisqdmVyc2lvbjcudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgTWF5IDE5CiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0xMDY4LDQgKzEwNjgsOCBAQAogV2hlbiAifiIgaXMgaW4gJ2lza2V5d29yZCcgdGhlICJnZCIgZG9lc24ndCB3b3JrLCBpdCdzIHVzZWQgZm9yIHRoZSBwcmV2aW91cwogc3Vic3RpdHV0ZSBwYXR0ZXJuLiAgUHV0ICJcViIgaW4gdGhlIHBhdHRlcm4gdG8gYXZvaWQgdGhhdC4KIAorVXNlIG9mIHNwcmludGYoKSBzb21ldGltZXMgZGlkbid0IGNoZWNrIHByb3Blcmx5IGZvciBidWZmZXIgb3ZlcmZsb3cuICBBbHNvCit3aGVuIHVzaW5nIHNtc2coKS4gIEluY2x1ZGVkIGNvZGUgZm9yIHNucHJpbnRmKCkgdG8gYXZvaWQgaGF2aW5nIHRvIGRvIHNpemUKK2NoZWNrcyB3aGVyZSBpbnZva2luZyB0aGVtCisKICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9saXNwLnZpbSBiL3J1bnRpbWUvaW5kZW50L2xpc3AudmltCmluZGV4IDQ0NGZlMTAuLjlmNDA0YWUgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L2xpc3AudmltCisrKyBiL3J1bnRpbWUvaW5kZW50L2xpc3AudmltCkBAIC0xLDcgKzEsOCBAQAogIiBWaW0gaW5kZW50IGZpbGUKICIgTGFuZ3VhZ2U6CUxpc3AKLSIgTWFpbnRhaW5lcjoJbm9vbmUKLSIgTGFzdCBDaGFuZ2U6CTIwMDUgTWFyIDI4CisiIE1haW50YWluZXI6ICAgIFNlcmdleSBLaG9yZXYgPHNlcmdleS5raG9yZXZAZ21haWwuY29tPgorIiBVUkw6CQkgaHR0cDovL2lhbXBoZXQubm0ucnUvdmltCisiIExhc3QgQ2hhbmdlOgkyMDA1IE1heSAxOQogCiAiIE9ubHkgbG9hZCB0aGlzIGluZGVudCBmaWxlIHdoZW4gbm8gb3RoZXIgd2FzIGxvYWRlZC4KIGlmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKQEAgLTksNyArMTAsNiBAQAogZW5kaWYKIGxldCBiOmRpZF9pbmRlbnQgPSAxCiAKLSIgQXV0b2luZGVudCBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8uCi1zZXRsb2NhbCBhaQorc2V0bG9jYWwgYWkgbm9zaQogCi1sZXQgYjp1bmRvX2luZGVudCA9ICJzZXRsIGFpPCIKK2xldCBiOnVuZG9faW5kZW50ID0gInNldGwgYWk8IHNpPCIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L21tYS52aW0gYi9ydW50aW1lL3N5bnRheC9tbWEudmltCmluZGV4IGU5NDhiMGEuLjM3OTg4ZWQgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvc3ludGF4L21tYS52aW0KKysrIGIvcnVudGltZS9zeW50YXgvbW1hLnZpbQpAQCAtMTQsMTEgKzE0LDcgQEAKICIgSSBhbHNvIHJlY29tbWVuZCBzZXR0aW5nIHRoZSBkZWZhdWx0ICdDb21tZW50JyBoaWxpZ2h0aW5nIHRvIHNvbWV0aGluZwogIiBvdGhlciB0aGFuIHRoZSBjb2xvciB1c2VkIGZvciAnRnVuY3Rpb24nLCBzaW5jZSBib3RoIGFyZSBwbGVudGlmdWwgaW4KICIgbW9zdCBtYXRoZW1hdGljYSBmaWxlcywgYW5kIHRoZXkgYXJlIG9mdGVuIHRoZSBzYW1lIGNvbG9yICh3aGVuIHVzaW5nIAotIiBiYWNrZ3JvdW5kPWRhcmspLiAgSSB1c2UKLSIKLSIgICBoaSBDb21tZW50IGN0ZXJtZmc9ZGFya2N5YW4KLSIgICAKLSIgZGFya2dyZWVuIGFsc28gbG9va3MgZ29vZCBvbiBteSB0ZXJtaW5hbC4KKyIgYmFja2dyb3VuZD1kYXJrKS4KICIKICIgQ3JlZGl0czoKICIgbyAgT3JpZ2luYWwgTWF0aGVtYXRpY2Egc3ludGF4IHZlcnNpb24gd3JpdHRlbiBieQpAQCAtNDUsMTYgKzQxLDYgQEAKIHN5bnRheCBjbHVzdGVyIG1tYVN0cmluZ3MgY29udGFpbnM9QG1tYUNvbW1lbnRTdHJpbmdzLG1tYVN0cmluZwogc3ludGF4IGNsdXN0ZXIgbW1hVG9wIGNvbnRhaW5zPW1tYU9wZXJhdG9yLG1tYUdlbmVyaWNGdW5jdGlvbixtbWFQdXJlRnVuY3Rpb24sbW1hVmFyaWFibGUKIAotIiBWYXJpYWJsZXM6Ci0iICAgRG9sbGFyIHNpZ24gdmFyaWFibGVzCi1zeW50YXggbWF0Y2ggbW1hVmFyaWFibGUgIiRcYVwrXGQqIgotIiAgIFByZWNlZGluZyBjb250ZXh0cwotc3ludGF4IG1hdGNoIG1tYVZhcmlhYmxlICJgXD1cYVwrXGQqYCIKLQotIiBOdW1iZXJzOgotc3ludGF4IG1hdGNoIG1tYU51bWJlciAiXDxcJShcZFwrXC5cPVxkKlx8XGQqXC5cPVxkXCtcKVw+Igotc3ludGF4IG1hdGNoIG1tYU51bWJlciAiYFxkXCtcPiIKLQogIiBQcmVkZWZpbmVkIENvbnN0YW50czoKICIgICB0byBsaXN0IGFsbCBwcmVkZWZpbmVkIFN5bWJvbHMgd291bGQgYmUgdG9vIGluc2FuZS4uLgogIiAgIGl0J3MgcHJvYmFibHkgc21hcnRlciB0byBkZWZpbmUgYSBzZWxlY3QgZmV3LCBhbmQgZ2V0IHRoZSByZXN0IGZyb20KQEAgLTg5LDQxICs3NSwyNCBAQAogIiBmdW5jdGlvbiBhdHRyaWJ1dGVzCiBzeW50YXgga2V5d29yZCBtbWFWYXJpYWJsZSBQcm90ZWN0ZWQgTGlzdGFibGUgT25lSWRlbnRpdHkgT3JkZXJsZXNzIEZsYXQgQ29uc3RhbnQgTnVtZXJpY0Z1bmN0aW9uIExvY2tlZCBSZWFkUHJvdGVjdGVkIEhvbGRGaXJzdCBIb2xkUmVzdCBIb2xkQWxsIEhvbGRBbGxDb21wbGV0ZSBTZXF1ZW5jZUhvbGQgTkhvbGRGaXJzdCBOSG9sZFJlc3QgTkhvbGRBbGwgVGVtcG9yYXJ5IFN0dWIgCiAKLSIgU3RyaW5nczoKLSIgICAic3RyaW5nIgotIiAgICdzdHJpbmcnIGlzIG5vdCBhY2NlcHRlZCAodW50aWwgbGl0ZXJhbCBzdHJpbmdzIGFyZSBzdXBwb3J0ZWQhKQotc3ludGF4IHJlZ2lvbiBtbWFTdHJpbmcgc3RhcnQ9K1xcXEA8ISIrIHNraXA9K1xcXEA8IVxcXCUoXFxcXFwpKiIrIGVuZD0rIisKLXN5bnRheCByZWdpb24gbW1hQ29tbWVudFN0cmluZyBvbmVsaW5lIHN0YXJ0PStcXFxAPCEiKyBza2lwPStcXFxAPCFcXFwlKFxcXFxcKSoiKyBlbmQ9KyIrIGNvbnRhaW5lZAorIiBDb21tZW50IFNlY3Rpb25zOgorIiAgIHRoaXM6CisiICAgOnRoYXQ6CitzeW50YXggbWF0Y2ggbW1hSXRlbSAiXCUoXlsoIHwqXHRdKlwpXEA8PVwlKDpcK1x8XGFcKVthLXpBLVowLTkgXVwrOiIgY29udGFpbmVkIGNvbnRhaW5zPUBtbWFOb3RlcwogCi0iIEZ1bmN0aW9uIFVzYWdlIE1lc3NhZ2VzOgotIiAgICJTeW1ib2xOYW1lOjppdGVtIgotc3ludGF4IG1hdGNoIG1tYU1lc3NhZ2UgIiRcPVxhXCtcZCo6OlxhXCtcZCoiCi0KLSIgUHVyZSBGdW5jdGlvbnM6Ci1zeW50YXggbWF0Y2ggbW1hUHVyZUZ1bmN0aW9uICIjXCUoI1x8XGRcK1wpXD0iCi1zeW50YXggbWF0Y2ggbW1hUHVyZUZ1bmN0aW9uICImIgotCi0iIE5hbWVkIEZ1bmN0aW9uczoKLSIgU2luY2UgZXZlcnl0aGluZyBpcyBwcmV0dHkgbXVjaCBhIGZ1bmN0aW9uLCBnZXQgdGhpcyBzdHJhaWdodCAKLSIgZnJvbSBjb250ZXh0Ci1zeW50YXggbWF0Y2ggbW1hR2VuZXJpY0Z1bmN0aW9uICJbQS1aYS16MC05YF1cK1xzKlwlKFtAW11cfC86XHwvXD0vQFwpXEA9IiBjb250YWlucz1tbWFPcGVyYXRvcgotc3ludGF4IG1hdGNoIG1tYUdlbmVyaWNGdW5jdGlvbiAiXH5ccypbXn5dXCtccypcfiJocz1zKzEsaGU9ZS0xIGNvbnRhaW5zPW1tYU9wZXJhdG9yLG1tYUJvcmluZwotc3ludGF4IG1hdGNoIG1tYUdlbmVyaWNGdW5jdGlvbiAiLy9ccypbQS1aYS16MC05YF1cKyJocz1zKzIgY29udGFpbnM9bW1hT3BlcmF0b3IKLSAKICIgQ29tbWVudCBLZXl3b3JkczoKIHN5bnRheCBrZXl3b3JkIG1tYVRvZG8gVE9ETyBOT1RFIEhFWSBjb250YWluZWQKIHN5bnRheCBtYXRjaCBtbWFUb2RvICJYXHszLH0iIGNvbnRhaW5lZAogc3ludGF4IGtleXdvcmQgbW1hRml4bWUgRklYW01FXSBGSVhUSElTIEJST0tFTiBjb250YWluZWQKICIgeWF5IHBpcmF0ZXMuLi4KIHN5bnRheCBtYXRjaCBtbWFGaXhtZSAiXCUoWVw9QVwrUlwrR1wrXHxHUlJcK1x8Q1JcK0FcK1BcK1wpXCUoIVwrXClcPSIgY29udGFpbmVkCi1zeW50YXggbWF0Y2ggbW1hZW1QSEFzaXMgIlwoX1wrXClbIGEtekEtWjAtOV1cK1wxIiBjb250YWluZWQKIAotIiBDb21tZW50IFNlY3Rpb25zOgotIiAgIHRoaXM6Ci0iICAgOnRoYXQ6Ci1zeW50YXggbWF0Y2ggbW1hSXRlbSAiXCUoXlsoIHwqXHRdKlwpXEA8PVwlKDpcK1x8XGFcKVthLXpBLVowLTkgXVwrOiIgY29udGFpbmVkIGNvbnRhaW5zPUBtbWFOb3RlcworIiBFbVBIQXNpczoKKyIgdGhpcyB1bm5lY2Vzc2FyeSwgYnV0IHdoYXRldmVyIDopCitzeW50YXggbWF0Y2ggbW1hZW1QSEFzaXMgIlwlKF5cfFxzXClcKFtfL11cKVthLXpBLVowLTldXCtcJShcc1wrW2EtekEtWjAtOV1cK1wpKlwxXCUoXHNcfCRcKSIgY29udGFpbmVkIGNvbnRhaW5zPW1tYWVtUEhBc2lzCitzeW50YXggbWF0Y2ggbW1hZW1QSEFzaXMgIlwlKF5cfFxzXCkoXEA8IVwqW2EtekEtWjAtOV1cK1wlKFxzXCtbYS16QS1aMC05XVwrXCkqKVxAIVwqXCUoXHNcfCRcKSIgY29udGFpbmVkIGNvbnRhaW5zPW1tYWVtUEhBc2lzCiAKLSIgQWN0dWFsIE1hdGhlbWF0aWNhIENvbW1lbnRzOgorIiBSZWd1bGFyIENvbW1lbnRzOgogIiAgICgqICopCiAiICAgYWxsb3cgbmVzdGluZyAoKiAoKiAqKSAqKSBldmVuIHRob3VnaCB0aGUgZnJvbnRlbmQKICIgICB3b24ndCBhbHdheXMgbGlrZSBpdC4KQEAgLTE0MSw2ICsxMTAsMTkgQEAKICIgY2F0Y2ggcHJlY2VkaW5nICoKIHN5bnRheCBtYXRjaCBtbWFDb21tZW50U3RhciAiXlxzKlwqXCsiIGNvbnRhaW5lZAogCisiIFZhcmlhYmxlczoKKyIgICBEb2xsYXIgc2lnbiB2YXJpYWJsZXMKK3N5bnRheCBtYXRjaCBtbWFWYXJpYWJsZSAiJFxhXCtcZCoiCisiICAgUHJlY2VkaW5nIGNvbnRleHRzCitzeW50YXggbWF0Y2ggbW1hVmFyaWFibGUgImBcPVxhXCtcZCpgIgorCisiIFN0cmluZ3M6CisiICAgInN0cmluZyIKKyIgICAnc3RyaW5nJyBpcyBub3QgYWNjZXB0ZWQgKHVudGlsIGxpdGVyYWwgc3RyaW5ncyBhcmUgc3VwcG9ydGVkISkKK3N5bnRheCByZWdpb24gbW1hU3RyaW5nIHN0YXJ0PStcXFxAPCEiKyBza2lwPStcXFxAPCFcXFwlKFxcXFxcKSoiKyBlbmQ9KyIrCitzeW50YXggcmVnaW9uIG1tYUNvbW1lbnRTdHJpbmcgb25lbGluZSBzdGFydD0rXFxcQDwhIisgc2tpcD0rXFxcQDwhXFxcJShcXFxcXCkqIisgZW5kPSsiKyBjb250YWluZWQKKworCiAiIFBhdHRlcm5zOgogIiAgIEVhY2ggcGF0dGVybiBtYXJrZXIgYmVsb3cgY2FuIGJlIEJsYW5rW10gKF8pLCBCbGFua1NlcXVlbmNlW10gKF9fKQogIiAgIG9yIEJsYW5rTnVsbFNlcXVlbmNlW10gKF9fXykuICBNb3N0IGV4YW1wbGVzIGJlbG93IGNhbiBhbHNvIGJlIApAQCAtMTk3LDcgKzE3OSwyNSBAQAogc3ludGF4IG1hdGNoIG1tYU9wZXJhdG9yICJcJShcflx+XD1cKSIKIHN5bnRheCBtYXRjaCBtbWFPcGVyYXRvciAiXCUoPVx7MiwzfVx8PVw9IT1cfHx8XD1cfCYmXHwhXCkiIGNvbnRhaW5zPUFMTEJVVCxtbWFQdXJlRnVuY3Rpb24KIAotICAKKyIgRnVuY3Rpb24gVXNhZ2UgTWVzc2FnZXM6CisiICAgIlN5bWJvbE5hbWU6Oml0ZW0iCitzeW50YXggbWF0Y2ggbW1hTWVzc2FnZSAiJFw9XGFcK1xkKjo6XGFcK1xkKiIKKworIiBQdXJlIEZ1bmN0aW9uczoKK3N5bnRheCBtYXRjaCBtbWFQdXJlRnVuY3Rpb24gIiNcJSgjXHxcZFwrXClcPSIKK3N5bnRheCBtYXRjaCBtbWFQdXJlRnVuY3Rpb24gIiYiCisKKyIgTmFtZWQgRnVuY3Rpb25zOgorIiBTaW5jZSBldmVyeXRoaW5nIGlzIHByZXR0eSBtdWNoIGEgZnVuY3Rpb24sIGdldCB0aGlzIHN0cmFpZ2h0IAorIiBmcm9tIGNvbnRleHQKK3N5bnRheCBtYXRjaCBtbWFHZW5lcmljRnVuY3Rpb24gIltBLVphLXowLTlgXVwrXHMqXCUoW0BbXVx8LzpcfC9cPS9AXClcQD0iIGNvbnRhaW5zPW1tYU9wZXJhdG9yCitzeW50YXggbWF0Y2ggbW1hR2VuZXJpY0Z1bmN0aW9uICJcflxzKltefl1cK1xzKlx+ImhzPXMrMSxoZT1lLTEgY29udGFpbnM9bW1hT3BlcmF0b3IsbW1hQm9yaW5nCitzeW50YXggbWF0Y2ggbW1hR2VuZXJpY0Z1bmN0aW9uICIvL1xzKltBLVphLXowLTlgXVwrImhzPXMrMiBjb250YWlucz1tbWFPcGVyYXRvcgorCisiIE51bWJlcnM6CitzeW50YXggbWF0Y2ggbW1hTnVtYmVyICJcPFwlKFxkXCtcLlw9XGQqXHxcZCpcLlw9XGRcK1wpXD4iCitzeW50YXggbWF0Y2ggbW1hTnVtYmVyICJgXGRcK1wlKFxkXEAhXC5cfFw+XCkiCisKICIgU3BlY2lhbCBDaGFyYWN0ZXJzOgogIiAgIFxbTmFtZV0gICAgIG5hbWVkIGNoYXJhY3RlcgogIiAgIFxvb28gICAgICAgIG9jdGFsCkBAIC0yNDMsMTAgKzI0MywxMCBAQAogICAgIEhpTGluayBtbWFGdW5jdGlvbkNvbW1lbnQgICBDb21tZW50CiAgICAgSGlMaW5rIG1tYUxvb3NlUXVvdGUgICAgICAgIENvbW1lbnQKIAlIaUxpbmsgbW1hR2VuZXJpY0Z1bmN0aW9uICAgRnVuY3Rpb24KKwlIaUxpbmsgbW1hVmFyaWFibGUgICAgICAgICAgSWRlbnRpZmllcgogCUhpTGluayBtbWFPcGVyYXRvciAgICAgICAgICBPcGVyYXRvcgogICAgIEhpTGluayBtbWFQYXR0ZXJuT3AgICAgICAgICBPcGVyYXRvcgogCUhpTGluayBtbWFQdXJlRnVuY3Rpb24gICAgICBPcGVyYXRvcgotCUhpTGluayBtbWFWYXJpYWJsZSAgICAgICAgICBJZGVudGlmaWVyCiAJSGlMaW5rIG1tYVN0cmluZyAgICAgICAgICAgIFN0cmluZwogICAgIEhpTGluayBtbWFDb21tZW50U3RyaW5nICAgICBTdHJpbmcKIAlIaUxpbmsgbW1hVW5pY29kZSAgICAgICAgICAgU3RyaW5nCmRpZmYgLS1naXQgYS9zcmMvZGlncmFwaC5jIGIvc3JjL2RpZ3JhcGguYwppbmRleCAzMWQ3ZjM3Li4wNmIyMjdhIDEwMDY0NAotLS0gYS9zcmMvZGlncmFwaC5jCisrKyBiL3NyYy9kaWdyYXBoLmMKQEAgLTI0NTksNyArMjQ1OSw3IEBACiAgICAgICovCiAgICAgZm9yIChpID0gMDsgaSA8IGN1cmJ1Zi0+Yl9rbWFwX2dhLmdhX2xlbjsgKytpKQogICAgIHsKLQlzcHJpbnRmKChjaGFyICopYnVmLCAiPGJ1ZmZlcj4gJXMgJXMiLAorCXZpbV9zbnByaW50ZigoY2hhciAqKWJ1Ziwgc2l6ZW9mKGJ1ZiksICI8YnVmZmVyPiAlcyAlcyIsCiAJCQkJKChrbWFwX1QgKiljdXJidWYtPmJfa21hcF9nYS5nYV9kYXRhKVtpXS5mcm9tLAogCQkJCSAoKGttYXBfVCAqKWN1cmJ1Zi0+Yl9rbWFwX2dhLmdhX2RhdGEpW2ldLnRvKTsKIAkodm9pZClkb19tYXAoMiwgYnVmLCBMQU5HTUFQLCBGQUxTRSk7CkBAIC0yNDkyLDggKzI0OTIsOCBAQAogICAgIC8qIGNsZWFyIHRoZSAiOmxtYXAicyAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBjdXJidWYtPmJfa21hcF9nYS5nYV9sZW47ICsraSkKICAgICB7Ci0Jc3ByaW50ZigoY2hhciAqKWJ1ZiwgIjxidWZmZXI+ICVzIiwKLQkJKChrbWFwX1QgKiljdXJidWYtPmJfa21hcF9nYS5nYV9kYXRhKVtpXS5mcm9tKTsKKwl2aW1fc25wcmludGYoKGNoYXIgKilidWYsIHNpemVvZihidWYpLCAiPGJ1ZmZlcj4gJXMiLAorCQkJICAgICAgICgoa21hcF9UICopY3VyYnVmLT5iX2ttYXBfZ2EuZ2FfZGF0YSlbaV0uZnJvbSk7CiAJKHZvaWQpZG9fbWFwKDEsIGJ1ZiwgTEFOR01BUCwgRkFMU0UpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2VkaXQuYyBiL3NyYy9lZGl0LmMKaW5kZXggMzNhNmY2Mi4uNDJiNDU5ZCAxMDA2NDQKLS0tIGEvc3JjL2VkaXQuYworKysgYi9zcmMvZWRpdC5jCkBAIC0yMjE4LDggKzIyMTgsOCBAQAogCSAgICBmcCA9IG1jaF9mb3BlbigoY2hhciAqKWZpbGVzW2ldLCAiciIpOyAgLyogb3BlbiBkaWN0aW9uYXJ5IGZpbGUgKi8KIAkgICAgaWYgKGZsYWdzICE9IERJQ1RfRVhBQ1QpCiAJICAgIHsKLQkJc3ByaW50ZigoY2hhciopSU9idWZmLCBfKCJTY2FubmluZyBkaWN0aW9uYXJ5OiAlcyIpLAotCQkJCQkJCSAgICAoY2hhciAqKWZpbGVzW2ldKTsKKwkJdmltX3NucHJpbnRmKChjaGFyICopSU9idWZmLCBJT1NJWkUsCisJCQkgICAgICBfKCJTY2FubmluZyBkaWN0aW9uYXJ5OiAlcyIpLCAoY2hhciAqKWZpbGVzW2ldKTsKIAkJbXNnX3RydW5jX2F0dHIoSU9idWZmLCBUUlVFLCBobF9hdHRyKEhMRl9SKSk7CiAJICAgIH0KIApAQCAtMjgyNyw3ICsyODI3LDcgQEAKIAkJICAgIGRpY3QgPSBpbnNfYnVmLT5iX2ZuYW1lOwogCQkgICAgZGljdF9mID0gRElDVF9FWEFDVDsKIAkJfQotCQlzcHJpbnRmKChjaGFyICopSU9idWZmLCBfKCJTY2FubmluZzogJXMiKSwKKwkJdmltX3NucHJpbnRmKChjaGFyICopSU9idWZmLCBJT1NJWkUsIF8oIlNjYW5uaW5nOiAlcyIpLAogCQkJaW5zX2J1Zi0+Yl9mbmFtZSA9PSBOVUxMCiAJCQkgICAgPyBidWZfc3BuYW1lKGluc19idWYpCiAJCQkgICAgOiBpbnNfYnVmLT5iX3NmbmFtZSA9PSBOVUxMCmRpZmYgLS1naXQgYS9zcmMvZXZhbC5jIGIvc3JjL2V2YWwuYwppbmRleCBlMmQzZDkzLi5jNzNkNzc0IDEwMDY0NAotLS0gYS9zcmMvZXZhbC5jCisrKyBiL3NyYy9ldmFsLmMKQEAgLTExNDE0LDcgKzExNDE0LDcgQEAKICAgICBpZiAoYXJndmFyc1syXS52X3R5cGUgIT0gVkFSX1VOS05PV04pCiAgICAgewogCWRpY3RpdGVtX1QJdjsKLQljaGFyX3UJc3RyWzMwXTsKKwljaGFyX3UJCXN0clszMF07CiAKIAlzcHJpbnRmKChjaGFyICopc3RyLCAiMHgleCIsICh1bnNpZ25lZCBpbnQpdyk7CiAJdi5kaV90di52X3R5cGUgPSBWQVJfU1RSSU5HOwpAQCAtMTY4NjcsNyArMTY4NjcsNyBAQAogCXsKIAkgICAgKytub193YWl0X3JldHVybjsKIAkgICAgbXNnX3Njcm9sbCA9IFRSVUU7CSAgICAvKiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUgKi8KLQkgICAgbXNnX3N0cigoY2hhcl91ICopXygiY2FsbGluZyAlcyIpLCBzb3VyY2luZ19uYW1lKTsKKwkgICAgc21zZygoY2hhcl91ICopXygiY2FsbGluZyAlcyIpLCBzb3VyY2luZ19uYW1lKTsKIAkgICAgaWYgKHBfdmVyYm9zZSA+PSAxNCkKIAkgICAgewogCQljaGFyX3UJYnVmW01TR19CVUZfTEVOXTsKQEAgLTE2OTUwLDMwICsxNjk1MCwyNiBAQAogICAgIC8qIHdoZW4gYmVpbmcgdmVyYm9zZSwgbWVudGlvbiB0aGUgcmV0dXJuIHZhbHVlICovCiAgICAgaWYgKHBfdmVyYm9zZSA+PSAxMikKICAgICB7Ci0JY2hhcl91CSpzbjsKLQogCSsrbm9fd2FpdF9yZXR1cm47CiAJbXNnX3Njcm9sbCA9IFRSVUU7CSAgICAvKiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUgKi8KIAotCS8qIE1ha2Ugc3VyZSB0aGUgb3V0cHV0IGZpdHMgaW4gSU9idWZmLiAqLwotCXNuID0gc291cmNpbmdfbmFtZTsKLQlpZiAoU1RSTEVOKHNvdXJjaW5nX25hbWUpID4gSU9TSVpFIC8gMiAtIDUwKQotCSAgICBzbiA9IHNvdXJjaW5nX25hbWUgKyBTVFJMRU4oc291cmNpbmdfbmFtZSkgLSAoSU9TSVpFIC8gMiAtIDUwKTsKLQogCWlmIChhYm9ydGluZygpKQotCSAgICBzbXNnKChjaGFyX3UgKilfKCIlcyBhYm9ydGVkIiksIHNuKTsKKwkgICAgc21zZygoY2hhcl91ICopXygiJXMgYWJvcnRlZCIpLCBzb3VyY2luZ19uYW1lKTsKIAllbHNlIGlmIChmYy5yZXR0di0+dl90eXBlID09IFZBUl9OVU1CRVIpCi0JICAgIHNtc2coKGNoYXJfdSAqKV8oIiVzIHJldHVybmluZyAjJWxkIiksIHNuLAotCQkJCQkgICAgICAobG9uZylmYy5yZXR0di0+dnZhbC52X251bWJlcik7CisJICAgIHNtc2coKGNoYXJfdSAqKV8oIiVzIHJldHVybmluZyAjJWxkIiksIHNvdXJjaW5nX25hbWUsCisJCQkJCSAgICAgICAobG9uZylmYy5yZXR0di0+dnZhbC52X251bWJlcik7CiAJZWxzZQogCXsKIAkgICAgY2hhcl91CWJ1ZltNU0dfQlVGX0xFTl07CiAJICAgIGNoYXJfdQludW1idWZbTlVNQlVGTEVOXTsKIAkgICAgY2hhcl91CSp0b2ZyZWU7CiAKKwkgICAgLyogVGhlIHZhbHVlIG1heSBiZSB2ZXJ5IGxvbmcuICBTa2lwIHRoZSBtaWRkbGUgcGFydCwgc28gdGhhdCB3ZQorCSAgICAgKiBoYXZlIHNvbWUgaWRlYSBob3cgaXQgc3RhcnRzIGFuZCBlbmRzLiBzbXNnKCkgd291bGQgYWx3YXlzCisJICAgICAqIHRydW5jYXRlIGl0IGF0IHRoZSBlbmQuICovCiAJICAgIHRydW5jX3N0cmluZyh0djJzdHJpbmcoZmMucmV0dHYsICZ0b2ZyZWUsIG51bWJ1ZiksCiAJCQkJCQkJICAgYnVmLCBNU0dfQlVGX0NMRU4pOwotCSAgICBzbXNnKChjaGFyX3UgKilfKCIlcyByZXR1cm5pbmcgJXMiKSwgc24sIGJ1Zik7CisJICAgIHNtc2coKGNoYXJfdSAqKV8oIiVzIHJldHVybmluZyAlcyIpLCBzb3VyY2luZ19uYW1lLCBidWYpOwogCSAgICB2aW1fZnJlZSh0b2ZyZWUpOwogCX0KIAltc2dfcHV0cygoY2hhcl91ICopIlxuIik7ICAgLyogZG9uJ3Qgb3ZlcndyaXRlIHRoaXMgZWl0aGVyICovCkBAIC0xNjk5NCw3ICsxNjk5MCw3IEBACiAgICAgewogCSsrbm9fd2FpdF9yZXR1cm47CiAJbXNnX3Njcm9sbCA9IFRSVUU7CSAgICAvKiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUgKi8KLQltc2dfc3RyKChjaGFyX3UgKilfKCJjb250aW51aW5nIGluICVzIiksIHNvdXJjaW5nX25hbWUpOworCXNtc2coKGNoYXJfdSAqKV8oImNvbnRpbnVpbmcgaW4gJXMiKSwgc291cmNpbmdfbmFtZSk7CiAJbXNnX3B1dHMoKGNoYXJfdSAqKSJcbiIpOyAgIC8qIGRvbid0IG92ZXJ3cml0ZSB0aGlzIGVpdGhlciAqLwogCWNtZGxpbmVfcm93ID0gbXNnX3JvdzsKIAktLW5vX3dhaXRfcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc3JjL2V4X2NtZHMuYyBiL3NyYy9leF9jbWRzLmMKaW5kZXggNjgwMTg4ZC4uZmQ1NTYwNSAxMDA2NDQKLS0tIGEvc3JjL2V4X2NtZHMuYworKysgYi9zcmMvZXhfY21kcy5jCkBAIC04OSw4ICs4OSw5IEBACiAJZWxzZQogI2VuZGlmCiAJICAgIGJ1ZjJbMF0gPSBOVUw7Ci0Jc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygiPCVzPiVzJXMgICVkLCAgSGV4ICUwMngsICBPY3RhbCAlMDNvIiksCi0JCXRyYW5zY2hhcihjKSwgYnVmMSwgYnVmMiwgYywgYywgYyk7CisJdmltX3NucHJpbnRmKChjaGFyICopSU9idWZmLCBJT1NJWkUsCisJCV8oIjwlcz4lcyVzICAlZCwgIEhleCAlMDJ4LCAgT2N0YWwgJTAzbyIpLAorCQkJCQkgICB0cmFuc2NoYXIoYyksIGJ1ZjEsIGJ1ZjIsIGMsIGMsIGMpOwogI2lmZGVmIEZFQVRfTUJZVEUKIAljID0gYzE7CiAJYzEgPSBjMjsKQEAgLTExMyw4ICsxMTQsOCBAQAogI2VuZGlmCiAJCSkKIAkgICAgSU9idWZmW2xlbisrXSA9ICcgJzsgLyogZHJhdyBjb21wb3NpbmcgY2hhciBvbiB0b3Agb2YgYSBzcGFjZSAqLwotCUlPYnVmZltsZW4gKyAoKm1iX2NoYXIyYnl0ZXMpKGMsIElPYnVmZiArIGxlbildID0gTlVMOwotCXNwcmludGYoKGNoYXIgKilJT2J1ZmYgKyBTVFJMRU4oSU9idWZmKSwKKwlsZW4gKz0gKCptYl9jaGFyMmJ5dGVzKShjLCBJT2J1ZmYgKyBsZW4pOworCXZpbV9zbnByaW50ZigoY2hhciAqKUlPYnVmZiArIGxlbiwgSU9TSVpFIC0gbGVuLAogCQkJYyA8IDB4MTAwMDAgPyBfKCI+ICVkLCBIZXggJTA0eCwgT2N0YWwgJW8iKQogCQkJCSAgICA6IF8oIj4gJWQsIEhleCAlMDh4LCBPY3RhbCAlbyIpLCBjLCBjLCBjKTsKIAljID0gYzE7CkBAIC05NzQsOCArOTc1LDggQEAKIAl7CiAJICAgIGlmIChkb19pbikKIAkgICAgewotCQlzcHJpbnRmKChjaGFyICopbXNnX2J1ZiwgXygiJWxkIGxpbmVzIGZpbHRlcmVkIiksCi0JCQkJCQkJICAgICAobG9uZylsaW5lY291bnQpOworCQl2aW1fc25wcmludGYoKGNoYXIgKiltc2dfYnVmLCBzaXplb2YobXNnX2J1ZiksCisJCQkJICAgIF8oIiVsZCBsaW5lcyBmaWx0ZXJlZCIpLCAobG9uZylsaW5lY291bnQpOwogCQlpZiAobXNnKG1zZ19idWYpICYmICFtc2dfc2Nyb2xsKQogCQl7CiAJCSAgICAvKiBzYXZlIG1lc3NhZ2UgdG8gZGlzcGxheSBpdCBhZnRlciByZWRyYXcgKi8KQEAgLTEzMzcsNyArMTMzOCw4IEBACiAgICAgY2hhciAgICAqbWVzc2FnZTsKICAgICBjaGFyX3UgICpsaW5lOwogewotICAgIHNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIiVzdmltaW5mbzogJXMgaW4gbGluZTogIiksIGVycm51bSwgbWVzc2FnZSk7CisgICAgdmltX3NucHJpbnRmKChjaGFyICopSU9idWZmLCBJT1NJWkUsIF8oIiVzdmltaW5mbzogJXMgaW4gbGluZTogIiksCisJCQkJCQkJICAgICBlcnJudW0sIG1lc3NhZ2UpOwogICAgIFNUUk5DQVQoSU9idWZmLCBsaW5lLCBJT1NJWkUgLSBTVFJMRU4oSU9idWZmKSk7CiAgICAgaWYgKElPYnVmZltTVFJMRU4oSU9idWZmKSAtIDFdID09ICdcbicpCiAJSU9idWZmW1NUUkxFTihJT2J1ZmYpIC0gMV0gPSBOVUw7CkBAIC0xMzczLDE3ICsxMzc1LDExIEBACiAgICAgZnAgPSBtY2hfZm9wZW4oKGNoYXIgKilmbmFtZSwgUkVBREJJTik7CiAKICAgICBpZiAocF92ZXJib3NlID4gMCkKLSAgICB7Ci0JY2hhcl91CSpzOwotCi0JcyA9IGZuYW1lOwotCWlmIChTVFJMRU4oZm5hbWUpID4gSU9TSVpFIC0gMTAwKQotCSAgICBzID0gZm5hbWUgKyBTVFJMRU4oZm5hbWUpIC0gKElPU0laRSAtIDEwMCk7Ci0Jc21zZygoY2hhcl91ICopXygiUmVhZGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiJXMlcyVzIiksIHMsCi0JCSAgICB3YW50X2luZm8gPyBfKCIgaW5mbyIpIDogIiIsCi0JCSAgICB3YW50X21hcmtzID8gXygiIG1hcmtzIikgOiAiIiwKLQkJICAgIGZwID09IE5VTEwgPyBfKCIgRkFJTEVEIikgOiAiIik7Ci0gICAgfQorCXNtc2coKGNoYXJfdSAqKV8oIlJlYWRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiVzJXMlcyIpLAorCQlmbmFtZSwKKwkJd2FudF9pbmZvID8gXygiIGluZm8iKSA6ICIiLAorCQl3YW50X21hcmtzID8gXygiIG1hcmtzIikgOiAiIiwKKwkJZnAgPT0gTlVMTCA/IF8oIiBGQUlMRUQiKSA6ICIiKTsKIAogICAgIHZpbV9mcmVlKGZuYW1lKTsKICAgICBpZiAoZnAgPT0gTlVMTCkKQEAgLTE2MDcsNyArMTYwMyw3IEBACiAgICAgfQogCiAgICAgaWYgKHBfdmVyYm9zZSA+IDApCi0JbXNnX3N0cigoY2hhcl91ICopXygiV3JpdGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiIiksIGZuYW1lKTsKKwlzbXNnKChjaGFyX3UgKilfKCJXcml0aW5nIHZpbWluZm8gZmlsZSBcIiVzXCIiKSwgZm5hbWUpOwogCiAgICAgdmltaW5mb19lcnJjbnQgPSAwOwogICAgIGRvX3ZpbWluZm8oZnBfaW4sIGZwX291dCwgIWZvcmNlaXQsICFmb3JjZWl0LCBGQUxTRSk7CkBAIC00NTI5LDYgKzQ1MjUsOCBAQAogZG9fc3ViX21zZyhjb3VudF9vbmx5KQogICAgIGludAkgICAgY291bnRfb25seTsJCS8qIHVzZWQgJ24nIGZsYWcgZm9yICI6cyIgKi8KIHsKKyAgICBpbnQJICAgIGxlbiA9IDA7CisKICAgICAvKgogICAgICAqIE9ubHkgcmVwb3J0IHN1YnN0aXR1dGlvbnMgd2hlbjoKICAgICAgKiAtIG1vcmUgdGhhbiAncmVwb3J0JyBzdWJzdGl0dXRpb25zCkBAIC00NTQwLDIwICs0NTM4LDI0IEBACiAJICAgICYmIG1lc3NhZ2luZygpKQogICAgIHsKIAlpZiAoZ290X2ludCkKKwl7CiAJICAgIFNUUkNQWShtc2dfYnVmLCBfKCIoSW50ZXJydXB0ZWQpICIpKTsKLQllbHNlCi0JICAgIG1zZ19idWZbMF0gPSBOVUw7CisJICAgIGxlbiA9IFNUUkxFTihtc2dfYnVmKTsKKwl9CiAJaWYgKHN1Yl9uc3VicyA9PSAxKQotCSAgICBTVFJDQVQobXNnX2J1ZiwgY291bnRfb25seSA/IF8oIjEgbWF0Y2giKSA6IF8oIjEgc3Vic3RpdHV0aW9uIikpOworCSAgICB2aW1fc25wcmludGYoKGNoYXIgKiltc2dfYnVmICsgbGVuLCBzaXplb2YobXNnX2J1ZikgLSBsZW4sCisJCSAgICAiJXMiLCBjb3VudF9vbmx5ID8gXygiMSBtYXRjaCIpIDogXygiMSBzdWJzdGl0dXRpb24iKSk7CiAJZWxzZQotCSAgICBzcHJpbnRmKChjaGFyICopbXNnX2J1ZiArIFNUUkxFTihtc2dfYnVmKSwKKwkgICAgdmltX3NucHJpbnRmKChjaGFyICopbXNnX2J1ZiArIGxlbiwgc2l6ZW9mKG1zZ19idWYpIC0gbGVuLAogCQkgICAgY291bnRfb25seSA/IF8oIiVsZCBtYXRjaGVzIikgOiBfKCIlbGQgc3Vic3RpdHV0aW9ucyIpLAogCQkJCQkJCQkgICBzdWJfbnN1YnMpOworCWxlbiA9IFNUUkxFTihtc2dfYnVmKTsKIAlpZiAoc3ViX25saW5lcyA9PSAxKQotCSAgICBTVFJDQVQobXNnX2J1ZiwgXygiIG9uIDEgbGluZSIpKTsKKwkgICAgdmltX3NucHJpbnRmKChjaGFyICopbXNnX2J1ZiArIGxlbiwgc2l6ZW9mKG1zZ19idWYpIC0gbGVuLAorCQkgICAgIiVzIiwgXygiIG9uIDEgbGluZSIpKTsKIAllbHNlCi0JICAgIHNwcmludGYoKGNoYXIgKiltc2dfYnVmICsgU1RSTEVOKG1zZ19idWYpLCBfKCIgb24gJWxkIGxpbmVzIiksCi0JCQkJCQkJICAgIChsb25nKXN1Yl9ubGluZXMpOworCSAgICB2aW1fc25wcmludGYoKGNoYXIgKiltc2dfYnVmICsgbGVuLCBzaXplb2YobXNnX2J1ZikgLSBsZW4sCisJCSAgICBfKCIgb24gJWxkIGxpbmVzIiksIChsb25nKXN1Yl9ubGluZXMpOwogCWlmIChtc2cobXNnX2J1ZikpCiAJewogCSAgICAvKiBzYXZlIG1lc3NhZ2UgdG8gZGlzcGxheSBpdCBhZnRlciByZWRyYXcgKi8KQEAgLTQ2ODYsOSArNDY4OCw5IEBACiAgICAgZWxzZSBpZiAobmRvbmUgPT0gMCkKICAgICB7CiAJaWYgKHR5cGUgPT0gJ3YnKQotCSAgICBtc2dfc3RyKChjaGFyX3UgKilfKCJQYXR0ZXJuIGZvdW5kIGluIGV2ZXJ5IGxpbmU6ICVzIiksIHBhdCk7CisJICAgIHNtc2coKGNoYXJfdSAqKV8oIlBhdHRlcm4gZm91bmQgaW4gZXZlcnkgbGluZTogJXMiKSwgcGF0KTsKIAllbHNlCi0JICAgIG1zZ19zdHIoKGNoYXJfdSAqKV8oZV9wYXRub3RmMiksIHBhdCk7CisJICAgIHNtc2coKGNoYXJfdSAqKV8oZV9wYXRub3RmMiksIHBhdCk7CiAgICAgfQogICAgIGVsc2UKIAlnbG9iYWxfZXhlKGNtZCk7CkBAIC00OTU1LDggKzQ5NTcsNyBAQAogCSAgICAgKi8KIAkgICAgaWYgKChoZWxwZmQgPSBtY2hfZm9wZW4oKGNoYXIgKilwX2hmLCBSRUFEQklOKSkgPT0gTlVMTCkKIAkgICAgewotCQltc2dfc3RyKChjaGFyX3UgKilfKCJTb3JyeSwgaGVscCBmaWxlIFwiJXNcIiBub3QgZm91bmQiKSwKLQkJCQkJCQkJCXBfaGYpOworCQlzbXNnKChjaGFyX3UgKilfKCJTb3JyeSwgaGVscCBmaWxlIFwiJXNcIiBub3QgZm91bmQiKSwgcF9oZik7CiAJCWdvdG8gZXJyZXQ7CiAJICAgIH0KIAkgICAgZmNsb3NlKGhlbHBmZCk7CkBAIC01NjYwLDcgKzU2NjEsNyBAQAogCSAgICBnb3RfaW50ID0gVFJVRTsKIAllbHNlCiAJewotCSAgICBzID0gYWxsb2MoMzApOworCSAgICBzID0gYWxsb2MoMTggKyBTVFJMRU4odGFnZm5hbWUpKTsKIAkgICAgaWYgKHMgPT0gTlVMTCkKIAkJZ290X2ludCA9IFRSVUU7CiAJICAgIGVsc2UKQEAgLTU3OTMsNyArNTc5NCw3IEBACiAJCWlmICgqcDIgPT0gJ1x0JykKIAkJewogCQkgICAgKnAyID0gTlVMOwotCQkgICAgc3ByaW50ZigoY2hhciAqKU5hbWVCdWZmLAorCQkgICAgdmltX3NucHJpbnRmKChjaGFyICopTmFtZUJ1ZmYsIE1BWFBBVEhMLAogCQkJICAgIF8oIkUxNTQ6IER1cGxpY2F0ZSB0YWcgXCIlc1wiIGluIGZpbGUgJXMvJXMiKSwKIAkJCQkgICAgICgoY2hhcl91ICoqKWdhLmdhX2RhdGEpW2ldLCBkaXIsIHAyICsgMSk7CiAJCSAgICBFTVNHKE5hbWVCdWZmKTsKQEAgLTYzMDcsNyArNjMwOCw3IEBACiB7CiAgICAgY2hhcl91CSpwOwogCi0gICAgbXNnX3N0cigoY2hhcl91ICopInNpZ24gJXMiLCBzcC0+c25fbmFtZSk7CisgICAgc21zZygoY2hhcl91ICopInNpZ24gJXMiLCBzcC0+c25fbmFtZSk7CiAgICAgaWYgKHNwLT5zbl9pY29uICE9IE5VTEwpCiAgICAgewogCU1TR19QVVRTKCIgaWNvbj0iKTsKZGlmZiAtLWdpdCBhL3NyYy9leF9jbWRzLmggYi9zcmMvZXhfY21kcy5oCmluZGV4IDQxNzk0NWQuLjhlYWRhOTYgMTAwNjQ0Ci0tLSBhL3NyYy9leF9jbWRzLmgKKysrIGIvc3JjL2V4X2NtZHMuaApAQCAtNTMyLDcgKzUzMiw3IEBACiBFWChDTURfbW9kZSwJCSJtb2RlIiwJCWV4X21vZGUsCiAJCQlXT1JEMXxUUkxCQVJ8Q01EV0lOKSwKIEVYKENNRF9tenNjaGVtZSwJIm16c2NoZW1lIiwJZXhfbXpzY2hlbWUsCi0JCQlSQU5HRXxFWFRSQXxERkxBTEx8TkVFREFSR3xDTURXSU4pLAorCQkJUkFOR0V8RVhUUkF8REZMQUxMfE5FRURBUkd8Q01EV0lOfFNCT1hPSyksCiBFWChDTURfbXpmaWxlLAkJIm16ZmlsZSIsCWV4X216ZmlsZSwKIAkJCVJBTkdFfEZJTEUxfE5FRURBUkd8Q01EV0lOKSwKIEVYKENNRF9uZXh0LAkJIm5leHQiLAkJZXhfbmV4dCwKZGlmZiAtLWdpdCBhL3NyYy9leF9jbWRzMi5jIGIvc3JjL2V4X2NtZHMyLmMKaW5kZXggZjllMWU1YS4uYzIyNDE0ZSAxMDA2NDQKLS0tIGEvc3JjL2V4X2NtZHMyLmMKKysrIGIvc3JjL2V4X2NtZHMyLmMKQEAgLTE0MSwxNiArMTQxLDkgQEAKICAgICBpZiAoc291cmNpbmdfbmFtZSAhPSBOVUxMKQogCW1zZyhzb3VyY2luZ19uYW1lKTsKICAgICBpZiAoc291cmNpbmdfbG51bSAhPSAwKQotICAgIHsKLQljaGFyX3UJICAgIGJ1ZltJT1NJWkVdOwotCi0JLyogVHJ1bmNhdGUgdGhlIGNvbW1hbmQsIHRoZSB3aG9sZSBtdXN0IGZpdCBpbiBJT2J1ZmYuICovCi0JU1RSTkNQWShidWYsIGNtZCwgSU9TSVpFIC0gNTApOwotCWJ1ZltJT1NJWkUgLSA1MF0gPSBOVUw7Ci0Jc21zZygoY2hhcl91ICopXygibGluZSAlbGQ6ICVzIiksIChsb25nKXNvdXJjaW5nX2xudW0sIGJ1Zik7Ci0gICAgfQorCXNtc2coKGNoYXJfdSAqKV8oImxpbmUgJWxkOiAlcyIpLCAobG9uZylzb3VyY2luZ19sbnVtLCBjbWQpOwogICAgIGVsc2UKLQltc2dfc3RyKChjaGFyX3UgKilfKCJjbWQ6ICVzIiksIGNtZCk7CisJc21zZygoY2hhcl91ICopXygiY21kOiAlcyIpLCBjbWQpOwogCiAgICAgLyoKICAgICAgKiBSZXBlYXQgZ2V0dGluZyBhIGNvbW1hbmQgYW5kIGV4ZWN1dGluZyBpdC4KQEAgLTM0Miw3ICszMzUsOCBAQAogCQlwID0gKGNoYXJfdSAqKSI8U05SPiI7CiAJICAgIGVsc2UKIAkJcCA9IChjaGFyX3UgKikiIjsKLQkgICAgc21zZygoY2hhcl91ICopXygiQnJlYWtwb2ludCBpbiBcIiVzJXNcIiBsaW5lICVsZCIpLCBwLAorCSAgICBzbXNnKChjaGFyX3UgKilfKCJCcmVha3BvaW50IGluIFwiJXMlc1wiIGxpbmUgJWxkIiksCisJCSAgICBwLAogCQkgICAgZGVidWdfYnJlYWtwb2ludF9uYW1lICsgKCpwID09IE5VTCA/IDAgOiAzKSwKIAkJICAgIChsb25nKWRlYnVnX2JyZWFrcG9pbnRfbG51bSk7CiAJICAgIGRlYnVnX2JyZWFrcG9pbnRfbmFtZSA9IE5VTEw7CkBAIC0yNDczLDEzICsyNDY3LDggQEAKICAgICBpZiAoYnVmICE9IE5VTEwgJiYgcnRwX2NvcHkgIT0gTlVMTCkKICAgICB7CiAJaWYgKHBfdmVyYm9zZSA+IDEpCi0JewotCSAgICBpZiAoU1RSTEVOKG5hbWUpICsgU1RSTEVOKHBfcnRwKSA+IElPU0laRSAtIDEwMCkKLQkJTVNHKF8oIlNlYXJjaGluZyBmb3IgYSBsb25nIG5hbWUgaW4gJ3J1bnRpbWVwYXRoJyIpKTsKLQkgICAgZWxzZQotCQlzbXNnKChjaGFyX3UgKilfKCJTZWFyY2hpbmcgZm9yIFwiJXNcIiBpbiBcIiVzXCIiKSwKKwkgICAgc21zZygoY2hhcl91ICopXygiU2VhcmNoaW5nIGZvciBcIiVzXCIgaW4gXCIlc1wiIiksCiAJCQkJCQkgKGNoYXIgKiluYW1lLCAoY2hhciAqKXBfcnRwKTsKLQl9CiAKIAkvKiBMb29wIG92ZXIgYWxsIGVudHJpZXMgaW4gJ3J1bnRpbWVwYXRoJy4gKi8KIAlydHAgPSBydHBfY29weTsKQEAgLTI1MDEsNyArMjQ5MCw3IEBACiAJCQkJCQkJCSAgICAgICAiXHQgIik7CiAKIAkJICAgIGlmIChwX3ZlcmJvc2UgPiAyKQotCQkJbXNnX3N0cigoY2hhcl91ICopXygiU2VhcmNoaW5nIGZvciBcIiVzXCIiKSwgYnVmKTsKKwkJCXNtc2coKGNoYXJfdSAqKV8oIlNlYXJjaGluZyBmb3IgXCIlc1wiIiksIGJ1Zik7CiAKIAkJICAgIC8qIEV4cGFuZCB3aWxkY2FyZHMsIGludm9rZSB0aGUgY2FsbGJhY2sgZm9yIGVhY2ggbWF0Y2guICovCiAJCSAgICBpZiAoZ2VuX2V4cGFuZF93aWxkY2FyZHMoMSwgJmJ1ZiwgJm51bV9maWxlcywgJmZpbGVzLApAQCAtMjUyMyw3ICsyNTEyLDcgQEAKICAgICB2aW1fZnJlZShidWYpOwogICAgIHZpbV9mcmVlKHJ0cF9jb3B5KTsKICAgICBpZiAocF92ZXJib3NlID4gMCAmJiAhZGlkX29uZSkKLQltc2dfc3RyKChjaGFyX3UgKilfKCJub3QgZm91bmQgaW4gJ3J1bnRpbWVwYXRoJzogXCIlc1wiIiksIG5hbWUpOworCXNtc2coKGNoYXJfdSAqKV8oIm5vdCBmb3VuZCBpbiAncnVudGltZXBhdGgnOiBcIiVzXCIiKSwgbmFtZSk7CiAKICNpZmRlZiBBTUlHQQogICAgIHByb2MtPnByX1dpbmRvd1B0ciA9IHNhdmVfd2lucHRyOwpAQCAtMjczMyw3ICsyNzIyLDcgQEAKICNlbmRpZgogICAgIGlmIChtY2hfaXNkaXIoZm5hbWVfZXhwKSkKICAgICB7Ci0JbXNnX3N0cigoY2hhcl91ICopXygiQ2Fubm90IHNvdXJjZSBhIGRpcmVjdG9yeTogXCIlc1wiIiksIGZuYW1lKTsKKwlzbXNnKChjaGFyX3UgKilfKCJDYW5ub3Qgc291cmNlIGEgZGlyZWN0b3J5OiBcIiVzXCIiKSwgZm5hbWUpOwogCWdvdG8gdGhlZW5kOwogICAgIH0KIApAQCAtMjc3MSwxMCArMjc2MCwxMCBAQAogCWlmIChwX3ZlcmJvc2UgPiAwKQogCXsKIAkgICAgaWYgKHNvdXJjaW5nX25hbWUgPT0gTlVMTCkKLQkJbXNnX3N0cigoY2hhcl91ICopXygiY291bGQgbm90IHNvdXJjZSBcIiVzXCIiKSwgZm5hbWUpOworCQlzbXNnKChjaGFyX3UgKilfKCJjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIpLCBmbmFtZSk7CiAJICAgIGVsc2UKIAkJc21zZygoY2hhcl91ICopXygibGluZSAlbGQ6IGNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIiksCi0JCQlzb3VyY2luZ19sbnVtLCBmbmFtZSk7CisJCQkJCQkJc291cmNpbmdfbG51bSwgZm5hbWUpOwogCX0KIAlnb3RvIHRoZWVuZDsKICAgICB9CkBAIC0yNzg3LDEwICsyNzc2LDEwIEBACiAgICAgaWYgKHBfdmVyYm9zZSA+IDEpCiAgICAgewogCWlmIChzb3VyY2luZ19uYW1lID09IE5VTEwpCi0JICAgIG1zZ19zdHIoKGNoYXJfdSAqKV8oInNvdXJjaW5nIFwiJXNcIiIpLCBmbmFtZSk7CisJICAgIHNtc2coKGNoYXJfdSAqKV8oInNvdXJjaW5nIFwiJXNcIiIpLCBmbmFtZSk7CiAJZWxzZQogCSAgICBzbXNnKChjaGFyX3UgKilfKCJsaW5lICVsZDogc291cmNpbmcgXCIlc1wiIiksCi0JCSAgICBzb3VyY2luZ19sbnVtLCBmbmFtZSk7CisJCQkJCQkJc291cmNpbmdfbG51bSwgZm5hbWUpOwogICAgIH0KICAgICBpZiAoaXNfdmltcmMpCiAJdmltcmNfZm91bmQoKTsKQEAgLTI5NzIsMTYgKzI5NjEsMTIgQEAKICAgICBzb3VyY2luZ19sbnVtID0gc2F2ZV9zb3VyY2luZ19sbnVtOwogICAgIGlmIChwX3ZlcmJvc2UgPiAxKQogICAgIHsKLQltc2dfc3RyKChjaGFyX3UgKilfKCJmaW5pc2hlZCBzb3VyY2luZyAlcyIpLCBmbmFtZSk7CisJc21zZygoY2hhcl91ICopXygiZmluaXNoZWQgc291cmNpbmcgJXMiKSwgZm5hbWUpOwogCWlmIChzb3VyY2luZ19uYW1lICE9IE5VTEwpCi0JICAgIG1zZ19zdHIoKGNoYXJfdSAqKV8oImNvbnRpbnVpbmcgaW4gJXMiKSwgc291cmNpbmdfbmFtZSk7CisJICAgIHNtc2coKGNoYXJfdSAqKV8oImNvbnRpbnVpbmcgaW4gJXMiKSwgc291cmNpbmdfbmFtZSk7CiAgICAgfQogI2lmZGVmIFNUQVJUVVBUSU1FCi0jIGlmZGVmIEhBVkVfU05QUklOVEYKLSAgICBzbnByaW50ZihJT2J1ZmYsIElPU0laRSwgInNvdXJjaW5nICVzIiwgZm5hbWUpOwotIyBlbHNlCi0gICAgc3ByaW50ZihJT2J1ZmYsICJzb3VyY2luZyAlcyIsIGZuYW1lKTsKLSMgZW5kaWYKKyAgICB2aW1fc25wcmludGYoSU9idWZmLCBJT1NJWkUsICJzb3VyY2luZyAlcyIsIGZuYW1lKTsKICAgICB0aW1lX21zZyhJT2J1ZmYsICZ0dl9zdGFydCk7CiAgICAgdGltZV9wb3AoJnR2X3JlbCk7CiAjZW5kaWYKQEAgLTQyNjMsMTQgKzQyNDgsMTUgQEAKIAkgICAgcGFnZV9wcnRwb3MgPSBwcnRwb3M7CiAJfQogCi0Jc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygiUHJpbnRlZDogJXMiKSwgc2V0dGluZ3Muam9ibmFtZSk7CisJdmltX3NucHJpbnRmKChjaGFyICopSU9idWZmLCBJT1NJWkUsIF8oIlByaW50ZWQ6ICVzIiksCisJCQkJCQkJICAgIHNldHRpbmdzLmpvYm5hbWUpOwogCXBydF9tZXNzYWdlKElPYnVmZik7CiAgICAgfQogCiBwcmludF9mYWlsOgogICAgIGlmIChnb3RfaW50IHx8IHNldHRpbmdzLnVzZXJfYWJvcnQpCiAgICAgewotCXNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIlByaW50aW5nIGFib3J0ZWQiKSk7CisJc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgIiVzIiwgXygiUHJpbnRpbmcgYWJvcnRlZCIpKTsKIAlwcnRfbWVzc2FnZShJT2J1ZmYpOwogICAgIH0KICAgICBtY2hfcHJpbnRfZW5kKCZzZXR0aW5ncyk7CkBAIC00OTU0LDcgKzQ5NDAsNyBAQAogcHJ0X3dyaXRlX3N0cmluZyhzKQogICAgIGNoYXIJKnM7CiB7Ci0gICAgc3ByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgIiVzIiwgcyk7CisgICAgdmltX3NucHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCBzaXplb2YocHJ0X2xpbmVfYnVmZmVyKSwgIiVzIiwgcyk7CiAgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKIH0KIApAQCAtNDk5MCw4ICs0OTc2LDggQEAKICAgICBpbnQJCWhlaWdodDsKICAgICBjaGFyCSpmb250OwogewotICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIvXyVzIC9WSU0tJXMgLyVzIHJlZlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X25hbWUsIGVuY29kaW5nLCBmb250KTsKKyAgICB2aW1fc25wcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsIHNpemVvZihwcnRfbGluZV9idWZmZXIpLAorCQkJICAiL18lcyAvVklNLSVzIC8lcyByZWZcbiIsIG5ld19uYW1lLCBlbmNvZGluZywgZm9udCk7CiAgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKICNpZmRlZiBGRUFUX01CWVRFCiAgICAgaWYgKHBydF9vdXRfbWJ5dGUpCkBAIC00OTk5LDggKzQ5ODUsOCBAQAogCQkgICAgICAgbmV3X25hbWUsIGhlaWdodCwgNTAwLi9wcnRfcHNfY291cmllcl9mb250Lnd4LCBuZXdfbmFtZSk7CiAgICAgZWxzZQogI2VuZGlmCi0gICAgc3ByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgIi8lcyAlZCAvXyVzIGZmc1xuIiwKLQkJCQkJCSAgICBuZXdfbmFtZSwgaGVpZ2h0LCBuZXdfbmFtZSk7CisJdmltX3NucHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCBzaXplb2YocHJ0X2xpbmVfYnVmZmVyKSwKKwkJCSAgICAgIi8lcyAlZCAvXyVzIGZmc1xuIiwgbmV3X25hbWUsIGhlaWdodCwgbmV3X25hbWUpOwogICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7CiB9CiAKQEAgLTUwMTQsMTEgKzUwMDAsMTEgQEAKICAgICBpbnQJCWhlaWdodDsKICAgICBjaGFyCSpjaWRmb250OwogewotICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIvXyVzIC8lc1svJXNdIHZpbV9jb21wb3NlZm9udFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19uYW1lLCBwcnRfY21hcCwgY2lkZm9udCk7CisgICAgdmltX3NucHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCBzaXplb2YocHJ0X2xpbmVfYnVmZmVyKSwKKwkgICAgICAiL18lcyAvJXNbLyVzXSB2aW1fY29tcG9zZWZvbnRcbiIsIG5ld19uYW1lLCBwcnRfY21hcCwgY2lkZm9udCk7CiAgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKLSAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiLyVzICVkIC9fJXMgZmZzXG4iLCBuZXdfbmFtZSwgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfbmFtZSk7CisgICAgdmltX3NucHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCBzaXplb2YocHJ0X2xpbmVfYnVmZmVyKSwKKwkJCSAgICAgIi8lcyAlZCAvXyVzIGZmc1xuIiwgbmV3X25hbWUsIGhlaWdodCwgbmV3X25hbWUpOwogICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7CiB9CiAKQEAgLTUwMzAsNyArNTAxNiw4IEBACiAgICAgY2hhcgkqb3JpZ2luYWxfbmFtZTsKICAgICBjaGFyCSpuZXdfbmFtZTsKIHsKLSAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiLyVzICVzIGRcbiIsIG5ld19uYW1lLCBvcmlnaW5hbF9uYW1lKTsKKyAgICB2aW1fc25wcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsIHNpemVvZihwcnRfbGluZV9idWZmZXIpLAorCQkJCSAgICAgICAiLyVzICVzIGRcbiIsIG5ld19uYW1lLCBvcmlnaW5hbF9uYW1lKTsKICAgICBwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOwogfQogI2VuZGlmCkBAIC01MTA1LDcgKzUwOTIsOCBAQAogICAgIGRvdWJsZQl2YWx1ZTsKICAgICBpbnQJCXByZWM7CiB7Ci0gICAgc3ByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgIi8lcyAiLCBuYW1lKTsKKyAgICB2aW1fc25wcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsIHNpemVvZihwcnRfbGluZV9idWZmZXIpLAorCQkJCQkJCQkiLyVzICIsIG5hbWUpOwogICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7CiAgICAgcHJ0X3dyaXRlX3JlYWwodmFsdWUsIHByZWMpOwogICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICJkXG4iKTsKQEAgLTU1MzIsNyArNTUyMCw4IEBACiBwcnRfZHNjX25vYXJnKGNvbW1lbnQpCiAgICAgY2hhcgkqY29tbWVudDsKIHsKLSAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiJSUlJSVzXG4iLCBjb21tZW50KTsKKyAgICB2aW1fc25wcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsIHNpemVvZihwcnRfbGluZV9idWZmZXIpLAorCQkJCQkJCSAiJSUlJSVzXG4iLCBjb21tZW50KTsKICAgICBwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOwogfQogCkBAIC01NTQxLDcgKzU1MzAsOCBAQAogICAgIGNoYXIJKmNvbW1lbnQ7CiAgICAgY2hhcgkqdGV4dDsKIHsKLSAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiJSUlJSVzOiAlc1xuIiwgY29tbWVudCwgdGV4dCk7CisgICAgdmltX3NucHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCBzaXplb2YocHJ0X2xpbmVfYnVmZmVyKSwKKwkJCQkJICAgICAgICIlJSUlJXM6ICVzXG4iLCBjb21tZW50LCB0ZXh0KTsKICAgICBwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOwogfQogCkBAIC01NTUxLDcgKzU1NDEsOCBAQAogICAgIGNoYXIJKnRleHQ7CiB7CiAgICAgLyogVE9ETyAtIHNob3VsZCBzY2FuICd0ZXh0JyBmb3IgYW55IGNoYXJzIG5lZWRpbmcgZXNjYXBpbmchICovCi0gICAgc3ByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgIiUlJSUlczogKCVzKVxuIiwgY29tbWVudCwgdGV4dCk7CisgICAgdmltX3NucHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCBzaXplb2YocHJ0X2xpbmVfYnVmZmVyKSwKKwkJCQkJICAgICAiJSUlJSVzOiAoJXMpXG4iLCBjb21tZW50LCB0ZXh0KTsKICAgICBwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOwogfQogCkBAIC01NTY1LDcgKzU1NTYsOCBAQAogewogICAgIGludAkJaTsKIAotICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIlJSUlJXM6IiwgY29tbWVudCk7CisgICAgdmltX3NucHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCBzaXplb2YocHJ0X2xpbmVfYnVmZmVyKSwKKwkJCQkJCQkgICIlJSUlJXM6IiwgY29tbWVudCk7CiAgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQpAQCAtNTU4NCwxMiArNTU3NiwxNSBAQAogICAgIGNoYXIJKnN0cmluZzsKIHsKICAgICBpZiAoY29tbWVudCAhPSBOVUxMKQotCXNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIlJSUlJXM6ICVzIiwgY29tbWVudCwgdHlwZSk7CisJdmltX3NucHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCBzaXplb2YocHJ0X2xpbmVfYnVmZmVyKSwKKwkJCQkJCSAiJSUlJSVzOiAlcyIsIGNvbW1lbnQsIHR5cGUpOwogICAgIGVsc2UKLQlzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiJSUlJSsgJXMiLCB0eXBlKTsKKwl2aW1fc25wcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsIHNpemVvZihwcnRfbGluZV9idWZmZXIpLAorCQkJCQkJCSAgICAiJSUlJSsgJXMiLCB0eXBlKTsKICAgICBwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOwogCi0gICAgc3ByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgIiAlc1xuIiwgc3RyaW5nKTsKKyAgICB2aW1fc25wcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsIHNpemVvZihwcnRfbGluZV9idWZmZXIpLAorCQkJCQkJCSAgICAgIiAlc1xuIiwgc3RyaW5nKTsKICAgICBwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOwogfQogCkBAIC01NjU0LDcgKzU2NDksOCBAQAogICAgIGNoYXIJKmNvbG91cjsKICAgICBjaGFyCSp0eXBlOwogewotICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIlJSUlRG9jdW1lbnRNZWRpYTogJXMgIiwgcGFwZXJfbmFtZSk7CisgICAgdmltX3NucHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCBzaXplb2YocHJ0X2xpbmVfYnVmZmVyKSwKKwkJCQkJIiUlJSVEb2N1bWVudE1lZGlhOiAlcyAiLCBwYXBlcl9uYW1lKTsKICAgICBwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOwogICAgIHBydF93cml0ZV9yZWFsKHdpZHRoLCAyKTsKICAgICBwcnRfd3JpdGVfcmVhbChoZWlnaHQsIDIpOwpkaWZmIC0tZ2l0IGEvc3JjL2lmX216c2NoLmMgYi9zcmMvaWZfbXpzY2guYwppbmRleCAxZTI0MDVlLi5jNjdjNDZkIDEwMDY0NAotLS0gYS9zcmMvaWZfbXpzY2guYworKysgYi9zcmMvaWZfbXpzY2guYwpAQCAtOTMsNiArOTMsMTEgQEAKICAqICBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIHZpbS9tenNjaGVtZSBpbnRlcmZhY2UKICAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KKyNpZmRlZiBIQVZFX1NBTkRCT1gKK3N0YXRpYyBTY2hlbWVfT2JqZWN0ICpzYW5kYm94X2ZpbGVfZ3VhcmQoaW50LCBTY2hlbWVfT2JqZWN0ICoqKTsKK3N0YXRpYyBTY2hlbWVfT2JqZWN0ICpzYW5kYm94X25ldHdvcmtfZ3VhcmQoaW50LCBTY2hlbWVfT2JqZWN0ICoqKTsKK3N0YXRpYyB2b2lkIHNhbmRib3hfY2hlY2soKTsKKyNlbmRpZgogLyogIEJ1ZmZlci1yZWxhdGVkIGNvbW1hbmRzICovCiBzdGF0aWMgU2NoZW1lX09iamVjdCAqYnVmZmVyX25ldyhidWZfVCAqYnVmKTsKIHN0YXRpYyBTY2hlbWVfT2JqZWN0ICpnZXRfYnVmZmVyX2J5X25hbWUodm9pZCAqLCBpbnQsIFNjaGVtZV9PYmplY3QgKiopOwpAQCAtMjA1LDExICsyMTAsMTUgQEAKIHN0YXRpYyBTY2hlbWVfT2JqZWN0ICooKmRsbF9zY2hlbWVfYXBwbHkpKFNjaGVtZV9PYmplY3QgKnJhdG9yLCBpbnQgbnVtX3JhbmRzLAogCVNjaGVtZV9PYmplY3QgKipyYW5kcyk7CiBzdGF0aWMgU2NoZW1lX09iamVjdCAqKCpkbGxfc2NoZW1lX2J1aWx0aW5fdmFsdWUpKGNvbnN0IGNoYXIgKm5hbWUpOworIyBpZiBNWlNDSEVNRV9WRVJTSU9OX01BSk9SID49IDI5OQorc3RhdGljIFNjaGVtZV9PYmplY3QgKigqZGxsX3NjaGVtZV9ieXRlX3N0cmluZ190b19jaGFyX3N0cmluZykoU2NoZW1lX09iamVjdCAqcyk7CisjIGVuZGlmCiBzdGF0aWMgdm9pZCAoKmRsbF9zY2hlbWVfY2xvc2VfaW5wdXRfcG9ydCkoU2NoZW1lX09iamVjdCAqcG9ydCk7CiBzdGF0aWMgdm9pZCAoKmRsbF9zY2hlbWVfY291bnRfbGluZXMpKFNjaGVtZV9PYmplY3QgKnBvcnQpOwogc3RhdGljIFNjaGVtZV9PYmplY3QgKigqZGxsX3NjaGVtZV9jdXJyZW50X2NvbnRpbnVhdGlvbl9tYXJrcykodm9pZCk7CiBzdGF0aWMgdm9pZCAoKmRsbF9zY2hlbWVfZGlzcGxheSkoU2NoZW1lX09iamVjdCAqb2JqLCBTY2hlbWVfT2JqZWN0ICpwb3J0KTsKIHN0YXRpYyBjaGFyICooKmRsbF9zY2hlbWVfZGlzcGxheV90b19zdHJpbmcpKFNjaGVtZV9PYmplY3QgKm9iaiwgbG9uZyAqbGVuKTsKK3N0YXRpYyBpbnQgKCpkbGxfc2NoZW1lX2VxKShTY2hlbWVfT2JqZWN0ICpvYmoxLCBTY2hlbWVfT2JqZWN0ICpvYmoyKTsKIHN0YXRpYyBTY2hlbWVfT2JqZWN0ICooKmRsbF9zY2hlbWVfZG9fZXZhbCkoU2NoZW1lX09iamVjdCAqb2JqLAogCWludCBfbnVtX3JhbmRzLCBTY2hlbWVfT2JqZWN0ICoqcmFuZHMsIGludCB2YWwpOwogc3RhdGljIHZvaWQgKCpkbGxfc2NoZW1lX2RvbnRfZ2NfcHRyKSh2b2lkICpwKTsKQEAgLTIyNSw2ICsyMzQsNyBAQAogIyBlbHNlCiBzdGF0aWMgY2hhciAqKCpkbGxfc2NoZW1lX2Zvcm1hdF91dGY4KShjaGFyICpmb3JtYXQsIGludCBmbGVuLCBpbnQgYXJnYywKIAlTY2hlbWVfT2JqZWN0ICoqYXJndiwgbG9uZyAqcmxlbik7CitzdGF0aWMgU2NoZW1lX09iamVjdCAqKCpkbGxfc2NoZW1lX2dldF9wYXJhbSkoU2NoZW1lX0NvbmZpZyAqYywgaW50IHBvcyk7CiAjIGVuZGlmCiBzdGF0aWMgdm9pZCAoKmRsbF9zY2hlbWVfZ2NfcHRyX29rKSh2b2lkICpwKTsKICMgaWYgTVpTQ0hFTUVfVkVSU0lPTl9NQUpPUiA8IDI5OQpAQCAtMjQ1LDYgKzI1NSw4IEBACiAJU2NoZW1lX09iamVjdCAqYXJndltdKTsKIHN0YXRpYyBTY2hlbWVfT2JqZWN0ICooKmRsbF9zY2hlbWVfbWFrZV9wYWlyKShTY2hlbWVfT2JqZWN0ICpjYXIsIAogCVNjaGVtZV9PYmplY3QgKmNkcik7CitzdGF0aWMgU2NoZW1lX09iamVjdCAqKCpkbGxfc2NoZW1lX21ha2VfcHJpbV93X2FyaXR5KShTY2hlbWVfUHJpbSAqcHJpbSwKKwljb25zdCBjaGFyICpuYW1lLCBtenNob3J0IG1pbmEsIG16c2hvcnQgbWF4YSk7CiAjIGlmIE1aU0NIRU1FX1ZFUlNJT05fTUFKT1IgPCAyOTkKIHN0YXRpYyBTY2hlbWVfT2JqZWN0ICooKmRsbF9zY2hlbWVfbWFrZV9zdHJpbmcpKGNvbnN0IGNoYXIgKmNoYXJzKTsKIHN0YXRpYyBTY2hlbWVfT2JqZWN0ICooKmRsbF9zY2hlbWVfbWFrZV9zdHJpbmdfb3V0cHV0X3BvcnQpKCk7CkBAIC0zMTEsNiArMzIzLDkgQEAKICMgZGVmaW5lIHNjaGVtZV9hcHBseSBkbGxfc2NoZW1lX2FwcGx5CiAjIGRlZmluZSBzY2hlbWVfYmFzaWNfZW52IGRsbF9zY2hlbWVfYmFzaWNfZW52CiAjIGRlZmluZSBzY2hlbWVfYnVpbHRpbl92YWx1ZSBkbGxfc2NoZW1lX2J1aWx0aW5fdmFsdWUKKyMgaWYgTVpTQ0hFTUVfVkVSU0lPTl9NQUpPUiA+PSAyOTkKKyMgIGRlZmluZSBzY2hlbWVfYnl0ZV9zdHJpbmdfdG9fY2hhcl9zdHJpbmcgZGxsX3NjaGVtZV9ieXRlX3N0cmluZ190b19jaGFyX3N0cmluZworIyBlbmRpZgogIyBkZWZpbmUgc2NoZW1lX2NoZWNrX3RocmVhZHMgZGxsX3NjaGVtZV9jaGVja190aHJlYWRzCiAjIGRlZmluZSBzY2hlbWVfY2xvc2VfaW5wdXRfcG9ydCBkbGxfc2NoZW1lX2Nsb3NlX2lucHV0X3BvcnQKICMgZGVmaW5lIHNjaGVtZV9jb3VudF9saW5lcyBkbGxfc2NoZW1lX2NvdW50X2xpbmVzCkBAIC0zMjAsNiArMzM1LDcgQEAKICMgZGVmaW5lIHNjaGVtZV9kaXNwbGF5X3RvX3N0cmluZyBkbGxfc2NoZW1lX2Rpc3BsYXlfdG9fc3RyaW5nCiAjIGRlZmluZSBzY2hlbWVfZG9fZXZhbCBkbGxfc2NoZW1lX2RvX2V2YWwKICMgZGVmaW5lIHNjaGVtZV9kb250X2djX3B0ciBkbGxfc2NoZW1lX2RvbnRfZ2NfcHRyCisjIGRlZmluZSBzY2hlbWVfZXEgZGxsX3NjaGVtZV9lcQogIyBkZWZpbmUgc2NoZW1lX2V2YWwgZGxsX3NjaGVtZV9ldmFsCiAjIGRlZmluZSBzY2hlbWVfZXZhbF9zdHJpbmcgZGxsX3NjaGVtZV9ldmFsX3N0cmluZwogIyBkZWZpbmUgc2NoZW1lX2V2YWxfc3RyaW5nX2FsbCBkbGxfc2NoZW1lX2V2YWxfc3RyaW5nX2FsbApAQCAtMzM1LDYgKzM1MSw3IEBACiAjIGVsc2UKICMgIGRlZmluZSBzY2hlbWVfZ2V0X3NpemVkX2J5dGVfc3RyaW5nX291dHB1dCBcCiAgICAgZGxsX3NjaGVtZV9nZXRfc2l6ZWRfYnl0ZV9zdHJpbmdfb3V0cHV0CisjIGRlZmluZSBzY2hlbWVfZ2V0X3BhcmFtIGRsbF9zY2hlbWVfZ2V0X3BhcmFtCiAjIGVuZGlmCiAjIGRlZmluZSBzY2hlbWVfaW50ZXJuX3N5bWJvbCBkbGxfc2NoZW1lX2ludGVybl9zeW1ib2wKICMgZGVmaW5lIHNjaGVtZV9sb29rdXBfZ2xvYmFsIGRsbF9zY2hlbWVfbG9va3VwX2dsb2JhbApAQCAtMzQyLDYgKzM1OSw3IEBACiAjIGRlZmluZSBzY2hlbWVfbWFrZV9pbnRlZ2VyX3ZhbHVlIGRsbF9zY2hlbWVfbWFrZV9pbnRlZ2VyX3ZhbHVlCiAjIGRlZmluZSBzY2hlbWVfbWFrZV9uYW1lc3BhY2UgZGxsX3NjaGVtZV9tYWtlX25hbWVzcGFjZQogIyBkZWZpbmUgc2NoZW1lX21ha2VfcGFpciBkbGxfc2NoZW1lX21ha2VfcGFpcgorIyBkZWZpbmUgc2NoZW1lX21ha2VfcHJpbV93X2FyaXR5IGRsbF9zY2hlbWVfbWFrZV9wcmltX3dfYXJpdHkKICMgaWYgTVpTQ0hFTUVfVkVSU0lPTl9NQUpPUiA8IDI5OQogIyAgZGVmaW5lIHNjaGVtZV9tYWtlX3N0cmluZyBkbGxfc2NoZW1lX21ha2Vfc3RyaW5nCiAjICBkZWZpbmUgc2NoZW1lX21ha2Vfc3RyaW5nX291dHB1dF9wb3J0IGRsbF9zY2hlbWVfbWFrZV9zdHJpbmdfb3V0cHV0X3BvcnQKQEAgLTM5OSw2ICs0MTcsOSBAQAogICAgIHsic2NoZW1lX2FkZF9nbG9iYWxfc3ltYm9sIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfYWRkX2dsb2JhbF9zeW1ib2x9LAogICAgIHsic2NoZW1lX2FwcGx5IiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfYXBwbHl9LAogICAgIHsic2NoZW1lX2Jhc2ljX2VudiIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2Jhc2ljX2Vudn0sCisjIGlmIE1aU0NIRU1FX1ZFUlNJT05fTUFKT1IgPj0gMjk5CisgICAgeyJzY2hlbWVfYnl0ZV9zdHJpbmdfdG9fY2hhcl9zdHJpbmciLCAodm9pZCAqKikmZGxsX3NjaGVtZV9ieXRlX3N0cmluZ190b19jaGFyX3N0cmluZ30sCisjIGVuZGlmCiAgICAgeyJzY2hlbWVfYnVpbHRpbl92YWx1ZSIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2J1aWx0aW5fdmFsdWV9LAogICAgIHsic2NoZW1lX2NoZWNrX3RocmVhZHMiLCAodm9pZCAqKikmZGxsX3NjaGVtZV9jaGVja190aHJlYWRzfSwKICAgICB7InNjaGVtZV9jbG9zZV9pbnB1dF9wb3J0IiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfY2xvc2VfaW5wdXRfcG9ydH0sCkBAIC00MDksNiArNDMwLDcgQEAKICAgICB7InNjaGVtZV9kaXNwbGF5X3RvX3N0cmluZyIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2Rpc3BsYXlfdG9fc3RyaW5nfSwKICAgICB7InNjaGVtZV9kb19ldmFsIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfZG9fZXZhbH0sCiAgICAgeyJzY2hlbWVfZG9udF9nY19wdHIiLCAodm9pZCAqKikmZGxsX3NjaGVtZV9kb250X2djX3B0cn0sCisgICAgeyJzY2hlbWVfZXEiLCAodm9pZCAqKikmZGxsX3NjaGVtZV9lcX0sCiAgICAgeyJzY2hlbWVfZXZhbCIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2V2YWx9LAogICAgIHsic2NoZW1lX2V2YWxfc3RyaW5nIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfZXZhbF9zdHJpbmd9LAogICAgIHsic2NoZW1lX2V2YWxfc3RyaW5nX2FsbCIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2V2YWxfc3RyaW5nX2FsbH0sCkBAIC00MTgsNiArNDQwLDcgQEAKICAgICB7InNjaGVtZV9mb3JtYXQiLCAodm9pZCAqKikmZGxsX3NjaGVtZV9mb3JtYXR9LAogIyBlbHNlCiAgICAgeyJzY2hlbWVfZm9ybWF0X3V0ZjgiLCAodm9pZCAqKikmZGxsX3NjaGVtZV9mb3JtYXRfdXRmOH0sCisgICAgeyJzY2hlbWVfZ2V0X3BhcmFtIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfZ2V0X3BhcmFtfSwKICNlbmRpZgogICAgIHsic2NoZW1lX2djX3B0cl9vayIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2djX3B0cl9va30sCiAjIGlmIE1aU0NIRU1FX1ZFUlNJT05fTUFKT1IgPCAyOTkKQEAgLTQzNCw2ICs0NTcsNyBAQAogICAgIHsic2NoZW1lX21ha2VfaW50ZWdlcl92YWx1ZSIsICh2b2lkICoqKSZkbGxfc2NoZW1lX21ha2VfaW50ZWdlcl92YWx1ZX0sCiAgICAgeyJzY2hlbWVfbWFrZV9uYW1lc3BhY2UiLCAodm9pZCAqKikmZGxsX3NjaGVtZV9tYWtlX25hbWVzcGFjZX0sCiAgICAgeyJzY2hlbWVfbWFrZV9wYWlyIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfbWFrZV9wYWlyfSwKKyAgICB7InNjaGVtZV9tYWtlX3ByaW1fd19hcml0eSIsICh2b2lkICoqKSZkbGxfc2NoZW1lX21ha2VfcHJpbV93X2FyaXR5fSwKICMgaWYgTVpTQ0hFTUVfVkVSU0lPTl9NQUpPUiA8IDI5OQogICAgIHsic2NoZW1lX21ha2Vfc3RyaW5nIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfbWFrZV9zdHJpbmd9LAogICAgIHsic2NoZW1lX21ha2Vfc3RyaW5nX291dHB1dF9wb3J0IiwgCkBAIC03MjcsNiArNzUxLDggQEAKICAgICBzdGF0aWMgdm9pZAogc3RhcnR1cF9tenNjaGVtZSh2b2lkKQogeworICAgIFNjaGVtZV9PYmplY3QgKnByb2NfbWFrZV9zZWN1cml0eV9ndWFyZDsKKwogICAgIHNjaGVtZV9zZXRfc3RhY2tfYmFzZShOVUxMLCAxKTsKIAogICAgIE1aX1JFR0lTVEVSX1NUQVRJQyhlbnZpcm9ubWVudCk7CkBAIC03NTEsNyArNzc3LDI0IEBACiAJICAgIHNjaGVtZV9tYWtlX3BhaXIoc2NoZW1lX21ha2Vfc3RyaW5nKE1aU0NIRU1FX0NPTExFQ1RTKSwKIAkJc2NoZW1lX251bGwpKTsKICNlbmRpZgotCisjaWZkZWYgSEFWRV9TQU5EQk9YCisgICAgLyogc2V0dXAgc2FuZGJveCBndWFyZHMgKi8KKyAgICBwcm9jX21ha2Vfc2VjdXJpdHlfZ3VhcmQgPSBzY2hlbWVfbG9va3VwX2dsb2JhbCgKKwkgICAgc2NoZW1lX2ludGVybl9zeW1ib2woIm1ha2Utc2VjdXJpdHktZ3VhcmQiKSwKKwkgICAgZW52aXJvbm1lbnQpOworICAgIGlmIChwcm9jX21ha2Vfc2VjdXJpdHlfZ3VhcmQgIT0gTlVMTCkKKyAgICB7CisJU2NoZW1lX09iamVjdCAqYXJnc1szXTsKKwlTY2hlbWVfT2JqZWN0ICpndWFyZDsKKwlhcmdzWzBdID0gc2NoZW1lX2dldF9wYXJhbShzY2hlbWVfY29uZmlnLCBNWkNPTkZJR19TRUNVUklUWV9HVUFSRCk7CisJYXJnc1sxXSA9IHNjaGVtZV9tYWtlX3ByaW1fd19hcml0eShzYW5kYm94X2ZpbGVfZ3VhcmQsCisJCSJzYW5kYm94LWZpbGUtZ3VhcmQiLCAzLCAzKTsKKwlhcmdzWzJdID0gc2NoZW1lX21ha2VfcHJpbV93X2FyaXR5KHNhbmRib3hfbmV0d29ya19ndWFyZCwKKwkJInNhbmRib3gtbmV0d29yay1ndWFyZCIsIDQsIDQpOworCWd1YXJkID0gc2NoZW1lX2FwcGx5KHByb2NfbWFrZV9zZWN1cml0eV9ndWFyZCwgMywgYXJncyk7CisJc2NoZW1lX3NldF9wYXJhbShzY2hlbWVfY29uZmlnLCBNWkNPTkZJR19TRUNVUklUWV9HVUFSRCwgZ3VhcmQpOworICAgIH0KKyNlbmRpZgogICAgIC8qIENyZWF0ZSBidWZmZXIgYW5kIHdpbmRvdyB0eXBlcyBmb3IgdXNlIGluIFNjaGVtZSBjb2RlICovCiAgICAgbXpfYnVmZmVyX3R5cGUgPSBzY2hlbWVfbWFrZV90eXBlKCI8dmltLWJ1ZmZlcj4iKTsKICAgICBtel93aW5kb3dfdHlwZSA9IHNjaGVtZV9tYWtlX3R5cGUoIjx2aW0td2luZG93PiIpOwpAQCAtMTU3OSw2ICsxNjIyLDkgQEAKICAgICBsb25nCSAgICBsbnVtID0gMDsKICAgICBsb25nCSAgICBjb2wgPSAwOwogCisjaWZkZWYgSEFWRV9TQU5EQk9YCisgICAgc2FuZGJveF9jaGVjaygpOworI2VuZGlmCiAgICAgd2luID0gZ2V0X3dpbmRvd19hcmcocHJpbS0+bmFtZSwgMSwgYXJnYywgYXJndik7CiAgICAgR1VBUkFOVEVFX1BBSVIocHJpbS0+bmFtZSwgMCk7CiAKQEAgLTE2MTUsNiArMTY2MSw5IEBACiAgICAgaW50CQkgICAgbnVtID0gMDsKICAgICBTY2hlbWVfT2JqZWN0ICAgKm9udW07CiAKKyNpZmRlZiBIQVZFX1NBTkRCT1gKKyAgICBzYW5kYm94X2NoZWNrKCk7CisjZW5kaWYKICAgICBmbmFtZSA9IFNDSEVNRV9TVFJfVkFMKEdVQVJBTlRFRV9TVFJJTkcocHJpbS0+bmFtZSwgMCkpOwogICAgIC8qIFRPRE8gbWFrZSBvcGVuIGV4aXN0aW5nIGZpbGUgKi8KICAgICBudW0gPSBidWZsaXN0X2FkZChmbmFtZSwgQkxOX0xJU1RFRCB8IEJMTl9DVVJCVUYpOwpAQCAtMTg2OSw2ICsxOTE4LDkgQEAKICAgICBidWZfVAkgICAgKnNhdmVidWY7CiAgICAgaW50CQkgICAgbjsKIAorI2lmZGVmIEhBVkVfU0FOREJPWAorICAgIHNhbmRib3hfY2hlY2soKTsKKyNlbmRpZgogICAgIG4gPSBTQ0hFTUVfSU5UX1ZBTChHVUFSQU5URUVfSU5URUdFUihwcmltLT5uYW1lLCAwKSk7CiAgICAgaWYgKCFTQ0hFTUVfU1RSSU5HUChhcmd2WzFdKSAmJiAhU0NIRU1FX0ZBTFNFUChhcmd2WzFdKSkKICAgICAgICAgc2NoZW1lX3dyb25nX3R5cGUocHJpbS0+bmFtZSwgInN0cmluZyBvciAjZiIsIDEsIGFyZ2MsIGFyZ3YpOwpAQCAtMTk1OCw2ICsyMDEwLDkgQEAKICAgICBpbnQJCSAgICBpLCBvbGRfbGVuLCBuZXdfbGVuLCBoaSwgbG87CiAgICAgbG9uZwkgICAgZXh0cmE7CiAKKyNpZmRlZiBIQVZFX1NBTkRCT1gKKyAgICBzYW5kYm94X2NoZWNrKCk7CisjZW5kaWYKICAgICBsbyA9IFNDSEVNRV9JTlRfVkFMKEdVQVJBTlRFRV9JTlRFR0VSKHByaW0tPm5hbWUsIDApKTsKICAgICBoaSA9IFNDSEVNRV9JTlRfVkFMKEdVQVJBTlRFRV9JTlRFR0VSKHByaW0tPm5hbWUsIDEpKTsKICAgICBpZiAoIVNDSEVNRV9QQUlSUChhcmd2WzJdKQpAQCAtMjEyMSw2ICsyMTc2LDkgQEAKICAgICBidWZfVAkgICAgKnNhdmVidWY7CiAgICAgaW50CQkgICAgaSwgbiwgc2l6ZTsKIAorI2lmZGVmIEhBVkVfU0FOREJPWAorICAgIHNhbmRib3hfY2hlY2soKTsKKyNlbmRpZgogICAgIC8qCiAgICAgICogRmlyc3Qgb2YgYWxsLCB3ZSBjaGVjayB0aGUgdHlwZSBvZiB0aGUgc3VwcGxpZWQgTXpTY2hlbWUgb2JqZWN0LgogICAgICAqIEl0IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBsaXN0LCBvciB0aGUgY2FsbCBpcyBpbiBlcnJvci4KQEAgLTIzODAsOCArMjQzOCw5IEBACiAgICAgaWYgKGFkZF9pbmZvICE9IE5VTEwpCiAgICAgewogCVNjaGVtZV9PYmplY3QgICAqaW5mbyA9IHNjaGVtZV9tYWtlX3N0cmluZyhhZGRfaW5mbyk7Ci0JYXJndlswXSA9IHNjaGVtZV9tYWtlX3N0cmluZygKLQkJc2NoZW1lX2Zvcm1hdChmbXQsIHN0cmxlbihmbXQpLCAxLCAmaW5mbywgTlVMTCkpOworCWFyZ3ZbMF0gPSBzY2hlbWVfYnl0ZV9zdHJpbmdfdG9fY2hhcl9zdHJpbmcoc2NoZW1lX21ha2Vfc3RyaW5nKAorCQlzY2hlbWVfZm9ybWF0KGZtdCwgc3RybGVuKGZtdCksIDEsICZpbmZvLCBOVUxMKSkpOworCVNDSEVNRV9TRVRfSU1NVVRBQkxFKGFyZ3ZbMF0pOwogICAgIH0KICAgICBlbHNlCiAJYXJndlswXSA9IHNjaGVtZV9tYWtlX3N0cmluZyhfKCJWaW0gZXJyb3IiKSk7CkBAIC0yNTk2LDMgKzI2NTUsNjYgQEAKICAgICBzY2hlbWVfYWRkX2dsb2JhbCgiZ2xvYmFsLW5hbWVzcGFjZSIsIChTY2hlbWVfT2JqZWN0ICopZW52aXJvbm1lbnQsIG1vZCk7CiAgICAgc2NoZW1lX2ZpbmlzaF9wcmltaXRpdmVfbW9kdWxlKG1vZCk7CiB9CisgICAgCisjaWZkZWYgSEFWRV9TQU5EQk9YCitzdGF0aWMgU2NoZW1lX09iamVjdCAqTV93cml0ZSA9IE5VTEw7CitzdGF0aWMgU2NoZW1lX09iamVjdCAqTV9yZWFkID0gTlVMTDsKK3N0YXRpYyBTY2hlbWVfT2JqZWN0ICpNX2V4ZWN1dGUgPSBOVUxMOworc3RhdGljIFNjaGVtZV9PYmplY3QgKk1fZGVsZXRlID0gTlVMTDsKKworICAgIHN0YXRpYyB2b2lkCitzYW5kYm94X2NoZWNrKCkKK3sKKyAgICBpZiAoc2FuZGJveCkKKwlyYWlzZV92aW1fZXhuKF8oIm5vdCBhbGxvd2VkIGluIHRoZSBWaW0gc2FuZGJveCIpKTsKK30KKworLyogc2VjdXJpdHkgZ3VhcmRzIHRvIGZvcmNlIFZpbSdzIHNhbmRib3ggcmVzdHJpY3Rpb25zIG9uIE16U2NoZW1lIGxldmVsICovIAorICAgIHN0YXRpYyBTY2hlbWVfT2JqZWN0ICoKK3NhbmRib3hfZmlsZV9ndWFyZChpbnQgYXJnYywgU2NoZW1lX09iamVjdCAqKmFyZ3YpCit7CisgICAgaWYgKHNhbmRib3gpCisgICAgeworCVNjaGVtZV9PYmplY3QgKnJlcXVlc3RlZF9hY2Nlc3MgPSBhcmd2WzJdOworCisJaWYgKE1fd3JpdGUgPT0gTlVMTCkKKwl7CisJICAgIE1aX1JFR0lTVEVSX1NUQVRJQyhNX3dyaXRlKTsKKwkgICAgTV93cml0ZSA9IHNjaGVtZV9pbnRlcm5fc3ltYm9sKCJ3cml0ZSIpOworCX0KKwlpZiAoTV9yZWFkID09IE5VTEwpCisJeworCSAgICBNWl9SRUdJU1RFUl9TVEFUSUMoTV9yZWFkKTsKKwkgICAgTV9yZWFkID0gc2NoZW1lX2ludGVybl9zeW1ib2woInJlYWQiKTsKKwl9CisJaWYgKE1fZXhlY3V0ZSA9PSBOVUxMKQorCXsKKwkgICAgTVpfUkVHSVNURVJfU1RBVElDKE1fZXhlY3V0ZSk7CisJICAgIE1fZXhlY3V0ZSA9IHNjaGVtZV9pbnRlcm5fc3ltYm9sKCJleGVjdXRlIik7CisJfQorCWlmIChNX2RlbGV0ZSA9PSBOVUxMKQorCXsKKwkgICAgTVpfUkVHSVNURVJfU1RBVElDKE1fZGVsZXRlKTsKKwkgICAgTV9kZWxldGUgPSBzY2hlbWVfaW50ZXJuX3N5bWJvbCgiZGVsZXRlIik7CisJfQorCisJd2hpbGUgKCFTQ0hFTUVfTlVMTFAocmVxdWVzdGVkX2FjY2VzcykpCisJeworCSAgICBTY2hlbWVfT2JqZWN0ICppdGVtID0gU0NIRU1FX0NBUihyZXF1ZXN0ZWRfYWNjZXNzKTsKKwkgICAgaWYgKHNjaGVtZV9lcShpdGVtLCBNX3dyaXRlKSB8fCBzY2hlbWVfZXEoaXRlbSwgTV9yZWFkKQorCQkgICAgfHwgc2NoZW1lX2VxKGl0ZW0sIE1fZXhlY3V0ZSkgfHwgc2NoZW1lX2VxKGl0ZW0sIE1fZGVsZXRlKSkKKwkgICAgeworCQlyYWlzZV92aW1fZXhuKF8oIm5vdCBhbGxvd2VkIGluIHRoZSBWaW0gc2FuZGJveCIpKTsKKwkgICAgfQorCSAgICByZXF1ZXN0ZWRfYWNjZXNzID0gU0NIRU1FX0NEUihyZXF1ZXN0ZWRfYWNjZXNzKTsKKwl9CisgICAgfQorICAgIHJldHVybiBzY2hlbWVfdm9pZDsKK30KKworICAgIHN0YXRpYyBTY2hlbWVfT2JqZWN0ICoKK3NhbmRib3hfbmV0d29ya19ndWFyZChpbnQgYXJnYywgU2NoZW1lX09iamVjdCAqKmFyZ3YpCit7CisgICAgcmV0dXJuIHNjaGVtZV92b2lkOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaWZfbXpzY2guaCBiL3NyYy9pZl9tenNjaC5oCmluZGV4IDg4ZjZhNTQuLjk4YmNmNzQgMTAwNjQ0Ci0tLSBhL3NyYy9pZl9tenNjaC5oCisrKyBiL3NyYy9pZl9tenNjaC5oCkBAIC0zNCwxMiArMzQsMTMgQEAKICMgZW5kaWYKICMgZGVmaW5lIHNjaGVtZV9mb3JtYXQgc2NoZW1lX2Zvcm1hdF91dGY4CiAKLSMgZGVmaW5lIEdFVF9CWVRFX1NUUklORyhvYmopIChTQ0hFTUVfQllURV9TVFJJTkdQKG9iaikgPyBvYmogOiAgIFwKKyMgZGVmaW5lIFNDSEVNRV9HRVRfQllURV9TVFJJTkcob2JqKSAoU0NIRU1FX0JZVEVfU1RSSU5HUChvYmopID8gb2JqIDogICBcCiAJc2NoZW1lX2NoYXJfc3RyaW5nX3RvX2J5dGVfc3RyaW5nKG9iaikpCiAjZWxzZQotIyBkZWZpbmUgR0VUX0JZVEVfU1RSSU5HKG9iaikgKG9iaikKKyMgZGVmaW5lIFNDSEVNRV9HRVRfQllURV9TVFJJTkcob2JqKSAob2JqKQogIyBkZWZpbmUgU0NIRU1FX0JZVEVfU1RSTEVOX1ZBTCBTQ0hFTUVfU1RSTEVOX1ZBTAogIyBkZWZpbmUgU0NIRU1FX0JZVEVfU1RSX1ZBTCBTQ0hFTUVfU1RSX1ZBTAorIyBkZWZpbmUgc2NoZW1lX2J5dGVfc3RyaW5nX3RvX2NoYXJfc3RyaW5nKG9iaikgKG9iaikKICNlbmRpZgogCiAjZW5kaWYgLyogX0lGX01aU0NIX0hfICovCmRpZmYgLS1naXQgYS9zcmMvaWZfcHl0aG9uLmMgYi9zcmMvaWZfcHl0aG9uLmMKaW5kZXggMDJkNmFjMS4uYjc5OTA0NyAxMDA2NDQKLS0tIGEvc3JjL2lmX3B5dGhvbi5jCisrKyBiL3NyYy9pZl9weXRob24uYwpAQCAtMTM2OSwxMiArMTM2OSwxMyBAQAogICAgIHN0YXRpYyBQeU9iamVjdCAqCiBCdWZmZXJSZXByKFB5T2JqZWN0ICpzZWxmKQogewotICAgIHN0YXRpYyBjaGFyIHJlcHJbNTBdOworICAgIHN0YXRpYyBjaGFyIHJlcHJbMTAwXTsKICAgICBCdWZmZXJPYmplY3QgKnRoaXMgPSAoQnVmZmVyT2JqZWN0ICopKHNlbGYpOwogCiAgICAgaWYgKHRoaXMtPmJ1ZiA9PSBJTlZBTElEX0JVRkZFUl9WQUxVRSkKICAgICB7Ci0Jc3ByaW50ZihyZXByLCBfKCI8YnVmZmVyIG9iamVjdCAoZGVsZXRlZCkgYXQgJThsWD4iKSwgKGxvbmcpKHNlbGYpKTsKKwl2aW1fc25wcmludGYocmVwciwgMTAwLCBfKCI8YnVmZmVyIG9iamVjdCAoZGVsZXRlZCkgYXQgJThsWD4iKSwKKwkJCQkJCQkJKGxvbmcpKHNlbGYpKTsKIAlyZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyhyZXByKTsKICAgICB9CiAgICAgZWxzZQpAQCAtMTM4OSw3ICsxMzkwLDcgQEAKIAlpZiAobGVuID4gMzUpCiAJICAgIG5hbWUgPSBuYW1lICsgKDM1IC0gbGVuKTsKIAotCXNwcmludGYocmVwciwgIjxidWZmZXIgJXMlcz4iLCBsZW4gPiAzNSA/ICIuLi4iIDogIiIsIG5hbWUpOworCXZpbV9zbnByaW50ZihyZXByLCAxMDAsICI8YnVmZmVyICVzJXM+IiwgbGVuID4gMzUgPyAiLi4uIiA6ICIiLCBuYW1lKTsKIAogCXJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKHJlcHIpOwogICAgIH0KQEAgLTE1ODgsMTIgKzE1ODksMTIgQEAKICAgICBzdGF0aWMgUHlPYmplY3QgKgogUmFuZ2VSZXByKFB5T2JqZWN0ICpzZWxmKQogewotICAgIHN0YXRpYyBjaGFyIHJlcHJbNzVdOworICAgIHN0YXRpYyBjaGFyIHJlcHJbMTAwXTsKICAgICBSYW5nZU9iamVjdCAqdGhpcyA9IChSYW5nZU9iamVjdCAqKShzZWxmKTsKIAogICAgIGlmICh0aGlzLT5idWYtPmJ1ZiA9PSBJTlZBTElEX0JVRkZFUl9WQUxVRSkKICAgICB7Ci0Jc3ByaW50ZihyZXByLCAiPHJhbmdlIG9iamVjdCAoZm9yIGRlbGV0ZWQgYnVmZmVyKSBhdCAlOGxYPiIsCisJdmltX3NucHJpbnRmKHJlcHIsIDEwMCwgIjxyYW5nZSBvYmplY3QgKGZvciBkZWxldGVkIGJ1ZmZlcikgYXQgJThsWD4iLAogCQkJCQkJCQkobG9uZykoc2VsZikpOwogCXJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKHJlcHIpOwogICAgIH0KQEAgLTE2MDksNyArMTYxMCw3IEBACiAJaWYgKGxlbiA+IDQ1KQogCSAgICBuYW1lID0gbmFtZSArICg0NSAtIGxlbik7CiAKLQlzcHJpbnRmKHJlcHIsICI8cmFuZ2UgJXMlcyAoJWQ6JWQpPiIsCisJdmltX3NucHJpbnRmKHJlcHIsIDEwMCwgIjxyYW5nZSAlcyVzICglZDolZCk+IiwKIAkJbGVuID4gNDUgPyAiLi4uIiA6ICIiLCBuYW1lLAogCQl0aGlzLT5zdGFydCwgdGhpcy0+ZW5kKTsKIApAQCAtMTk2MywxMiArMTk2NCwxMyBAQAogICAgIHN0YXRpYyBQeU9iamVjdCAqCiBXaW5kb3dSZXByKFB5T2JqZWN0ICpzZWxmKQogewotICAgIHN0YXRpYyBjaGFyIHJlcHJbNTBdOworICAgIHN0YXRpYyBjaGFyIHJlcHJbMTAwXTsKICAgICBXaW5kb3dPYmplY3QgKnRoaXMgPSAoV2luZG93T2JqZWN0ICopKHNlbGYpOwogCiAgICAgaWYgKHRoaXMtPndpbiA9PSBJTlZBTElEX1dJTkRPV19WQUxVRSkKICAgICB7Ci0Jc3ByaW50ZihyZXByLCBfKCI8d2luZG93IG9iamVjdCAoZGVsZXRlZCkgYXQgJS44bFg+IiksIChsb25nKShzZWxmKSk7CisJdmltX3NucHJpbnRmKHJlcHIsIDEwMCwgXygiPHdpbmRvdyBvYmplY3QgKGRlbGV0ZWQpIGF0ICUuOGxYPiIpLAorCQkJCQkJCQkobG9uZykoc2VsZikpOwogCXJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKHJlcHIpOwogICAgIH0KICAgICBlbHNlCkBAIC0xOTgwLDkgKzE5ODIsMTAgQEAKIAkgICAgKytpOwogCiAJaWYgKHcgPT0gTlVMTCkKLQkgICAgc3ByaW50ZihyZXByLCBfKCI8d2luZG93IG9iamVjdCAodW5rbm93bikgYXQgJS44bFg+IiksIChsb25nKShzZWxmKSk7CisJICAgIHZpbV9zbnByaW50ZihyZXByLCAxMDAsIF8oIjx3aW5kb3cgb2JqZWN0ICh1bmtub3duKSBhdCAlLjhsWD4iKSwKKwkJCQkJCQkJKGxvbmcpKHNlbGYpKTsKIAllbHNlCi0JICAgIHNwcmludGYocmVwciwgXygiPHdpbmRvdyAlZD4iKSwgaSk7CisJICAgIHZpbV9zbnByaW50ZihyZXByLCAxMDAsIF8oIjx3aW5kb3cgJWQ+IiksIGkpOwogCiAJcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcocmVwcik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2lmX3RjbC5jIGIvc3JjL2lmX3RjbC5jCmluZGV4IDNjMDgzMjUuLjhmNzVlMGQgMTAwNjQ0Ci0tLSBhL3NyYy9pZl90Y2wuYworKysgYi9zcmMvaWZfdGNsLmMKQEAgLTg1Miw3ICs4NTIsOSBAQAogCSAgICBlbHNlCiAJICAgIHsKIAkJY2hhciByYnVmWzY0XTsKLQkJc3ByaW50ZihyYnVmLCBfKCJyb3cgJWQgY29sdW1uICVkIiksIChpbnQpcm93MnRjbChwb3MtPmxudW0pLCAoaW50KWNvbDJ0Y2wocG9zLT5jb2wpKTsKKworCQlzcHJpbnRmKHJidWYsIF8oInJvdyAlZCBjb2x1bW4gJWQiKSwKKwkJCSAgICAgKGludClyb3cydGNsKHBvcy0+bG51bSksIChpbnQpY29sMnRjbChwb3MtPmNvbCkpOwogCQlUY2xfU2V0UmVzdWx0KGludGVycCwgcmJ1ZiwgVENMX1ZPTEFUSUxFKTsKIAkgICAgfQogCSAgICBicmVhazsKQEAgLTg3NCw3ICs4NzYsOCBAQAogCQktLXZhbDE7CiAJICAgIGlmICh1X3NhdmUoKGxpbmVucl9UKXZhbDEsIChsaW5lbnJfVCkodmFsMSsxKSkgIT0gT0spCiAJICAgIHsKLQkJVGNsX1NldFJlc3VsdChpbnRlcnAsIF8oImNhbm5vdCBzYXZlIHVuZG8gaW5mb3JtYXRpb24iKSwgVENMX1NUQVRJQyk7CisJCVRjbF9TZXRSZXN1bHQoaW50ZXJwLCBfKCJjYW5ub3Qgc2F2ZSB1bmRvIGluZm9ybWF0aW9uIiksCisJCQkJCQkJCSAgVENMX1NUQVRJQyk7CiAJCWVyciA9IFRDTF9FUlJPUjsKIAkJYnJlYWs7CiAJICAgIH0KQEAgLTg4Miw3ICs4ODUsOCBAQAogCSAgICBsaW5lID0gVGNsX0dldFN0cmluZ0Zyb21PYmoob2JqdlszXSwgTlVMTCk7CiAJICAgIGlmIChtbF9hcHBlbmQoKGxpbmVucl9UKXZhbDEsIChjaGFyX3UgKilsaW5lLCAwLCBGQUxTRSkgIT0gT0spCiAJICAgIHsKLQkJVGNsX1NldFJlc3VsdChpbnRlcnAsIF8oImNhbm5vdCBpbnNlcnQvYXBwZW5kIGxpbmUiKSwgVENMX1NUQVRJQyk7CisJCVRjbF9TZXRSZXN1bHQoaW50ZXJwLCBfKCJjYW5ub3QgaW5zZXJ0L2FwcGVuZCBsaW5lIiksCisJCQkJCQkJCSAgVENMX1NUQVRJQyk7CiAJCWVyciA9IFRDTF9FUlJPUjsKIAkJYnJlYWs7CiAJICAgIH0KQEAgLTEwNjcsNiArMTA3MSw3IEBACiAJICAgIGlmIChvYmpjID09IDIpCiAJICAgIHsKIAkJY2hhciBidWZbNjRdOworCiAJCXNwcmludGYoYnVmLCBfKCJyb3cgJWQgY29sdW1uICVkIiksIChpbnQpcm93MnRjbCh3aW4tPndfY3Vyc29yLmxudW0pLCAoaW50KWNvbDJ0Y2wod2luLT53X2N1cnNvci5jb2wpKTsKIAkJVGNsX1NldFJlc3VsdChpbnRlcnAsIGJ1ZiwgVENMX1ZPTEFUSUxFKTsKIAkJYnJlYWs7CkBAIC0xNDg2LDcgKzE0OTEsOCBAQAogICAgIH0KIAogICAgIGlmIChyZWYpCi0Jc3ByaW50ZihuYW1lLCAiOjp2aW06OiVzIiwgVGNsX0dldENvbW1hbmROYW1lKGludGVycCwgcmVmLT5jbWQpKTsKKwl2aW1fc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiOjp2aW06OiVzIiwKKwkJCQkJVGNsX0dldENvbW1hbmROYW1lKGludGVycCwgcmVmLT5jbWQpKTsKICAgICBlbHNlCiAgICAgewogCWlmICh1bnVzZWQpCkBAIC0xNTA3LDcgKzE1MTMsOCBAQAogCX0KIAogCS8qIFRoaXMgbWlnaHQgYnJlYWsgb24gc29tZSBleG90aWMgc3lzdGVtcy4uLiAqLwotCXNwcmludGYobmFtZSwgIjo6dmltOjolc18lbHgiLCBwcmVmaXgsICh1bnNpZ25lZCBsb25nKXZpbW9iaik7CisJdmltX3NucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIjo6dmltOjolc18lbHgiLAorCQkJCQkgICAgICAgcHJlZml4LCAodW5zaWduZWQgbG9uZyl2aW1vYmopOwogCWNtZCA9IFRjbF9DcmVhdGVPYmpDb21tYW5kKGludGVycCwgbmFtZSwgcHJvYywKIAkgICAgKENsaWVudERhdGEpcmVmLCAoVGNsX0NtZERlbGV0ZVByb2MgKilkZWxyZWYpOwogCWlmICghY21kKQpAQCAtMTg4MSw3ICsxODg4LDcgQEAKICAgICBpZiAoZXJyb3IgPT0gVENMX0VYSVQgKQogICAgIHsKIAlpbnQgcmV0dmFsOwotCWNoYXIgYnVmWzMyXTsKKwljaGFyIGJ1Zls1MF07CiAJVGNsX09iaiAqcm9iajsKIAogCXJvYmogPSBUY2xfR2V0T2JqUmVzdWx0KHRjbGluZm8uaW50ZXJwKTsKQEAgLTE4OTIsNyArMTg5OSw3IEBACiAJfQogCWVsc2UKIAl7Ci0JICAgIHNwcmludGYoYnVmLCAiRTU3MjogZXhpdCBjb2RlICVkIiwgcmV0dmFsKTsKKwkgICAgc3ByaW50ZihidWYsIF8oIkU1NzI6IGV4aXQgY29kZSAlZCIpLCByZXR2YWwpOwogCSAgICB0Y2xlcnJtc2coYnVmKTsKIAkgICAgaWYgKHJldHZhbCA9PSAwICkKIAkgICAgewpkaWZmIC0tZ2l0IGEvc3JjL21lbWxpbmUuYyBiL3NyYy9tZW1saW5lLmMKaW5kZXggZDUxNzVlNC4uOWY5ZTMwNyAxMDA2NDQKLS0tIGEvc3JjL21lbWxpbmUuYworKysgYi9zcmMvbWVtbGluZS5jCkBAIC0xMDE1LDEzICsxMDE1LDEzIEBACiAgICAgfQogCiAgICAgaG9tZV9yZXBsYWNlKE5VTEwsIG1mcC0+bWZfZm5hbWUsIE5hbWVCdWZmLCBNQVhQQVRITCwgVFJVRSk7Ci0gICAgbXNnX3N0cigoY2hhcl91ICopXygiVXNpbmcgc3dhcCBmaWxlIFwiJXNcIiIpLCBOYW1lQnVmZik7CisgICAgc21zZygoY2hhcl91ICopXygiVXNpbmcgc3dhcCBmaWxlIFwiJXNcIiIpLCBOYW1lQnVmZik7CiAKICAgICBpZiAoYnVmX3NwbmFtZShjdXJidWYpICE9IE5VTEwpCiAJU1RSQ1BZKE5hbWVCdWZmLCBidWZfc3BuYW1lKGN1cmJ1ZikpOwogICAgIGVsc2UKIAlob21lX3JlcGxhY2UoTlVMTCwgY3VyYnVmLT5iX2ZmbmFtZSwgTmFtZUJ1ZmYsIE1BWFBBVEhMLCBUUlVFKTsKLSAgICBtc2dfc3RyKChjaGFyX3UgKilfKCJPcmlnaW5hbCBmaWxlIFwiJXNcIiIpLCBOYW1lQnVmZik7CisgICAgc21zZygoY2hhcl91ICopXygiT3JpZ2luYWwgZmlsZSBcIiVzXCIiKSwgTmFtZUJ1ZmYpOwogICAgIG1zZ19wdXRjaGFyKCdcbicpOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL21pc2MxLmMgYi9zcmMvbWlzYzEuYwppbmRleCA2NjAzYzI2Li5kNGRhYmU2IDEwMDY0NAotLS0gYS9zcmMvbWlzYzEuYworKysgYi9zcmMvbWlzYzEuYwpAQCAtMzI5NSw3ICszMjk1LDcgQEAKIAkgICAgaWYgKGV4cCAhPSBOVUxMICYmICpleHAgIT0gTlVMCiAJCQkJCSYmIFNUUkxFTihleHApICsgU1RSTEVOKHApIDwgTUFYUEFUSEwpCiAJICAgIHsKLQkJc3ByaW50ZigoY2hhciAqKU5hbWVCdWZmLCAiJXMlcyIsIGV4cCwgcCArIDEpOworCQl2aW1fc25wcmludGYoKGNoYXIgKilOYW1lQnVmZiwgTUFYUEFUSEwsICIlcyVzIiwgZXhwLCBwICsgMSk7CiAJCXZhciA9IE5hbWVCdWZmOwogCQkvKiBBbHNvIHNldCAkSE9NRSwgaXQncyBuZWVkZWQgZm9yIF92aW1pbmZvLiAqLwogCQl2aW1fc2V0ZW52KChjaGFyX3UgKikiSE9NRSIsIE5hbWVCdWZmKTsKZGlmZiAtLWdpdCBhL3NyYy9vcHMuYyBiL3NyYy9vcHMuYwppbmRleCBlY2M5YWQ5Li45NGRjMzljIDEwMDY0NAotLS0gYS9zcmMvb3BzLmMKKysrIGIvc3JjL29wcy5jCkBAIC01MjI2LDcgKzUyMjYsNyBAQAogI2VuZGlmCiAJICAgIGRlZmF1bHQ6CiAJCXNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIkU1NzQ6IFVua25vd24gcmVnaXN0ZXIgdHlwZSAlZCIpLAotCQkgICAgeV9yZWdzW2ldLnlfdHlwZSk7CisJCQkJCQkJICAgIHlfcmVnc1tpXS55X3R5cGUpOwogCQllbXNnKElPYnVmZik7CiAJCXR5cGUgPSAoY2hhcl91ICopIkxJTkUiOwogCQlicmVhazsKQEAgLTU5NDMsOCArNTk0Myw4IEBACiBjdXJzb3JfcG9zX2luZm8oKQogewogICAgIGNoYXJfdQkqcDsKLSAgICBjaGFyX3UJYnVmMVsyMF07Ci0gICAgY2hhcl91CWJ1ZjJbMjBdOworICAgIGNoYXJfdQlidWYxWzUwXTsKKyAgICBjaGFyX3UJYnVmMls0MF07CiAgICAgbGluZW5yX1QJbG51bTsKICAgICBsb25nCWJ5dGVfY291bnQgPSAwOwogICAgIGxvbmcJYnl0ZV9jb3VudF9jdXJzb3IgPSAwOwpAQCAtNjEwNiw3ICs2MTA2LDcgQEAKIAkJYnVmMVswXSA9IE5VTDsKIAogCSAgICBpZiAoY2hhcl9jb3VudF9jdXJzb3IgPT0gYnl0ZV9jb3VudF9jdXJzb3IKLQkJICAgICYmIGNoYXJfY291bnQgPT0gYnl0ZV9jb3VudCkKKwkJCQkJCSAgJiYgY2hhcl9jb3VudCA9PSBieXRlX2NvdW50KQogCQlzcHJpbnRmKChjaGFyICopSU9idWZmLCBfKCJTZWxlY3RlZCAlcyVsZCBvZiAlbGQgTGluZXM7ICVsZCBvZiAlbGQgV29yZHM7ICVsZCBvZiAlbGQgQnl0ZXMiKSwKIAkJCWJ1ZjEsIGxpbmVfY291bnRfc2VsZWN0ZWQsCiAJCQkobG9uZyljdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCwKZGlmZiAtLWdpdCBhL3NyYy9vcHRpb24uYyBiL3NyYy9vcHRpb24uYwppbmRleCBlZTMzZGY5Li4xZjRjZTc0IDEwMDY0NAotLS0gYS9zcmMvb3B0aW9uLmMKKysrIGIvc3JjL29wdGlvbi5jCkBAIC0yNTcxLDcgKzI1NzEsNyBAQAogc3RhdGljIGNoYXJfdSAqY2hlY2tfY2xpcGJvYXJkX29wdGlvbiBfX0FSR1MoKHZvaWQpKTsKICNlbmRpZgogc3RhdGljIGNoYXJfdSAqc2V0X2Jvb2xfb3B0aW9uIF9fQVJHUygoaW50IG9wdF9pZHgsIGNoYXJfdSAqdmFycCwgaW50IHZhbHVlLCBpbnQgb3B0X2ZsYWdzKSk7Ci1zdGF0aWMgY2hhcl91ICpzZXRfbnVtX29wdGlvbiBfX0FSR1MoKGludCBvcHRfaWR4LCBjaGFyX3UgKnZhcnAsIGxvbmcgdmFsdWUsIGNoYXJfdSAqZXJyYnVmLCBpbnQgb3B0X2ZsYWdzKSk7CitzdGF0aWMgY2hhcl91ICpzZXRfbnVtX29wdGlvbiBfX0FSR1MoKGludCBvcHRfaWR4LCBjaGFyX3UgKnZhcnAsIGxvbmcgdmFsdWUsIGNoYXJfdSAqZXJyYnVmLCBzaXplX3QgZXJyYnVmbGVuLCBpbnQgb3B0X2ZsYWdzKSk7CiBzdGF0aWMgdm9pZCBjaGVja19yZWRyYXcgX19BUkdTKChsb25nX3UgZmxhZ3MpKTsKIHN0YXRpYyBpbnQgZmluZG9wdGlvbiBfX0FSR1MoKGNoYXJfdSAqKSk7CiBzdGF0aWMgaW50IGZpbmRfa2V5X29wdGlvbiBfX0FSR1MoKGNoYXJfdSAqKSk7CkBAIC0zODgxLDcgKzM4ODEsNyBAQAogCQkJaWYgKHJlbW92aW5nKQogCQkJICAgIHZhbHVlID0gKihsb25nICopdmFycCAtIHZhbHVlOwogCQkJZXJybXNnID0gc2V0X251bV9vcHRpb24ob3B0X2lkeCwgdmFycCwgdmFsdWUsCi0JCQkJCQkJICAgZXJyYnVmLCBvcHRfZmxhZ3MpOworCQkJCQkgICBlcnJidWYsIHNpemVvZihlcnJidWYpLCBvcHRfZmxhZ3MpOwogCQkgICAgfQogCQkgICAgZWxzZSBpZiAob3B0X2lkeCA+PSAwKQkJICAgIC8qIHN0cmluZyAqLwogCQkgICAgewpAQCAtNDI4Nyw3ICs0Mjg3LDcgQEAKICAgICBpZiAoZXJyYnVmID09IE5VTEwpCiAJcmV0dXJuIChjaGFyX3UgKikiIjsKICAgICBzcHJpbnRmKChjaGFyICopZXJyYnVmLCBfKCJFNTM5OiBJbGxlZ2FsIGNoYXJhY3RlciA8JXM+IiksCi0JICAgIChjaGFyICopdHJhbnNjaGFyKGMpKTsKKwkJCQkJCQkoY2hhciAqKXRyYW5zY2hhcihjKSk7CiAgICAgcmV0dXJuIGVycmJ1ZjsKIH0KIApAQCAtNjgyMiwxMSArNjgyMiwxMiBAQAogICogUmV0dXJucyBOVUxMIGZvciBzdWNjZXNzLCBvciBhbiBlcnJvciBtZXNzYWdlIGZvciBhbiBlcnJvci4KICAqLwogICAgIHN0YXRpYyBjaGFyX3UgKgotc2V0X251bV9vcHRpb24ob3B0X2lkeCwgdmFycCwgdmFsdWUsIGVycmJ1Ziwgb3B0X2ZsYWdzKQorc2V0X251bV9vcHRpb24ob3B0X2lkeCwgdmFycCwgdmFsdWUsIGVycmJ1ZiwgZXJyYnVmbGVuLCBvcHRfZmxhZ3MpCiAgICAgaW50CQlvcHRfaWR4OwkJLyogaW5kZXggaW4gb3B0aW9uc1tdIHRhYmxlICovCiAgICAgY2hhcl91CSp2YXJwOwkJCS8qIHBvaW50ZXIgdG8gdGhlIG9wdGlvbiB2YXJpYWJsZSAqLwogICAgIGxvbmcJdmFsdWU7CQkJLyogbmV3IHZhbHVlICovCiAgICAgY2hhcl91CSplcnJidWY7CQkvKiBidWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzICovCisgICAgc2l6ZV90CWVycmJ1ZmxlbjsJCS8qIGxlbmd0aCBvZiAiZXJyYnVmIiAqLwogICAgIGludAkJb3B0X2ZsYWdzOwkJLyogT1BUX0xPQ0FMLCBPUFRfR0xPQkFMIGFuZAogCQkJCQkgICBPUFRfTU9ERUxJTkUgKi8KIHsKQEAgLTcxMTYsOCArNzExNyw4IEBACiAgICAgewogCWlmIChlcnJidWYgIT0gTlVMTCkKIAl7Ci0JICAgIHNwcmludGYoKGNoYXIgKillcnJidWYsIF8oIkU1OTM6IE5lZWQgYXQgbGVhc3QgJWQgbGluZXMiKSwKLQkJCQkJCQkJICBtaW5fcm93cygpKTsKKwkgICAgdmltX3NucHJpbnRmKChjaGFyICopZXJyYnVmLCBlcnJidWZsZW4sCisJCQkgICAgICAgXygiRTU5MzogTmVlZCBhdCBsZWFzdCAlZCBsaW5lcyIpLCBtaW5fcm93cygpKTsKIAkgICAgZXJybXNnID0gZXJyYnVmOwogCX0KIAlSb3dzID0gbWluX3Jvd3MoKTsKQEAgLTcxMjYsOCArNzEyNyw4IEBACiAgICAgewogCWlmIChlcnJidWYgIT0gTlVMTCkKIAl7Ci0JICAgIHNwcmludGYoKGNoYXIgKillcnJidWYsIF8oIkU1OTQ6IE5lZWQgYXQgbGVhc3QgJWQgY29sdW1ucyIpLAotCQkJCQkJCQkgTUlOX0NPTFVNTlMpOworCSAgICB2aW1fc25wcmludGYoKGNoYXIgKillcnJidWYsIGVycmJ1ZmxlbiwKKwkJCSAgICBfKCJFNTk0OiBOZWVkIGF0IGxlYXN0ICVkIGNvbHVtbnMiKSwgTUlOX0NPTFVNTlMpOwogCSAgICBlcnJtc2cgPSBlcnJidWY7CiAJfQogCUNvbHVtbnMgPSBNSU5fQ09MVU1OUzsKQEAgLTc0NTMsNyArNzQ1NCw4IEBACiAJICAgIGlmICh2YXJwICE9IE5VTEwpCS8qIGhpZGRlbiBvcHRpb24gaXMgbm90IGNoYW5nZWQgKi8KIAkgICAgewogCQlpZiAoZmxhZ3MgJiBQX05VTSkKLQkJICAgICh2b2lkKXNldF9udW1fb3B0aW9uKG9wdF9pZHgsIHZhcnAsIG51bWJlciwgTlVMTCwgb3B0X2ZsYWdzKTsKKwkJICAgICh2b2lkKXNldF9udW1fb3B0aW9uKG9wdF9pZHgsIHZhcnAsIG51bWJlciwKKwkJCQkJCQkgIE5VTEwsIDAsIG9wdF9mbGFncyk7CiAJCWVsc2UKIAkJICAgICh2b2lkKXNldF9ib29sX29wdGlvbihvcHRfaWR4LCB2YXJwLCAoaW50KW51bWJlciwgb3B0X2ZsYWdzKTsKIAkgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL3BvL2l0LnBvIGIvc3JjL3BvL2l0LnBvCmluZGV4IDRhMjRhNmMuLmZlMWQ2NGQgMTAwNjQ0Ci0tLSBhL3NyYy9wby9pdC5wbworKysgYi9zcmMvcG8vaXQucG8KQEAgLTEzMDksNyArMTMwOSw3IEBACiBtc2dzdHIgIjEgc29zdGl0dXppb25lIgogCiAjOiBleF9jbWRzLmM6NDU1MAotIywgZnV6enksIGMtZm9ybWF0CisjLCBjLWZvcm1hdAogbXNnaWQgIiVsZCBtYXRjaGVzIgogbXNnc3RyICIlbGQgY29ycmlzcC4iCiAKQEAgLTE2MDgsNyArMTYwOCw2IEBACiBtc2dzdHIgIkluIGFnZ2l1bnRhIGFsIEZpbGUiCiAKICM6IGV4X2RvY21kLmM6NzIyNQotIywgZnV6enkKIG1zZ2lkICJFNzQ3OiBDYW5ub3QgY2hhbmdlIGRpcmVjdG9yeSwgYnVmZmVyIGlzIG1vZGlmZWQgKGFkZCAhIHRvIG92ZXJyaWRlKSIKIG1zZ3N0ciAiIgogIkU3NDc6IE5vbiBwb3NzbyBjYW1iaWFyZSBkaXJlY3RvcnksIGJ1ZmZlciBtb2RpZmljYXRvIChhZ2dpdW5naSAhIHBlciAiCkBAIC0yMjcxLDcgKzIyNzAsNiBAQAogbXNnc3RyICJXMTY6IEF0dGVuemlvbmU6IE1vZG8gRmlsZSBcIiVzXCIgbW9kaWZpY2F0byBkb3BvIGwnYXBlcnR1cmEiCiAKICM6IGZpbGVpby5jOjYwNjYKLSMsIGZ1enp5CiBtc2dpZCAiU2VlIFwiOmhlbHAgVzE2XCIgZm9yIG1vcmUgaW5mby4iCiBtc2dzdHIgIlZlZGVyZSBcIjpoZWxwIFcxNlwiIHBlciB1bHRlcmlvcmkgaW5mb3JtYXppb25pLiIKIApAQCAtNTYwMCw3ICs1NTk4LDYgQEAKIG1zZ3N0ciAiRTM4MjogTm9uIHBvc3NvIHNjcml2ZXJlLCBsJ29wemlvbmUgJ2J1ZnR5cGUnIOggaW1wb3N0YXRhIgogCiAjOiBxdWlja2ZpeC5jOjIzNzkKLSMsIGZ1enp5CiBtc2dpZCAiRTY4MjogSW52YWxpZCBzZWFyY2ggcGF0dGVybiBvciBkZWxpbWl0ZXIiCiBtc2dzdHIgIkU2ODI6IEVzcHJlc3Npb25lIG8gZGVsaW1pdGF0b3JlIGRpIHJpY2VyY2Egbm9uIHZhbGlkaSIKIApAQCAtNjY4OCw3ICs2Njg1LDYgQEAKIG1zZ3N0ciAiY29uIEdVSSAoY2xhc3NpY2EpLiIKIAogIzogdmVyc2lvbi5jOjg3NgotIywgZnV6enkKIG1zZ2lkICJ3aXRoIEtERSBHVUkuIgogbXNnc3RyICJjb24gR1VJIEtERS4iCiAKQEAgLTcwMDIsNyArNjk5OCw2IEBACiBtc2dzdHIgIkU1ODg6IDplbmR3aGlsZSBzZW56YSA6d2hpbGUiCiAKICM6IGdsb2JhbHMuaDoxMjc2Ci0jLCBmdXp6eQogbXNnaWQgIkU1ODg6IDplbmRmb3Igd2l0aG91dCA6Zm9yIgogbXNnc3RyICJFNTg4OiA6ZW5kZm9yIHNlbnphIDpmb3IiCiAKZGlmZiAtLWdpdCBhL3NyYy9wcm90by9taXNjMi5wcm8gYi9zcmMvcHJvdG8vbWlzYzIucHJvCmluZGV4IDQxNDc5ZDAuLmY5YWFiOGQgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90by9taXNjMi5wcm8KKysrIGIvc3JjL3Byb3RvL21pc2MyLnBybwpAQCAtOTIsNSArOTIsNCBAQAogdm9pZCBzb3J0X3N0cmluZ3MgX19BUkdTKChjaGFyX3UgKipmaWxlcywgaW50IGNvdW50KSk7CiBpbnQgcGF0aGNtcCBfX0FSR1MoKGNvbnN0IGNoYXIgKnAsIGNvbnN0IGNoYXIgKnEsIGludCBtYXhsZW4pKTsKIGNoYXJfdSAqcGFyc2VfbGlzdF9vcHRpb25zIF9fQVJHUygoY2hhcl91ICpvcHRpb25fc3RyLCBvcHRpb25fdGFibGVfVCAqdGFibGUsIGludCB0YWJsZV9zaXplKSk7Ci12b2lkIG1zZ19zdHIgX19BUkdTKChjaGFyX3UgKnMsIGNoYXJfdSAqYXJnKSk7CiAvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9zZWFyY2guYyBiL3NyYy9zZWFyY2guYwppbmRleCBjOTc3M2I1Li41ZmZjYjM2IDEwMDY0NAotLS0gYS9zcmMvc2VhcmNoLmMKKysrIGIvc3JjL3NlYXJjaC5jCkBAIC00Mjc4LDggKzQyNzgsOSBAQAogI2lmZGVmIEZFQVRfSU5TX0VYUEFORAogCQkgICAgaWYgKGFjdGlvbiA9PSBBQ1RJT05fRVhQQU5EKQogCQkgICAgewotCQkJc3ByaW50ZigoY2hhciopSU9idWZmLCBfKCJTY2FubmluZyBpbmNsdWRlZCBmaWxlOiAlcyIpLAotCQkJICAgIChjaGFyICopbmV3X2ZuYW1lKTsKKwkJCXZpbV9zbnByaW50ZigoY2hhciopSU9idWZmLCBJT1NJWkUsCisJCQkJXygiU2Nhbm5pbmcgaW5jbHVkZWQgZmlsZTogJXMiKSwKKwkJCQkoY2hhciAqKW5ld19mbmFtZSk7CiAJCQltc2dfdHJ1bmNfYXR0cihJT2J1ZmYsIFRSVUUsIGhsX2F0dHIoSExGX1IpKTsKIAkJICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3N5bnRheC5jIGIvc3JjL3N5bnRheC5jCmluZGV4IGJlNzljMmMuLjNhYzQzZDcgMTAwNjQ0Ci0tLSBhL3NyYy9zeW50YXguYworKysgYi9zcmMvc3ludGF4LmMKQEAgLTM0MzMsNyArMzQzMyw3IEBACiAgICAgaWYgKCFlYXAtPnNraXApCiAgICAgewogCVNUUkNQWShidWYsICJzbyAiKTsKLQlzcHJpbnRmKChjaGFyICopYnVmICsgMywgU1lOVEFYX0ZOQU1FLCBuYW1lKTsKKwl2aW1fc25wcmludGYoKGNoYXIgKilidWYgKyAzLCBzaXplb2YoYnVmKSAtIDMsIFNZTlRBWF9GTkFNRSwgbmFtZSk7CiAJZG9fY21kbGluZV9jbWQoYnVmKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9zcmMvdWkuYyBiL3NyYy91aS5jCmluZGV4IDE1YWI3Y2YuLjM1MDZjNDggMTAwNjQ0Ci0tLSBhL3NyYy91aS5jCisrKyBiL3NyYy91aS5jCkBAIC0yMTQwLDcgKzIxNDAsNyBAQAogCWNsaXBfeWFua19zZWxlY3Rpb24oTUNIQVIsIGJ1ZmZlciwgKGxvbmcpbmJ5dGVzLCBjYmQpOwogCVhGcmVlKCh2b2lkICopYnVmZmVyKTsKIAlpZiAocF92ZXJib3NlID4gMCkKLQkgICAgc21zZygoY2hhcl91ICopXygiVXNlZCBDVVRfQlVGRkVSMCBpbnN0ZWFkIG9mIGVtcHR5IHNlbGVjdGlvbiIpICk7CisJICAgIE1TRyhfKCJVc2VkIENVVF9CVUZGRVIwIGluc3RlYWQgb2YgZW1wdHkgc2VsZWN0aW9uIikpOwogICAgIH0KIH0KIAo=