ZGlmZiAtLWdpdCBhL2F1dG8vY2MvYmNjIGIvYXV0by9jYy9iY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc2NWM0NwotLS0gL2Rldi9udWxsCisrKyBiL2F1dG8vY2MvYmNjCkBAIC0wLDAgKzEsNDggQEAKKworIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisKKworIyBCb3JsYW5kIEMrKyA1LjUKKworIyBvcHRpbWl6YXRpb25zCisKKyMgbWF4aW1pemUgc3BlZWQKK0NGTEFHUz0iJENGTEFHUyAtTzIiCisKK2Nhc2UgJENQVSBpbgorICAgIHBlbnRpdW0pCisgICAgICAgICMgb3B0aW1pemUgZm9yIFBlbnRpdW0gYW5kIEF0aGxvbgorICAgICAgICBDUFVfT1BUPSItNSIKKyAgICA7OworCisgICAgcGVudGl1bXBybykKKyAgICAgICAgIyBvcHRpbWl6ZSBmb3IgUGVudGl1bSBQcm8sIFBlbnRpdW0gSUkgYW5kIFBlbnRpdW0gSUlJCisgICAgICAgIENQVV9PUFQ9Ii02IgorICAgIDs7Citlc2FjCisKK0NGTEFHUz0iJENGTEFHUyAkQ1BVX09QVCIKKworIyBtdWx0aXRocmVhZGVkCitDRkxBR1M9IiRDRkxBR1MgLXRXTSIKKworIyBzdG9wIG9uIHdhcm5pbmcKK0NGTEFHUz0iJENGTEFHUyAtdyEiCisKKyMgZGlzYWJsZSBsb2dvCitDRkxBR1M9IiRDRkxBR1MgLXEiCisKKyMgcHJlY29tcGlsZWQgaGVhZGVycworQ09SRV9ERVBTPSIkQ09SRV9ERVBTICRPQkpTL25neF9jb25maWcuY3NtIgorTkdYX1BDSD0iJE9CSlMvbmd4X2NvbmZpZy5jc20iCitOR1hfQlVJTERfUENIPSItSD0kT0JKUy9uZ3hfY29uZmlnLmNzbSIKK05HWF9VU0VfUENIPSItSHUgLUg9JE9CSlMvbmd4X2NvbmZpZy5jc20iCisKK0xJTks9IlwkKENDKSIKKworbmd4X2luY2x1ZGVfb3B0PSItSSIKK25neF9vYmpvdXQ9Ii1vIgorbmd4X2Jpbm91dD0iLWUiCituZ3hfb2JqZXh0PSJvYmoiCituZ3hfYmluZXh0PSIuZXhlIgorbmd4X2RpcnNlcD0nXFwnCmRpZmYgLS1naXQgYS9hdXRvL2NjL2NvbmYgYi9hdXRvL2NjL2NvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdlZWRhNwotLS0gL2Rldi9udWxsCisrKyBiL2F1dG8vY2MvY29uZgpAQCAtMCwwICsxLDExOSBAQAorCisjIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKKworCituZ3hfaW5jbHVkZV9vcHQ9Ii1JICIKK25neF9jb21waWxlX29wdD0iLWMiCituZ3hfb2Jqb3V0PSItbyAiCituZ3hfYmlub3V0PSItbyAiCituZ3hfb2JqZXh0PSJvIgorbmd4X2JpbmV4dD0KKworbmd4X3JlZ2V4X2RpcnNlcD0iXC8iCituZ3hfZGlyc2VwPScvJworCituZ3hfcmVnZXhfY29udD0nIFxcXAorCScKK25neF9jb250PScgXAorCScKK25neF90YWI9JyBcCisJCScKK25neF9zcGFjZXI9CisKKy4gYXV0by9jYy9uYW1lCisKK2lmIHRlc3QgLW4gIiRDRkxBR1MiOyB0aGVuCisKKyAgICBDQ19URVNUX0ZMQUdTPSIkQ0ZMQUdTICROR1hfQ0NfT1BUIgorCisgICAgY2FzZSAkTkdYX0NDX05BTUUgaW4KKworICAgICAgICBjY2MpCisgICAgICAgICAgICAjIENvbXBhcSBDIFY2LjUtMjA3CisKKyAgICAgICAgICAgIG5neF9pbmNsdWRlX29wdD0iLUkiCisgICAgICAgIDs7CisKKyAgICBlc2FjCisKK2Vsc2UKKworICAgIGNhc2UgJE5HWF9DQ19OQU1FIGluCisgICAgICAgIGdjYykKKyAgICAgICAgICAgICMgZ2NjIDIuNy4yLjMsIDIuOC4xLCAyLjk1LjQsCisgICAgICAgICAgICAjICAgICAzLjAuNCwgMy4xLjEsIDMuMi4zLCAzLjMuMiwgMy4zLjMsIDMuMy40LCAzLjQKKworICAgICAgICAgICAgLiBhdXRvL2NjL2djYworICAgICAgICA7OworCisgICAgICAgIGljYykKKyAgICAgICAgICAgICMgSW50ZWwgQysrIGNvbXBpbGVyIDcuMSwgOC4wCisKKyAgICAgICAgICAgIC4gYXV0by9jYy9pY2MKKyAgICAgICAgOzsKKworIyAgICAgICAgY2NjKQorIyAgICAgICAgICAgICMgQ29tcGFxIEMgVjYuNS0yMDcKKyMKKyMgICAgICAgICAgICAuIGF1dG8vY2MvY2NjCisjICAgICAgICA7OworCisjICAgICAgICBhY2MpCisjICAgICAgICAgICAgIyBhQ0M6IEhQIEFOU0kgQysrIEIzOTEwQiBBLjAzLjU1LjAyCisjCisjICAgICAgICAgICAgLiBhdXRvL2NjL2FjYworIyAgICAgICAgOzsKKworICAgICAgICBtc3ZjKQorICAgICAgICAgICAgIyBNU1ZDIDYuMCBTUDIKKworICAgICAgICAgICAgLiBhdXRvL2NjL21zdmMKKyAgICAgICAgOzsKKworICAgICAgICBvd2MpCisgICAgICAgICAgICAjIE9wZW4gV2F0Y29tIEMgMS4wLCAxLjIKKworICAgICAgICAgICAgLiBhdXRvL2NjL293YworICAgICAgICA7OworCisgICAgICAgIGJjYykKKyAgICAgICAgICAgICMgQm9ybGFuZCBDKysgNS41CisKKyAgICAgICAgICAgIC4gYXV0by9jYy9iY2MKKyAgICAgICAgOzsKKworICAgIGVzYWMKKworICAgIENDX1RFU1RfRkxBR1M9JE5HWF9DQ19PUFQKKworZmkKKworQ0ZMQUdTPSIkQ0ZMQUdTICROR1hfQ0NfT1BUIgorCisKK2lmIFsgIiRQTEFURk9STSIgIT0gd2luMzIgXTsgdGhlbgorCisgICAgbmd4X2ZlYXR1cmU9ImdjYyB2YXJpYWRpYyBtYWNyb3MiCisgICAgbmd4X2ZlYXR1cmVfbmFtZT1IQVZFX0dDQ19WQVJJQURJQ19NQUNST1MKKyAgICBuZ3hfZmVhdHVyZV9ydW49eWVzCisgICAgbmd4X2ZlYXR1cmVfaW5jcz0iI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIHZhcihkdW1teSwgYXJncy4uLikgIHNwcmludGYoYXJncykiCisgICAgbmd4X2ZlYXR1cmVfbGlicz0KKyAgICBuZ3hfZmVhdHVyZV90ZXN0PSJjaGFyICBidWZbMzBdOyBidWZbMF0gPSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgdmFyKDAsIGJ1ZiwgXCIlZFwiLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmWzBdICE9ICcxJykgcmV0dXJuIDEiCisgICAgLiBhdXRvL2ZlYXR1cmUKKworCisgICAgbmd4X2ZlYXR1cmU9IkM5OSB2YXJpYWRpYyBtYWNyb3MiCisgICAgbmd4X2ZlYXR1cmVfbmFtZT1IQVZFX0M5OV9WQVJJQURJQ19NQUNST1MKKyAgICBuZ3hfZmVhdHVyZV9ydW49eWVzCisgICAgbmd4X2ZlYXR1cmVfaW5jcz0iI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIHZhcihkdW1teSwgLi4uKSBzcHJpbnRmKF9fVkFfQVJHU19fKSIKKyAgICBuZ3hfZmVhdHVyZV9saWJzPQorICAgIG5neF9mZWF0dXJlX3Rlc3Q9ImNoYXIgIGJ1ZlszMF07IGJ1ZlswXSA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICB2YXIoMCwgYnVmLCBcIiVkXCIsIDEpOworICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZbMF0gIT0gJzEnKSByZXR1cm4gMSIKKyAgICAuIGF1dG8vZmVhdHVyZQorCitmaQpkaWZmIC0tZ2l0IGEvYXV0by9jYy9nY2MgYi9hdXRvL2NjL2djYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWYwNDhiCi0tLSAvZGV2L251bGwKKysrIGIvYXV0by9jYy9nY2MKQEAgLTAsMCArMSwxMDkgQEAKKworIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisKKworIyBnY2MgMi43LjIuMywgMi44LjEsIDIuOTUuNCwKKyMgICAgIDMuMC40LCAzLjEuMSwgMy4yLjMsIDMuMy4yLCAzLjMuMywgMy4zLjQsIDMuNAorCisKKyMgU29sYXJpcyA3J3MgL3Vzci9jY3MvYmluL2FzIGRvZXMgbm90IHN1cHBvcnQgIi1waXBlIgorCitDQ19URVNUX0ZMQUdTPSItcGlwZSIKKworbmd4X2ZlYXR1cmU9ImdjYyAtcGlwZSBzd2l0Y2giIAorbmd4X2ZlYXR1cmVfbmFtZT0KK25neF9mZWF0dXJlX3J1bj1ubworbmd4X2ZlYXR1cmVfaW5jcz0KK25neF9mZWF0dXJlX2xpYnM9CituZ3hfZmVhdHVyZV90ZXN0PQorLiBhdXRvL2ZlYXR1cmUKKworQ0NfVEVTVF9GTEFHUz0KKworaWYgWyAkbmd4X2ZvdW5kID0geWVzIF07IHRoZW4KKyAgICBQSVBFPSItcGlwZSIKK2ZpCisKKworIyBvcHRpbWl6YXRpb25zCisKKyNDRkxBR1M9IiRDRkxBR1MgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIgorCitjYXNlICRDUFUgaW4KKyAgICBwZW50aXVtKQorICAgICAgICAjIG9wdGltaXplIGZvciBQZW50aXVtIGFuZCBBdGhsb24KKyAgICAgICAgQ1BVX09QVD0iLW1hcmNoPXBlbnRpdW0iCisgICAgOzsKKworICAgIHBlbnRpdW1wcm8pCisgICAgICAgICMgb3B0aW1pemUgZm9yIFBlbnRpdW0gUHJvLCBQZW50aXVtIElJIGFuZCBQZW50aXVtIElJSQorICAgICAgICBDUFVfT1BUPSItbWFyY2g9cGVudGl1bXBybyIKKyAgICA7OworCisgICAgcGVudGl1bTQpCisgICAgICAgICMgb3B0aW1pemUgZm9yIFBlbnRpdW0gNCwgZ2NjIDMueAorICAgICAgICBDUFVfT1BUPSItbWFyY2g9cGVudGl1bTQiCisgICAgOzsKKworICAgIHNwYXJjNjQpCisgICAgICAgICMgYnVpbGQgNjQtYml0IFVsdHJhU3BhcmMgYmluYXJ5CisgICAgICAgIENQVV9PUFQ9Ii1tNjQiCisgICAgICAgIENPUkVfTElOSz0iJENPUkVfTElOSyAtbTY0IgorICAgICAgICBDQ19BVVhfRkxBR1M9IiRDQ19BVVhfRkxBR1MgLW02NCIKKyAgICA7OworCitlc2FjCisKKworIyBTVFVCIGZvciBiYXRjaCBidWlsZHMKK2lmIFsgJENDID0gZ2NjMjcgXTsgdGhlbiBDUFVfT1BUPTsgZmkKKworCitDRkxBR1M9IiRDRkxBR1MgJFBJUEUgJENQVV9PUFQiCisKK2lmIFsgIi4kUENSRV9PUFQiID0gIi4iIF07IHRoZW4KKyAgICBQQ1JFX09QVD0iLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyICRQSVBFICRDUFVfT1BUIgorZWxzZQorICAgIFBDUkVfT1BUPSIkUENSRV9PUFQgJFBJUEUiCitmaQorCitpZiBbICIuJE1ENV9PUFQiID0gIi4iIF07IHRoZW4KKyAgICBNRDVfT1BUPSItTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIgJFBJUEUgJENQVV9PUFQiCitlbHNlCisgICAgTUQ1X09QVD0iJE1ENV9PUFQgJFBJUEUiCitmaQorCitpZiBbICIuJFpMSUJfT1BUIiA9ICIuIiBdOyB0aGVuCisgICAgWkxJQl9PUFQ9Ii1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciAkUElQRSAkQ1BVX09QVCIKK2Vsc2UKKyAgICBaTElCX09QVD0iJFpMSUJfT1BUICRQSVBFIgorZmkKKworCisjIHdhcm5pbmdzCisKK0NGTEFHUz0iJENGTEFHUyAtTyAtVyIKK0NGTEFHUz0iJENGTEFHUyAtV2FsbCAtV3BvaW50ZXItYXJpdGgiCisjQ0ZMQUdTPSIkQ0ZMQUdTIC1XY29udmVyc2lvbiIgCisjQ0ZMQUdTPSIkQ0ZMQUdTIC1XaW5saW5lIgorCisjIHdlIGhhdmUgYSBsb3Qgb2YgdGhlIHVudXNlZCBmdW5jdGlvbiBhcmd1bWVudHMKK0NGTEFHUz0iJENGTEFHUyAtV25vLXVudXNlZCIKKworIyBzdG9wIG9uIHdhcm5pbmcKK0NGTEFHUz0iJENGTEFHUyAtV2Vycm9yIgorCisjIGRlYnVnCitDRkxBR1M9IiRDRkxBR1MgLWciCisKKyMgRHJhZ29uRmx5J3MgZ2NjMyBnZW5lcmF0ZXMgRFdBUkYKKyNDRkxBR1M9IiRDRkxBR1MgLWcgLWdzdGFicyIKKworaWYgWyAiLiRDUFAiID0gIi4iIF07IHRoZW4KKyAgICBDUFA9IiRDQyAtRSIKK2ZpCisKK0xJTks9IlwkKENDKSIKKworCitDQ19TVFJPTkc9Ii1XYWxsIC1XZXJyb3IiCmRpZmYgLS1naXQgYS9hdXRvL2NjL2ljYyBiL2F1dG8vY2MvaWNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZDVjZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hdXRvL2NjL2ljYwpAQCAtMCwwICsxLDY5IEBACisKKyMgQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorCisKKyMgSW50ZWwgQysrIGNvbXBpbGVyIDcuMSwgOC4wCisKKyMgb3B0aW1pemF0aW9ucworCitDRkxBR1M9IiRDRkxBR1MgLU8iCisjIGlubGluZSBmdW5jdGlvbnMgZGVjbGFyZWQgd2l0aCBfX2lubGluZQorI0NGTEFHUz0iJENGTEFHUyAtT2IxIgorIyBpbmxpbmUgYW55IGZ1bmN0aW9uLCBhdCB0aGUgY29tcGlsZXIncyBkaXNjcmV0aW9uCitDRkxBR1M9IiRDRkxBR1MgLU9iMiIKKworIyBzaW5nbGUtZmlsZSBJUCBvcHRpbWl6YXRpb25zCisjSVBPPSItaXAiCisjIG11bHRpLWZpbGUgSVAgb3B0aW1pemF0aW9ucworSVBPPSItaXBvIC1pcG9fb2JqIgorQ0ZMQUdTPSIkQ0ZMQUdTICRJUE8iCitDT1JFX0xJTks9IiRDT1JFX0xJTksgJElQTyIKK0NPUkVfTElOSz0iJENPUkVfTElOSyAtb3B0X3JlcG9ydF9maWxlPSRPQkpTL29wdF9yZXBvcnRfZmlsZSIKKworY2FzZSAkQ1BVIGluCisgICAgcGVudGl1bSkKKyAgICAgICAgIyBvcHRpbWl6ZSBmb3IgUGVudGl1bSBhbmQgQXRobG9uCisgICAgICAgIENQVV9PUFQ9Ii1tYXJjaD1wZW50aXVtIgorICAgIDs7CisKKyAgICBwZW50aXVtcHJvKQorICAgICAgICAjIG9wdGltaXplIGZvciBQZW50aXVtIFBybywgUGVudGl1bSBJSSBhbmQgUGVudGl1bSBJSUkKKyAgICAgICAgQ1BVX09QVD0iLW1jcHU9cGVudGl1bXBybyAtbWFyY2g9cGVudGl1bXBybyIKKyAgICA7OworCisgICAgcGVudGl1bTQpCisgICAgICAgICMgb3B0aW1pemUgZm9yIFBlbnRpdW0gNCwgZGVmYXVsdAorICAgICAgICBDUFVfT1BUPSItbWFyY2g9cGVudGl1bTQiCisgICAgOzsKK2VzYWMKKworQ0ZMQUdTPSIkQ0ZMQUdTICRDUFVfT1BUIgorCitpZiBbICIuJFBDUkVfT1BUIiA9ICIuIiBdOyB0aGVuCisgICAgUENSRV9PUFQ9Ii1PICRJUE8gJENQVV9PUFQiCitmaQorCitpZiBbICIuJE1ENV9PUFQiID0gIi4iIF07IHRoZW4KKyAgICBNRDVfT1BUPSItTyAkSVBPICRDUFVfT1BUIgorZmkKKworaWYgWyAiLiRaTElCX09QVCIgPSAiLiIgXTsgdGhlbgorICAgIFpMSUJfT1BUPSItTyAkSVBPICRDUFVfT1BUIgorZmkKKworCisjIHdhcm5pbmdzCisKK0NGTEFHUz0iJENGTEFHUyAtdzEiCisjQ0ZMQUdTPSIkQ0ZMQUdTIC13MiIKKworIyBzdG9wIG9uIHdhcm5pbmcKK0NGTEFHUz0iJENGTEFHUyAtV2Vycm9yIgorCisjIGRlYnVnCitDRkxBR1M9IiRDRkxBR1MgLWciCisKK0xJTks9IlwkKENDKSIKKworCitDQ19TVFJPTkc9Ii13MSAtV2Vycm9yIgpkaWZmIC0tZ2l0IGEvYXV0by9jYy9tc3ZjIGIvYXV0by9jYy9tc3ZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0N2Q0YjIKLS0tIC9kZXYvbnVsbAorKysgYi9hdXRvL2NjL21zdmMKQEAgLTAsMCArMSw4MSBAQAorCisjIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKKworCisjIE1TVkMgNi4wIFNQMgorCisjIG9wdGltaXphdGlvbnMKKworIyBtYXhpbWl6ZSBzcGVlZAorQ0ZMQUdTPSIkQ0ZMQUdTIC1PMiIKKyMgZW5hYmxlIGdsb2JhbCBvcHRpbWl6YXRpb24KK0NGTEFHUz0iJENGTEFHUyAtT2ciCisjIGVuYWJsZSBpbnRyaW5zaWMgZnVuY3Rpb25zCitDRkxBR1M9IiRDRkxBR1MgLU9pIgorIyBpbmxpbmUgZXhwYW5zaW9uCitDRkxBR1M9IiRDRkxBR1MgLU9iMSIKKyMgZW5hYmxlIGZyYW1lIHBvaW50ZXIgb21pc3Npb24KK0NGTEFHUz0iJENGTEFHUyAtT3kiCisjIGRpc2FibGUgc3RhY2sgY2hlY2tpbmcgY2FsbHMKK0NGTEFHUz0iJENGTEFHUyAtR3MiCisKK2Nhc2UgJENQVSBpbgorICAgIHBlbnRpdW0pCisgICAgICAgICMgb3B0aW1pemUgZm9yIFBlbnRpdW0gYW5kIEF0aGxvbgorICAgICAgICBDUFVfT1BUPSItRzUiCisgICAgOzsKKworICAgIHBlbnRpdW1wcm8pCisgICAgICAgICMgb3B0aW1pemUgZm9yIFBlbnRpdW0gUHJvLCBQZW50aXVtIElJIGFuZCBQZW50aXVtIElJSQorICAgICAgICBDUFVfT1BUPSItRzYiCisgICAgOzsKKworICAgIHBlbnRpdW00KQorICAgICAgICAjIG9wdGltaXplIGZvciBQZW50aXVtIDQKKyAgICAgICAgI0NQVV9PUFQ9Ii1HNyIKKyAgICA7OworZXNhYworCitDRkxBR1M9IiRDRkxBR1MgJENQVV9PUFQiCisKKworIyB3YXJuaW5ncworCisjQ0ZMQUdTPSIkQ0ZMQUdTIC1XMyIKK0NGTEFHUz0iJENGTEFHUyAtVzQiCisKKyMgc3RvcCBvbiB3YXJuaW5nCitDRkxBR1M9IiRDRkxBR1MgLVdYIgorCisjIGxpbmsgd2l0aCBsaWJjbXQubGliLCBtdWx0aXRocmVhZGVkCisjTElCQz0iLU1UIgorIyBsaW5rIHdpdGggbXN2Y3J0LmRsbAorTElCQz0iLU1EIgorCitDRkxBR1M9IiRDRkxBR1MgJExJQkMiCisKKyMgZGlzYWJsZSBsb2dvCitDRkxBR1M9IiRDRkxBR1MgLW5vbG9nbyIKKworTElOSz0iXCQoQ0MpIgorCisjIGxpbmsgZmxhZ3MKK0NPUkVfTElOSz0iJENPUkVfTElOSyAtbGluayAtdmVyYm9zZTpsaWIiCisKKyMgZGVidWcKK0NGTEFHUz0iJENGTEFHUyAtWWQiCitDT1JFX0xJTks9IiRDT1JFX0xJTksgLWRlYnVnIC1kZWJ1Z3R5cGU6Y29mZiIKKworIyBwcmVjb21waWxlZCBoZWFkZXJzCitDT1JFX0RFUFM9IiRDT1JFX0RFUFMgJE9CSlMvbmd4X2NvbmZpZy5wY2giCitOR1hfUENIPSIkT0JKUy9uZ3hfY29uZmlnLnBjaCIKK05HWF9CVUlMRF9QQ0g9Ii1ZY25neF9jb25maWcuaCAtRnAkT0JKUy9uZ3hfY29uZmlnLnBjaCIKK05HWF9VU0VfUENIPSItWXVuZ3hfY29uZmlnLmggLUZwJE9CSlMvbmd4X2NvbmZpZy5wY2giCisKK25neF9vYmpvdXQ9Ii1GbyIKK25neF9iaW5vdXQ9Ii1GZSIKK25neF9vYmpleHQ9Im9iaiIKK25neF9iaW5leHQ9Ii5leGUiCisKKyNuZ3hfcmVnZXhfZGlyc2VwPSdcXCcKKyNuZ3hfZGlyc2VwPSJcXCIKZGlmZiAtLWdpdCBhL2F1dG8vY2MvbmFtZSBiL2F1dG8vY2MvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTc0NDc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXV0by9jYy9uYW1lCkBAIC0wLDAgKzEsNTEgQEAKKworIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisKKworZWNobyAkbmd4X24gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIC4uLiRuZ3hfYyIKKworCitpZiBbICRDQyA9IGNsIF07IHRoZW4KKyAgICBOR1hfQ0NfTkFNRT1tc3ZjCisgICAgZWNobyAiIHVzaW5nIE1pY3Jvc29mdCBWaXN1YWwgQyBjb21waWxlciIKKworZWxzZQoraWYgWyAkQ0MgPSB3Y2wzODYgXTsgdGhlbgorICAgIE5HWF9DQ19OQU1FPW93YworICAgIGVjaG8gIiB1c2luZyBPcGVuIFdhdGNvbSBDIGNvbXBpbGVyIgorCitlbHNlCitpZiBbICRDQyA9IGJjYzMyIF07IHRoZW4KKyAgICBOR1hfQ0NfTkFNRT1iY2MKKyAgICBlY2hvICIgdXNpbmcgQm9ybGFuZCBDKysgY29tcGlsZXIiCisKK2Vsc2UKK2lmIGAkQ0MgLXYgMj4mMSB8IGdyZXAgJ15nY2MgdmVyc2lvbicgMj4mMSA+L2Rldi9udWxsYDsgdGhlbgorICAgIE5HWF9DQ19OQU1FPWdjYworICAgIGVjaG8gIiB1c2luZyBHTlUgQyBjb21waWxlciIKKworZWxzZQoraWYgYCRDQyAtViAyPiYxIHwgZ3JlcCAnXkludGVsKFIpIEMrKyBDb21waWxlcicgMj4mMSA+L2Rldi9udWxsYDsgdGhlbgorICAgIE5HWF9DQ19OQU1FPWljYworICAgIGVjaG8gIiB1c2luZyBJbnRlbCBDKysgY29tcGlsZXIiCisKK2Vsc2UKK2lmIGAkQ0MgLVYgMj4mMSB8IGdyZXAgJ15Db21wYXEgQycgMj4mMSA+L2Rldi9udWxsYDsgdGhlbgorICAgIE5HWF9DQ19OQU1FPWNjYworICAgIGVjaG8gIiB1c2luZyBDb21wYXEgQyBjb21waWxlciIKKworZWxzZQoraWYgYCRDQyAtViAyPiYxIHwgZ3JlcCAnXmFDQzogJyAyPiYxID4vZGV2L251bGxgOyB0aGVuCisgICAgTkdYX0NDX05BTUU9YWNjCisgICAgZWNobyAiIHVzaW5nIEhQIGFDKysgY29tcGlsZXIiCisKK2Vsc2UKKyAgICBlY2hvICIgdW5rbm93biIKKworZmkgIyBhY2MKK2ZpICMgY2NjCitmaSAjIGljYworZmkgIyBnY2MKK2ZpICMgYmNjCitmaSAjIG93YworZmkgIyBtc3ZjCmRpZmYgLS1naXQgYS9hdXRvL2NjL293YyBiL2F1dG8vY2Mvb3djCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjODE5NGQKLS0tIC9kZXYvbnVsbAorKysgYi9hdXRvL2NjL293YwpAQCAtMCwwICsxLDgyIEBACisKKyMgQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorCisKKyMgT3BlbiBXYXRjb20gQyAxLjAsIDEuMgorCisjIG9wdGltaXphdGlvbnMKKworIyBtYXhpbWl6ZSBzcGVlZAorQ0ZMQUdTPSIkQ0ZMQUdTIC1vdCIKKyMgcmVvcmRlciBpbnN0cnVjdGlvbnMgZm9yIGJlc3QgcGlwZWxpbmUgdXNhZ2UgCitDRkxBR1M9IiRDRkxBR1MgLW9wIgorIyBpbmxpbmUgaW50cmluc2ljIGZ1bmN0aW9ucworQ0ZMQUdTPSIkQ0ZMQUdTIC1vaSIKKyMgaW5saW5lIGV4cGFuc2lvbgorQ0ZMQUdTPSIkQ0ZMQUdTIC1vZSIKKyMgZGlzYWJsZSBzdGFjayBjaGVja2luZyBjYWxscworQ0ZMQUdTPSIkQ0ZMQUdTIC1zIgorCitjYXNlICRDUFUgaW4KKyAgICBwZW50aXVtKQorICAgICAgICAjIG9wdGltaXplIGZvciBQZW50aXVtIGFuZCBBdGhsb24KKyAgICAgICAgIyByZWdpc3Rlci1iYXNlZCBhcmd1bWVudHMgcGFzc2luZyBjb252ZW50aW9ucworICAgICAgICBDUFVfT1BUPSItNXIiCisgICAgICAgICMgc3RhY2stYmFzZWQgYXJndW1lbnRzIHBhc3NpbmcgY29udmVudGlvbnMKKyAgICAgICAgI0NQVV9PUFQ9Ii01cyIKKyAgICA7OyAKKworICAgIHBlbnRpdW1wcm8pCisgICAgICAgICMgb3B0aW1pemUgZm9yIFBlbnRpdW0gUHJvLCBQZW50aXVtIElJIGFuZCBQZW50aXVtIElJSQorICAgICAgICAjIHJlZ2lzdGVyLWJhc2VkIGFyZ3VtZW50cyBwYXNzaW5nIGNvbnZlbnRpb25zCisgICAgICAgIENQVV9PUFQ9Ii02ciIKKyAgICAgICAgIyBzdGFjay1iYXNlZCBhcmd1bWVudHMgcGFzc2luZyBjb252ZW50aW9ucworICAgICAgICAjQ1BVX09QVD0iLTZzIgorICAgIDs7Citlc2FjCisKK0NGTEFHUz0iJENGTEFHUyAkQ1BVX09QVCIKKworCisjIHdhcm5pbmdzCisKKyNDRkxBR1M9IiRDRkxBR1MgLXczIgorQ0ZMQUdTPSIkQ0ZMQUdTIC13eCIKKworIyBzdG9wIG9uIHdhcm5pbmcKK0NGTEFHUz0iJENGTEFHUyAtd2UiCisKKyMgYnVpbHQgdGFyZ2V0IGlzIE5UCitDRkxBR1M9IiRDRkxBR1MgLWJ0PW50IgorCisjIG11bHRpdGhyZWFkZWQKK0NGTEFHUz0iJENGTEFHUyAtYm0iCisKKyMgZGVidWcKK0NGTEFHUz0iJENGTEFHUyAtZDIiCisKKyMgcXVpZXQKK0NGTEFHUz0iJENGTEFHUyAtenEiCisKKyMgT3BlbiBXYXRjb20gQyAxLjIKKyNoYXZlPUhBVkVfQzk5X1ZBUklBRElDX01BQ1JPUyAuIGF1dG8vaGF2ZQorCisjIHByZWNvbXBpbGVkIGhlYWRlcnMgCitDT1JFX0RFUFM9IiRDT1JFX0RFUFMgJE9CSlMvbmd4X2NvbmZpZy5wY2giCitOR1hfUENIPSIkT0JKUy9uZ3hfY29uZmlnLnBjaCIKK05HWF9CVUlMRF9QQ0g9Ii1maHE9JE9CSlMvbmd4X2NvbmZpZy5wY2giCitOR1hfVVNFX1BDSD0iLWZoPSRPQkpTL25neF9jb25maWcucGNoIgorCitMSU5LPSJcJChDQykiCisKKyMgbGluayBmbGFncworQ09SRV9MSU5LPSIkQ09SRV9MSU5LIC1sPW50IgorCituZ3hfaW5jbHVkZV9vcHQ9Ii1pPSIKK25neF9vYmpvdXQ9Ii1mbyIKK25neF9iaW5vdXQ9Ii1mZT0iCituZ3hfb2JqZXh0PSJvYmoiCituZ3hfYmluZXh0PSIuZXhlIgorCituZ3hfcmVnZXhfZGlyc2VwPSdcXCcKK25neF9kaXJzZXA9IlxcIgpkaWZmIC0tZ2l0IGEvYXV0by9jb25maWd1cmUgYi9hdXRvL2NvbmZpZ3VyZQppbmRleCA2YTgxNTU1Li5lYjJmZWQwIDEwMDc1NQotLS0gYS9hdXRvL2NvbmZpZ3VyZQorKysgYi9hdXRvL2NvbmZpZ3VyZQpAQCAtOCwyNCArOCwyMiBAQAogLiBhdXRvL3NvdXJjZXMKIAogdGVzdCAtZCAkT0JKUyB8fCBta2RpciAkT0JKUworCitlY2hvID4gJE5HWF9BVVRPX0hFQURFUlNfSAogZWNobyA+ICROR1hfQVVUT19DT05GSUdfSAogCiBpZiBbICRERUJVRyA9IFlFUyBdOyB0aGVuCiAgICAgaGF2ZT1OR1hfREVCVUcgLiBhdXRvL2hhdmUKIGZpCiAKLWhhdmU9TkdYX1VTRV9IVFRQX0ZJTEVfQ0FDSEVfVU5JUSAuIGF1dG8vaGF2ZQotaGF2ZT1OR1hfU1VQUFJFU1NfV0FSTiAuIGF1dG8vaGF2ZQotCiAKIGlmIFsgIiRQTEFURk9STSIgIT0gd2luMzIgXTsgdGhlbgogICAgIC4gYXV0by9oZWFkZXJzCiBmaQogCisuIGF1dG8vY2MvY29uZgogLiBhdXRvL29zL2NvbmYKIC4gYXV0by9tb2R1bGVzCi0KLS4gYXV0by9jYwogLiBhdXRvL2xpYi9jb25mCiAKIGlmIFsgIiRQTEFURk9STSIgIT0gd2luMzIgXTsgdGhlbgpAQCAtNDAsNyArMzgsOCBAQAogICAgIC4gYXV0by91bml4CiBmaQogCi1oYXZlPU5HWF9TTVAgLiBhdXRvL2hhdmUKKyMgU1RVQgorLiBhdXRvL3N0dWJzCiAKIGhhdmU9TkdYX1BSRUZJWCB2YWx1ZT0iXCIkUFJFRklYL1wiIiAuIGF1dG8vZGVmaW5lCiBoYXZlPU5HWF9TQklOX1BBVEggdmFsdWU9IlwiJFNCSU5fUEFUSFwiIiAuIGF1dG8vZGVmaW5lCkBAIC01MSw0ICs1MCw3IEBACiBmaQogaGF2ZT1OR1hfSFRUUF9MT0dfUEFUSCB2YWx1ZT0iXCIkSFRUUF9MT0dfUEFUSFwiIiAuIGF1dG8vZGVmaW5lCiAKK2hhdmU9TkdYX1VTRVIgdmFsdWU9IlwiJE5HWF9VU0VSXCIiIC4gYXV0by9kZWZpbmUKK2hhdmU9TkdYX0dST1VQIHZhbHVlPSJcIiROR1hfR1JPVVBcIiIgLiBhdXRvL2RlZmluZQorCiAuIGF1dG8vc3VtbWFyeQpkaWZmIC0tZ2l0IGEvYXV0by9lbmRpYW5lc3MgYi9hdXRvL2VuZGlhbmVzcwppbmRleCA0ZGY3ZDAxLi42NDBiNDY1IDEwMDY0NAotLS0gYS9hdXRvL2VuZGlhbmVzcworKysgYi9hdXRvL2VuZGlhbmVzcwpAQCAtMiw3ICsyLDcgQEAKICMgQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgogCiAKLWVjaG8gJG5neF9uICJjaGVja2luZyBmb3Igc3lzdGVtIGVuZGlhbmVzcyAuLi4iICRuZ3hfYworZWNobyAkbmd4X24gImNoZWNraW5nIGZvciBzeXN0ZW0gZW5kaWFuZXNzIC4uLiRuZ3hfYyIKIGVjaG8gPj4gJE5HWF9FUlIKIGVjaG8gImNoZWNraW5nIGZvciBzeXN0ZW0gZW5kaWFuZXNzIiA+PiAkTkdYX0VSUgogCmRpZmYgLS1naXQgYS9hdXRvL2ZlYXR1cmUgYi9hdXRvL2ZlYXR1cmUKaW5kZXggYmQ1YjA4MS4uNzg2NzZlZiAxMDA2NDQKLS0tIGEvYXV0by9mZWF0dXJlCisrKyBiL2F1dG8vZmVhdHVyZQpAQCAtMiwxOSArMiwyOCBAQAogIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CiAKIAotZWNobyAkbmd4X24gImNoZWNraW5nIGZvciAkbmd4X2ZlYXR1cmUgLi4uIiAkbmd4X2MKLWVjaG8gPj4gJE5HWF9FUlIKLWVjaG8gImNoZWNraW5nIGZvciAkbmd4X2ZlYXR1cmUiID4+ICROR1hfRVJSCitlY2hvICRuZ3hfbiAiY2hlY2tpbmcgZm9yICRuZ3hfZmVhdHVyZSAuLi4kbmd4X2MiCisKK2NhdCA8PCBFTkQgPj4gJE5HWF9BVVRPQ09ORl9FUlIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY2hlY2tpbmcgZm9yICRuZ3hfZmVhdHVyZQorCitFTkQKIAogbmd4X2ZvdW5kPW5vCiAKLWZlYXR1cmU9YGVjaG8gJG5neF9mZWF0dXJlX25hbWUgfCB0ciAnW2Etel0nICdbQS1aXSdgCitpZiB0ZXN0IC1uICIkbmd4X2ZlYXR1cmVfbmFtZSI7IHRoZW4KKyAgICBuZ3hfaGF2ZV9mZWF0dXJlPWBlY2hvIE5HWF8kbmd4X2ZlYXR1cmVfbmFtZSB8IHRyICdbYS16XScgJ1tBLVpdJ2AKKyAgICAjIFNUVUIKKyAgICBuZ3hfaGF2ZV9mZWF0dXJlMD1gZWNobyBIQVZFXyRuZ3hfZmVhdHVyZV9uYW1lIHwgdHIgJ1thLXpdJyAnW0EtWl0nYAorZmkKIAogY2F0IDw8IEVORCA+ICROR1hfQVVUT1RFU1QuYwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0kTkdYX1VOSVNURF9ICi0kbmd4X2ZlYXR1cmVfaW5jCiskTkdYX0lOQ0xVREVfVU5JU1REX0gKKyRuZ3hfZmVhdHVyZV9pbmNzCiAKIGludCBtYWluKCkgewogICAgICRuZ3hfZmVhdHVyZV90ZXN0OwpAQCAtMjMsMzQgKzMyLDU2IEBACiAKIEVORAogCi10ZXN0PSIkQ0NfV0FSTiAkQ0NfVEVTVF9GTEFHUyAtbyAkTkdYX0FVVE9URVNUICROR1hfQVVUT1RFU1QuYyBcCi0gICAgICAkbmd4X2ZlYXR1cmVfbGlicyIKLWV2YWwgIiR0ZXN0ID4+ICROR1hfRVJSIDI+JjEiCisKK25neF90ZXN0PSIkQ0MgJENDX1RFU1RfRkxBR1MgJENDX1dBUk4gJENDX0FVWF9GTEFHUyBcCisgICAgICAgICAgLW8gJE5HWF9BVVRPVEVTVCAkTkdYX0FVVE9URVNULmMgJE5HWF9MRF9PUFQgJG5neF9mZWF0dXJlX2xpYnMiCitldmFsICIkbmd4X3Rlc3QgPj4gJE5HWF9BVVRPQ09ORl9FUlIgMj4mMSIKKwogCiBpZiBbIC14ICROR1hfQVVUT1RFU1QgXTsgdGhlbgogCiAgICAgaWYgWyAkbmd4X2ZlYXR1cmVfcnVuID0geWVzIF07IHRoZW4KKwogICAgICAgIGlmICROR1hfQVVUT1RFU1QgMj4mMSA+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgICBlY2hvICIgZm91bmQiCi0gICAgICAgICAgIGhhdmU9SEFWRV8kZmVhdHVyZSAuIGF1dG8vaGF2ZQogICAgICAgICAgICBuZ3hfZm91bmQ9eWVzCisKKyAgICAgICAgICAgaWYgdGVzdCAtbiAiJG5neF9mZWF0dXJlX25hbWUiOyB0aGVuCisgICAgICAgICAgICAgICBoYXZlPSRuZ3hfaGF2ZV9mZWF0dXJlIC4gYXV0by9oYXZlCisgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgI1NUVUIKKyAgICAgICAgICAgaWYgdGVzdCAtbiAiJG5neF9mZWF0dXJlX25hbWUiOyB0aGVuCisgICAgICAgICAgICAgICBoYXZlPSRuZ3hfaGF2ZV9mZWF0dXJlMCAuIGF1dG8vaGF2ZQorICAgICAgICAgICBmaQorCiAgICAgICAgZWxzZQogICAgICAgICAgICBlY2hvICIgZm91bmQgYnV0IGlzIG5vdCB3b3JraW5nIgogICAgICAgIGZpCiAKICAgICBlbHNlCiAgICAgICAgZWNobyAiIGZvdW5kIgotICAgICAgIGhhdmU9SEFWRV8kZmVhdHVyZSAuIGF1dG8vaGF2ZQogICAgICAgIG5neF9mb3VuZD15ZXMKKworICAgICAgIGlmIHRlc3QgLW4gIiRuZ3hfZmVhdHVyZV9uYW1lIjsgdGhlbgorICAgICAgICAgICBoYXZlPSRuZ3hfaGF2ZV9mZWF0dXJlIC4gYXV0by9oYXZlCisgICAgICAgZmkKKworICAgICAgICNTVFVCCisgICAgICAgaWYgdGVzdCAtbiAiJG5neF9mZWF0dXJlX25hbWUiOyB0aGVuCisgICAgICAgICAgIGhhdmU9JG5neF9oYXZlX2ZlYXR1cmUwIC4gYXV0by9oYXZlCisgICAgICAgZmkKKwogICAgIGZpCiAKIGVsc2UKICAgICBlY2hvICIgbm90IGZvdW5kIgotICAgIGVjaG8gIi0tLS0tLS0tLSIgPj4gJE5HWF9FUlIKLSAgICBjYXQgJE5HWF9BVVRPVEVTVC5jID4+ICROR1hfRVJSCi0gICAgZWNobyAiLS0tLS0tLS0tIiA+PiAkTkdYX0VSUgotICAgIGVjaG8gJHRlc3QgPj4gJE5HWF9FUlIKLSAgICBlY2hvICItLS0tLS0tLS0iID4+ICROR1hfRVJSCisKKyAgICBlY2hvICItLS0tLS0tLS0tIiAgICA+PiAkTkdYX0FVVE9DT05GX0VSUgorICAgIGNhdCAkTkdYX0FVVE9URVNULmMgID4+ICROR1hfQVVUT0NPTkZfRVJSCisgICAgZWNobyAiLS0tLS0tLS0tLSIgICAgPj4gJE5HWF9BVVRPQ09ORl9FUlIKKyAgICBlY2hvICRuZ3hfdGVzdCAgICAgICA+PiAkTkdYX0FVVE9DT05GX0VSUgorICAgIGVjaG8gIi0tLS0tLS0tLS0iICAgID4+ICROR1hfQVVUT0NPTkZfRVJSCiBmaQogCiBybSAkTkdYX0FVVE9URVNUKgpkaWZmIC0tZ2l0IGEvYXV0by9mbXQvZm10IGIvYXV0by9mbXQvZm10CmluZGV4IDk4MDY0MWYuLmEzMTZkOWIgMTAwNjQ0Ci0tLSBhL2F1dG8vZm10L2ZtdAorKysgYi9hdXRvL2ZtdC9mbXQKQEAgLTIsMTQgKzIsMjEgQEAKICMgQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgogCiAKLWVjaG8gJG5neF9uICJjaGVja2luZyBmb3IgJG5neF90eXBlIHByaW50ZigpIGZvcm1hdCAuLi4iICRuZ3hfYwotZWNobyA+PiAkTkdYX0VSUgotZWNobyAiY2hlY2tpbmcgZm9yICRuZ3hfdHlwZSBwcmludGYoKSBmb3JtYXQiID4+ICROR1hfRVJSCitlY2hvICRuZ3hfbiAiY2hlY2tpbmcgZm9yICRuZ3hfdHlwZSBwcmludGYoKSBmb3JtYXQgLi4uJG5neF9jIgogCi1uZ3hfZm10PW5vCi1jb21tYT0KK2NhdCA8PCBFTkQgPj4gJE5HWF9BVVRPQ09ORl9FUlIKIAotZm9yIGZtdCBpbiAkbmd4X2Zvcm1hdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NoZWNraW5nIGZvciAkbmd4X3R5cGUgcHJpbnRmKCkgZm9ybWF0CisKK0VORAorCisKK25neF9mb3JtYXQ9bm8KK25neF9jb21tYT0KKworCitmb3Igbmd4X2ZtdCBpbiAkbmd4X2Zvcm1hdHMKIGRvCiAKICAgICBjYXQgPDwgRU5EID4gJE5HWF9BVVRPVEVTVC5jCkBAIC0xOCw1MiArMjUsNjMgQEAKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+Ci0kTkdYX0lOVFRZUEVTX0gKLSROR1hfQVVUT19DT05GSUcKKyROR1hfSU5DTFVERV9JTlRUWVBFU19ICiskTkdYX0lOQ0xVREVfQVVUT19DT05GSUdfSAogCiBpbnQgbWFpbigpIHsKLSAgICBwcmludGYoIiRmbXQiLCAoJG5neF90eXBlKSAkbmd4X21heF92YWx1ZSk7CisgICAgcHJpbnRmKCIkbmd4X2ZtdCIsICgkbmd4X3R5cGUpICRuZ3hfbWF4X3ZhbHVlKTsKICAgICByZXR1cm4gMDsKIH0KIAogRU5ECiAKLSAgICBldmFsICIkQ0NfV0FSTiAkQ0NfVEVTVF9GTEFHUyAtbyAkTkdYX0FVVE9URVNUICROR1hfQVVUT1RFU1QuYyBcCi0gICAgICAgICAgPj4gJE5HWF9FUlIgMj4mMSIKKyAgICBuZ3hfdGVzdD0iJENDICRDQ19URVNUX0ZMQUdTICRDQ19XQVJOICRDQ19BVVhfRkxBR1MgXAorICAgICAgICAgICAgICAtbyAkTkdYX0FVVE9URVNUICROR1hfQVVUT1RFU1QuYyIKKyAgICBldmFsICIkbmd4X3Rlc3QgPj4gJE5HWF9BVVRPQ09ORl9FUlIgMj4mMSIKIAotICAgIG1heF92YWx1ZT1gZWNobyAkbmd4X21heF92YWx1ZSB8IHNlZCAtZSAicy9MKlwkLy8iYAorICAgIG5neF9tYXhfdmFsPWBlY2hvICRuZ3hfbWF4X3ZhbHVlIHwgc2VkIC1lICJzL0wqXCQvLyJgCiAKICAgICBpZiBbIC14ICROR1hfQVVUT1RFU1QgXTsgdGhlbgotICAgICAgICBpZiBbICJgJE5HWF9BVVRPVEVTVGAiID0gJG1heF92YWx1ZSBdOyB0aGVuCisKKyAgICAgICAgaWYgWyAiYCROR1hfQVVUT1RFU1RgIiA9ICRuZ3hfbWF4X3ZhbCBdOyB0aGVuCisKICAgICAgICAgICAgIGlmIFsgJG5neF9mbXRfY29sbGVjdCA9IHllcyBdOyB0aGVuCi0gICAgICAgICAgICAgICAgZWNobyAkbmd4X24gIiRjb21tYSBcIiR7Zm10fVwiIGlzIGFwcHJvcHJpYXRlIiAkbmd4X2MKKyAgICAgICAgICAgICAgICBlY2hvICRuZ3hfbiAiJG5neF9jb21tYSBcIiR7bmd4X2ZtdH1cIiBpcyBhcHByb3ByaWF0ZSRuZ3hfYyIKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlY2hvICRuZ3hfbiAiJGNvbW1hIFwiJHtmbXR9XCIgdXNlZCIgJG5neF9jCisgICAgICAgICAgICAgICAgZWNobyAkbmd4X24gIiRuZ3hfY29tbWEgXCIke25neF9mbXR9XCIgdXNlZCRuZ3hfYyIKICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBuZ3hfZm10PSRmbXQKKworICAgICAgICAgICAgbmd4X2Zvcm1hdD0kbmd4X2ZtdAogICAgICAgICBmaQogICAgIGZpCiAKLSAgICBybSAkTkdYX0FVVE9URVNUKgorICAgIHJtIC1mICROR1hfQVVUT1RFU1QKIAotICAgIGlmIFsgJG5neF9mbXQgIT0gbm8gXTsgdGhlbgorICAgIGlmIFsgJG5neF9mb3JtYXQgIT0gbm8gXTsgdGhlbgogICAgICAgICBpZiBbICRuZ3hfZm10X2NvbGxlY3QgPSB5ZXMgXTsgdGhlbgotICAgICAgICAgICAgZXZhbCAibmd4XyR7bmd4X3NpemV9X2ZtdD1cIlwke25neF8ke25neF9zaXplfV9mbXR9IFwkbmd4X2ZtdFwiIgotICAgICAgICAgICAgY29tbWE9IiwiCisgICAgICAgICAgICBldmFsICJuZ3hfJHtuZ3hfc2l6ZX1fZm10PVwiXCR7bmd4XyR7bmd4X3NpemV9X2ZtdH0gXCRuZ3hfZm9ybWF0XCIiCisgICAgICAgICAgICBuZ3hfY29tbWE9IiwiCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBicmVhawogICAgICAgICBmaQogICAgIGZpCiAKLSAgICBlY2hvICRuZ3hfbiAiJGNvbW1hIFwiJHtmbXR9XCIgaXMgbm90IGFwcHJvcHJpYXRlIiAkbmd4X2MKLSAgICBjb21tYT0iLCIKKyAgICBlY2hvICRuZ3hfbiAiJG5neF9jb21tYSBcIiR7bmd4X2ZtdH1cIiBpcyBub3QgYXBwcm9wcmlhdGUkbmd4X2MiCisgICAgbmd4X2NvbW1hPSIsIgorCisgICAgZWNobyAiLS0tLS0tLS0tLSIgICAgPj4gJE5HWF9BVVRPQ09ORl9FUlIKKyAgICBjYXQgJE5HWF9BVVRPVEVTVC5jICA+PiAkTkdYX0FVVE9DT05GX0VSUgorICAgIGVjaG8gIi0tLS0tLS0tLS0iICAgID4+ICROR1hfQVVUT0NPTkZfRVJSCisgICAgZWNobyAkbmd4X3Rlc3QgICAgICAgPj4gJE5HWF9BVVRPQ09ORl9FUlIKKyAgICBlY2hvICItLS0tLS0tLS0tIiAgICA+PiAkTkdYX0FVVE9DT05GX0VSUgogZG9uZQogCiBlY2hvCiAKLWlmIFsgJG5neF9mbXQgPSBubyBdOyB0aGVuCitpZiBbICRuZ3hfZm9ybWF0ID0gbm8gXTsgdGhlbgogICAgIGVjaG8gIiQwOiBlcnJvcjogcHJpbnRmKCkgJG5neF90eXBlIGZvcm1hdCBub3QgZm91bmQiCisKICAgICBleGl0IDEKIGZpCiAKQEAgLTcyLDcgKzkwLDcgQEAKICAgICBjYXQgPDwgRU5EID4+ICROR1hfQVVUT19DT05GSUdfSAogCiAjaWZuZGVmICRuZ3hfZm10X25hbWUKLSNkZWZpbmUgJG5neF9mbXRfbmFtZSAgIiRuZ3hfZm10IgorI2RlZmluZSAkbmd4X2ZtdF9uYW1lICAiJG5neF9mb3JtYXQiCiAjZW5kaWYKIAogRU5ECmRpZmYgLS1naXQgYS9hdXRvL2ZtdC9wdHJmbXQgYi9hdXRvL2ZtdC9wdHJmbXQKaW5kZXggMTYzY2E1OS4uMzJiYThhNCAxMDA2NDQKLS0tIGEvYXV0by9mbXQvcHRyZm10CisrKyBiL2F1dG8vZm10L3B0cmZtdApAQCAtMiw3MSArMiw4NSBAQAogIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CiAKIAotZWNobyAkbmd4X24gImNoZWNraW5nIGZvciAkbmd4X3R5cGUgcHJpbnRmKCkgZm9ybWF0IC4uLiIgJG5neF9jCi1lY2hvID4+ICROR1hfRVJSCi1lY2hvICJjaGVja2luZyBmb3IgJG5neF90eXBlIHByaW50ZigpIGZvcm1hdCIgPj4gJE5HWF9FUlIKK2VjaG8gJG5neF9uICJjaGVja2luZyBmb3IgJG5neF90eXBlIHByaW50ZigpIGZvcm1hdCAuLi4kbmd4X2MiCiAKLW5neF9mbXQ9bm8KLWNvbW1hPQotZm10WD0KK2NhdCA8PCBFTkQgPj4gJE5HWF9BVVRPQ09ORl9FUlIKIAotZm9yIGZtdCBpbiAkbmd4X2Zvcm1hdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NoZWNraW5nIGZvciAkbmd4X3R5cGUgcHJpbnRmKCkgZm9ybWF0CisKK0VORAorCisKK25neF9mb3JtYXQ9bm8KK25neF9jb21tYT0KK25neF9mbXRfeD0KKworZm9yIG5neF9mbXQgaW4gJG5neF9mb3JtYXRzCiBkbwogCiAgICAgY2F0IDw8IEVORCA+ICROR1hfQVVUT1RFU1QuYwogCiBpbnQgbWFpbigpIHsKLSAgICBwcmludGYoIiRmbXQiLCAoJG5neF90eXBlKSAkbmd4X21heF92YWx1ZSk7CisgICAgcHJpbnRmKCIkbmd4X2ZtdCIsICgkbmd4X3R5cGUpICRuZ3hfbWF4X3ZhbHVlKTsKICAgICByZXR1cm4gMDsKIH0KIAogRU5ECiAKLSAgICBldmFsICIkQ0NfV0FSTiAkQ0NfVEVTVF9GTEFHUyAtbyAkTkdYX0FVVE9URVNUICROR1hfQVVUT1RFU1QuYyBcCi0gICAgICAgICAgPj4gJE5HWF9FUlIgMj4mMSIKKyAgICBuZ3hfdGVzdD0iJENDICRDQ19URVNUX0ZMQUdTICRDQ19XQVJOICRDQ19BVVhfRkxBR1MgXAorICAgICAgICAgICAgICAtbyAkTkdYX0FVVE9URVNUICROR1hfQVVUT1RFU1QuYyIKKyAgICBldmFsICIkbmd4X3Rlc3QgPj4gJE5HWF9BVVRPQ09ORl9FUlIgMj4mMSIKIAotICAgIG1heF92YWx1ZT1gZWNobyAkbmd4X21heF92YWx1ZSB8IHNlZCAtZSAicy9MKlwkLy8iYAorICAgIG5neF9tYXhfdmFsPWBlY2hvICRuZ3hfbWF4X3ZhbHVlIHwgc2VkIC1lICJzL0wqXCQvLyJgCiAKICAgICBpZiBbIC14ICROR1hfQVVUT1RFU1QgXTsgdGhlbgotICAgICAgICBpZiBbICJgJE5HWF9BVVRPVEVTVGAiID0gJG1heF92YWx1ZSBdOyB0aGVuCi0gICAgICAgICAgICBuZ3hfZm10PSRmbXQKKyAgICAgICAgaWYgWyAiYCROR1hfQVVUT1RFU1RgIiA9ICRuZ3hfbWF4X3ZhbCBdOyB0aGVuCisgICAgICAgICAgICBuZ3hfZm9ybWF0PSRuZ3hfZm10CiAgICAgICAgIGZpCiAgICAgZmkKIAotICAgIHJtICROR1hfQVVUT1RFU1QqCisgICAgcm0gJE5HWF9BVVRPVEVTVAogCi0gICAgaWYgWyAkbmd4X2ZtdCAhPSBubyBdOyB0aGVuCisgICAgaWYgWyAkbmd4X2Zvcm1hdCAhPSBubyBdOyB0aGVuCiAgICAgICAgIGJyZWFrCiAgICAgZmkKIAotICAgIGZtdFg9YGVjaG8gJGZtdCB8IHNlZCAtZSAicy9kL1gvImAKKyAgICBuZ3hfZm10X3g9YGVjaG8gJG5neF9mbXQgfCBzZWQgLWUgInMvZC9YLyJgCiAKLSAgICBlY2hvICRuZ3hfbiAiJGNvbW1hIFwiJHtmbXRYfVwiIGlzIG5vdCBhcHByb3ByaWF0ZSIgJG5neF9jCi0gICAgY29tbWE9IiwiCisgICAgZWNobyAkbmd4X24gIiRuZ3hfY29tbWEgXCIke25neF9mbXRfeH1cIiBpcyBub3QgYXBwcm9wcmlhdGUkbmd4X2MiCisgICAgbmd4X2NvbW1hPSIsIgorCisgICAgZWNobyAiLS0tLS0tLS0tLSIgICAgPj4gJE5HWF9BVVRPQ09ORl9FUlIKKyAgICBjYXQgJE5HWF9BVVRPVEVTVC5jICA+PiAkTkdYX0FVVE9DT05GX0VSUgorICAgIGVjaG8gIi0tLS0tLS0tLS0iICAgID4+ICROR1hfQVVUT0NPTkZfRVJSCisgICAgZWNobyAkbmd4X3Rlc3QgICAgICAgPj4gJE5HWF9BVVRPQ09ORl9FUlIKKyAgICBlY2hvICItLS0tLS0tLS0tIiAgICA+PiAkTkdYX0FVVE9DT05GX0VSUgogZG9uZQogCiAKLWlmIFsgJG5neF9mbXQgPSBubyBdOyB0aGVuCitpZiBbICRuZ3hfZm9ybWF0ID0gbm8gXTsgdGhlbgogICAgIGVjaG8gIiQwOiBlcnJvcjogcHJpbnRmKCkgJG5neF90eXBlIGZvcm1hdCBub3QgZm91bmQiCisKICAgICBleGl0IDEKIGZpCiAKIAogaWYgWyAkbmd4X3B0cl9zaXplID0gNCBdOyB0aGVuCi0gICAgZm10WD0iJTBgZXhwciAyIFwqICRuZ3hfcHRyX3NpemVgIgorICAgIG5neF9mbXRfeD0iJTBgZXhwciAyIFwqICRuZ3hfcHRyX3NpemVgIgogZWxzZQotICAgIGZtdFg9IiUiCisgICAgbmd4X2ZtdF94PSIlIgogZmkKIAotbmd4X2ZtdD1gZWNobyAkbmd4X2ZtdCB8IHNlZCAtZSAicy9kL1gvIiAtZSAicy9eJS8kZm10WC8iYAorbmd4X2Zvcm1hdD1gZWNobyAkbmd4X2Zvcm1hdCB8IHNlZCAtZSAicy9kL1gvIiAtZSAicy9eJS8kbmd4X2ZtdF94LyJgCiAKLWVjaG8gIiRjb21tYSBcIiR7bmd4X2ZtdH1cIiB1c2VkIgorZWNobyAiJG5neF9jb21tYSBcIiR7bmd4X2Zvcm1hdH1cIiB1c2VkIgogCiAKIGNhdCA8PCBFTkQgPj4gJE5HWF9BVVRPX0NPTkZJR19ICiAKICNpZm5kZWYgJG5neF9mbXRfbmFtZQotI2RlZmluZSAkbmd4X2ZtdF9uYW1lICAiJG5neF9mbXQiCisjZGVmaW5lICRuZ3hfZm10X25hbWUgICIkbmd4X2Zvcm1hdCIKICNlbmRpZgogCiBFTkQKZGlmZiAtLWdpdCBhL2F1dG8vaGVhZGVycyBiL2F1dG8vaGVhZGVycwppbmRleCAyYmZhNjg1Li4yOWVlYzYwIDEwMDY0NAotLS0gYS9hdXRvL2hlYWRlcnMKKysrIGIvYXV0by9oZWFkZXJzCkBAIC0yLDUgKzIsNyBAQAogIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CiAKIAotbmd4X2luYz0idW5pc3RkLmgiOyAuIGF1dG8vaW5jCi1uZ3hfaW5jPSJpbnR0eXBlcy5oIjsgLiBhdXRvL2luYworbmd4X2luY2x1ZGU9InVuaXN0ZC5oIjsgICAgLiBhdXRvL2luY2x1ZGUKK25neF9pbmNsdWRlPSJpbnR0eXBlcy5oIjsgIC4gYXV0by9pbmNsdWRlCituZ3hfaW5jbHVkZT0ibGltaXRzLmgiOyAgICAuIGF1dG8vaW5jbHVkZQorbmd4X2luY2x1ZGU9InN5cy9maWxpby5oIjsgLiBhdXRvL2luY2x1ZGUKZGlmZiAtLWdpdCBhL2F1dG8vaW5jIGIvYXV0by9pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NzEwMjIuLjAwMDAwMDAKLS0tIGEvYXV0by9pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0KLSMgQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgotCi0KLWVjaG8gJG5neF9uICJjaGVja2luZyBmb3IgJG5neF9pbmMgLi4uIiAkbmd4X2MKLWVjaG8gPj4gJE5HWF9FUlIKLWVjaG8gImNoZWNraW5nIGZvciAkbmd4X2luYyIgPj4gJE5HWF9FUlIKLQotbmd4X2ZvdW5kPW5vCi0KLWluYz1gZWNobyAkbmd4X2luYyB8IHNlZCAtZSAncy9cLi9fLycgfCBzZWQgLWUgJ3MvXC8vXy8nIHwgdHIgJ1thLXpdJyAnW0EtWl0nYAotCi1jYXQgPDwgRU5EID4gJE5HWF9BVVRPVEVTVC5jCi0KLSNpbmNsdWRlIDwkbmd4X2luYz4KLQotaW50IG1haW4oKSB7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUVORAotCi1ldmFsICIke0NDfSAtbyAkTkdYX0FVVE9URVNUICROR1hfQVVUT1RFU1QuYyA+PiAkTkdYX0VSUiAyPiYxIgotCi1pZiBbIC14ICROR1hfQVVUT1RFU1QgXTsgdGhlbgotICAgIGVjaG8gIiBmb3VuZCIKLSAgICBoYXZlPUhBVkVfJGluYyAuIGF1dG8vaGF2ZQotICAgIGV2YWwgIk5HWF8kaW5jPScjaW5jbHVkZSA8JG5neF9pbmM+JyIKLSAgICBuZ3hfZm91bmQ9eWVzCi0KLWVsc2UKLSAgICBlY2hvICIgbm90IGZvdW5kIgotZmkKLQotcm0gJE5HWF9BVVRPVEVTVCoKZGlmZiAtLWdpdCBhL2F1dG8vaW5jbHVkZSBiL2F1dG8vaW5jbHVkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzY5MTY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXV0by9pbmNsdWRlCkBAIC0wLDAgKzEsNjYgQEAKKworIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisKKworZWNobyAkbmd4X24gImNoZWNraW5nIGZvciAkbmd4X2luY2x1ZGUgLi4uJG5neF9jIgorCitjYXQgPDwgRU5EID4+ICROR1hfQVVUT0NPTkZfRVJSCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NoZWNraW5nIGZvciAkbmd4X2luY2x1ZGUKKworRU5ECisKKworbmd4X2ZvdW5kPW5vCisKK2NhdCA8PCBFTkQgPiAkTkdYX0FVVE9URVNULmMKKworI2luY2x1ZGUgPCRuZ3hfaW5jbHVkZT4KKworaW50IG1haW4oKSB7CisgICAgcmV0dXJuIDA7Cit9CisKK0VORAorCisKK25neF90ZXN0PSIkQ0MgLW8gJE5HWF9BVVRPVEVTVCAkTkdYX0FVVE9URVNULmMiCisKK2V2YWwgIiRuZ3hfdGVzdCA+PiAkTkdYX0FVVE9DT05GX0VSUiAyPiYxIgorCitpZiBbIC14ICROR1hfQVVUT1RFU1QgXTsgdGhlbgorCisgICAgbmd4X2ZvdW5kPXllcworCisgICAgZWNobyAiIGZvdW5kIgorCisgICAgbmd4X25hbWU9YGVjaG8gJG5neF9pbmNsdWRlIHwgc2VkIC1lICdzL1wuL18vJyAtZSAncy9cLy9fLycgXAorICAgICAgICAgICAgICAgICAgfCAgdHIgJ1thLXpdJyAnW0EtWl0nYAorCisKKyAgICBjYXQgPDwgRU5EID4+ICROR1hfQVVUT19IRUFERVJTX0gKKworI2lmbmRlZiBOR1hfSEFWRV8kbmd4X25hbWUKKyNkZWZpbmUgTkdYX0hBVkVfJG5neF9uYW1lICAxCisjZW5kaWYKKworRU5ECisKKworICAgIGV2YWwgIk5HWF9JTkNMVURFXyRuZ3hfbmFtZT0nI2luY2x1ZGUgPCRuZ3hfaW5jbHVkZT4nIgorCisgICAgI1NUVUIgCisgICAgZXZhbCAiTkdYXyRuZ3hfbmFtZT0nI2luY2x1ZGUgPCRuZ3hfaW5jbHVkZT4nIgorCitlbHNlCisgICAgZWNobyAiIG5vdCBmb3VuZCIKKworICAgIGVjaG8gIi0tLS0tLS0tLS0iICAgID4+ICROR1hfQVVUT0NPTkZfRVJSCisgICAgY2F0ICROR1hfQVVUT1RFU1QuYyAgPj4gJE5HWF9BVVRPQ09ORl9FUlIKKyAgICBlY2hvICItLS0tLS0tLS0tIiAgICA+PiAkTkdYX0FVVE9DT05GX0VSUgorICAgIGVjaG8gJG5neF90ZXN0ICAgICAgID4+ICROR1hfQVVUT0NPTkZfRVJSCisgICAgZWNobyAiLS0tLS0tLS0tLSIgICAgPj4gJE5HWF9BVVRPQ09ORl9FUlIKK2ZpCisKK3JtICROR1hfQVVUT1RFU1QqCmRpZmYgLS1naXQgYS9hdXRvL2luaXQgYi9hdXRvL2luaXQKaW5kZXggYmM0ZDhiYi4uMDgwY2MyOCAxMDA2NDQKLS0tIGEvYXV0by9pbml0CisrKyBiL2F1dG8vaW5pdApAQCAtMiwzMSArMiwzMyBAQAogIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CiAKIAorTkdYX01BS0VGSUxFPSROR1hfT0JKUy9NYWtlZmlsZQorTkdYX01PRFVMRVNfQz0kTkdYX09CSlMvbmd4X21vZHVsZXMuYworCitOR1hfQVVUT19IRUFERVJTX0g9JE5HWF9PQkpTL25neF9hdXRvX2hlYWRlcnMuaAorTkdYX0FVVE9fQ09ORklHX0g9JE5HWF9PQkpTL25neF9hdXRvX2NvbmZpZy5oCisKK05HWF9BVVRPVEVTVD0kTkdYX09CSlMvYXV0b3Rlc3QKK05HWF9BVVRPQ09ORl9FUlI9JE5HWF9PQkpTL2F1dG9jb25mLmVycgorCisjIFNUVUJzCitPQkpTPSROR1hfT0JKUworTkdYX0VSUj0kT0JKUy9hdXRvY29uZi5lcnIKIE1BS0VGSUxFPSRPQkpTL01ha2VmaWxlCiAKLU5HWF9BVVRPX0NPTkZJR19IPSRPQkpTL25neF9hdXRvX2NvbmZpZy5oCi1OR1hfTU9EVUxFU19DPSRPQkpTL25neF9tb2R1bGVzLmMKIAotTkdYX0FVVE9URVNUPSRPQkpTL2F1dG90ZXN0Ci1OR1hfRVJSPSRPQkpTL2F1dG9jb25mLmVycgotCi1DQ19XQVJOPSRDQwotCi1QQ0g9Tk8KLVVTRVBDSD0KLQotT0JKRVhUPQotQklORVhUPQotRElSU0VQPSdcLycKLU1BS0VfU0w9Tk8KK05HWF9QQ0g9CitOR1hfVVNFX1BDSD0KIAogCi0jIGNoZWNraW5nIGVjaG8ncyAiLW4iIG9wdGlvbiBhbmQgIlxjIiBjYXBhYmlsdGllcworIyBjaGVjayB0aGUgZWNobydzICItbiIgb3B0aW9uIGFuZCAiXGMiIGNhcGFiaWxpdHkKIAogaWYgZWNobyAidGVzdFxjIiB8IGdyZXAgYyA+L2Rldi9udWxsOyB0aGVuCisKICAgICBpZiBlY2hvIC1uIHRlc3QgfCBncmVwIG4gPi9kZXYvbnVsbDsgdGhlbgogICAgICAgICBuZ3hfbj0KICAgICAgICAgbmd4X2M9CisKICAgICBlbHNlCiAgICAgICAgIG5neF9uPS1uCiAgICAgICAgIG5neF9jPQpAQCAtMzgsMTkgKzQwLDE4IEBACiBmaQogCiAKKyMgY3JlYXRlIE1ha2VmaWxlCiAKLWlmIHRlc3QgISAtZiBNYWtlZmlsZTsgdGhlbgotCi0gICAgY2F0IDw8IEVORCA+IE1ha2VmaWxlCitjYXQgPDwgRU5EID4gTWFrZWZpbGUKIAogYnVpbGQ6Ci0JXCQoTUFLRSkgLWYgJE9CSlMvTWFrZWZpbGUKKwlcJChNQUtFKSAtZiAkTkdYX01BS0VGSUxFCiAKIGluc3RhbGw6Ci0JXCQoTUFLRSkgLWYgJE9CSlMvTWFrZWZpbGUgaW5zdGFsbAorCVwkKE1BS0UpIC1mICROR1hfTUFLRUZJTEUgaW5zdGFsbAogCiBjbGVhbjoKLQlybSAtcmYgTWFrZWZpbGUgJE9CSlMKKwlybSAtcmYgTWFrZWZpbGUgJE5HWF9PQkpTCiAKIHVwZ3JhZGU6CiAJJFNCSU5fUEFUSCAtdApAQCAtNTgsNyArNTksNCBAQAogCXNsZWVwIDEKIAl0ZXN0IC1mICRQSURfUEFUSC5uZXdiaW4KIAlraWxsIC1XSU5DSCBcYGNhdCAkUElEX1BBVEhcYAotCiBFTkQKLQotZmkKZGlmZiAtLWdpdCBhL2F1dG8vaW5zdGFsbCBiL2F1dG8vaW5zdGFsbAppbmRleCA1N2UzMDE5Li4wZGE5YjZkIDEwMDY0NAotLS0gYS9hdXRvL2luc3RhbGwKKysrIGIvYXV0by9pbnN0YWxsCkBAIC04LDcgKzgsNyBAQAogCiAJdGVzdCAtZCBgZGlybmFtZSAkU0JJTl9QQVRIYCB8fCBta2RpciAtcCBgZGlybmFtZSAkU0JJTl9QQVRIYAogCXRlc3QgISAtZiAkU0JJTl9QQVRIIHx8IG12ICRTQklOX1BBVEggJFNCSU5fUEFUSC5vbGQKLQljcCBuZ2lueCAkU0JJTl9QQVRICisJY3AgJE9CSlMvbmdpbnggJFNCSU5fUEFUSAogCiAJdGVzdCAtZCBgZGlybmFtZSAkQ09ORl9QQVRIYCB8fCBta2RpciAtcCBgZGlybmFtZSAkQ09ORl9QQVRIYAogCmRpZmYgLS1naXQgYS9hdXRvL2xpYi9tZDUvY29uZiBiL2F1dG8vbGliL21kNS9jb25mCmluZGV4IDc0OGJlYTQuLjYyMzk4NmYgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL21kNS9jb25mCisrKyBiL2F1dG8vbGliL21kNS9jb25mCkBAIC0xNSwxNCArMTUsMTQgQEAKIAogICAgIENPUkVfSU5DUz0iJENPUkVfSU5DUyAkTUQ1IgogCi0gICAgY2FzZSAiJENDIiBpbgorICAgIGNhc2UgIiROR1hfQ0NfTkFNRSIgaW4KIAotICAgICAgICBjbCB8IHdjbDM4NiB8IGJjYzMyKQorICAgICAgICBtc3ZjIHwgb3djIHwgYmNjKQogICAgICAgICAgICAgTElOS19ERVBTPSIkTElOS19ERVBTICRNRDUvbWQ1LmxpYiIKICAgICAgICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAkTUQ1L21kNS5saWIiCiAgICAgICAgIDs7CiAKLSAgICAgICAgKmljYykKKyAgICAgICAgaWNjKQogICAgICAgICAgICAgTElOS19ERVBTPSIkTElOS19ERVBTICRNRDUvbGlibWQ1LmEiCiAKICAgICAgICAgICAgICMgdG8gYWxsb3cgLWlwbyBvcHRpbWl6YXRpb24gd2UgbGluayB3aXRoIHRoZSAqLm8gYnV0IG5vdCBsaWJyYXJ5CkBAIC00NSwyMCArNDUsMTkgQEAKIAogICAgIGlmIFsgJFBMQVRGT1JNICE9IHdpbjMyIF07IHRoZW4KICAgICAgICAgTUQ1PU5PCi0gICAgICAgIG5neF9saWJfY2ZsYWdzPQogCiAgICAgICAgICMgU29sYXJpcyA4LzkKIAotICAgICAgICBuZ3hfbGliX2luYz0iI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPG1kNS5oPiIKLSAgICAgICAgbmd4X2xpYj0icnNhcmVmIG1kNSBsaWJyYXJ5IgotICAgICAgICBuZ3hfbGliX3Rlc3Q9Ik1ENV9DVFggbWQ1OyBNRDVJbml0KCZtZDUpIgotICAgICAgICBuZ3hfbGlicz0tbG1kNQotICAgICAgICAuIGF1dG8vbGliL3Rlc3QKLQorICAgICAgICBuZ3hfZmVhdHVyZT0icnNhcmVmIG1kNSBsaWJyYXJ5IgorICAgICAgICBuZ3hfZmVhdHVyZV9uYW1lPSJyc2FyZWZfbWQ1IgorICAgICAgICBuZ3hfZmVhdHVyZV9ydW49bm8KKyAgICAgICAgbmd4X2ZlYXR1cmVfaW5jcz0iI2luY2x1ZGUgPG1kNS5oPiIKKyAgICAgICAgbmd4X2ZlYXR1cmVfbGlicz0iLWxtZDUiCisgICAgICAgIG5neF9mZWF0dXJlX3Rlc3Q9Ik1ENV9DVFggbWQ1OyBNRDVJbml0KCZtZDUpIgorICAgICAgICAuIGF1dG8vZmVhdHVyZQogCiAgICAgICAgIGlmIFsgJG5neF9mb3VuZCA9IHllcyBdOyB0aGVuCi0gICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJG5neF9saWJzIgorICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTICRuZ3hfZmVhdHVyZV9saWJzIgogICAgICAgICAgICAgTUQ1PVlFUwogICAgICAgICAgICAgTUQ1X0xJQj1tZDUKICAgICAgICAgICAgIG5neF9mb3VuZD1ubwpAQCAtNjYsMTUgKzY1LDE4IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICMgRnJlZUJTRAogCi0gICAgICAgICAgICBuZ3hfbGliPSJyc2FyZWYgbWQgbGlicmFyeSIKLSAgICAgICAgICAgIG5neF9saWJfdGVzdD0iTUQ1X0NUWCBtZDU7IE1ENUluaXQoJm1kNSkiCi0gICAgICAgICAgICBuZ3hfbGlicz0tbG1kCi0gICAgICAgICAgICAuIGF1dG8vbGliL3Rlc3QKKyAgICAgICAgICAgIG5neF9mZWF0dXJlPSJyc2FyZWYgbWQgbGlicmFyeSIKKyAgICAgICAgICAgIG5neF9mZWF0dXJlX25hbWU9InJzYXJlZl9tZDUiCisgICAgICAgICAgICBuZ3hfZmVhdHVyZV9ydW49bm8KKyAgICAgICAgICAgIG5neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxtZDUuaD4iCisgICAgICAgICAgICBuZ3hfZmVhdHVyZV9saWJzPSItbG1kIgorICAgICAgICAgICAgbmd4X2ZlYXR1cmVfdGVzdD0iTUQ1X0NUWCBtZDU7IE1ENUluaXQoJm1kNSkiCisgICAgICAgICAgICAuIGF1dG8vZmVhdHVyZQogICAgICAgICBmaQogCiAKICAgICAgICAgaWYgWyAkbmd4X2ZvdW5kID0geWVzIF07IHRoZW4KLSAgICAgICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAkbmd4X2xpYnMiCisgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJG5neF9mZWF0dXJlX2xpYnMiCiAgICAgICAgICAgICBNRDU9WUVTCiAgICAgICAgICAgICBNRDVfTElCPW1kCiAgICAgICAgICAgICBuZ3hfZm91bmQ9bm8KQEAgLTg0LDE5ICs4NiwyMCBAQAogCiAgICAgICAgICAgICAgICAjIE9wZW5TU0wgY3J5cHRvIGxpYnJhcnkKIAotICAgICAgICAgICAgICAgbmd4X2xpYl9pbmM9IiNpbmNsdWRlIDxvcGVuc3NsL21kNS5oPiIKLSAgICAgICAgICAgICAgIG5neF9saWI9Ik9wZW5TU0wgbWQ1IGNyeXB0byBsaWJyYXJ5IgotICAgICAgICAgICAgICAgbmd4X2xpYl90ZXN0PSJNRDVfQ1RYIG1kNTsgTUQ1X0luaXQoJm1kNSkiCi0gICAgICAgICAgICAgICBuZ3hfbGlicz0tbGNyeXB0bwotICAgICAgICAgICAgICAgLiBhdXRvL2xpYi90ZXN0CisgICAgICAgICAgICAgICBuZ3hfZmVhdHVyZT0iT3BlblNTTCBtZDUgY3J5cHRvIGxpYnJhcnkiCisgICAgICAgICAgICAgICBuZ3hfZmVhdHVyZV9uYW1lPSJPcGVuU1NMX21kNSIKKyAgICAgICAgICAgICAgIG5neF9mZWF0dXJlX3J1bj1ubworICAgICAgICAgICAgICAgbmd4X2ZlYXR1cmVfaW5jcz0iI2luY2x1ZGUgPG9wZW5zc2wvbWQ1Lmg+IgorICAgICAgICAgICAgICAgbmd4X2ZlYXR1cmVfbGlicz0iLWxjcnlwdG8iCisgICAgICAgICAgICAgICBuZ3hfZmVhdHVyZV90ZXN0PSJNRDVfQ1RYIG1kNTsgTUQ1X0luaXQoJm1kNSkiCisgICAgICAgICAgICAgICAuIGF1dG8vZmVhdHVyZQogICAgICAgICAgICAgZmkKICAgICAgICAgZmkKIAogCiAgICAgICAgIGlmIFsgJG5neF9mb3VuZCA9IHllcyBdOyB0aGVuCi0gICAgICAgICAgICBoYXZlPUhBVkVfT1BFTlNTTF9NRDUgLiBhdXRvL2hhdmUKICAgICAgICAgICAgIGhhdmU9SEFWRV9PUEVOU1NMX01ENV9IIC4gYXV0by9oYXZlCi0gICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJG5neF9saWJzIgorICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTICRuZ3hfZmVhdHVyZV9saWJzIgogICAgICAgICAgICAgTUQ1PVlFUwogICAgICAgICAgICAgTUQ1X0xJQj1jcnlwdG8KICAgICAgICAgZmkKZGlmZiAtLWdpdCBhL2F1dG8vbGliL21kNS9tYWtlIGIvYXV0by9saWIvbWQ1L21ha2UKaW5kZXggZjcxOGU2Yy4uNmUyODM0ZSAxMDA2NDQKLS0tIGEvYXV0by9saWIvbWQ1L21ha2UKKysrIGIvYXV0by9saWIvbWQ1L21ha2UKQEAgLTI1LDcgKzI1LDcgQEAKIGNhc2UgJFBMQVRGT1JNIGluCiAKICAgICB3aW4zMikKLSAgICAgICAgbGluZT1gZWNobyAkTUQ1L21kNS5saWI6IHwgc2VkIC1lICJzL1wvLyRESVJTRVAvZyJgCisgICAgICAgIGxpbmU9YGVjaG8gJE1ENS9tZDUubGliOiB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKICAgICAgICAgZWNobyAiJGxpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQogICAgIDs7CiAKQEAgLTQyLDcgKzQyLDcgQEAKIGNhc2UgJFBMQVRGT1JNIGluCiAKICAgICB3aW4zMikKLSAgICAgICAgbWQ1PWBlY2hvICRNRDUgfCBzZWQgLWUgInMvXC8vJERJUlNFUC9nImAKKyAgICAgICAgbWQ1PWBlY2hvICRNRDUgfCBzZWQgLWUgInMvXC8vJG5neF9yZWdleF9kaXJzZXAvZyJgCiAKICAgICAgICAgY3AgYXV0by9saWIvbWQ1LyRtYWtlZmlsZSAkTUQ1CiAgICAgICAgIGVjaG8gIgljZCAkbWQ1IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQpkaWZmIC0tZ2l0IGEvYXV0by9saWIvb3BlbnNzbC9jb25mIGIvYXV0by9saWIvb3BlbnNzbC9jb25mCmluZGV4IDM3YzA4NGYuLjhlZjRmM2EgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL29wZW5zc2wvY29uZgorKysgYi9hdXRvL2xpYi9vcGVuc3NsL2NvbmYKQEAgLTE5LDIzICsxOSwyMiBAQAogZWxzZQogCiAgICAgaWYgWyAkUExBVEZPUk0gIT0gd2luMzIgXTsgdGhlbgotICAgICAgICAgICAgT1BFTlNTTD1OTwotICAgICAgICAgICAgbmd4X2xpYl9jZmxhZ3M9CisgICAgICAgIE9QRU5TU0w9Tk8KIAotICAgICAgICAgICAgbmd4X2xpYl9pbmM9IiNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPiIKLSAgICAgICAgICAgIG5neF9saWI9Ik9wZW5TU0wgbGlicmFyeSIKLSAgICAgICAgICAgIG5neF9saWJfdGVzdD0iU1NMX2xpYnJhcnlfaW5pdCgpIgotICAgICAgICAgICAgbmd4X2xpYnM9Ii1sc3NsIC1sY3J5cHRvIgotICAgICAgICAgICAgLiBhdXRvL2xpYi90ZXN0Ci0KKyAgICAgICAgbmd4X2ZlYXR1cmU9Ik9wZW5TU0wgbGlicmFyeSIKKyAgICAgICAgbmd4X2ZlYXR1cmVfbmFtZT0iT3BlblNTTCIKKyAgICAgICAgbmd4X2ZlYXR1cmVfcnVuPW5vCisgICAgICAgIG5neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPiIKKyAgICAgICAgbmd4X2ZlYXR1cmVfbGlicz0iLWxzc2wgLWxjcnlwdG8iCisgICAgICAgIG5neF9mZWF0dXJlX3Rlc3Q9IlNTTF9saWJyYXJ5X2luaXQoKSIKKyAgICAgICAgLiBhdXRvL2ZlYXR1cmUKIAogICAgICAgICBpZiBbICRuZ3hfZm91bmQgPSB5ZXMgXTsgdGhlbgogICAgICAgICAgICAgaGF2ZT1OR1hfT1BFTlNTTCAuIGF1dG8vaGF2ZQogICAgICAgICAgICAgQ09SRV9ERVBTPSIkQ09SRV9ERVBTICRPUEVOU1NMX0RFUFMiCiAgICAgICAgICAgICBDT1JFX1NSQ1M9IiRDT1JFX1NSQ1MgJE9QRU5TU0xfU1JDUyIKLSAgICAgICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAkbmd4X2xpYnMiCisgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJG5neF9mZWF0dXJlX2xpYnMiCiAgICAgICAgICAgICBPUEVOU1NMPVlFUwotICAgICAgICAgICAgbmd4X2ZvdW5kPW5vCiAgICAgICAgIGZpCiAKICAgICBmaQpkaWZmIC0tZ2l0IGEvYXV0by9saWIvcGNyZS9jb25mIGIvYXV0by9saWIvcGNyZS9jb25mCmluZGV4IDE2ZmVmZmEuLmNkNTE2ZTEgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL3BjcmUvY29uZgorKysgYi9hdXRvL2xpYi9wY3JlL2NvbmYKQEAgLTcsMTggKzcsMTggQEAKICAgICBDT1JFX0RFUFM9IiRDT1JFX0RFUFMgJFJFR0VYX0RFUFMiCiAgICAgQ09SRV9TUkNTPSIkQ09SRV9TUkNTICRSRUdFWF9TUkNTIgogCi0gICAgY2FzZSAiJENDIiBpbgorICAgIGNhc2UgIiROR1hfQ0NfTkFNRSIgaW4KIAotICAgICAgICBjbCB8IHdjbDM4NiB8IGJjYzMyKQotICAgICAgICAgICAgaGF2ZT1IQVZFX1BDUkUgLiBhdXRvL2hhdmUKKyAgICAgICAgbXN2YyB8IG93YyB8IGJjYykKKyAgICAgICAgICAgIGhhdmU9TkdYX1BDUkUgLiBhdXRvL2hhdmUKICAgICAgICAgICAgIGhhdmU9UENSRV9TVEFUSUMgLiBhdXRvL2hhdmUKICAgICAgICAgICAgIENPUkVfREVQUz0iJENPUkVfREVQUyAkUENSRS9wY3JlLmgiCiAgICAgICAgICAgICBMSU5LX0RFUFM9IiRMSU5LX0RFUFMgJFBDUkUvcGNyZS5saWIiCiAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJFBDUkUvcGNyZS5saWIiCiAgICAgICAgIDs7CiAKLSAgICAgICAgKmljYykKLSAgICAgICAgICAgIGhhdmU9SEFWRV9QQ1JFIC4gYXV0by9oYXZlCisgICAgICAgIGljYykKKyAgICAgICAgICAgIGhhdmU9TkdYX1BDUkUgLiBhdXRvL2hhdmUKICAgICAgICAgICAgIENPUkVfREVQUz0iJENPUkVfREVQUyAkUENSRS9wY3JlLmgiCiAKICAgICAgICAgICAgIExJTktfREVQUz0iJExJTktfREVQUyAkUENSRS8ubGlicy9saWJwY3JlLmEiCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIDs7CiAKICAgICAgICAgKikKLSAgICAgICAgICAgIGhhdmU9SEFWRV9QQ1JFIC4gYXV0by9oYXZlCisgICAgICAgICAgICBoYXZlPU5HWF9QQ1JFIC4gYXV0by9oYXZlCiAgICAgICAgICAgICBDT1JFX0RFUFM9IiRDT1JFX0RFUFMgJFBDUkUvcGNyZS5oIgogICAgICAgICAgICAgTElOS19ERVBTPSIkTElOS19ERVBTICRQQ1JFLy5saWJzL2xpYnBjcmUuYSIKICAgICAgICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAkUENSRS8ubGlicy9saWJwY3JlLmEiCkBAIC00Myw0NCArNDMsMjUgQEAKIGVsc2UKIAogICAgIGlmIFsgJFBMQVRGT1JNICE9IHdpbjMyIF07IHRoZW4KLSAgICAgICAgICAgIFBDUkU9Tk8KLSAgICAgICAgICAgIG5neF9saWJfY2ZsYWdzPQorICAgICAgICBQQ1JFPU5PCiAKLSAgICAgICAgICAgICMgTGludXgKLQotICAgICAgICAgICAgbmd4X2xpYl9pbmM9IiNpbmNsdWRlIDxwY3JlLmg+IgotICAgICAgICAgICAgbmd4X2xpYj0iUENSRSBsaWJyYXJ5IgotICAgICAgICAgICAgbmd4X2xpYl90ZXN0PSJwY3JlICpyZTsgcmUgPSBwY3JlX2NvbXBpbGUoTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCkiCi0gICAgICAgICAgICBuZ3hfbGlicz0iLWxwY3JlIgotICAgICAgICAgICAgLiBhdXRvL2xpYi90ZXN0Ci0KKyAgICAgICAgIyBGcmVlQlNEIFBDUkUgcG9ydCByZXF1aXJlcyAtLXdpdGgtY2Mtb3B0PSItSSAvdXNyL2xvY2FsL2luY2x1ZGUiCisgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLWxkLW9wdD0iLUwgL3Vzci9sb2NhbC9saWIiCisgICAgICAgIAorICAgICAgICBuZ3hfZmVhdHVyZT0iUENSRSBsaWJyYXJ5IgorICAgICAgICBuZ3hfZmVhdHVyZV9uYW1lPSJQQ1JFIgorICAgICAgICBuZ3hfZmVhdHVyZV9ydW49bm8KKyAgICAgICAgbmd4X2ZlYXR1cmVfaW5jcz0iI2luY2x1ZGUgPHBjcmUuaD4iCisgICAgICAgIG5neF9mZWF0dXJlX2xpYnM9Ii1scGNyZSIKKyAgICAgICAgbmd4X2ZlYXR1cmVfdGVzdD0icGNyZSAqcmU7IHJlID0gcGNyZV9jb21waWxlKE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwpIgorICAgICAgICAuIGF1dG8vZmVhdHVyZQogCiAgICAgICAgIGlmIFsgJG5neF9mb3VuZCA9IHllcyBdOyB0aGVuCi0gICAgICAgICAgICBoYXZlPUhBVkVfUENSRSAuIGF1dG8vaGF2ZQogICAgICAgICAgICAgQ09SRV9ERVBTPSIkQ09SRV9ERVBTICRSRUdFWF9ERVBTIgogICAgICAgICAgICAgQ09SRV9TUkNTPSIkQ09SRV9TUkNTICRSRUdFWF9TUkNTIgotICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTICRuZ3hfbGlicyIKKyAgICAgICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAkbmd4X2ZlYXR1cmVfbGlicyIKICAgICAgICAgICAgIFBDUkU9WUVTCiAgICAgICAgICAgICBuZ3hfZm91bmQ9bm8KLQotICAgICAgICBlbHNlCi0gICAgICAgICAgICAjIEZyZWVCU0QgUENSRSBwb3J0LgotCi0gICAgICAgICAgICBuZ3hfbGliPSJQQ1JFIGxpYnJhcnkgaW4gL3Vzci9sb2NhbC8iCi0gICAgICAgICAgICBuZ3hfbGliX2NmbGFncz0iLUkgL3Vzci9sb2NhbC9pbmNsdWRlIgotICAgICAgICAgICAgbmd4X2xpYnM9Ii1MIC91c3IvbG9jYWwvbGliIC1scGNyZSIKLSAgICAgICAgICAgIC4gYXV0by9saWIvdGVzdAotICAgICAgICBmaQotCi0KLSAgICAgICAgaWYgWyAkbmd4X2ZvdW5kID0geWVzIF07IHRoZW4KLSAgICAgICAgICAgIGhhdmU9SEFWRV9QQ1JFIC4gYXV0by9oYXZlCi0gICAgICAgICAgICBDT1JFX0RFUFM9IiRDT1JFX0RFUFMgJFJFR0VYX0RFUFMiCi0gICAgICAgICAgICBDT1JFX0lOQ1M9IiRDT1JFX0lOQ1MgL3Vzci9sb2NhbC9pbmNsdWRlIgotICAgICAgICAgICAgQ09SRV9TUkNTPSIkQ09SRV9TUkNTICRSRUdFWF9TUkNTIgotICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTICRuZ3hfbGlicyIKLSAgICAgICAgICAgIFBDUkU9WUVTCiAgICAgICAgIGZpCiAgICAgZmkKLQogZmkKZGlmZiAtLWdpdCBhL2F1dG8vbGliL3BjcmUvbWFrZSBiL2F1dG8vbGliL3BjcmUvbWFrZQppbmRleCBmYTdiZjI3Li43MTQ5OTRkIDEwMDY0NAotLS0gYS9hdXRvL2xpYi9wY3JlL21ha2UKKysrIGIvYXV0by9saWIvcGNyZS9tYWtlCkBAIC0yOSw4ICsyOSw4IEBACiAgICAgICAgIGNwIGF1dG8vbGliL3BjcmUvcGF0Y2guY29uZmlnLmluICRQQ1JFCiAgICAgICAgIGNwIGF1dG8vbGliL3BjcmUvJG1ha2VmaWxlICRQQ1JFCiAKLSAgICAgICAgcGNyZT1gZWNobyAkUENSRSB8IHNlZCAtZSAicy9cLy8kRElSU0VQL2ciYAotICAgICAgICBsaW5lPWBlY2hvICRQQ1JFL3BjcmUuaDogfCBzZWQgLWUgInMvXC8vJERJUlNFUC9nImAKKyAgICAgICAgcGNyZT1gZWNobyAkUENSRSB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKKyAgICAgICAgbGluZT1gZWNobyAkUENSRS9wY3JlLmg6IHwgc2VkIC1lICJzL1wvLyRuZ3hfcmVnZXhfZGlyc2VwL2ciYAogCiAgICAgICAgIGVjaG8gIiRsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKICAgICAgICAgZWNobyAiCWNkICRwY3JlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKIAogICAgICAgICBsaW5lPSIkUENSRS9wY3JlLmxpYjoJJFBDUkUvcGNyZS5oIgotICAgICAgICBsaW5lPWBlY2hvICRsaW5lIHwgc2VkIC1lICJzL1wvLyRESVJTRVAvZyJgCisgICAgICAgIGxpbmU9YGVjaG8gJGxpbmUgfCBzZWQgLWUgInMvXC8vJG5neF9yZWdleF9kaXJzZXAvZyJgCiAKICAgICAgICAgZWNobyAiJGxpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQogICAgICAgICBlY2hvICIJY2QgJHBjcmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKZGlmZiAtLWdpdCBhL2F1dG8vbGliL3Rlc3QgYi9hdXRvL2xpYi90ZXN0CmluZGV4IDdkZmFhZmUuLjY4MjFiNTEgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL3Rlc3QKKysrIGIvYXV0by9saWIvdGVzdApAQCAtMiwxNCArMiwyNiBAQAogIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CiAKIAotZWNobyAkbmd4X24gImNoZWNraW5nIGZvciAkbmd4X2xpYiAuLi4iICRuZ3hfYwotZWNobyA+PiAkTkdYX0VSUgotZWNobyAiY2hlY2tpbmcgZm9yICRuZ3hfbGliIGxpYnJhcnkiID4+ICROR1hfRVJSCitlY2hvICRuZ3hfbiAiY2hlY2tpbmcgZm9yICRuZ3hfbGliIC4uLiRuZ3hfYyIKKworY2F0IDw8IEVORCA+PiAkTkdYX0FVVE9DT05GX0VSUgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjaGVja2luZyBmb3IgJG5neF9saWIKKworRU5ECiAKIG5neF9mb3VuZD1ubwogCi1lY2hvICIkbmd4X2xpYl9pbmMiID4gJE5HWF9BVVRPVEVTVC5jCi1lY2hvICJpbnQgbWFpbigpIHsgJG5neF9saWJfdGVzdDsgcmV0dXJuIDA7IH0iID4+ICROR1hfQVVUT1RFU1QuYworY2F0IDw8IEVORCA+ICROR1hfQVVUT1RFU1QuYworCiskbmd4X2xpYl9pbmNzCisKK2ludCBtYWluKCkgeworICAgICRuZ3hfbGliX3Rlc3Q7CisgICAgcmV0dXJuIDA7Cit9CisKIAogZXZhbCAiJENDICRjY190ZXN0X2ZsYWdzICRuZ3hfbGliX2NmbGFncyBcCiAgICAgIC1vICROR1hfQVVUT1RFU1QgJE5HWF9BVVRPVEVTVC5jICRuZ3hfbGlicyBcCmRpZmYgLS1naXQgYS9hdXRvL2xpYi96bGliL2NvbmYgYi9hdXRvL2xpYi96bGliL2NvbmYKaW5kZXggYTAxZWViZS4uZjgzM2Q2MSAxMDA2NDQKLS0tIGEvYXV0by9saWIvemxpYi9jb25mCisrKyBiL2F1dG8vbGliL3psaWIvY29uZgpAQCAtNSwxNCArNSwxNCBAQAogaWYgWyAkWkxJQiAhPSBOT05FIF07IHRoZW4KICAgICBDT1JFX0lOQ1M9IiRDT1JFX0lOQ1MgJFpMSUIiCiAKLSAgICBjYXNlICIkQ0MiIGluCisgICAgY2FzZSAiJE5HWF9DQ19OQU1FIiBpbgogCi0gICAgICAgIGNsIHwgd2NsMzg2IHwgYmNjMzIpCisgICAgICAgIG1zdmMgfCBvd2MgfCBiY2MpCiAgICAgICAgICAgICBMSU5LX0RFUFM9IiRMSU5LX0RFUFMgJFpMSUIvemxpYi5saWIiCiAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJFpMSUIvemxpYi5saWIiCiAgICAgICAgIDs7CiAKLSAgICAgICAgKmljYykKKyAgICAgICAgaWNjKQogICAgICAgICAgICAgTElOS19ERVBTPSIkTElOS19ERVBTICRaTElCL2xpYnouYSIKIAogICAgICAgICAgICAgIyB0byBhbGxvdyAtaXBvIG9wdGltaXphdGlvbiB3ZSBsaW5rIHdpdGggdGhlICoubyBidXQgbm90IGxpYnJhcnkKQEAgLTM4LDIyICszOCwyMyBAQAogZWxzZQogCiAgICAgaWYgWyAkUExBVEZPUk0gIT0gd2luMzIgXTsgdGhlbgorICAgICAgICBaTElCPU5PCiAKICAgICAgICAgIyBGcmVlQlNELCBTb2xhcmlzLCBMaW51eAogCi0gICAgICAgIG5neF9saWJfY2ZsYWdzPQotICAgICAgICBuZ3hfbGliX2luYz0iI2luY2x1ZGUgPHpsaWIuaD4iCi0gICAgICAgIG5neF9saWI9InpsaWIgbGlicmFyeSIKLSAgICAgICAgbmd4X2xpYl90ZXN0PSJ6X3N0cmVhbSB6OyBkZWZsYXRlKCZ6LCBaX05PX0ZMVVNIKSIKLSAgICAgICAgbmd4X2xpYnM9LWx6Ci0gICAgICAgIC4gYXV0by9saWIvdGVzdAorICAgICAgICBuZ3hfZmVhdHVyZT0iemxpYiBsaWJyYXJ5IgorICAgICAgICBuZ3hfZmVhdHVyZV9uYW1lPSJ6bGliIgorICAgICAgICBuZ3hfZmVhdHVyZV9ydW49bm8KKyAgICAgICAgbmd4X2ZlYXR1cmVfaW5jcz0iI2luY2x1ZGUgPHpsaWIuaD4iCisgICAgICAgIG5neF9mZWF0dXJlX2xpYnM9Ii1seiIKKyAgICAgICAgbmd4X2ZlYXR1cmVfdGVzdD0iel9zdHJlYW0gejsgZGVmbGF0ZSgmeiwgWl9OT19GTFVTSCkiCisgICAgICAgIC4gYXV0by9mZWF0dXJlCiAKIAogICAgICAgICBpZiBbICRuZ3hfZm91bmQgPSB5ZXMgXTsgdGhlbgotICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTICRuZ3hfbGlicyIKKyAgICAgICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAkbmd4X2ZlYXR1cmVfbGlicyIKICAgICAgICAgICAgIFpMSUI9WUVTCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFpMSUI9Tk8KKyAgICAgICAgICAgIG5neF9mb3VuZD1ubwogICAgICAgICBmaQogICAgIGZpCiAKZGlmZiAtLWdpdCBhL2F1dG8vbGliL3psaWIvbWFrZSBiL2F1dG8vbGliL3psaWIvbWFrZQppbmRleCAwY2VkOWEyLi41ODIyNzYyIDEwMDY0NAotLS0gYS9hdXRvL2xpYi96bGliL21ha2UKKysrIGIvYXV0by9saWIvemxpYi9tYWtlCkBAIC0yNiw3ICsyNiw3IEBACiBjYXNlICRQTEFURk9STSBpbgogCiAgICAgd2luMzIpCi0gICAgICAgIGxpbmU9YGVjaG8gJFpMSUIvemxpYi5saWI6IHwgc2VkIC1lICJzL1wvLyRESVJTRVAvZyJgCisgICAgICAgIGxpbmU9YGVjaG8gJFpMSUIvemxpYi5saWI6IHwgc2VkIC1lICJzL1wvLyRuZ3hfcmVnZXhfZGlyc2VwL2ciYAogICAgICAgICBlY2hvICIkbGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCiAgICAgOzsKIApAQCAtNDMsNyArNDMsNyBAQAogY2FzZSAkUExBVEZPUk0gaW4KIAogICAgIHdpbjMyKQotICAgICAgICB6bGliPWBlY2hvICRaTElCIHwgc2VkIC1lICJzL1wvLyRESVJTRVAvZyJgCisgICAgICAgIHpsaWI9YGVjaG8gJFpMSUIgfCBzZWQgLWUgInMvXC8vJG5neF9yZWdleF9kaXJzZXAvZyJgCiAKICAgICAgICAgY3AgYXV0by9saWIvemxpYi8kbWFrZWZpbGUgJFpMSUIKICAgICAgICAgZWNobyAiCWNkICR6bGliIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCmRpZmYgLS1naXQgYS9hdXRvL21ha2UgYi9hdXRvL21ha2UKaW5kZXggZmVlOGE2Zi4uODc0NGQxZiAxMDA2NDQKLS0tIGEvYXV0by9tYWtlCisrKyBiL2F1dG8vbWFrZQpAQCAtOCwzNTMgKzgsMjcxIEBACiAgICAgICAgICAkT0JKUy9zcmMvaW1hcAogCiAKLWVjaG8gIkNDID0gJENDIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gJE1BS0VGSUxFCi1lY2hvICJDUFAgPSAkQ1BQIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLWVjaG8gIkxJTksgPSAkTElOSyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQorbmd4X29ianNfZGlyPSROR1hfT0JKUyRuZ3hfcmVnZXhfZGlyc2VwCituZ3hfdXNlX3BjaD1gZWNobyAkTkdYX1VTRV9QQ0ggfCBzZWQgLWUgInMvXC8vJG5neF9yZWdleF9kaXJzZXAvZyJgCisKKworY2F0IDw8IEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTkdYX01BS0VGSUxFCisKK0NDID0JJENDCitDRkxBR1MgPSAkQ0ZMQUdTCitDUFAgPQkkQ1BQCitMSU5LID0JJExJTksKKworRU5ECisKIGlmIFsgIiRDQyIgPSB3Y2wzODYgXTsgdGhlbgotICAgIGVjaG8gTUFLRSA9IHdtYWtlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi1maQotZWNobyAiQ0ZMQUdTID0gJENGTEFHUyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi1lY2hvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKKyAgICBlY2hvIE1BS0UgPSB3bWFrZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQogCisgICAgbmd4X3JlZ2V4X2NvbnQ9JyAnCisgICAgbmd4X2NvbnQ9JyAnCisgICAgbmd4X3RhYj0nICcKIAotaWYgWyAkTUFLRV9TTCA9IFlFUyBdOyB0aGVuCi0gICAgZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKIGZpCiAKLWFsbF9pbmM9IiRDT1JFX0lOQ1MgJE9CSlMgJEhUVFBfSU5DUyAkSU1BUF9JTkNTIgotYWxsX2luYz1gZWNobyAiICRhbGxfaW5jIiB8IHNlZCAtZSAicy8gXChbXiBdXCkvICRJTkNPUFRcMS9nImAKLWFsbF9pbmM9YGVjaG8gJGFsbF9pbmMgfCBzZWQgLWUgInMvXC8vJERJUlNFUC9nImAKIAotZWNobyAiQUxMX0lOQ1MgPSAkYWxsX2luYyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi1lY2hvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKKyMgQUxMX0lOQ1MsIHJlcXVpcmVkIGJ5IE9wZW5XYXRjb20gQyBwcmVjb21waWxlZCBoZWFkZXJzCiAKLWFsbF9zcmNzPSIkQ09SRV9TUkNTIgorbmd4X2luY3M9YGVjaG8gJENPUkVfSU5DUyAkT0JKUyAkSFRUUF9JTkNTICRJTUFQX0lOQ1NcCisgICAgfCBzZWQgLWUgInMvICAqXChbXiBdW14gXSpcKS8kbmd4X3JlZ2V4X2NvbnQkbmd4X2luY2x1ZGVfb3B0XDEvZyIgXAorICAgICAgICAgIC1lICJzL1wvLyRuZ3hfcmVnZXhfZGlyc2VwL2ciYAorCitjYXQgPDwgRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICROR1hfTUFLRUZJTEUKKworQUxMX0lOQ1MgPSAkbmd4X2luY2x1ZGVfb3B0JG5neF9pbmNzCisKK0VORAogCiAKLSMgQ09SRV9ERVBTCi0KLWlmIFsgJE1BS0VfU0wgPSBZRVMgXTsgdGhlbgotICAgIGVjaG8gJG5neF9uICJDT1JFX0RFUFMgPSIgJG5neF9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi1lbHNlCi0gICAgZWNobyAiQ09SRV9ERVBTID0gXFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLWZpCi0KLWZvciBkZXAgaW4gJENPUkVfREVQUwotZG8KLSAgICBkZXA9YGVjaG8gJGRlcCB8IHNlZCAtZSAicy9cLy8kRElSU0VQL2ciYAotCi0gICAgaWYgWyAkTUFLRV9TTCA9IFlFUyBdOyB0aGVuCi0gICAgICAgIGVjaG8gJG5neF9uICIgJGRlcCIgJG5neF9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICBlbHNlCi0gICAgICAgIGVjaG8gIgkkZGVwIFxcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgIGZpCi1kb25lCi1lY2hvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKK25neF9hbGxfc3Jjcz0iJENPUkVfU1JDUyIKIAogCi0jIENPUkVfSU5DUworIyB0aGUgY29yZSBkZXBlbmRlbmNlcyBhbmQgaW5jbHVkZSBwYXRoZXMKIAotaWYgWyAkTUFLRV9TTCA9IFlFUyBdOyB0aGVuCi0gICAgZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLWZpCituZ3hfZGVwcz1gZWNobyAkQ09SRV9ERVBTICROR1hfUENIIFwKKyAgICB8IHNlZCAtZSAicy8gICpcKFteIF1bXiBdKlwpLyRuZ3hfcmVnZXhfY29udFwxL2ciIFwKKyAgICAgICAgICAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKIAotaW5jPSIkQ09SRV9JTkNTICRPQkpTIgotaW5jPWBlY2hvICIgJGluYyIgfCBzZWQgLWUgInMvIFwoW14gXVwpLyAkSU5DT1BUXDEvZyIgLWUgInMvXC8vJERJUlNFUC9nImAKK25neF9pbmNzPWBlY2hvICRDT1JFX0lOQ1MgJE9CSlMgXAorICAgIHwgc2VkIC1lICJzLyAgKlwoW14gXVteIF0qXCkvJG5neF9yZWdleF9jb250JG5neF9pbmNsdWRlX29wdFwxL2ciIFwKKyAgICAgICAgICAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKIAotZWNobyAiQ09SRV9JTkNTID0gJGluYyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi1lY2hvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKK2NhdCA8PCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQogCitDT1JFX0RFUFMgPSAkbmd4X2RlcHMKKworCitDT1JFX0lOQ1MgPSAkbmd4X2luY2x1ZGVfb3B0JG5neF9pbmNzCisKK0VORAorCisKKyMgdGhlIGh0dHAgZGVwZW5kZW5jZXMgYW5kIGluY2x1ZGUgcGF0aGVzCiAKIGlmIFsgJEhUVFAgPSBZRVMgXTsgdGhlbgogCi0gICAgYWxsX3NyY3M9IiRhbGxfc3JjcyAkSFRUUF9TUkNTIgorICAgIG5neF9hbGxfc3Jjcz0iJG5neF9hbGxfc3JjcyAkSFRUUF9TUkNTIgogCi0gICAgIyBIVFRQX0RFUFMKKyAgICBuZ3hfZGVwcz1gZWNobyAkSFRUUF9ERVBTIFwKKyAgICAgICAgfCBzZWQgLWUgInMvICAqXChbXiBdW14gXSpcKS8kbmd4X3JlZ2V4X2NvbnRcMS9nIiBcCisgICAgICAgICAgICAgIC1lICJzL1wvLyRuZ3hfcmVnZXhfZGlyc2VwL2ciYAogCi0gICAgaWYgWyAkTUFLRV9TTCA9IFlFUyBdOyB0aGVuCi0gICAgICAgIGVjaG8gJG5neF9uICJIVFRQX0RFUFMgPSIgJG5neF9jICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICBlbHNlCi0gICAgICAgIGVjaG8gIkhUVFBfREVQUyA9IFxcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICBmaQorICAgIG5neF9pbmNzPWBlY2hvICRIVFRQX0lOQ1MgXAorICAgICAgICB8IHNlZCAtZSAicy8gICpcKFteIF1bXiBdKlwpLyRuZ3hfcmVnZXhfY29udCRuZ3hfaW5jbHVkZV9vcHRcMS9nIiBcCisgICAgICAgICAgICAgIC1lICJzL1wvLyRuZ3hfcmVnZXhfZGlyc2VwL2ciYAogCi0gICAgZm9yIGRlcCBpbiAkSFRUUF9ERVBTCi0gICAgZG8KLSAgICAgICAgZGVwPWBlY2hvICRkZXAgfCBzZWQgLWUgInMvXC8vJERJUlNFUC9nImAKKyAgICBjYXQgPDwgRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQogCi0gICAgICAgIGlmIFsgJE1BS0VfU0wgPSBZRVMgXTsgdGhlbgotICAgICAgICAgICAgZWNobyAkbmd4X24gIiAkZGVwIiAkbmd4X2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVjaG8gIgkkZGVwIFxcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgZmkKLSAgICBkb25lCi0gICAgZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKK0hUVFBfREVQUyA9ICRuZ3hfZGVwcwogCiAKLSAgICAjIEhUVFBfSU5DUworSFRUUF9JTkNTID0gJG5neF9pbmNsdWRlX29wdCRuZ3hfaW5jcwogCi0gICAgaWYgWyAkTUFLRV9TTCA9IFlFUyBdOyB0aGVuCi0gICAgICAgIGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICBmaQotCi0gICAgaW5jPSIkSFRUUF9JTkNTICRPQkpTIgotICAgIGluYz1gZWNobyAiICRpbmMiIHwgc2VkIC1lICJzLyBcKFteIF1cKS8gJElOQ09QVFwxL2ciIC1lICJzL1wvLyRESVJTRVAvZyJgCi0KLSAgICBlY2hvICJIVFRQX0lOQ1MgPSAkaW5jIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgIGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCitFTkQKIAogZmkKIAogCisjIHRoZSBpbWFwIGRlcGVuZGVuY2VzIGFuZCBpbmNsdWRlIHBhdGhlcworCiBpZiBbICRJTUFQID0gWUVTIF07IHRoZW4KIAotICAgIGFsbF9zcmNzPSIkYWxsX3NyY3MgJElNQVBfU1JDUyIKKyAgICBuZ3hfYWxsX3NyY3M9IiRuZ3hfYWxsX3NyY3MgJElNQVBfU1JDUyIKIAotICAgICMgSU1BUF9ERVBTCisgICAgbmd4X2RlcHM9YGVjaG8gJElNQVBfREVQUyBcCisgICAgICAgIHwgc2VkIC1lICJzLyAgKlwoW14gXVteIF0qXCkvJG5neF9yZWdleF9jb250XDEvZyIgXAorICAgICAgICAgICAgICAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKIAotICAgIGlmIFsgJE1BS0VfU0wgPSBZRVMgXTsgdGhlbgotICAgICAgICBlY2hvICRuZ3hfbiAiSU1BUF9ERVBTID0iICRuZ3hfYyAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgZWxzZQotICAgICAgICBlY2hvICJJTUFQX0RFUFMgPSBcXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgZmkKKyAgICBuZ3hfaW5jcz1gZWNobyAkSU1BUF9JTkNTIFwKKyAgICAgICAgfCBzZWQgLWUgInMvICAqXChbXiBdW14gXSpcKS8kbmd4X3JlZ2V4X2NvbnQkbmd4X2luY2x1ZGVfb3B0XDEvZyIgXAorICAgICAgICAgICAgICAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKIAotICAgIGZvciBkZXAgaW4gJElNQVBfREVQUwotICAgIGRvCi0gICAgICAgIGRlcD1gZWNobyAkZGVwIHwgc2VkIC1lICJzL1wvLyRESVJTRVAvZyJgCisgICAgY2F0IDw8IEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICROR1hfTUFLRUZJTEUKIAotICAgICAgICBpZiBbICRNQUtFX1NMID0gWUVTIF07IHRoZW4KLSAgICAgICAgICAgIGVjaG8gJG5neF9uICIgJGRlcCIgJG5neF9jICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlY2hvICIJJGRlcCBcXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgIGZpCi0gICAgZG9uZQotICAgIGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCitJTUFQX0RFUFMgPSAkbmd4X2RlcHMKIAogCi0gICAgIyBJTUFQX0lOQ1MKK0lNQVBfSU5DUyA9ICRuZ3hfaW5jbHVkZV9vcHQkbmd4X2luY3MKIAotICAgIGlmIFsgJE1BS0VfU0wgPSBZRVMgXTsgdGhlbgotICAgICAgICBlY2hvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgZmkKLQotICAgIGluYz0iJElNQVBfSU5DUyAkT0JKUyIKLSAgICBpbmM9YGVjaG8gIiAkaW5jIiB8IHNlZCAtZSAicy8gXChbXiBdXCkvICRJTkNPUFRcMS9nIiAtZSAicy9cLy8kRElSU0VQL2ciYAotCi0gICAgZWNobyAiSU1BUF9JTkNTID0gJGluYyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICBlY2hvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQorRU5ECiAKIGZpCiAKIAogIyBuZ2lueAogCi1pZiBbICRNQUtFX1NMID0gWUVTIF07IHRoZW4KLSAgICBlY2hvICRuZ3hfbiAibmdpbngkQklORVhUOgkiICRuZ3hfYyAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi1lbHNlCi0gICAgZWNobyAibmdpbngkQklORVhUOiBcXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLWZpCituZ3hfYWxsX3NyY3M9YGVjaG8gJG5neF9hbGxfc3JjcyB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKK25neF9tb2R1bGVzX2M9YGVjaG8gJE5HWF9NT0RVTEVTX0MgfCBzZWQgLWUgInMvXC8vJG5neF9yZWdleF9kaXJzZXAvZyJgCiAKK25neF9hbGxfb2Jqcz1gZWNobyAkbmd4X2FsbF9zcmNzIFwKKyAgICB8IHNlZCAtZSAicy9cKFteIF0qXC5cKWNwcC8kTkdYX09CSlNcL1wxJG5neF9vYmpleHQvZyIgXAorICAgICAgICAgIC1lICJzL1woW14gXSpcLlwpY2MvJE5HWF9PQkpTXC9cMSRuZ3hfb2JqZXh0L2ciIFwKKyAgICAgICAgICAtZSAicy9cKFteIF0qXC5cKWMvJE5HWF9PQkpTXC9cMSRuZ3hfb2JqZXh0L2ciIFwKKyAgICAgICAgICAtZSAicy9cKFteIF0qXC5cKVMvJE5HWF9PQkpTXC9cMSRuZ3hfb2JqZXh0L2ciYAogCi0jIG5naW54IGRlcHMKK25neF9tb2R1bGVzX29iaj1gZWNobyAkbmd4X21vZHVsZXNfYyB8IHNlZCAtZSAicy9cKC4qXC5cKWMvXDEkbmd4X29iamV4dC8iYAogCi1mb3Igc3JjIGluICRhbGxfc3JjcwotZG8KLSAgICBvYmo9YGVjaG8gJHNyYyB8IHNlZCAtZSAicy9cLmNcJC8uJE9CSkVYVC8iIC1lICJzL1wuU1wkLy4kT0JKRVhULyJgCi0gICAgb2JqPWBlY2hvICRPQkpTLyRvYmogfCBzZWQgLWUgInMvXC8vJERJUlNFUC9nImAKK25neF9kZXBzPWBlY2hvICRuZ3hfYWxsX29ianMgJG5neF9tb2R1bGVzX29iaiAkTElOS19ERVBTIFwKKyAgICB8IHNlZCAtZSAicy8gICpcKFteIF1bXiBdKlwpLyRuZ3hfcmVnZXhfY29udFwxL2ciIFwKKyAgICAgICAgICAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKIAotICAgIGlmIFsgJE1BS0VfU0wgPSBZRVMgXTsgdGhlbgotICAgICAgICBlY2hvICRuZ3hfbiAiICRvYmoiICRuZ3hfYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgZWxzZQotICAgICAgICBlY2hvICIJJG9iaiBcXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICBmaQotZG9uZQorbmd4X29ianM9YGVjaG8gJG5neF9hbGxfb2JqcyAkbmd4X21vZHVsZXNfb2JqIFwKKyAgICB8IHNlZCAtZSAicy8gICpcKFteIF1bXiBdKlwpLyRuZ3hfcmVnZXhfY29udFwxL2ciIFwKKyAgICAgICAgICAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKIAotZm9yIHNyYyBpbiAkTkdYX01PRFVMRVNfQyAkTElOS19ERVBTCi1kbwotICAgIG9iaj1gZWNobyAkc3JjIHwgc2VkIC1lICJzL1wuY1wkLy4kT0JKRVhULyJgCi0gICAgb2JqPWBlY2hvICRvYmogfCBzZWQgLWUgInMvXC8vJERJUlNFUC9nImAKK25neF9saWJzPSR7Q09SRV9MSUJTOitgZWNobyAkTkdYX0xEX09QVCAkQ09SRV9MSUJTIFwKKyAgICB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nIiAtZSAicy9eLyRuZ3hfcmVnZXhfY29udC8iYH0KIAotICAgIGlmIFsgJE1BS0VfU0wgPSBZRVMgXTsgdGhlbgotICAgICAgICBlY2hvICRuZ3hfbiAiICRvYmoiICRuZ3hfYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgZWxzZQotICAgICAgICBlY2hvICIJJG9iaiBcXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICBmaQotZG9uZQotZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCituZ3hfbGluaz0ke0NPUkVfTElOSzorYGVjaG8gJENPUkVfTElOSyBcCisgICAgfCBzZWQgLWUgInMvXC8vJG5neF9yZWdleF9kaXJzZXAvZyIgLWUgInMvXi8kbmd4X3JlZ2V4X2NvbnQvImB9CiAKK2NhdCA8PCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQogCi0jIG5naW54IGJ1aWxkCiskTkdYX09CSlMke25neF9kaXJzZXB9bmdpbngke25neF9iaW5leHR9Ogkkbmd4X2RlcHMkbmd4X3NwYWNlcgorCVwkKExJTkspICR7bmd4X2Jpbm91dH0kTkdYX09CSlMke25neF9kaXJzZXB9bmdpbngkbmd4X2NvbnQkbmd4X29ianMkbmd4X2xpYnMkbmd4X2xpbmsKIAotaWYgWyAkTUFLRV9TTCA9IFlFUyBdOyB0aGVuCi0gICAgZWNobyAkbmd4X24gIglcJChMSU5LKSAke0JJTk9VVH1uZ2lueCIgJG5neF9jICAgICAgICAgICA+PiAkTUFLRUZJTEUKLWVsc2UKLSAgICBlY2hvICIJXCQoTElOSykgJHtCSU5PVVR9bmdpbnggXFwiICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLWZpCi0KLQotIyBuZ2lueCBidWlsZCBzb3VyY2VzCi0KLWZvciBzcmMgaW4gJGFsbF9zcmNzCi1kbwotICAgIG9iaj1gZWNobyAkc3JjIHwgc2VkIC1lICJzL1wuY1wkLy4kT0JKRVhULyIgLWUgInMvXC5TXCQvLiRPQkpFWFQvImAKLSAgICBvYmo9YGVjaG8gJE9CSlMvJG9iaiB8IHNlZCAtZSAicy9cLy8kRElSU0VQL2ciYAotCi0gICAgaWYgWyAkTUFLRV9TTCA9IFlFUyBdOyB0aGVuCi0gICAgICAgIGVjaG8gJG5neF9uICIgJG9iaiIgJG5neF9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICBlbHNlCi0gICAgICAgIGVjaG8gIgkkb2JqIFxcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgIGZpCi1kb25lCi0KLQotIyBuZ2lueCBidWlsZCBuZ3hfbW9kdWxlcy5jIGFuZCBsaWJzCi0KLW9iaj1gZWNobyAkTkdYX01PRFVMRVNfQyB8IHNlZCAtZSAicy9cLmNcJC8uJE9CSkVYVC8iIC1lICJzL1wvLyRESVJTRVAvZyJgCi1zcmM9YGVjaG8gJE5HWF9NT0RVTEVTX0MgfCBzZWQgLWUgInMvXC8vJERJUlNFUC9nImAKLWxpYnM9YGVjaG8gJENPUkVfTElCUyB8IHNlZCAtZSAicy9cLmNcJC8uJE9CSkVYVC8iIC1lICJzL1wvLyRESVJTRVAvZyJgCi1saW5rPWBlY2hvICRDT1JFX0xJTksgfCBzZWQgLWUgInMvXC5jXCQvLiRPQkpFWFQvIiAtZSAicy9cLy8kRElSU0VQL2ciYAotCi1pZiBbICRNQUtFX1NMID0gWUVTIF07IHRoZW4KLSAgICBlY2hvICIgJG9iaiAkbGlicyAkQ09SRV9MSU5LIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgIGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi1lbHNlCi0gICAgZWNobyAiCSRvYmogXFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgZWNobyAiCSRsaWJzIFxcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgZWNobyAiCSRsaW5rIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLWZpCitFTkQKIAogCiAjIG5neF9tb2R1bGVzLmMKIAotZGVwcz0iXCQoQ09SRV9ERVBTKSIKLQotaWYgWyAkUENIICE9IE5PIF07IHRoZW4KLSAgICBhcmdzPSJcJChDRkxBR1MpICRVU0VQQ0ggXCQoQUxMX0lOQ1MpIgoraWYgdGVzdCAtbiAiJE5HWF9QQ0giOyB0aGVuCisgICAgbmd4X2NjPSJcJChDQykgJG5neF9jb21waWxlX29wdCBcJChDRkxBR1MpICRuZ3hfdXNlX3BjaCBcJChBTExfSU5DUykiCiBlbHNlCi0gICAgYXJncz0iXCQoQ0ZMQUdTKSAkVVNFUENIIFwkKENPUkVfSU5DUykiCisgICAgbmd4X2NjPSJcJChDQykgJG5neF9jb21waWxlX29wdCBcJChDRkxBR1MpIFwkKENPUkVfSU5DUykiCiBmaQogCi1pZiBbICRNQUtFX1NMID0gWUVTIF07IHRoZW4KLSAgICBlY2hvICIkb2JqOiAkTkdYX01PRFVMRVNfQyAkZGVwcyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgIGVjaG8gJG5neF9uICIJXCQoQ0MpICRDT01QT1BUICRhcmdzIiAkbmd4X2MgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgZWNobyAiICRPQkpPVVQkb2JqICRzcmMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICBlY2hvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotZWxzZQotICAgIGVjaG8gIiRvYmo6IFxcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgZWNobyAiCSROR1hfTU9EVUxFU19DICRkZXBzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgZWNobyAiCVwkKENDKSAkQ09NUE9QVCAkYXJncyBcXCIgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgZWNobyAiCQkkT0JKT1VUJG9iaiBcXCIgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICBlY2hvICIJCSRzcmMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgIGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi1maQorY2F0IDw8IEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTkdYX01BS0VGSUxFCisKKyRuZ3hfbW9kdWxlc19vYmo6CVwkKENPUkVfREVQUykkbmd4X2NvbnQkbmd4X21vZHVsZXNfYworCSRuZ3hfY2Mkbmd4X3RhYiRuZ3hfb2Jqb3V0JG5neF9tb2R1bGVzX29iaiRuZ3hfdGFiJG5neF9tb2R1bGVzX2MKKworRU5ECiAKIAotIyBjb3JlIHNvdXJjZXMKKyMgdGhlIGNvcmUgc291cmNlcwogCi1mb3Igc3JjIGluICRDT1JFX1NSQ1MKK2ZvciBuZ3hfc3JjIGluICRDT1JFX1NSQ1MKIGRvCi0gICAgb2JqPWBlY2hvICRzcmMgfCBzZWQgLWUgInMvXC5jXCQvLiRPQkpFWFQvIiAtZSAicy9cLlNcJC8uJE9CSkVYVC8iYAotICAgIG9iaj1gZWNobyAkT0JKUy8kb2JqIHwgc2VkIC1lICJzL1wvLyRESVJTRVAvZyJgCi0gICAgc3JjPWBlY2hvICRzcmMgfCBzZWQgLWUgInMvXC8vJERJUlNFUC9nImAKIAotICAgIGlmIFsgJE1BS0VfU0wgPSBZRVMgXTsgdGhlbgotICAgICAgICBlY2hvICIkb2JqOiAkc3JjICRkZXBzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgIGVjaG8gIglcJChDQykgJENPTVBPUFQgJGFyZ3MgJE9CSk9VVCRvYmogJHNyYyIgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICBlY2hvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgZWxzZQotICAgICAgICBlY2hvICIkb2JqOiBcXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgIGVjaG8gIgkkc3JjICRkZXBzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICBlY2hvICIJXCQoQ0MpICRDT01QT1BUICRhcmdzIFxcIiAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgZWNobyAiCQkkT0JKT1VUJG9iaiBcXCIgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgZWNobyAiCQkkc3JjIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgIGZpCisgICAgbmd4X3NyYz1gZWNobyAkbmd4X3NyYyB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKKyAgICBuZ3hfb2JqPWBlY2hvICRuZ3hfc3JjIFwKKyAgICAgICAgfCBzZWQgLWUgInMvXlwoLipcLlwpY3BwJC8kbmd4X29ianNfZGlyXDEkbmd4X29iamV4dC9nIiBcCisgICAgICAgICAgICAgIC1lICJzL15cKC4qXC5cKWNjJC8kbmd4X29ianNfZGlyXDEkbmd4X29iamV4dC9nIiBcCisgICAgICAgICAgICAgIC1lICJzL15cKC4qXC5cKWMkLyRuZ3hfb2Jqc19kaXJcMSRuZ3hfb2JqZXh0L2ciIFwKKyAgICAgICAgICAgICAgLWUgInMvXlwoLipcLlwpUyQvJG5neF9vYmpzX2RpclwxJG5neF9vYmpleHQvZyJgCisKKyAgICBjYXQgPDwgRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQorCiskbmd4X29iajoJXCQoQ09SRV9ERVBTKSRuZ3hfY29udCRuZ3hfc3JjCisJJG5neF9jYyRuZ3hfdGFiJG5neF9vYmpvdXQkbmd4X29iaiRuZ3hfdGFiJG5neF9zcmMKKworRU5ECisKIGRvbmUKIAogCi0jIGh0dHAgc291cmNlcworIyB0aGUgaHR0cCBzb3VyY2VzCiAKIGlmIFsgJEhUVFAgPSBZRVMgXTsgdGhlbgogCi0gICAgZGVwcz0iXCQoQ09SRV9ERVBTKSBcJChIVFRQX0RFUFMpIgotCi0gICAgaWYgWyAkUENIICE9IE5PIF07IHRoZW4KLSAgICAgICAgYXJncz0iXCQoQ0ZMQUdTKSAkVVNFUENIIFwkKEFMTF9JTkNTKSIKKyAgICBpZiB0ZXN0IC1uICIkTkdYX1BDSCI7IHRoZW4KKyAgICAgICAgbmd4X2NjPSJcJChDQykgJG5neF9jb21waWxlX29wdCBcJChDRkxBR1MpICRuZ3hfdXNlX3BjaCBcJChBTExfSU5DUykiCiAgICAgZWxzZQotICAgICAgICBhcmdzPSJcJChDRkxBR1MpICRVU0VQQ0ggXCQoQ09SRV9JTkNTKSBcJChIVFRQX0lOQ1MpIgorICAgICAgICBuZ3hfY2M9IlwkKENDKSAkbmd4X2NvbXBpbGVfb3B0IFwkKENGTEFHUykgXCQoQ09SRV9JTkNTKSBcJChIVFRQX0lOQ1MpIgogICAgIGZpCiAKLSAgICBmb3Igc3JjIGluICRIVFRQX1NSQ1MKKyAgICBmb3Igbmd4X3NyYyBpbiAkSFRUUF9TUkNTCiAgICAgZG8KLSAgICAgICAgb2JqPWBlY2hvICRzcmMgfCBzZWQgLWUgInMvXC5jXCQvLiRPQkpFWFQvImAKLSAgICAgICAgb2JqPWBlY2hvICRPQkpTLyRvYmogfCBzZWQgLWUgInMvXC8vJERJUlNFUC9nImAKLSAgICAgICAgc3JjPWBlY2hvICRzcmMgfCBzZWQgLWUgInMvXC8vJERJUlNFUC9nImAKIAotICAgICAgICBpZiBbICRNQUtFX1NMID0gWUVTIF07IHRoZW4KLSAgICAgICAgICAgIGVjaG8gIiRvYmo6ICRzcmMgJGRlcHMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgZWNobyAiCVwkKENDKSAkQ09NUE9QVCAkYXJncyAkT0JKT1VUJG9iaiAkc3JjIiAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVjaG8gIiRvYmo6IFxcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgZWNobyAiCSRzcmMgJGRlcHMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgZWNobyAiCVwkKENDKSAkQ09NUE9QVCAkYXJncyBcXCIgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgZWNobyAiCQkkT0JKT1VUJG9iaiBcXCIgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgICAgICBlY2hvICIJCSRzcmMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgICAgIGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICBmaQotICAgIGRvbmUKKyAgICAgICAgbmd4X3NyYz1gZWNobyAkbmd4X3NyYyB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKKyAgICAgICAgbmd4X29iaj1gZWNobyAkbmd4X3NyYyBcCisgICAgICAgICAgICB8IHNlZCAtZSAicy9eXCguKlwuXCljcHAkLyRuZ3hfb2Jqc19kaXJcMSRuZ3hfb2JqZXh0L2ciIFwKKyAgICAgICAgICAgICAgICAgIC1lICJzL15cKC4qXC5cKWNjJC8kbmd4X29ianNfZGlyXDEkbmd4X29iamV4dC9nIiBcCisgICAgICAgICAgICAgICAgICAtZSAicy9eXCguKlwuXCljJC8kbmd4X29ianNfZGlyXDEkbmd4X29iamV4dC9nIiBcCisgICAgICAgICAgICAgICAgICAtZSAicy9eXCguKlwuXClTJC8kbmd4X29ianNfZGlyXDEkbmd4X29iamV4dC9nImAKKworICAgICAgICBjYXQgPDwgRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTkdYX01BS0VGSUxFCisKKyRuZ3hfb2JqOglcJChDT1JFX0RFUFMpIFwkKEhUVFBfREVQUykkbmd4X2NvbnQkbmd4X3NyYworCSRuZ3hfY2Mkbmd4X3RhYiRuZ3hfb2Jqb3V0JG5neF9vYmokbmd4X3RhYiRuZ3hfc3JjCisKK0VORAorCisgICAgIGRvbmUKIAogZmkKIAogCi0jIGltYXAgc291cmNlcworIyB0aGUgaW1hcCBzb3VyY2VzCiAKIGlmIFsgJElNQVAgPSBZRVMgXTsgdGhlbgogCi0gICAgZGVwcz0iXCQoQ09SRV9ERVBTKSBcJChJTUFQX0RFUFMpIgotCi0gICAgaWYgWyAkUENIICE9IE5PIF07IHRoZW4KLSAgICAgICAgYXJncz0iXCQoQ0ZMQUdTKSAkVVNFUENIIFwkKEFMTF9JTkNTKSIKKyAgICBpZiB0ZXN0IC1uICIkTkdYX1BDSCI7IHRoZW4KKyAgICAgICAgbmd4X2NjPSJcJChDQykgJG5neF9jb21waWxlX29wdCBcJChDRkxBR1MpICRuZ3hfdXNlX3BjaCBcJChBTExfSU5DUykiCiAgICAgZWxzZQotICAgICAgICBhcmdzPSJcJChDRkxBR1MpICRVU0VQQ0ggXCQoQ09SRV9JTkNTKSBcJChJTUFQX0lOQ1MpIgorICAgICAgICBuZ3hfY2M9IlwkKENDKSAkbmd4X2NvbXBpbGVfb3B0IFwkKENGTEFHUykgXCQoQ09SRV9JTkNTKSBcJChJTUFQX0lOQ1MpIgogICAgIGZpCiAKLSAgICBmb3Igc3JjIGluICRJTUFQX1NSQ1MKKyAgICBmb3Igbmd4X3NyYyBpbiAkSU1BUF9TUkNTCiAgICAgZG8KLSAgICAgICAgb2JqPWBlY2hvICRzcmMgfCBzZWQgLWUgInMvXC5jXCQvLiRPQkpFWFQvImAKLSAgICAgICAgb2JqPWBlY2hvICRPQkpTLyRvYmogfCBzZWQgLWUgInMvXC8vJERJUlNFUC9nImAKLSAgICAgICAgc3JjPWBlY2hvICRzcmMgfCBzZWQgLWUgInMvXC8vJERJUlNFUC9nImAKIAotICAgICAgICBpZiBbICRNQUtFX1NMID0gWUVTIF07IHRoZW4KLSAgICAgICAgICAgIGVjaG8gIiRvYmo6ICRzcmMgJGRlcHMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgZWNobyAiCVwkKENDKSAkQ09NUE9QVCAkYXJncyAkT0JKT1VUJG9iaiAkc3JjIiAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVjaG8gIiRvYmo6IFxcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgZWNobyAiCSRzcmMgJGRlcHMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgZWNobyAiCVwkKENDKSAkQ09NUE9QVCAkYXJncyBcXCIgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICAgICAgZWNobyAiCQkkT0JKT1VUJG9iaiBcXCIgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCi0gICAgICAgICAgICBlY2hvICIJCSRzcmMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTUFLRUZJTEUKLSAgICAgICAgICAgIGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgICAgICBmaQotICAgIGRvbmUKKyAgICAgICAgbmd4X3NyYz1gZWNobyAkbmd4X3NyYyB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKKyAgICAgICAgbmd4X29iaj1gZWNobyAkbmd4X3NyYyBcCisgICAgICAgICAgICB8IHNlZCAtZSAicy9eXCguKlwuXCljcHAkLyRuZ3hfb2Jqc19kaXJcMSRuZ3hfb2JqZXh0L2ciIFwKKyAgICAgICAgICAgICAgICAgIC1lICJzL15cKC4qXC5cKWNjJC8kbmd4X29ianNfZGlyXDEkbmd4X29iamV4dC9nIiBcCisgICAgICAgICAgICAgICAgICAtZSAicy9eXCguKlwuXCljJC8kbmd4X29ianNfZGlyXDEkbmd4X29iamV4dC9nIiBcCisgICAgICAgICAgICAgICAgICAtZSAicy9eXCguKlwuXClTJC8kbmd4X29ianNfZGlyXDEkbmd4X29iamV4dC9nImAKKworICAgICAgICBjYXQgPDwgRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTkdYX01BS0VGSUxFCisKKyRuZ3hfb2JqOglcJChDT1JFX0RFUFMpIFwkKElNQVBfREVQUykkbmd4X2NvbnQkbmd4X3NyYworCSRuZ3hfY2Mkbmd4X3RhYiRuZ3hfb2Jqb3V0JG5neF9vYmokbmd4X3RhYiRuZ3hfc3JjCisKK0VORAorCisgICAgIGRvbmUKIAogZmkKIAogCi0jIHByZWNvbXBpbGVkIGhlYWRlcnMKKyMgdGhlIHByZWNvbXBpbGVkIGhlYWRlcnMKIAotaWYgWyAkUENIICE9IE5PIF07IHRoZW4KLSAgICBlY2hvICIjaW5jbHVkZSA8bmd4X2NvbmZpZy5oPiIgPiAkT0JKUy9wY2guYworaWYgdGVzdCAtbiAiJE5HWF9QQ0giOyB0aGVuCisgICAgZWNobyAiI2luY2x1ZGUgPG5neF9jb25maWcuaD4iID4gJE9CSlMvbmd4X3BjaC5jCiAKLSAgICBwY2g9IiRQQ0g6CXNyYy9jb3JlL25neF9jb25maWcuaCAkT1NfQ09ORklHICRPQkpTL25neF9hdXRvX2NvbmZpZy5oIgotICAgIHBjaD1gZWNobyAkcGNoIHwgc2VkIC1lICJzL1wvLyRESVJTRVAvZyJgCi0gICAgc3JjPSJcJChDQykgXCQoQ0ZMQUdTKSAkQlVJTERQQ0ggJENPTVBPUFQgXCQoQUxMX0lOQ1MpIgotICAgIHNyYz0iJHNyYyAkT0JKT1VUJE9CSlMvcGNoLm9iaiAkT0JKUy9wY2guYyIKLSAgICBzcmM9YGVjaG8gJHNyYyB8IHNlZCAtZSAicy9cLy8kRElSU0VQL2ciYAorICAgIG5neF9wY2g9InNyYy9jb3JlL25neF9jb25maWcuaCAkT1NfQ09ORklHICRPQkpTL25neF9hdXRvX2NvbmZpZy5oIgorICAgIG5neF9wY2g9YGVjaG8gIiROR1hfUENIOgkkbmd4X3BjaCIgfCBzZWQgLWUgInMvXC8vJG5neF9yZWdleF9kaXJzZXAvZyJgCiAKLSAgICBlY2hvICIkcGNoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgIGVjaG8gIgkkc3JjIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQotICAgIGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCisgICAgbmd4X3NyYz0iXCQoQ0MpIFwkKENGTEFHUykgJE5HWF9CVUlMRF9QQ0ggJG5neF9jb21waWxlX29wdCBcJChBTExfSU5DUykiCisgICAgbmd4X3NyYz0iJG5neF9zcmMgJG5neF9vYmpvdXQkT0JKUy9uZ3hfcGNoLm9iaiAkT0JKUy9uZ3hfcGNoLmMiCisgICAgbmd4X3NyYz1gZWNobyAkbmd4X3NyYyB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKKworICAgIGNhdCA8PCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTkdYX01BS0VGSUxFCisKKyRuZ3hfcGNoCisJJG5neF9zcmMKKworRU5ECisKIGZpCmRpZmYgLS1naXQgYS9hdXRvL29wdGlvbnMgYi9hdXRvL29wdGlvbnMKaW5kZXggMjU5YzA0OS4uNzVlOTM3NiAxMDA2NDQKLS0tIGEvYXV0by9vcHRpb25zCisrKyBiL2F1dG8vb3B0aW9ucwpAQCAtMSwyMSArMSwyNSBAQAogCiAjIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKIAorCiBoZWxwPW5vCiAKIFBSRUZJWD0KIFNCSU5fUEFUSD0KIENPTkZfUEFUSD0KLUhUVFBfTE9HX1BBVEg9CiBFUlJPUl9MT0dfUEFUSD0KIFBJRF9QQVRIPQorTkdYX1VTRVI9CitOR1hfR1JPVVA9CitIVFRQX0xPR19QQVRIPQogCi1DQz1nY2MKK0NDPSR7Q0M6LWdjY30KIENQUD0KLU9CSlM9b2JqcworTkdYX09CSlM9b2JqcwogCiBERUJVRz1OTwotQ0NfT1BUPQorTkdYX0NDX09QVD0KK05HWF9MRF9PUFQ9CiBDUFU9Tk8KIAogVEVTVF9CVUlMRF9ERVZQT0xMPU5PCkBAIC03NywxMCArODEsMTIgQEAKICAgICAgICAgLS1jb25mLXBhdGg9KikgICAgICAgICAgICAgICAgICAgQ09ORl9QQVRIPSIkdmFsdWUiICAgICAgICAgOzsKICAgICAgICAgLS1lcnJvci1sb2ctcGF0aD0qKSAgICAgICAgICAgICAgRVJST1JfTE9HX1BBVEg9IiR2YWx1ZSIgICAgOzsKICAgICAgICAgLS1waWQtcGF0aD0qKSAgICAgICAgICAgICAgICAgICAgUElEX1BBVEg9IiR2YWx1ZSIgICAgICAgICAgOzsKKyAgICAgICAgLS11c2VyPSopICAgICAgICAgICAgICAgICAgICAgICAgTkdYX1VTRVI9IiR2YWx1ZSIgICAgICAgICAgOzsKKyAgICAgICAgLS1ncm91cD0qKSAgICAgICAgICAgICAgICAgICAgICAgTkdYX0dST1VQPSIkdmFsdWUiICAgICAgICAgOzsKIAogICAgICAgICAtLWNyb3NzYnVpbGQ9KikgICAgICAgICAgICAgICAgICBQTEFURk9STT0iJHZhbHVlIiAgICAgICAgICA7OwogCi0gICAgICAgIC0tYnVpbGRkaXI9KikgICAgICAgICAgICAgICAgICAgIE9CSlM9IiR2YWx1ZSIgICAgICAgICAgICAgIDs7CisgICAgICAgIC0tYnVpbGRkaXI9KikgICAgICAgICAgICAgICAgICAgIE5HWF9PQkpTPSIkdmFsdWUiICAgICAgICAgIDs7CiAKICAgICAgICAgLS13aXRoLXJ0c2lnX21vZHVsZSkgICAgICAgICAgICAgRVZFTlRfUlRTSUc9WUVTICAgICAgICAgICAgOzsKICAgICAgICAgLS13aXRoLXNlbGVjdF9tb2R1bGUpICAgICAgICAgICAgRVZFTlRfU0VMRUNUPVlFUyAgICAgICAgICAgOzsKQEAgLTEwOSw3ICsxMTUsOCBAQAogCiAgICAgICAgIC0td2l0aC1jYz0qKSAgICAgICAgICAgICAgICAgICAgIENDPSIkdmFsdWUiICAgICAgICAgICAgICAgIDs7CiAgICAgICAgIC0td2l0aC1jcHA9KikgICAgICAgICAgICAgICAgICAgIENQUD0iJHZhbHVlIiAgICAgICAgICAgICAgIDs7Ci0gICAgICAgIC0td2l0aC1jYy1vcHQ9KikgICAgICAgICAgICAgICAgIENDX09QVD0iJHZhbHVlIiAgICAgICAgICAgIDs7CisgICAgICAgIC0td2l0aC1jYy1vcHQ9KikgICAgICAgICAgICAgICAgIE5HWF9DQ19PUFQ9IiR2YWx1ZSIgICAgICAgIDs7CisgICAgICAgIC0td2l0aC1sZC1vcHQ9KikgICAgICAgICAgICAgICAgIE5HWF9MRF9PUFQ9IiR2YWx1ZSIgICAgICAgIDs7CiAgICAgICAgIC0td2l0aC1jcHUtb3B0PSopICAgICAgICAgICAgICAgIENQVT0iJHZhbHVlIiAgICAgICAgICAgICAgIDs7CiAgICAgICAgIC0td2l0aC1kZWJ1ZykgICAgICAgICAgICAgICAgICAgIERFQlVHPVlFUyAgICAgICAgICAgICAgICAgIDs7CiAKQEAgLTE0MCwyNCArMTQ3LDM1IEBACiAKIAogaWYgWyAkaGVscCA9IHllcyBdOyB0aGVuCi0gICAgZWNobwotICAgIGVjaG8gIiAgLS1oZWxwICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgbWVzc2FnZSIKLSAgICBlY2hvCiAKLSAgICBlY2hvICIgIC0td2l0aG91dC1zZWxlY3RfbW9kdWxlICAgICAgICBkaXNhYmxlIHNlbGVjdF9tb2R1bGUiCi0gICAgZWNobyAiICAtLXdpdGhvdXQtcG9sbF9tb2R1bGUgICAgICAgICAgZGlzYWJsZSBwb2xsX21vZHVsZSIKK2NhdCA8PCBFTkQKIAotICAgIGVjaG8gIiAgLS13aXRob3V0LWh0dHBfcmV3cml0ZV9tb2R1bGUgIGRpc2FibGUgaHR0cF9yZXdyaXRlX21vZHVsZSIKLSAgICBlY2hvICIgIC0td2l0aG91dC1odHRwX2d6aXBfbW9kdWxlICAgICBkaXNhYmxlIGh0dHBfZ3ppcF9tb2R1bGUiCi0gICAgZWNobyAiICAtLXdpdGhvdXQtaHR0cF9wcm94eV9tb2R1bGUgICAgZGlzYWJsZSBodHRwX3Byb3h5X21vZHVsZSIKKyAgLS1oZWxwICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBtZXNzYWdlCiAKLSAgICBlY2hvICIgIC0td2l0aC1jYz1OQU1FICAgICAgICAgICAgICAgICBuYW1lIG9mIG9yIHBhdGggdG8gQyBjb21waWxlciIKLSAgICBlY2hvCisgIC0tdXNlcj1VU0VSICAgICAgICAgICAgICAgICAgICAgIHNldCBub24tcHJpdmlsZWdlIHVzZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSB3b3JrZXIgcHJvY2Vzc2VzCisgIC0tZ3JvdXA9R1JPVVAgICAgICAgICAgICAgICAgICAgIHNldCBub24tcHJpdmlsZWdlIGdyb3VwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgd29ya2VyIHByb2Nlc3NlcwogCi0gICAgZWNobyAiICAtLXdpdGgtcGNyZT1ESVIgICAgICAgICAgICAgICAgcGF0aCB0byBQQ1JFIGxpYnJhcnkiCi0gICAgZWNobyAiICAtLXdpdGgtbWQ1PURJUiAgICAgICAgICAgICAgICAgcGF0aCB0byBtZDUgbGlicmFyeSIKLSAgICBlY2hvICIgIC0td2l0aC16bGliPURJUiAgICAgICAgICAgICAgICBwYXRoIHRvIHpsaWIgbGlicmFyeSIKLSAgICBlY2hvCisgIC0td2l0aC1zZWxlY3RfbW9kdWxlICAgICAgICAgICAgIGVuYWJsZSBzZWxlY3QgbW9kdWxlCisgIC0td2l0aG91dC1zZWxlY3RfbW9kdWxlICAgICAgICAgIGRpc2FibGUgc2VsZWN0IG1vZHVsZQorICAtLXdpdGgtcG9sbF9tb2R1bGUgICAgICAgICAgICAgICBlbmFibGUgcG9sbCBtb2R1bGUKKyAgLS13aXRob3V0LXBvbGxfbW9kdWxlICAgICAgICAgICAgZGlzYWJsZSBwb2xsIG1vZHVsZQorCisgIC0td2l0aG91dC1odHRwX2NoYXJzZXRfbW9kdWxlICAgIGRpc2FibGUgbmd4X2h0dHBfY2hhcnNldF9tb2R1bGUKKyAgLS13aXRob3V0LWh0dHBfcmV3cml0ZV9tb2R1bGUgICAgZGlzYWJsZSBuZ3hfaHR0cF9yZXdyaXRlX21vZHVsZQorICAtLXdpdGhvdXQtaHR0cF9nemlwX21vZHVsZSAgICAgICBkaXNhYmxlIG5neF9odHRwX2d6aXBfbW9kdWxlCisgIC0td2l0aG91dC1odHRwX3Byb3h5X21vZHVsZSAgICAgIGRpc2FibGUgbmd4X2h0dHBfcHJveHlfbW9kdWxlCisKKyAgLS13aXRoLWNjLW9wdD1PUFRJT05TICAgICAgICAgICAgYWRkaXRpb25hbCBvcHRpb25zIGZvciBjb21waWxlcgorICAtLXdpdGgtbGQtb3B0PU9QVElPTlMgICAgICAgICAgICBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGxpbmtlcgorCisgIC0td2l0aC1wY3JlPURJUiAgICAgICAgICAgICAgICAgIHBhdGggdG8gUENSRSBsaWJyYXJ5CisgIC0td2l0aC1tZDU9RElSICAgICAgICAgICAgICAgICAgIHBhdGggdG8gbWQ1IGxpYnJhcnkKKyAgLS13aXRoLXpsaWI9RElSICAgICAgICAgICAgICAgICAgcGF0aCB0byB6bGliIGxpYnJhcnkKKyAgLS13aXRoLW9wZW5zc2w9RElSICAgICAgICAgICAgICAgcGF0aCB0byBPcGVuU1NMIGxpYnJhcnkKKworRU5ECiAKICAgICBleGl0IDEKIGZpCkBAIC0xODEsMTEgKzE5OSwyMiBAQAogZmkKIAogCi1pZiBbICIuJFBSRUZJWCIgPSAiLiIgXTsgdGhlbgoraWYgdGVzdCAteiAiJFBSRUZJWCI7IHRoZW4KICAgICBQUkVGSVg9L3Vzci9sb2NhbC9uZ2lueAogZmkKIAogCitpZiB0ZXN0IC16ICIkTkdYX0dST1VQIjsgdGhlbgorICAgIE5HWF9HUk9VUD1OR1hfVVNFUgorZmkKKworCitpZiB0ZXN0IC16ICIkTkdYX1VTRVIiOyB0aGVuCisgICAgTkdYX1VTRVI9bm9ib2R5CisgICAgTkdYX0dST1VQPW5vYm9keQorZmkKKworCiBjYXNlICIuJFNCSU5fUEFUSCIgaW4KICAgICAuLyopCiAgICAgOzsKZGlmZiAtLWdpdCBhL2F1dG8vb3MvY29uZiBiL2F1dG8vb3MvY29uZgppbmRleCBhYmZmYmUzLi41MTU0ZjJiIDEwMDY0NAotLS0gYS9hdXRvL29zL2NvbmYKKysrIGIvYXV0by9vcy9jb25mCkBAIC0zMSwyMSArMzEsNyBAQAogICAgIDs7CiAKICAgICB3aW4zMikKLSAgICAgICAgQ09SRV9JTkNTPSIkV0lOMzJfSU5DUyIKLSAgICAgICAgQ09SRV9ERVBTPSIkV0lOMzJfREVQUyIKLSAgICAgICAgQ09SRV9TUkNTPSIkV0lOMzJfU1JDUyAkSU9DUF9TUkNTIgotICAgICAgICBPU19DT05GSUc9IiRXSU4zMl9DT05GSUciCi0gICAgICAgIEVWRU5UX01PRFVMRVM9IiRFVkVOVF9NT0RVTEVTICRJT0NQX01PRFVMRSIKLSAgICAgICAgRVZFTlRfRk9VTkQ9WUVTCi0KLSAgICAgICAgaWYgWyAkRVZFTlRfU0VMRUNUID0gTk8gXTsgdGhlbgotICAgICAgICAgICAgQ09SRV9TUkNTPSIkQ09SRV9TUkNTICRTRUxFQ1RfU1JDUyIKLSAgICAgICAgICAgIEVWRU5UX01PRFVMRVM9IiRFVkVOVF9NT0RVTEVTICRTRUxFQ1RfTU9EVUxFIgotICAgICAgICBmaQotCi0gICAgICAgIGhhdmU9SEFWRV9BSU8gLiBhdXRvL2hhdmUKLSAgICAgICAgaGF2ZT1IQVZFX0lPQ1AgLiBhdXRvL2hhdmUKLSAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTIHdzMl8zMi5saWIiCisgICAgICAgIC4gYXV0by9vcy93aW4zMgogICAgIDs7CiAKICAgICAqKQpAQCAtNTUsMyArNDEsNTYgQEAKICAgICA7OwogCiBlc2FjCisKKworaWYgWyAkUExBVEZPUk0gIT0gd2luMzIgXTsgdGhlbgorCisgICAgbmd4X2ZlYXR1cmU9Ii9kZXYvcG9sbCIKKyAgICBuZ3hfZmVhdHVyZV9uYW1lPSJkZXZwb2xsIgorICAgIG5neF9mZWF0dXJlX3J1bj1ubworICAgIG5neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxzeXMvZGV2cG9sbC5oPiIKKyAgICBuZ3hfZmVhdHVyZV9saWJzPQorICAgIG5neF9mZWF0dXJlX3Rlc3Q9ImludCAgbiwgZHA7IHN0cnVjdCBkdnBvbGwgIGR2cDsKKyAgICAgICAgICAgICAgICAgICAgICBkcCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgZHZwLmRwX2ZkcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgZHZwLmRwX25mZHMgPSAwOworICAgICAgICAgICAgICAgICAgICAgIGR2cC5kcF90aW1lb3V0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBuID0gaW9jdGwoZHAsIERQX1BPTEwsICZkdnApIgorICAgIC4gYXV0by9mZWF0dXJlCisKKyAgICBpZiBbICRuZ3hfZm91bmQgPSB5ZXMgXTsgdGhlbgorICAgICAgICBoYXZlPUhBVkVfREVWUE9MTCAuIGF1dG8vaGF2ZQorICAgICAgICBDT1JFX1NSQ1M9IiRDT1JFX1NSQ1MgJERFVlBPTExfU1JDUyIKKyAgICAgICAgRVZFTlRfTU9EVUxFUz0iJEVWRU5UX01PRFVMRVMgJERFVlBPTExfTU9EVUxFIgorICAgICAgICBFVkVOVF9GT1VORD1ZRVMKKyAgICBmaQorCisKKyAgICBpZiB0ZXN0IC16ICIkTkdYX0tRVUVVRV9DSEVDS0VEIjsgdGhlbgorICAgICAgICBuZ3hfZmVhdHVyZT0ia3F1ZXVlIgorICAgICAgICBuZ3hfZmVhdHVyZV9uYW1lPSJrcXVldWUiCisgICAgICAgIG5neF9mZWF0dXJlX3J1bj1ubworICAgICAgICBuZ3hfZmVhdHVyZV9pbmNzPSIjaW5jbHVkZSA8c3lzL2V2ZW50Lmg+IgorICAgICAgICBuZ3hfZmVhdHVyZV9saWJzPQorICAgICAgICBuZ3hfZmVhdHVyZV90ZXN0PSJpbnQga3E7IGtxID0ga3F1ZXVlKCkiCisgICAgICAgIC4gYXV0by9mZWF0dXJlCisKKyAgICAgICAgaWYgWyAkbmd4X2ZvdW5kID0geWVzIF07IHRoZW4KKworICAgICAgICAgICAgaGF2ZT1IQVZFX0tRVUVVRSAuIGF1dG8vaGF2ZQorICAgICAgICAgICAgaGF2ZT1IQVZFX0NMRUFSX0VWRU5UIC4gYXV0by9oYXZlCisgICAgICAgICAgICBFVkVOVF9NT0RVTEVTPSIkRVZFTlRfTU9EVUxFUyAkS1FVRVVFX01PRFVMRSIKKyAgICAgICAgICAgIENPUkVfU1JDUz0iJENPUkVfU1JDUyAkS1FVRVVFX1NSQ1MiCisgICAgICAgICAgICBFVkVOVF9GT1VORD1ZRVMKKworICAgICAgICAgICAgbmd4X2ZlYXR1cmU9ImtxdWV1ZSdzIE5PVEVfTE9XQVQiCisgICAgICAgICAgICBuZ3hfZmVhdHVyZV9uYW1lPSJIQVZFX0xPV0FUX0VWRU5UIgorICAgICAgICAgICAgbmd4X2ZlYXR1cmVfcnVuPW5vCisgICAgICAgICAgICBuZ3hfZmVhdHVyZV9pbmNzPSIjaW5jbHVkZSA8c3lzL2V2ZW50Lmg+IgorICAgICAgICAgICAgbmd4X2ZlYXR1cmVfbGlicz0KKyAgICAgICAgICAgIG5neF9mZWF0dXJlX3Rlc3Q9InN0cnVjdCBrZXZlbnQgIGtldjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtldi5mZmxhZ3MgPSBOT1RFX0xPV0FUOyIKKyAgICAgICAgICAgIC4gYXV0by9mZWF0dXJlCisgICAgICAgIGZpCisgICAgZmkKK2ZpCmRpZmYgLS1naXQgYS9hdXRvL29zL2ZyZWVic2QgYi9hdXRvL29zL2ZyZWVic2QKaW5kZXggOTBjYjQ5Ny4uZjA4ZWY5NyAxMDA2NDQKLS0tIGEvYXV0by9vcy9mcmVlYnNkCisrKyBiL2F1dG8vb3MvZnJlZWJzZApAQCAtMiwxOSArMiwzMyBAQAogIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CiAKIAorY2F0IDw8IEVORCA+PiAkTkdYX0FVVE9fSEVBREVSU19ICisKKyNpZm5kZWYgTkdYX0ZSRUVCU0QKKyNkZWZpbmUgTkdYX0ZSRUVCU0QgIDEKKyNlbmRpZgorCitFTkQKKworCiBDT1JFX0lOQ1M9IiRVTklYX0lOQ1MiCiBDT1JFX0RFUFM9IiRVTklYX0RFUFMgJEZSRUVCU0RfREVQUyIKIENPUkVfU1JDUz0iJFVOSVhfU1JDUyAkRlJFRUJTRF9TUkNTIgogCi1QSVBFPSItcGlwZSIKK25neF9zcGFjZXI9JworJwogCiAKLSMgX19GcmVlQlNEX3ZlcnNpb24gaXMgdGhlIGJlc3Qgd2F5IHRvIGRldGVybWluZSB3aGV0aGVyCi0jIHNvbWUgY2FwYWJpbGl0eSBleGlzdHMgYW5kIGlzIHNhZmUgdG8gdXNlCisjIF9fRnJlZUJTRF92ZXJzaW9uIGFuZCBzeXNjdGwga2Vybi5vc3JlbGRhdGUgYXJlIHRoZSBiZXN0IHdheXMKKyMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgc29tZSBjYXBhYmlsaXR5IGV4aXN0cyBhbmQgaXMgc2FmZSB0byB1c2UuCisjIF9fRnJlZUJTRF92ZXJzaW9uIGlzIHVzZWQgZm9yIHRoZSB0ZXN0aW5nIG9mIHRoZSBidWlsZCBlbnZpcm9tZW50LgorIyBzeXNjdGwga2Vybi5vc3JlbGRhdGUgaXMgdXNlZCBmb3IgdGhlIHRlc3Rpbmcgb2YgdGhlIGtlcm5lbCBjYXBhYmlsaXRpZXMuCiAKIHZlcnNpb249YGdyZXAgIiNkZWZpbmUgX19GcmVlQlNEX3ZlcnNpb24iIC91c3IvaW5jbHVkZS9vc3JlbGRhdGUuaCBcCiAgICAgICAgICB8IHNlZCAtZSAncy9eLiogXCguKlwpJC9cMS8nYAogCitvc3JlbGRhdGU9YC9zYmluL3N5c2N0bCAtbiBrZXJuLm9zcmVsZGF0ZWAKKwogCiAjIHNldHByb2N0aXRsZSgpIGluIGxpYnV0aWwKIApAQCAtMjgsNyArNDIsNyBAQAogCiAjIHNlbmRmaWxlCiAKLWlmIFsgJHZlcnNpb24gLWd0IDMwMDAwNyBdOyB0aGVuCitpZiBbICRvc3JlbGRhdGUgLWd0IDMwMDAwNyBdOyB0aGVuCiAgICAgZWNobyAiICsgdXNpbmcgc2VuZGZpbGUoKSIKIAogICAgIGhhdmU9SEFWRV9TRU5ERklMRSAuIGF1dG8vaGF2ZQpAQCAtMzgsOCArNTIsOCBAQAogCiAjIGtxdWV1ZQogCi1pZiBbIFwoICR2ZXJzaW9uIC1sdCA1MDAwMDAgLWEgJHZlcnNpb24gLWdlIDQxMDAwMCBcKSBcCi0gICAgIC1vICR2ZXJzaW9uIC1nZSA1MDAwMTEgXQoraWYgWyBcKCAkb3NyZWxkYXRlIC1sdCA1MDAwMDAgLWEgJG9zcmVsZGF0ZSAtZ2UgNDEwMDAwIFwpIFwKKyAgICAgLW8gJG9zcmVsZGF0ZSAtZ2UgNTAwMDExIF0KIHRoZW4KICAgICBlY2hvICIgKyB1c2luZyBrcXVldWUiCiAKQEAgLTUwLDYgKzY0LDggQEAKICAgICBFVkVOVF9GT1VORD1ZRVMKIGZpCiAKK05HWF9LUVVFVUVfQ0hFQ0tFRD1ZRVMKKwogCiAjIGtxdWV1ZSdzIE5PVEVfTEFXQVQKIApkaWZmIC0tZ2l0IGEvYXV0by9vcy9saW51eCBiL2F1dG8vb3MvbGludXgKaW5kZXggODU3NmVhNi4uZTY4YTBkMiAxMDA2NDQKLS0tIGEvYXV0by9vcy9saW51eAorKysgYi9hdXRvL29zL2xpbnV4CkBAIC0yLDE1ICsyLDIzIEBACiAjIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKIAogCitjYXQgPDwgRU5EID4+ICROR1hfQVVUT19IRUFERVJTX0gKKworI2lmbmRlZiBOR1hfTElOVVgKKyNkZWZpbmUgTkdYX0xJTlVYICAxCisjZW5kaWYKKworRU5ECisKIENPUkVfSU5DUz0iJFVOSVhfSU5DUyIKIENPUkVfREVQUz0iJFVOSVhfREVQUyAkTElOVVhfREVQUyIKIENPUkVfU1JDUz0iJFVOSVhfU1JDUyAkTElOVVhfU1JDUyIKIEVWRU5UX01PRFVMRVM9IiRFVkVOVF9NT0RVTEVTIgogCi1QSVBFPSItcGlwZSIKK25neF9zcGFjZXI9JworJwogCi0KLUNDX1RFU1RfRkxBR1M9Ii1EX0dOVV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtRF9MQVJHRUZJTEVfU09VUkNFIgorQ0NfQVVYX0ZMQUdTPSItRF9HTlVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCiAKICMgTGludXgga2VybmVsIHZlcnNpb24KIApAQCAtMzEsMTQgKzM5LDE4IEBACiAKICMgZXBvbGwsIEVQT0xMRVQgdmVyc2lvbgogCi1uZ3hfZnVuYz0iZXBvbGwiOwotbmd4X2Z1bmNfaW5jPSIjaW5jbHVkZSA8c3lzL2Vwb2xsLmg+Igotbmd4X2Z1bmNfdGVzdD0iaW50IGVmZCA9IDAsIGZkID0gMSwgbjsKLSAgICAgICAgICAgICAgIHN0cnVjdCBlcG9sbF9ldmVudCBlZTsKLSAgICAgICAgICAgICAgIGVlLmV2ZW50cyA9IEVQT0xMSU58RVBPTExPVVR8RVBPTExFVDsKLSAgICAgICAgICAgICAgIGVlLmRhdGEucHRyID0gTlVMTDsKLSAgICAgICAgICAgICAgIG4gPSBlcG9sbF9jdGwoZWZkLCBFUE9MTF9DVExfQURELCBmZCwgJmVlKSIKLS4gYXV0by9mdW5jCituZ3hfZmVhdHVyZT0iZXBvbGwiCituZ3hfZmVhdHVyZV9uYW1lPSJlcG9sbCIKK25neF9mZWF0dXJlX3J1bj15ZXMKK25neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxzeXMvZXBvbGwuaD4iCituZ3hfZmVhdHVyZV9saWJzPQorbmd4X2ZlYXR1cmVfdGVzdD0iaW50IGVmZCA9IDAsIGZkID0gMSwgbjsKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBlcG9sbF9ldmVudCBlZTsKKyAgICAgICAgICAgICAgICAgIGVlLmV2ZW50cyA9IEVQT0xMSU58RVBPTExPVVR8RVBPTExFVDsKKyAgICAgICAgICAgICAgICAgIGVlLmRhdGEucHRyID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgIGVmZCA9IGVwb2xsX2NyZWF0ZSgxMDApOworICAgICAgICAgICAgICAgICAgaWYgKGVmZCA9PSAtMSkgcmV0dXJuIDE7IgorLiBhdXRvL2ZlYXR1cmUKIAogaWYgWyAkbmd4X2ZvdW5kID0geWVzIF07IHRoZW4KICAgICBoYXZlPUhBVkVfRVBPTEwgLiBhdXRvL2hhdmUKQEAgLTUxLDEzICs2MywxNiBAQAogCiAjIHNlbmRmaWxlKCkKIAotQ0NfVEVTVF9GTEFHUz0iLURfR05VX1NPVVJDRSIKLW5neF9mdW5jPSJzZW5kZmlsZSgpIjsKLW5neF9mdW5jX2luYz0iI2luY2x1ZGUgPHN5cy9zZW5kZmlsZS5oPiIKLW5neF9mdW5jX3Rlc3Q9ImludCBzID0gMCwgZmQgPSAxOwotICAgICAgICAgICAgICAgc3NpemVfdCBuOyBvZmZfdCBvZmYgPSAwOwotICAgICAgICAgICAgICAgbiA9IHNlbmRmaWxlKHMsIGZkLCAmb2ZmLCAxKSIKLS4gYXV0by9mdW5jCitDQ19BVVhfRkxBR1M9Ii1EX0dOVV9TT1VSQ0UiCituZ3hfZmVhdHVyZT0ic2VuZGZpbGUoKSIKK25neF9mZWF0dXJlX25hbWU9InNlbmRmaWxlIgorbmd4X2ZlYXR1cmVfcnVuPW5vCituZ3hfZmVhdHVyZV9pbmNzPSIjaW5jbHVkZSA8c3lzL3NlbmRmaWxlLmg+Igorbmd4X2ZlYXR1cmVfbGlicz0KK25neF9mZWF0dXJlX3Rlc3Q9ImludCBzID0gMCwgZmQgPSAxOworICAgICAgICAgICAgICAgICAgc3NpemVfdCBuOyBvZmZfdCBvZmYgPSAwOworICAgICAgICAgICAgICAgICAgbiA9IHNlbmRmaWxlKHMsIGZkLCAmb2ZmLCAxKSIKKy4gYXV0by9mZWF0dXJlCiAKIGlmIFsgJG5neF9mb3VuZCA9IHllcyBdOyB0aGVuCiAgICAgQ09SRV9TUkNTPSIkQ09SRV9TUkNTICRMSU5VWF9TRU5ERklMRV9TUkNTIgpAQCAtNjYsMTcgKzgxLDI2IEBACiAKICMgc2VuZGZpbGU2NCgpCiAKLUNDX1RFU1RfRkxBR1M9Ii1EX0dOVV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtRF9MQVJHRUZJTEVfU09VUkNFIgotbmd4X2Z1bmM9InNlbmRmaWxlNjQoKSI7IC4gYXV0by9mdW5jCitDQ19BVVhfRkxBR1M9Ii1EX0dOVV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCIKK25neF9mZWF0dXJlPSJzZW5kZmlsZTY0KCkiCituZ3hfZmVhdHVyZV9uYW1lPSJIQVZFX1NFTkRGSUxFNjQiCituZ3hfZmVhdHVyZV9ydW49bm8KK25neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxzeXMvc2VuZGZpbGUuaD4iCituZ3hfZmVhdHVyZV9saWJzPQorbmd4X2ZlYXR1cmVfdGVzdD0iaW50IHMgPSAwLCBmZCA9IDE7CisgICAgICAgICAgICAgICAgICBzc2l6ZV90IG47IG9mZl90IG9mZiA9IDA7CisgICAgICAgICAgICAgICAgICBuID0gc2VuZGZpbGUocywgZmQsICZvZmYsIDEpIgorLiBhdXRvL2ZlYXR1cmUKIAogCituZ3hfaW5jbHVkZT0ic3lzL3ByY3RsLmgiOyAuIGF1dG8vaW5jbHVkZQorCiAjIHByY3RsKFBSX1NFVF9EVU1QQUJMRSkKIAotbmd4X2Z1bmM9InByY3RsKCkiOwotbmd4X2Z1bmNfaW5jPSIjaW5jbHVkZSA8c3lzL3ByY3RsLmg+Igotbmd4X2Z1bmNfdGVzdD0icHJjdGwoUFJfU0VUX0RVTVBBQkxFLCAxLCAwLCAwLCAwKSIKLS4gYXV0by9mdW5jCi0KLWlmIFsgJG5neF9mb3VuZCA9IHllcyBdOyB0aGVuCi0gICAgaGF2ZT1IQVZFX1BSX1NFVF9EVU1QQUJMRSAuIGF1dG8vaGF2ZQotZmkKK25neF9mZWF0dXJlPSJwcmN0bChQUl9TRVRfRFVNUEFCTEUpIgorbmd4X2ZlYXR1cmVfbmFtZT0iSEFWRV9QUl9TRVRfRFVNUEFCTEUiCituZ3hfZmVhdHVyZV9ydW49eWVzCituZ3hfZmVhdHVyZV9pbmNzPSIjaW5jbHVkZSA8c3lzL3ByY3RsLmg+Igorbmd4X2ZlYXR1cmVfbGlicz0KK25neF9mZWF0dXJlX3Rlc3Q9ImlmIChwcmN0bChQUl9TRVRfRFVNUEFCTEUsIDEsIDAsIDAsIDApID09IC0xKSByZXR1cm4gMSIKKy4gYXV0by9mZWF0dXJlCmRpZmYgLS1naXQgYS9hdXRvL29zL3NvbGFyaXMgYi9hdXRvL29zL3NvbGFyaXMKaW5kZXggMjk0OTdmZi4uNjI3MDhjZCAxMDA2NDQKLS0tIGEvYXV0by9vcy9zb2xhcmlzCisrKyBiL2F1dG8vb3Mvc29sYXJpcwpAQCAtMiw2ICsyLDE0IEBACiAjIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKIAogCitjYXQgPDwgRU5EID4+ICROR1hfQVVUT19IRUFERVJTX0gKKworI2lmbmRlZiBOR1hfU09MQVJJUworI2RlZmluZSBOR1hfU09MQVJJUyAgMQorI2VuZGlmCisKK0VORAorCiBDT1JFX0lOQ1M9IiRVTklYX0lOQ1MiCiBDT1JFX0RFUFM9IiRVTklYX0RFUFMgJFNPTEFSSVNfREVQUyIKIENPUkVfU1JDUz0iJFVOSVhfU1JDUyAkU09MQVJJU19TUkNTICIKQEAgLTksNDAgKzE3LDE3IEBACiAKIENPUkVfTElCUz0iJENPUkVfTElCUyAtbHNvY2tldCAtbG5zbCAtbHJ0IgogCi0jIHRoZSBTb2xhcmlzJ3MgbWFrZSBzdXBwb3J0Ci1NQUtFX1NMPVlFUworIyBTb2xhcmlzJ3MgbWFrZSBkb2VzIG5vdCBzdXBwb3J0IGEgYmxhbmsgbGluZSBiZXR3ZWVuIHRhcmdldCBhbmQgcnVsZXMKK25neF9zcGFjZXI9CiAKLQotQ0NfVEVTVF9GTEFHUz0iLURfRklMRV9PRkZTRVRfQklUUz02NCIKLQotY2FzZSAkUExBVEZPUk0gaW4KLQotICAgIFN1bk9TOjUuWzg5XToqIHwgU3VuT1M6NS4xMDoqKQotICAgICAgICBQSVBFPSItcGlwZSIKLSAgICA7OwotCi0gICAgKikKLSAgICAgICAgIyBTb2xhcmlzIDcncyAvdXNyL2Njcy9iaW4vYXMgZG9lcyBub3Qgc3VwcG9ydCAiLXBpcGUiCi0gICAgOzsKLQotZXNhYworQ0NfQVVYX0ZMQUdTPSItRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1scnQiCiAKIAogY2FzZSAkUExBVEZPUk0gaW4KIAogICAgICo6c3VuNHUpCisgICAgICAgICMgIi1tY3B1PXY5IiBlbmFibGVzIHRoZSAiY2FzYSIgYXNzZW1ibGVyIGluc3RydWN0aW9uCiAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtbWNwdT12OSIKLQotICAgICAgICBpZiBbICIuJENQVSIgPSAiLnNwYXJjNjQiIF07IHRoZW4KLSAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtbTY0IgotICAgICAgICAgICAgQ1BVX09QVD0iLW02NCIKLSAgICAgICAgICAgIENPUkVfTElOSz0iJENPUkVfTElOSyAtbTY0IgotCi0gICAgICAgICAgICBDQ19URVNUX0ZMQUdTPSIkQ0NfVEVTVF9GTEFHUyAtbWNwdT12OSAtbTY0IgotICAgICAgICBmaQotICAgIDs7Ci0KLSAgICAqKQogICAgIDs7CiAKIGVzYWMKQEAgLTU3LDIzICs0MiwxNSBAQAogZmkKIAogCi1uZ3hfaW5jPSJzeXMvZGV2cG9sbC5oIjsgLiBhdXRvL2luYwotCi1pZiBbICRuZ3hfZm91bmQgPSB5ZXMgXTsgdGhlbgotICAgIGhhdmU9SEFWRV9ERVZQT0xMIC4gYXV0by9oYXZlCi0gICAgQ09SRV9TUkNTPSIkQ09SRV9TUkNTICRERVZQT0xMX1NSQ1MiCi0gICAgRVZFTlRfTU9EVUxFUz0iJEVWRU5UX01PRFVMRVMgJERFVlBPTExfTU9EVUxFIgotICAgIEVWRU5UX0ZPVU5EPVlFUwotZmkKLQotCi1uZ3hfZnVuYz0ic2VuZGZpbGV2KCkiOwotbmd4X2Z1bmNfaW5jPSIjaW5jbHVkZSA8c3lzL3NlbmRmaWxlLmg+Igotbmd4X2Z1bmNfbGlicz0iLWxzZW5kZmlsZSIKLW5neF9mdW5jX3Rlc3Q9ImludCBmZCA9IDE7IHNlbmRmaWxldmVjX3QgdmVjWzFdOwotICAgICAgICAgICAgICAgc2l6ZV90IHNlbnQ7IHNzaXplX3QgbjsKLSAgICAgICAgICAgICAgIG4gPSBzZW5kZmlsZXYoZmQsIHZlYywgMSwgJnNlbnQpIgotLiBhdXRvL2Z1bmMKK25neF9mZWF0dXJlPSJzZW5kZmlsZXYoKSIKK25neF9mZWF0dXJlX25hbWU9InNlbmRmaWxlIgorbmd4X2ZlYXR1cmVfcnVuPW5vCituZ3hfZmVhdHVyZV9pbmNzPSIjaW5jbHVkZSA8c3lzL3NlbmRmaWxlLmg+Igorbmd4X2ZlYXR1cmVfbGlicz0iLWxzZW5kZmlsZSIKK25neF9mZWF0dXJlX3Rlc3Q9ImludCBmZCA9IDE7IHNlbmRmaWxldmVjX3QgdmVjWzFdOworICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlbnQ7IHNzaXplX3QgbjsKKyAgICAgICAgICAgICAgICAgIG4gPSBzZW5kZmlsZXYoZmQsIHZlYywgMSwgJnNlbnQpIgorLiBhdXRvL2ZlYXR1cmUKIAogCiBpZiBbICRuZ3hfZm91bmQgPSB5ZXMgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvYXV0by9vcy93aW4zMiBiL2F1dG8vb3Mvd2luMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4M2U2NwotLS0gL2Rldi9udWxsCisrKyBiL2F1dG8vb3Mvd2luMzIKQEAgLTAsMCArMSwyOSBAQAorCisjIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKKworCitjYXQgPDwgRU5EID4+ICROR1hfQVVUT19IRUFERVJTX0gKKworI2lmbmRlZiBOR1hfV0lOMzIKKyNkZWZpbmUgTkdYX1dJTjMyICAxCisjZW5kaWYKKworRU5ECisKKworQ09SRV9JTkNTPSIkV0lOMzJfSU5DUyIKK0NPUkVfREVQUz0iJFdJTjMyX0RFUFMiCitDT1JFX1NSQ1M9IiRXSU4zMl9TUkNTICRJT0NQX1NSQ1MiCitPU19DT05GSUc9IiRXSU4zMl9DT05GSUciCitDT1JFX0xJQlM9IiRDT1JFX0xJQlMgd3MyXzMyLmxpYiIKKworRVZFTlRfTU9EVUxFUz0iJEVWRU5UX01PRFVMRVMgJElPQ1BfTU9EVUxFIgorRVZFTlRfRk9VTkQ9WUVTCisKK2lmIFsgJEVWRU5UX1NFTEVDVCA9IE5PIF07IHRoZW4KKyAgICBDT1JFX1NSQ1M9IiRDT1JFX1NSQ1MgJFNFTEVDVF9TUkNTIgorICAgIEVWRU5UX01PRFVMRVM9IiRFVkVOVF9NT0RVTEVTICRTRUxFQ1RfTU9EVUxFIgorZmkKKworaGF2ZT1IQVZFX0FJTyAuIGF1dG8vaGF2ZQoraGF2ZT1IQVZFX0lPQ1AgLiBhdXRvL2hhdmUKZGlmZiAtLWdpdCBhL2F1dG8vc291cmNlcyBiL2F1dG8vc291cmNlcwppbmRleCA2ZTIxYTQxLi4xNjIyZGNkIDEwMDY0NAotLS0gYS9hdXRvL3NvdXJjZXMKKysrIGIvYXV0by9zb3VyY2VzCkBAIC0zMDMsNiArMzAzLDYgQEAKIAogSU1BUF9NT0RVTEU9bmd4X2ltYXBfbW9kdWxlCiBJTUFQX1NSQ1M9InNyYy9pbWFwL25neF9pbWFwLmMgXAotCSAgIHNyYy9pbWFwL25neF9pbWFwX2hhbmRsZXIuYyBcCi0JICAgc3JjL2ltYXAvbmd4X2ltYXBfcGFyc2UuYyBcCi0JICAgc3JjL2ltYXAvbmd4X2ltYXBfcHJveHkuYyIKKyAgICAgICAgICAgc3JjL2ltYXAvbmd4X2ltYXBfaGFuZGxlci5jIFwKKyAgICAgICAgICAgc3JjL2ltYXAvbmd4X2ltYXBfcGFyc2UuYyBcCisgICAgICAgICAgIHNyYy9pbWFwL25neF9pbWFwX3Byb3h5LmMiCmRpZmYgLS1naXQgYS9hdXRvL3N0dWJzIGIvYXV0by9zdHVicwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjM3YzU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXV0by9zdHVicwpAQCAtMCwwICsxLDggQEAKKworIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisKKworaGF2ZT1OR1hfVVNFX0hUVFBfRklMRV9DQUNIRV9VTklRIC4gYXV0by9oYXZlCitoYXZlPU5HWF9TVVBQUkVTU19XQVJOIC4gYXV0by9oYXZlCisKK2hhdmU9TkdYX1NNUCAuIGF1dG8vaGF2ZQpkaWZmIC0tZ2l0IGEvYXV0by90eXBlcy9zaXplb2YgYi9hdXRvL3R5cGVzL3NpemVvZgppbmRleCBhYzIyZTc1Li5hNzA5NGU0IDEwMDY0NAotLS0gYS9hdXRvL3R5cGVzL3NpemVvZgorKysgYi9hdXRvL3R5cGVzL3NpemVvZgpAQCAtMiw5ICsyLDE0IEBACiAjIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKIAogCi1lY2hvICRuZ3hfbiAiY2hlY2tpbmcgZm9yICRuZ3hfdHlwZSBzaXplIC4uLiIgJG5neF9jCi1lY2hvID4+ICROR1hfRVJSCi1lY2hvICJjaGVja2luZyBmb3IgJG5neF90eXBlIHNpemUiID4+ICROR1hfRVJSCitlY2hvICRuZ3hfbiAiY2hlY2tpbmcgZm9yICRuZ3hfdHlwZSBzaXplIC4uLiRuZ3hfYyIKKworY2F0IDw8IEVORCA+PiAkTkdYX0FVVE9DT05GX0VSUgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjaGVja2luZyBmb3IgJG5neF90eXBlIHNpemUKKworRU5ECiAKIG5neF9zaXplPQogCkBAIC0xMiwxMSArMTcsMTEgQEAKIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0kTkdYX1VOSVNURF9ICiskTkdYX0lOQ0xVREVfVU5JU1REX0gKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KLSROR1hfSU5UVFlQRVNfSAotJE5HWF9BVVRPX0NPTkZJRworJE5HWF9JTkNMVURFX0lOVFRZUEVTX0gKKyROR1hfSU5DTFVERV9BVVRPX0NPTkZJR19ICiAKIGludCBtYWluKCkgewogICAgIHByaW50ZigiJWQiLCBzaXplb2YoJG5neF90eXBlKSk7CkBAIC0yNSwxNCArMzAsMTkgQEAKIAogRU5ECiAKLWV2YWwgIiRDQyAkQ0NfVEVTVF9GTEFHUyAtbyAkTkdYX0FVVE9URVNUICROR1hfQVVUT1RFU1QuYyA+PiAkTkdYX0VSUiAyPiYxIgorCituZ3hfdGVzdD0iJENDICRDQ19URVNUX0ZMQUdTICRDQ19BVVhfRkxBR1MgLW8gJE5HWF9BVVRPVEVTVCAkTkdYX0FVVE9URVNULmMiCitldmFsICIkbmd4X3Rlc3QgPj4gJE5HWF9BVVRPQ09ORl9FUlIgMj4mMSIKKwogCiBpZiBbIC14ICROR1hfQVVUT1RFU1QgXTsgdGhlbgogICAgIG5neF9zaXplPWAkTkdYX0FVVE9URVNUYAogICAgIGVjaG8gIiAkbmd4X3NpemUgYnl0ZXMiCiBmaQogCi1ybSAkTkdYX0FVVE9URVNUKgorCitybSAtZiAkTkdYX0FVVE9URVNUCisKIAogY2FzZSAkbmd4X3NpemUgaW4KICAgICA0KQpAQCAtNTgsNSArNjgsMTMgQEAKICAgICAqKQogICAgICAgICBlY2hvCiAgICAgICAgIGVjaG8gIiQwOiBlcnJvcjogY2FuIG5vdCBkZXRlY3QgJG5neF90eXBlIHNpemUiCisKKyAgICAgICAgZWNobyAiLS0tLS0tLS0tLSIgICAgPj4gJE5HWF9BVVRPQ09ORl9FUlIKKyAgICAgICAgY2F0ICROR1hfQVVUT1RFU1QuYyAgPj4gJE5HWF9BVVRPQ09ORl9FUlIKKyAgICAgICAgZWNobyAiLS0tLS0tLS0tLSIgICAgPj4gJE5HWF9BVVRPQ09ORl9FUlIKKyAgICAgICAgZWNobyAkbmd4X3Rlc3QgICAgICAgPj4gJE5HWF9BVVRPQ09ORl9FUlIKKyAgICAgICAgZWNobyAiLS0tLS0tLS0tLSIgICAgPj4gJE5HWF9BVVRPQ09ORl9FUlIKKwogICAgICAgICBleGl0IDEKIGVzYWMKKwpkaWZmIC0tZ2l0IGEvYXV0by90eXBlcy90eXBlZGVmIGIvYXV0by90eXBlcy90eXBlZGVmCmluZGV4IDk3NjJmNDguLjRiODk2NDMgMTAwNjQ0Ci0tLSBhL2F1dG8vdHlwZXMvdHlwZWRlZgorKysgYi9hdXRvL3R5cGVzL3R5cGVkZWYKQEAgLTIsMTMgKzIsMTggQEAKICMgQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgogCiAKLWVjaG8gJG5neF9uICJjaGVja2luZyBmb3IgJG5neF90eXBlIC4uLiIgJG5neF9jCi1lY2hvID4+ICROR1hfRVJSCi1lY2hvICJjaGVja2luZyBmb3IgJG5neF90eXBlIiA+PiAkTkdYX0VSUgorZWNobyAkbmd4X24gImNoZWNraW5nIGZvciAkbmd4X3R5cGUgLi4uJG5neF9jIgogCi1mb3VuZD1ubworY2F0IDw8IEVORCA+PiAkTkdYX0FVVE9DT05GX0VSUgogCi1mb3IgdHlwZSBpbiAkbmd4X3R5cGUgJG5neF90eXBlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY2hlY2tpbmcgZm9yICRuZ3hfdHlwZQorCitFTkQKKworbmd4X2ZvdW5kPW5vCisKK2ZvciBuZ3hfdHJ5IGluICRuZ3hfdHlwZSAkbmd4X3R5cGVzCiBkbwogCiAgICAgY2F0IDw8IEVORCA+ICROR1hfQVVUT1RFU1QuYwpAQCAtMTksNDIgKzI0LDUxIEBACiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0kTkdYX0lOVFRZUEVTX0gKKyROR1hfSU5DTFVERV9JTlRUWVBFU19ICiAKIGludCBtYWluKCkgewotICAgICR0eXBlIGkgPSAwOworICAgICRuZ3hfdHJ5IGkgPSAwOwogICAgIHJldHVybiAwOwogfQogCiBFTkQKIAotICAgIGV2YWwgIiRDQyAtbyAkTkdYX0FVVE9URVNUICROR1hfQVVUT1RFU1QuYyA+PiAkTkdYX0VSUiAyPiYxIgorICAgIG5neF90ZXN0PSIkQ0MgJENDX1RFU1RfRkxBR1MgJENDX0FVWF9GTEFHUyAtbyAkTkdYX0FVVE9URVNUICROR1hfQVVUT1RFU1QuYyIKKyAgICBldmFsICIkbmd4X3Rlc3QgPj4gJE5HWF9BVVRPQ09ORl9FUlIgMj4mMSIKIAogICAgIGlmIFsgLXggJE5HWF9BVVRPVEVTVCBdOyB0aGVuCi0gICAgICAgIGlmIFsgJHR5cGUgPSAkbmd4X3R5cGUgXTsgdGhlbgorICAgICAgICBpZiBbICRuZ3hfdHJ5ID0gJG5neF90eXBlIF07IHRoZW4KICAgICAgICAgICAgIGVjaG8gIiBmb3VuZCIKLSAgICAgICAgICAgIGZvdW5kPXllcworICAgICAgICAgICAgbmd4X2ZvdW5kPXllcwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBlY2hvICIsICR0eXBlIHVzZWQiCi0gICAgICAgICAgICBmb3VuZD0kdHlwZQorICAgICAgICAgICAgZWNobyAiLCAkbmd4X3RyeSB1c2VkIgorICAgICAgICAgICAgbmd4X2ZvdW5kPSRuZ3hfdHJ5CiAgICAgICAgIGZpCiAgICAgZmkKIAotICAgIHJtICROR1hfQVVUT1RFU1QqCisgICAgcm0gLWYgJE5HWF9BVVRPVEVTVAogCi0gICAgaWYgWyAkZm91bmQgPSBubyBdOyB0aGVuCi0gICAgICAgIGVjaG8gJG5neF9uICIgJHR5cGUgbm90IGZvdW5kIiAkbmd4X2MKKyAgICBpZiBbICRuZ3hfZm91bmQgPSBubyBdOyB0aGVuCisgICAgICAgIGVjaG8gJG5neF9uICIgJG5neF90cnkgbm90IGZvdW5kJG5neF9jIgorCisgICAgICAgIGVjaG8gIi0tLS0tLS0tLS0iICAgID4+ICROR1hfQVVUT0NPTkZfRVJSCisgICAgICAgIGNhdCAkTkdYX0FVVE9URVNULmMgID4+ICROR1hfQVVUT0NPTkZfRVJSCisgICAgICAgIGVjaG8gIi0tLS0tLS0tLS0iICAgID4+ICROR1hfQVVUT0NPTkZfRVJSCisgICAgICAgIGVjaG8gJG5neF90ZXN0ICAgICAgID4+ICROR1hfQVVUT0NPTkZfRVJSCisgICAgICAgIGVjaG8gIi0tLS0tLS0tLS0iICAgID4+ICROR1hfQVVUT0NPTkZfRVJSCisKICAgICBlbHNlCiAgICAgICAgIGJyZWFrCiAgICAgZmkKIGRvbmUKIAotaWYgWyAkZm91bmQgPSBubyBdOyB0aGVuCitpZiBbICRuZ3hfZm91bmQgPSBubyBdOyB0aGVuCiAgICAgZWNobwogICAgIGVjaG8gIiQwOiBlcnJvcjogY2FuIG5vdCBkZWZpbmUgJG5neF90eXBlIgorCiAgICAgZXhpdCAxCiBmaQogCi1pZiBbICRmb3VuZCAhPSB5ZXMgXTsgdGhlbgotICAgIGVjaG8gInR5cGVkZWYgJGZvdW5kICAkbmd4X3R5cGU7IiAgID4+ICROR1hfQVVUT19DT05GSUdfSAoraWYgWyAkbmd4X2ZvdW5kICE9IHllcyBdOyB0aGVuCisgICAgZWNobyAidHlwZWRlZiAkbmd4X2ZvdW5kICAkbmd4X3R5cGU7IiAgID4+ICROR1hfQVVUT19DT05GSUdfSAogZmkKZGlmZiAtLWdpdCBhL2F1dG8vdHlwZXMvdWludHB0cl90IGIvYXV0by90eXBlcy91aW50cHRyX3QKaW5kZXggYTFiYjc4YS4uZTdkOGQ1YyAxMDA2NDQKLS0tIGEvYXV0by90eXBlcy91aW50cHRyX3QKKysrIGIvYXV0by90eXBlcy91aW50cHRyX3QKQEAgLTIsNyArMiw3IEBACiAjIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKIAogCi1lY2hvICRuZ3hfbiAiY2hlY2tpbmcgZm9yIHVpbnRwdHJfdCAuLi4gIiAkbmd4X2MKK2VjaG8gJG5neF9uICJjaGVja2luZyBmb3IgdWludHB0cl90IC4uLiRuZ3hfYyIKIGVjaG8gPj4gJE5HWF9FUlIKIGVjaG8gImNoZWNraW5nIGZvciB1aW50cHRyX3QiID4+ICROR1hfRVJSCiAKZGlmZiAtLWdpdCBhL2F1dG8vdW5peCBiL2F1dG8vdW5peAppbmRleCA0YmE3ZDYwLi5lYzBlMzk1IDEwMDc1NQotLS0gYS9hdXRvL3VuaXgKKysrIGIvYXV0by91bml4CkBAIC0yLDcgKzIsNyBAQAogIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CiAKIAotQ0NfV0FSTj0kQ0MKK0NDX1dBUk49CiBuZ3hfZm10X2NvbGxlY3Q9eWVzCiAKICMgQyB0eXBlcwpAQCAtMjMsNyArMjMsNyBAQAogCiAjIFBPU0lYIHR5cGVzCiAKLU5HWF9BVVRPX0NPTkZJRz0iI2luY2x1ZGUgXCIuLi8kTkdYX0FVVE9fQ09ORklHX0hcIiIKK05HWF9JTkNMVURFX0FVVE9fQ09ORklHX0g9IiNpbmNsdWRlIFwiLi4vJE5HWF9BVVRPX0NPTkZJR19IXCIiCiAKIG5neF90eXBlPSJ1aW50NjRfdCI7IG5neF90eXBlcz0idV9pbnQ2NF90IjsgLiBhdXRvL3R5cGVzL3R5cGVkZWYKIApAQCAtNzIsNzUgKzcyLDk4IEBACiAKICMgc3lzY2FsbHMsIGxpYmMgY2FsbHMgYW5kIHNvbWUgZmVhdHVyZXMKIAorCituZ3hfZmVhdHVyZT0icHJlYWQoKSIKK25neF9mZWF0dXJlX25hbWU9InByZWFkIgorbmd4X2ZlYXR1cmVfcnVuPW5vCituZ3hfZmVhdHVyZV9pbmNzPQogbmd4X2ZlYXR1cmVfbGlicz0KLW5neF9mdW5jX2xpYnM9CituZ3hfZmVhdHVyZV90ZXN0PSJjaGFyIGJ1ZlsxXTsgc3NpemVfdCBuOyBuID0gcHJlYWQoMCwgYnVmLCAxLCAwKSIKKy4gYXV0by9mZWF0dXJlCiAKIAotbmd4X2Z1bmM9InByZWFkKCkiCi1uZ3hfZnVuY19pbmM9Ci1uZ3hfZnVuY190ZXN0PSJjaGFyIGJ1ZlsxXTsgc3NpemVfdCBuOyBuID0gcHJlYWQoMCwgYnVmLCAxLCAwKSIKLS4gYXV0by9mdW5jCituZ3hfZmVhdHVyZT0icHdyaXRlKCkiCituZ3hfZmVhdHVyZV9uYW1lPSJwd3JpdGUiCituZ3hfZmVhdHVyZV9ydW49bm8KK25neF9mZWF0dXJlX2luY3M9CituZ3hfZmVhdHVyZV9saWJzPQorbmd4X2ZlYXR1cmVfdGVzdD0iY2hhciBidWZbMV07IHNzaXplX3QgbjsgbiA9IHB3cml0ZSgxLCBidWYsIDEsIDApIgorLiBhdXRvL2ZlYXR1cmUKIAogCi1uZ3hfZnVuYz0icHdyaXRlKCkiCi1uZ3hfZnVuY19pbmM9Ci1uZ3hfZnVuY190ZXN0PSJjaGFyIGJ1ZlsxXTsgc3NpemVfdCBuOyBuID0gcHdyaXRlKDEsIGJ1ZiwgMSwgMCkiCi0uIGF1dG8vZnVuYworbmd4X2ZlYXR1cmU9InN0cmVycm9yX3IoKSIKK25neF9mZWF0dXJlX25hbWU9InN0cmVycm9yX3IiCituZ3hfZmVhdHVyZV9ydW49bm8KK25neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxzdHJpbmcuaD4iCituZ3hfZmVhdHVyZV9saWJzPQorbmd4X2ZlYXR1cmVfdGVzdD0iY2hhciBidWZbMjBdOyBpbnQgbjsgbiA9IHN0cmVycm9yX3IoMSwgYnVmLCAyMCkiCisuIGF1dG8vZmVhdHVyZQogCiAKLSNuZ3hfZnVuYz0ic3Ryc2lnbmFsKCkiCi0jbmd4X2Z1bmNfaW5jPSIjaW5jbHVkZSA8c3RyaW5nLmg+IgotI25neF9mdW5jX3Rlc3Q9ImNoYXIgKnMgPSBzdHJzaWduYWwoMSkiCi0jLiBhdXRvL2Z1bmMKK25neF9mZWF0dXJlPSJnbnVfc3RyZXJyb3JfcigpIgorbmd4X2ZlYXR1cmVfbmFtZT0iZ251X3N0cmVycm9yX3IiCituZ3hfZmVhdHVyZV9ydW49bm8KK25neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxzdHJpbmcuaD4iCituZ3hfZmVhdHVyZV9saWJzPQorbmd4X2ZlYXR1cmVfdGVzdD0iY2hhciBidWZbMjBdLCAqc3RyOyBzdHIgPSBzdHJlcnJvcl9yKDEsIGJ1ZiwgMjApIgorLiBhdXRvL2ZlYXR1cmUKIAogCi1uZ3hfZnVuYz0ic3RyZXJyb3JfcigpIgotbmd4X2Z1bmNfaW5jPSIjaW5jbHVkZSA8c3RyaW5nLmg+Igotbmd4X2Z1bmNfdGVzdD0iY2hhciBidWZbMjBdOyBpbnQgbjsgbiA9IHN0cmVycm9yX3IoMSwgYnVmLCAyMCkiCi0uIGF1dG8vZnVuYworbmd4X2ZlYXR1cmU9ImxvY2FsdGltZV9yKCkiCituZ3hfZmVhdHVyZV9uYW1lPSJsb2NhbHRpbWVfciIKK25neF9mZWF0dXJlX3J1bj1ubworbmd4X2ZlYXR1cmVfaW5jcz0iI2luY2x1ZGUgPHRpbWUuaD4iCituZ3hfZmVhdHVyZV9saWJzPQorbmd4X2ZlYXR1cmVfdGVzdD0ic3RydWN0IHRtIHQ7IHRpbWVfdCBjPTA7IGxvY2FsdGltZV9yKCZjLCAmdCkiCisuIGF1dG8vZmVhdHVyZQogCiAKLW5neF9mdW5jPSJnbnVfc3RyZXJyb3JfcigpIgotbmd4X2Z1bmNfaW5jPSIjaW5jbHVkZSA8c3RyaW5nLmg+Igotbmd4X2Z1bmNfdGVzdD0iY2hhciBidWZbMjBdLCAqc3RyOyBzdHIgPSBzdHJlcnJvcl9yKDEsIGJ1ZiwgMjApIgotLiBhdXRvL2Z1bmMKK25neF9mZWF0dXJlPSJwb3NpeF9tZW1hbGlnbigpIgorbmd4X2ZlYXR1cmVfbmFtZT0icG9zaXhfbWVtYWxpZ24iCituZ3hfZmVhdHVyZV9ydW49bm8KK25neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxzdGRsaWIuaD4iCituZ3hfZmVhdHVyZV9saWJzPQorbmd4X2ZlYXR1cmVfdGVzdD0idm9pZCAqcDsgaW50IG47IG4gPSBwb3NpeF9tZW1hbGlnbigmcCwgNDA5NiwgNDA5NikiCisuIGF1dG8vZmVhdHVyZQogCiAKLW5neF9mdW5jPSJsb2NhbHRpbWVfcigpIgotbmd4X2Z1bmNfaW5jPSIjaW5jbHVkZSA8dGltZS5oPiIKLW5neF9mdW5jX3Rlc3Q9InN0cnVjdCB0bSB0OyB0aW1lX3QgYz0wOyBsb2NhbHRpbWVfcigmYywgJnQpIgotLiBhdXRvL2Z1bmMKK25neF9mZWF0dXJlPSJtZW1hbGlnbigpIgorbmd4X2ZlYXR1cmVfbmFtZT0ibWVtYWxpZ24iCituZ3hfZmVhdHVyZV9ydW49bm8KK25neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxzdGRsaWIuaD4iCituZ3hfZmVhdHVyZV9saWJzPQorbmd4X2ZlYXR1cmVfdGVzdD0idm9pZCAqcDsgcCA9IG1lbWFsaWduKDQwOTYsIDQwOTYpIgorLiBhdXRvL2ZlYXR1cmUKIAogCi1uZ3hfZnVuYz0icG9zaXhfbWVtYWxpZ24oKSIKLW5neF9mdW5jX2luYz0iI2luY2x1ZGUgPHN0ZGxpYi5oPiIKLW5neF9mdW5jX3Rlc3Q9InZvaWQgKnA7IGludCBuOyBuID0gcG9zaXhfbWVtYWxpZ24oJnAsIDQwOTYsIDQwOTYpIgotLiBhdXRvL2Z1bmMKLQotCi1uZ3hfZnVuYz0ibWVtYWxpZ24oKSIKLW5neF9mdW5jX2luYz0iI2luY2x1ZGUgPHN0ZGxpYi5oPiIKLW5neF9mdW5jX3Rlc3Q9InZvaWQgKnA7IHAgPSBtZW1hbGlnbig0MDk2LCA0MDk2KSIKLS4gYXV0by9mdW5jCi0KK25neF9mZWF0dXJlPSJzY2hlZF95aWVsZCgpIgorbmd4X2ZlYXR1cmVfbmFtZT0iSEFWRV9TQ0hFRF9ZSUVMRCIKK25neF9mZWF0dXJlX3J1bj1ubworbmd4X2ZlYXR1cmVfaW5jcz0iI2luY2x1ZGUgPHNjaGVkLmg+Igorbmd4X2ZlYXR1cmVfbGlicz0KK25neF9mZWF0dXJlX3Rlc3Q9InNjaGVkX3lpZWxkKCkiCisuIGF1dG8vZmVhdHVyZQogCiAKIG5neF9mZWF0dXJlPSJtbWFwKE1BUF9BTk9OfE1BUF9TSEFSRUQpIgogbmd4X2ZlYXR1cmVfbmFtZT0iTUFQX0FOT04iCi1uZ3hfZmVhdHVyZV9pbmM9IiNpbmNsdWRlIDxzeXMvbW1hbi5oPiIKK25neF9mZWF0dXJlX3J1bj15ZXMKK25neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxzeXMvbW1hbi5oPiIKK25neF9mZWF0dXJlX2xpYnM9CiBuZ3hfZmVhdHVyZV90ZXN0PSJ2b2lkICpwOwogICAgICAgICAgICAgICAgICAgcCA9IG1tYXAoTlVMTCwgNDA5NiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVBfQU5PTnxNQVBfU0hBUkVELCAtMSwgMCk7CiAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBNQVBfRkFJTEVEKSByZXR1cm4gMTsiCi1uZ3hfZmVhdHVyZV9ydW49eWVzCiAuIGF1dG8vZmVhdHVyZQogCiAKIG5neF9mZWF0dXJlPSdtbWFwKCIvZGV2L3plcm8iLCBNQVBfU0hBUkVEKScKIG5neF9mZWF0dXJlX25hbWU9Ik1BUF9ERVZaRVJPIgotbmd4X2ZlYXR1cmVfaW5jPSIjaW5jbHVkZSA8c3lzL21tYW4uaD4KK25neF9mZWF0dXJlX3J1bj15ZXMKK25neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4iCituZ3hfZmVhdHVyZV9saWJzPQogbmd4X2ZlYXR1cmVfdGVzdD0ndm9pZCAqcDsgaW50ICBmZDsKICAgICAgICAgICAgICAgICAgIGZkID0gb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKTsKICAgICAgICAgICAgICAgICAgIHAgPSBtbWFwKE5VTEwsIDQwOTYsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7CkBAIC0xNTAsOCArMTczLDEwIEBACiAKIG5neF9mZWF0dXJlPSJTeXN0ZW0gViBzaGFyZWQgbWVtb3J5Igogbmd4X2ZlYXR1cmVfbmFtZT0iU1lTVlNITSIKLW5neF9mZWF0dXJlX2luYz0iI2luY2x1ZGUgPHN5cy9pcGMuaD4KK25neF9mZWF0dXJlX3J1bj15ZXMKK25neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxzeXMvaXBjLmg+CiAjaW5jbHVkZSA8c3lzL3NobS5oPiIKK25neF9mZWF0dXJlX2xpYnM9CiBuZ3hfZmVhdHVyZV90ZXN0PSJpbnQgIGlkOwogICAgICAgICAgICAgICAgICAgaWQgPSBzaG1nZXQoSVBDX1BSSVZBVEUsIDQwOTYsIChTSE1fUnxTSE1fV3xJUENfQ1JFQVQpKTsKICAgICAgICAgICAgICAgICAgIGlmIChpZCA9PSAtMSkgcmV0dXJuIDE7CkBAIC0xNTksNDEgKzE4NCwzOSBAQAogLiBhdXRvL2ZlYXR1cmUKIAogCi0KIG5neF9mZWF0dXJlPSJzdHJ1Y3Qgc29ja2FkZHJfaW4uc2luX2xlbiIKIG5neF9mZWF0dXJlX25hbWU9InNpbl9sZW4iCi1uZ3hfZmVhdHVyZV9pbmM9IiNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPiIKLW5neF9mZWF0dXJlX3Rlc3Q9InN0cnVjdCBzb2NrYWRkcl9pbiBzYTsgc2Euc2luX2xlbiA9IDUiCiBuZ3hfZmVhdHVyZV9ydW49bm8KK25neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPiIKK25neF9mZWF0dXJlX2xpYnM9CituZ3hfZmVhdHVyZV90ZXN0PSJzdHJ1Y3Qgc29ja2FkZHJfaW4gc2E7IHNhLnNpbl9sZW4gPSA1IgogLiBhdXRvL2ZlYXR1cmUKIAogCiBuZ3hfZmVhdHVyZT0ic3RydWN0IG1zZ2hkci5tc2dfY29udHJvbCIKIG5neF9mZWF0dXJlX25hbWU9Im1zZ2hkcl9tc2dfY29udHJvbCIKLW5neF9mZWF0dXJlX2luYz0iI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4iCituZ3hfZmVhdHVyZV9ydW49bm8KK25neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Igorbmd4X2ZlYXR1cmVfbGlicz0KIG5neF9mZWF0dXJlX3Rlc3Q9InN0cnVjdCBtc2doZHIgIG1zZzsgbXNnLm1zZ19jb250cm9sID0gTlVMTCIKIC4gYXV0by9mZWF0dXJlCiAKIAotY2FzZSAkUExBVEZPUk0gaW4KLSAgICBMaW51eDoqKQotICAgICAgICBuZ3hfZmVhdHVyZV9pbmM9IiNpbmNsdWRlIDxzeXMvaW9jdGwuaD4iCi0gICAgOzsKLQotICAgICopCi0gICAgICAgIG5neF9mZWF0dXJlX2luYz0iI2luY2x1ZGUgPHN5cy9maWxpby5oPiIKLSAgICA7OwotZXNhYwotCiBuZ3hfZmVhdHVyZT0iaW9jdGwoRklPTkJJTykiCiBuZ3hfZmVhdHVyZV9uYW1lPSJGSU9OQklPIgorbmd4X2ZlYXR1cmVfcnVuPW5vCituZ3hfZmVhdHVyZV9pbmNzPSIjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiskTkdYX0lOQ0xVREVfU1lTX0ZJTElPX0giCituZ3hfZmVhdHVyZV9saWJzPQogbmd4X2ZlYXR1cmVfdGVzdD0iaW50IGk7IGkgPSBGSU9OQklPIgogLiBhdXRvL2ZlYXR1cmUKIAogCiBuZ3hfZmVhdHVyZT0ic3RydWN0IHRtLnRtX2dtdG9mZiIKIG5neF9mZWF0dXJlX25hbWU9ImdtdG9mZiIKLW5neF9mZWF0dXJlX2luYz0iI2luY2x1ZGUgPHRpbWUuaD4iCituZ3hfZmVhdHVyZV9ydW49bm8KK25neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDx0aW1lLmg+Igorbmd4X2ZlYXR1cmVfbGlicz0KIG5neF9mZWF0dXJlX3Rlc3Q9InN0cnVjdCB0bSAgdG07IHRtLnRtX2dtdG9mZiA9IDAiCiAuIGF1dG8vZmVhdHVyZQpkaWZmIC0tZ2l0IGEvY29uZi9uZ2lueC5jb25mIGIvY29uZi9uZ2lueC5jb25mCmluZGV4IDAwMDI1MTAuLmI0MjQ4YjggMTAwNjQ0Ci0tLSBhL2NvbmYvbmdpbnguY29uZgorKysgYi9jb25mL25naW54LmNvbmYKQEAgLTEsNSArMSw1IEBACiAKLXVzZXIgIG5vYm9keTsKKyN1c2VyICBub2JvZHk7CiB3b3JrZXJfcHJvY2Vzc2VzICAzOwogCiAjZXJyb3JfbG9nICBsb2dzL2Vycm9yLmxvZzsKZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggYTQzY2Q0Ni4uZGY4MWM4ZCAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTYsNiArNiw5MiBAQAogICAgICAgICAgICAgdGl0bGU9Im5naW54Ij4KIAogCis8Y2hhbmdlcyB2ZXI9IjAuMS4yIiBkYXRlPSIyMS4xMC4yMDA0Ij4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DB0sHNxdTS2SAtLXVzZXI9VVNFUiwgLS1ncm91cD1HUk9VUCDJIC0td2l0aC1sZC1vcHQ9T1BUSU9OUyDXIGNvbmZpZ3VyZS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAtLXVzZXI9VVNFUiwgLS1ncm91cD1HUk9VUCwgYW5kIC0td2l0aC1sZC1vcHQ9T1BUSU9OUyBvcHRpb25zIGluIGNvbmZpZ3VyZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfBIHNlcnZlcl9uYW1lINDPxMTF0tbJ18HF1CAqLmRvbWFpbi50bGQuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgc2VydmVyX25hbWUgZGlyZWN0aXZlIHN1cHBvcnRzICouZG9tYWluLnRsZC4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivVzNXe28XOwSDQxdLFzs/Tyc3P09TYIM7BIM7FydrXxdPUztnFINDMwdTGz9LN2S4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBwb3J0YWJpbGl0eSBpbXByb3ZlbWVudHMuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorzsXM2NrRINDF0sXLz87GycfV0snSz9fB1NggbmdpbngsIMXTzMkgy8/OxsnH1dLBw8nPzs7ZyiDGwcrMINXLwdrBzgor1yDLz83BzsTOz8og09TSz8vFLAorz9vJwsvBINDP0dfJzMHT2CDXIDAuMS4xLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgoraWYgY29uZmlndXJhdGlvbiBmaWxlIHdhcyBzZXQgaW4gY29tbWFuZCBsaW5lLCB0aGUgcmVjb25maWd1cmF0aW9uCit3YXMgaW1wb3NzaWJsZSwKK2J1ZyBhcHBlYXJlZCBpbiAwLjEuMS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivNz8TVzNgg0NLPy9PJ0s/Xwc7JySDNz8cg0NLJ18XT1MkgyyDawcPJy8zJ18HOycAsIMXTzMkgzsUgydPQz8zY2s/XwczT0Qorc2VuZGZpbGUuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Citwcm94eSBtb2R1bGUgbWF5IGdldCBjYXVnaHQgaW4gYW4gZW5kbGVzcyBsb29wIHdoZW4gc2VuZGZpbGUgaXMgbm90IHVzZWQuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgor0NLJIMnT0M/M2NrP18HOyckgc2VuZGZpbGUg1MXL09Qgz9TXxdTBIM7FINDF0sXLz8TJ0s/XwczT0Qor08/HzMHTzs8gxMnSxcvUydfBzSDNz8TVzNEgY2hhcnNldCwKK8/bycLLwSDQz9HXyczB09gg1yAwLjEuMS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3dpdGggc2VuZGZpbGUgdGhlIHJlc3BvbnNlIHdhcyBub3QgcmVjb2RlZCBhY2NvcmRpbmcgdG8gdGhlIGNoYXJzZXQKK21vZHVsZSBkaXJlY3RpdmVzLAorYnVnIGFwcGVhcmVkIGluIDAuMS4xLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8/exc7YINLFxMvB0SDP28nCy8Eg0NLJIM/C0sHCz9TLxSBrcXVldWUuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit2ZXJ5IHNlbGRvbSBidWcgaW4gdGhlIGtxdWV1ZSBwcm9jZXNzaW5nLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK83PxNXM2CDT1sHUydEg09bJzcHMINXWxSDT1sHU2cUgz9TXxdTZLCDQz8zV3sXOztnFINDSySDQ0s/L08nSz9fBzsnJLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIGd6aXAgbW9kdWxlIGNvbXByZXNzZWQgdGhlIHByb3hpZWQgcmVzcG9uc2VzIHRoYXQgd2FzIGFscmVhZHkgY29tcHJlc3NlZC4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8L2NoYW5nZXM+CisKKwogPGNoYW5nZXMgdmVyPSIwLjEuMSIgZGF0ZT0iMTEuMTAuMjAwNCI+CiAKIDxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+CkBAIC02MCw3ICsxNDYsNyBAQAogz9vJwsvBINcgzc/E1czFIG5neF9odHRwX2NodW5rZWRfbW9kdWxlLCDQ0snXz8TJ19vB0SDLINrBw8nLzMnXwc7JwC4KIDwvcGFyYT4KIDxwYXJhIGxhbmc9ImVuIj4KLXRoZSBuZ3hfaHR0cF9jaHVua2VkX21vZHVsZSBtb2R1bGUgYnVnIGZpeGVkIHRoYXQgY2F1c2VkIGFuIGVuZGxlc3MgbG9vcC4KK3RoZSBuZ3hfaHR0cF9jaHVua2VkX21vZHVsZSBtb2R1bGUgbWF5IGdldCBjYXVnaHQgaW4gYW4gZW5kbGVzcyBsb29wLgogPC9wYXJhPgogPC9jaGFuZ2U+CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmMgYi9zcmMvY29yZS9uZ2lueC5jCmluZGV4IDlkOTEwODAuLmFiODViMjMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmMKKysrIGIvc3JjL2NvcmUvbmdpbnguYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgbmd4X2N5Y2xlX3QgICAgICAqY3ljbGUsIGluaXRfY3ljbGU7CiAgICAgbmd4X2NvcmVfY29uZl90ICAqY2NmOwogCi0jaWYgZGVmaW5lZCBfX0ZyZWVCU0RfXworI2lmIChOR1hfRlJFRUJTRCkKICAgICBuZ3hfZGVidWdfaW5pdCgpOwogI2VuZGlmCiAKQEAgLTExMiw3ICsxMTIsNyBAQAogCiAgICAgbmd4X3RpbWVfaW5pdCgpOwogCi0jaWYgKEhBVkVfUENSRSkKKyNpZiAoTkdYX1BDUkUpCiAgICAgbmd4X3JlZ2V4X2luaXQoKTsKICNlbmRpZgogCkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKLSAgICBpZiAobmd4X2dldG9wdCgmaW5pdF9jeWNsZSwgYXJnYywgYXJndikgPT0gTkdYX0VSUk9SKSB7CisgICAgaWYgKG5neF9zYXZlX2FyZ3YoJmluaXRfY3ljbGUsIGFyZ2MsIGFyZ3YpID09IE5HWF9FUlJPUikgewogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKLSAgICBpZiAobmd4X3NhdmVfYXJndigmaW5pdF9jeWNsZSwgYXJnYywgYXJndikgPT0gTkdYX0VSUk9SKSB7CisgICAgaWYgKG5neF9nZXRvcHQoJmluaXRfY3ljbGUsIGFyZ2MsIG5neF9hcmd2KSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCkBAIC0xNzUsNyArMTc1LDcgQEAKICAgICBpZiAobmd4X3Rlc3RfY29uZmlnKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBsb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgInRoZSBjb25maWd1cmF0aW9uIGZpbGUgJXMgd2FzIHRlc3RlZCBzdWNjZXNzZnVsbHkiLAotICAgICAgICAgICAgICAgICAgICAgIGluaXRfY3ljbGUuY29uZl9maWxlLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlLT5jb25mX2ZpbGUuZGF0YSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMzg3LDcgKzM4Nyw3IEBACiAKICAgICBuZ3hfYXJnYyA9IGFyZ2M7CiAKLSNpZiBfX0ZyZWVCU0RfXworI2lmIChOR1hfRlJFRUJTRCkKIAogICAgIG5neF9hcmd2ID0gKGNoYXIgKiopIGFyZ3Y7CiAKQEAgLTQ2MiwyOCArNDYyLDI2IEBACiAKICNpZiAhKFdJTjMyKQogCi0jaWYgMAogICAgIGlmIChjY2YtPnVzZXIgPT0gKHVpZF90KSBOR1hfQ09ORl9VTlNFVCkgewogCi0gICAgICAgIHB3ZCA9IGdldHB3bmFtKCJub2JvZHkiKTsKKyAgICAgICAgcHdkID0gZ2V0cHduYW0oTkdYX1VTRVIpOwogICAgICAgICBpZiAocHdkID09IE5VTEwpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0cHduYW0oXCJub2JvZHlcIikgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJnZXRwd25hbShcIiIgTkdYX1VTRVIgIlwiKSBmYWlsZWQiKTsKICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgfQogCiAgICAgICAgIGNjZi0+dXNlciA9IHB3ZC0+cHdfdWlkOwogCi0gICAgICAgIGdycCA9IGdldGdybmFtKCJub2JvZHkiKTsKKyAgICAgICAgZ3JwID0gZ2V0Z3JuYW0oTkdYX0dST1VQKTsKICAgICAgICAgaWYgKGdycCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImdldGdybmFtKFwibm9ib2R5XCIpIGZhaWxlZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0Z3JuYW0oXCIiIE5HWF9HUk9VUCAiXCIpIGZhaWxlZCIpOwogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CiAKICAgICAgICAgY2NmLT5ncm91cCA9IGdycC0+Z3JfZ2lkOwogICAgIH0KLSNlbmRpZgogCiAgICAgaWYgKGNjZi0+cGlkLmxlbiA9PSAwKSB7CiAgICAgICAgIGNjZi0+cGlkLmxlbiA9IHNpemVvZihOR1hfUElEX1BBVEgpIC0gMTsKQEAgLTUyMiw2ICs1MjAsNyBAQAogCiAgICAgbmd4X2NvcmVfY29uZl90ICAqY2NmID0gY29uZjsKIAorICAgIGNoYXIgICAgICAgICAgICAgKmdyb3VwOwogICAgIHN0cnVjdCBwYXNzd2QgICAgKnB3ZDsKICAgICBzdHJ1Y3QgZ3JvdXAgICAgICpncnA7CiAgICAgbmd4X3N0cl90ICAgICAgICAqdmFsdWU7CkBAIC01MzAsNiArNTI5LDE0IEBACiAgICAgICAgIHJldHVybiAiaXMgZHVwbGljYXRlIjsKICAgICB9CiAKKyAgICBpZiAoZ2V0ZXVpZCgpICE9IDApIHsKKyAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfV0FSTiwgY2YsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIFwidXNlclwiIGRpcmVjdGl2ZSBtYWtlcyBzZW5zZSBvbmx5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZiB0aGUgbWFzdGVyIHByb2Nlc3MgcnVucyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aCBzdXBlci11c2VyIHByaXZpbGVnZXMsIGlnbm9yZWQiKTsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX09LOworICAgIH0KKwogICAgIHZhbHVlID0gKG5neF9zdHJfdCAqKSBjZi0+YXJncy0+ZWx0czsKIAogICAgIHB3ZCA9IGdldHB3bmFtKChjb25zdCBjaGFyICopIHZhbHVlWzFdLmRhdGEpOwpAQCAtNTQxLDE0ICs1NDgsMTIgQEAKIAogICAgIGNjZi0+dXNlciA9IHB3ZC0+cHdfdWlkOwogCi0gICAgaWYgKGNmLT5hcmdzLT5uZWx0cyA9PSAyKSB7Ci0gICAgICAgIHJldHVybiBOR1hfQ09ORl9PSzsKLSAgICB9CisgICAgZ3JvdXAgPSAoY2hhciAqKSAoKGNmLT5hcmdzLT5uZWx0cyA9PSAyKSA/IHZhbHVlWzFdLmRhdGEgOiB2YWx1ZVsyXS5kYXRhKTsKIAotICAgIGdycCA9IGdldGdybmFtKChjb25zdCBjaGFyICopIHZhbHVlWzJdLmRhdGEpOworICAgIGdycCA9IGdldGdybmFtKGdyb3VwKTsKICAgICBpZiAoZ3JwID09IE5VTEwpIHsKICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0Z3JuYW0oXCIlc1wiKSBmYWlsZWQiLCB2YWx1ZVsyXS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZXRncm5hbShcIiVzXCIpIGZhaWxlZCIsIGdyb3VwKTsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggODI1NDVlNS4uYmFjMDFmYyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4xLjEiCisjZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4xLjIiCiAKICNkZWZpbmUgTkdJTlhfVkFSICAgICAgICAgICJOR0lOWCIKICNkZWZpbmUgTkdYX05FV1BJRF9FWFQgICAgICIubmV3YmluIgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2J1Zi5jIGIvc3JjL2NvcmUvbmd4X2J1Zi5jCmluZGV4IGE1MzZjMDQuLjdkMzc5ODkgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9idWYuYworKysgYi9zcmMvY29yZS9uZ3hfYnVmLmMKQEAgLTEyNiwxMiArMTI2LDExIEBACiAgICAgICAgICpidXN5ID0gKm91dDsKIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAodGwgPSAqYnVzeTsgLyogdm9pZCAqLyA7IHRsID0gdGwtPm5leHQpIHsKLSAgICAgICAgICAgIGlmICh0bC0+bmV4dCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgdGwtPm5leHQgPSAqb3V0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICBmb3IgKHRsID0gKmJ1c3k7IHRsLT5uZXh0OyB0bCA9IHRsLT5uZXh0KSB7CisgICAgICAgICAgICAvKiB2b2lkICovOwogICAgICAgICB9CisKKyAgICAgICAgdGwtPm5leHQgPSAqb3V0OwogICAgIH0KIAogICAgICpvdXQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2J1Zi5oIGIvc3JjL2NvcmUvbmd4X2J1Zi5oCmluZGV4IDNlMDE0ZDEuLmUyZDA3MTkgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9idWYuaAorKysgYi9zcmMvY29yZS9uZ3hfYnVmLmgKQEAgLTIyLDcgKzIyLDYgQEAKICAgICBvZmZfdCAgICAgICAgICAgIGZpbGVfcG9zOwogICAgIG9mZl90ICAgICAgICAgICAgZmlsZV9sYXN0OwogCi0gICAgaW50ICAgICAgICAgICAgICB0eXBlOwogICAgIHVfY2hhciAgICAgICAgICAqc3RhcnQ7ICAgICAgICAgLyogc3RhcnQgb2YgYnVmZmVyICovCiAgICAgdV9jaGFyICAgICAgICAgICplbmQ7ICAgICAgICAgICAvKiBlbmQgb2YgYnVmZmVyICovCiAgICAgbmd4X2J1Zl90YWdfdCAgICB0YWc7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMgYi9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMKaW5kZXggOTBhMDlkMi4uZmI2MjlhNCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5jCisrKyBiL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYwpAQCAtNTc5LDggKzU3OSwxOCBAQAogCiAgICAgbmFtZS0+bGVuID0gY3ljbGUtPnJvb3QubGVuICsgb2xkLmxlbjsKIAotICAgIGlmICghKG5hbWUtPmRhdGEgPSBuZ3hfcGFsbG9jKGN5Y2xlLT5wb29sLCBuYW1lLT5sZW4gKyAxKSkpIHsKLSAgICAgICAgcmV0dXJuICBOR1hfRVJST1I7CisgICAgaWYgKGN5Y2xlLT5jb25uZWN0aW9ucykgeworICAgICAgICBpZiAoIShuYW1lLT5kYXRhID0gbmd4X3BhbGxvYyhjeWNsZS0+cG9vbCwgbmFtZS0+bGVuICsgMSkpKSB7CisgICAgICAgICAgICByZXR1cm4gIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsKKworICAgICAgICAvKiB0aGUgaW5pdF9jeWNsZSAqLworCisgICAgICAgIGlmICghKG5hbWUtPmRhdGEgPSBuZ3hfYWxsb2MobmFtZS0+bGVuICsgMSwgY3ljbGUtPmxvZykpKSB7CisgICAgICAgICAgICByZXR1cm4gIE5HWF9FUlJPUjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHAgPSBuZ3hfY3B5bWVtKG5hbWUtPmRhdGEsIGN5Y2xlLT5yb290LmRhdGEsIGN5Y2xlLT5yb290LmxlbiksCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29uZmlnLmggYi9zcmMvY29yZS9uZ3hfY29uZmlnLmgKaW5kZXggN2UzZTY4Mi4uMzU5MGZhZSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvbmZpZy5oCisrKyBiL3NyYy9jb3JlL25neF9jb25maWcuaApAQCAtOCwzMCArOCwzMiBAQAogI2RlZmluZSBfTkdYX0NPTkZJR19IX0lOQ0xVREVEXwogCiAKKyNpbmNsdWRlIDxuZ3hfYXV0b19oZWFkZXJzLmg+CisKKwogI2lmIGRlZmluZWQgX19EcmFnb25GbHlfXyAmJiAhZGVmaW5lZCBfX0ZyZWVCU0RfXwogI2RlZmluZSBfX0ZyZWVCU0RfXyAgICAgICAgNAogI2RlZmluZSBfX0ZyZWVCU0RfdmVyc2lvbiAgNDgwMTAxCiAjZW5kaWYKIAogCi0jaWYgZGVmaW5lZCBfX0ZyZWVCU0RfXworI2lmIChOR1hfRlJFRUJTRCkKICNpbmNsdWRlIDxuZ3hfZnJlZWJzZF9jb25maWcuaD4KIAogCi0jZWxpZiBkZWZpbmVkIF9fbGludXhfXworI2VsaWYgKE5HWF9MSU5VWCkKICNpbmNsdWRlIDxuZ3hfbGludXhfY29uZmlnLmg+CiAKIAotICAgICAgIC8qIFNvbGFyaXMgKi8KLSNlbGlmIGRlZmluZWQgc3VuICYmIChkZWZpbmVkIF9fc3ZyNF9fIHx8IGRlZmluZWQgX19TVlI0KQorI2VsaWYgKE5HWF9TT0xBUklTKQogI2luY2x1ZGUgPG5neF9zb2xhcmlzX2NvbmZpZy5oPgogCiAKLSNlbGlmIGRlZmluZWQgX1dJTjMyCisjZWxpZiAoTkdYX1dJTjMyKQogI2luY2x1ZGUgPG5neF93aW4zMl9jb25maWcuaD4KIAogCi0jZWxzZSAvKiBwb3NpeCAqLworI2Vsc2UgLyogUE9TSVggKi8KICNpbmNsdWRlIDxuZ3hfcG9zaXhfY29uZmlnLmg+CiAKICNlbmRpZgpAQCAtODksOCArOTEsMTAgQEAKICNkZWZpbmUgTkdYX0lOVDY0X0xFTiAgICAgIHNpemVvZigiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSAtIDEKICNkZWZpbmUgTkdYX09GRl9UX0xFTiAgICAgIHNpemVvZigiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSAtIDEKIAorI2RlZmluZSBOR1hfTUFYX0lOVF9MRU4gICAgKHNpemVvZigiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSAtIDEpCiAKLSNpZiAoU09MQVJJUykKKworI2lmIChOR1hfU09MQVJJUykKIAogLyogVE9ETzogYXV0b19jb25mICovCiAjZGVmaW5lIE5HWF9BTElHTiAgICAgICAoX01BWF9BTElHTk1FTlQgLSAxKSAgICAgICAgIC8qIHBsYXRmb3JtIHdvcmQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmggYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oCmluZGV4IDU3YzdhMzMuLjhlMmJhMzkgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmgKKysrIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaApAQCAtNDAsNyArNDAsNyBAQAogICAgIHRpbWVfdCAgICAgICAgICAgIHBvc3RfYWNjZXB0X3RpbWVvdXQ7ICAgICAvKiBzaG91bGQgYmUgaGVyZSBiZWNhdXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBkZWZlcnJlZCBhY2NlcHQgKi8KIAotICAgIHVuc2lnbmVkICAgICAgICAgIG5ldzoxOworICAgIHVuc2lnbmVkICAgICAgICAgIG9wZW46MTsKICAgICB1bnNpZ25lZCAgICAgICAgICByZW1haW46MTsKICAgICB1bnNpZ25lZCAgICAgICAgICBpZ25vcmU6MTsKIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2NvcmUuaCBiL3NyYy9jb3JlL25neF9jb3JlLmgKaW5kZXggMDJhNGExNy4uNzlmYjAwOSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvcmUuaAorKysgYi9zcmMvY29yZS9uZ3hfY29yZS5oCkBAIC01NCw3ICs1NCw3IEBACiAjaW5jbHVkZSA8bmd4X2ZpbGUuaD4KICNpbmNsdWRlIDxuZ3hfZmlsZXMuaD4KICNpbmNsdWRlIDxuZ3hfY3JjLmg+Ci0jaWYgKEhBVkVfUENSRSkKKyNpZiAoTkdYX1BDUkUpCiAjaW5jbHVkZSA8bmd4X3JlZ2V4Lmg+CiAjZW5kaWYKICNpbmNsdWRlIDxuZ3hfcmJ0cmVlLmg+CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY3ljbGUuYyBiL3NyYy9jb3JlL25neF9jeWNsZS5jCmluZGV4IDM4ZjRhZDUuLmExNDAyZjEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jeWNsZS5jCisrKyBiL3NyYy9jb3JlL25neF9jeWNsZS5jCkBAIC0xNTgsNiArMTU4LDkgQEAKICAgICBjb25mLm1vZHVsZV90eXBlID0gTkdYX0NPUkVfTU9EVUxFOwogICAgIGNvbmYuY21kX3R5cGUgPSBOR1hfTUFJTl9DT05GOwogCisjaWYgMAorICAgIGxvZy0+bG9nX2xldmVsID0gTkdYX0xPR19ERUJVR19BTEw7CisjZW5kaWYKIAogICAgIGlmIChuZ3hfY29uZl9wYXJzZSgmY29uZiwgJmN5Y2xlLT5jb25mX2ZpbGUpICE9IE5HWF9DT05GX09LKSB7CiAgICAgICAgIG5neF9kZXN0cm95X3Bvb2wocG9vbCk7CkBAIC0yMjMsOSArMjI2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9GSUxFX1JEV1IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfRklMRV9DUkVBVEVfT1JfT1BFTnxOR1hfRklMRV9BUFBFTkQpOwogCi0jaWYgMAotICAgICAgICAgICAgbG9nLT5sb2dfbGV2ZWwgPSBOR1hfTE9HX0RFQlVHX0FMTDsKLSNlbmRpZgogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19DT1JFLCBsb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9nOiAlMFggJWQgXCIlc1wiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlW2ldLCBmaWxlW2ldLmZkLCBmaWxlW2ldLm5hbWUuZGF0YSk7CkBAIC0zMTAsMTQgKzMxMCwxNCBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChubHNbbl0uZmQgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgbmxzW25dLm5ldyA9IDE7CisgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5vcGVuID0gMTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGxzID0gY3ljbGUtPmxpc3RlbmluZy5lbHRzOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGN5Y2xlLT5saXN0ZW5pbmcubmVsdHM7IGkrKykgewotICAgICAgICAgICAgICAgIGxzW2ldLm5ldyA9IDE7CisgICAgICAgICAgICAgICAgbHNbaV0ub3BlbiA9IDE7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMzY2LDcgKzM2Niw3IEBACiAKICAgICAgICAgbHMgPSBjeWNsZS0+bGlzdGVuaW5nLmVsdHM7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjeWNsZS0+bGlzdGVuaW5nLm5lbHRzOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChsc1tpXS5mZCA9PSAtMSB8fCAhbHNbaV0ubmV3KSB7CisgICAgICAgICAgICBpZiAobHNbaV0uZmQgPT0gLTEgfHwgIWxzW2ldLm9wZW4pIHsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2xvZy5jIGIvc3JjL2NvcmUvbmd4X2xvZy5jCmluZGV4IDljZjFkNTYuLmYxYzBlOTcgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9sb2cuYworKysgYi9zcmMvY29yZS9uZ3hfbG9nLmMKQEAgLTU3LDcgKzU3LDcgQEAKIH07CiAKIAotI2lmIChIQVZFX1ZBUklBRElDX01BQ1JPUykKKyNpZiAoTkdYX0hBVkVfVkFSSUFESUNfTUFDUk9TKQogdm9pZCBuZ3hfbG9nX2Vycm9yX2NvcmUobmd4X3VpbnRfdCBsZXZlbCwgbmd4X2xvZ190ICpsb2csIG5neF9lcnJfdCBlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKICNlbHNlCkBAIC02Nyw3ICs2Nyw3IEBACiB7CiAgICAgY2hhciAgICAgIGVycnN0cltNQVhfRVJST1JfU1RSXTsKICAgICBzaXplX3QgICAgbGVuLCBtYXg7Ci0jaWYgKEhBVkVfVkFSSUFESUNfTUFDUk9TKQorI2lmIChOR1hfSEFWRV9WQVJJQURJQ19NQUNST1MpCiAgICAgdmFfbGlzdCAgIGFyZ3M7CiAjZW5kaWYKIApAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqJXUgIiwgKih1X2ludCAqKSBsb2ctPmRhdGEpOwogICAgIH0KIAotI2lmIChIQVZFX1ZBUklBRElDX01BQ1JPUykKKyNpZiAoTkdYX0hBVkVfVkFSSUFESUNfTUFDUk9TKQogCiAgICAgdmFfc3RhcnQoYXJncywgZm10KTsKICAgICBsZW4gKz0gbmd4X3ZzbnByaW50ZihlcnJzdHIgKyBsZW4sIG1heCAtIGxlbiwgZm10LCBhcmdzKTsKQEAgLTE4Nyw3ICsxODcsNyBAQAogfQogCiAKLSNpZiAhKEhBVkVfVkFSSUFESUNfTUFDUk9TKQorI2lmICEoTkdYX0hBVkVfVkFSSUFESUNfTUFDUk9TKQogCiB2b2lkIG5neF9sb2dfZXJyb3Iobmd4X3VpbnRfdCBsZXZlbCwgbmd4X2xvZ190ICpsb2csIG5neF9lcnJfdCBlcnIsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCkBAIC0yNTMsNyArMjUzLDcgQEAKICNlbmRpZgogCiAgICAgbmd4X2xvZy5maWxlID0gJm5neF9zdGRlcnI7Ci0gICAgbmd4X2xvZy5sb2dfbGV2ZWwgPSBOR1hfTE9HX0VSUjsKKyAgICBuZ3hfbG9nLmxvZ19sZXZlbCA9IE5HWF9MT0dfTk9USUNFOwogCiAgICAgcmV0dXJuICZuZ3hfbG9nOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2xvZy5oIGIvc3JjL2NvcmUvbmd4X2xvZy5oCmluZGV4IGU4Mjk5NWUuLjVkZGQ4ZmMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9sb2cuaAorKysgYi9zcmMvY29yZS9uZ3hfbG9nLmgKQEAgLTU1LDkgKzU1LDkgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmIChIQVZFX0dDQ19WQVJJQURJQ19NQUNST1MpCisjaWYgKE5HWF9IQVZFX0dDQ19WQVJJQURJQ19NQUNST1MpCiAKLSNkZWZpbmUgSEFWRV9WQVJJQURJQ19NQUNST1MgIDEKKyNkZWZpbmUgTkdYX0hBVkVfVkFSSUFESUNfTUFDUk9TICAxCiAKICNkZWZpbmUgbmd4X2xvZ19lcnJvcihsZXZlbCwgbG9nLCBhcmdzLi4uKSBcCiAgICAgICAgIGlmIChsb2ctPmxvZ19sZXZlbCA+PSBsZXZlbCkgbmd4X2xvZ19lcnJvcl9jb3JlKGxldmVsLCBsb2csIGFyZ3MpCkBAIC02Nyw5ICs2Nyw5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNlbGlmIChIQVZFX0M5OV9WQVJJQURJQ19NQUNST1MpCisjZWxpZiAoTkdYX0hBVkVfQzk5X1ZBUklBRElDX01BQ1JPUykKIAotI2RlZmluZSBIQVZFX1ZBUklBRElDX01BQ1JPUyAgMQorI2RlZmluZSBOR1hfSEFWRV9WQVJJQURJQ19NQUNST1MgIDEKIAogI2RlZmluZSBuZ3hfbG9nX2Vycm9yKGxldmVsLCBsb2csIC4uLikgXAogICAgICAgICBpZiAobG9nLT5sb2dfbGV2ZWwgPj0gbGV2ZWwpIG5neF9sb2dfZXJyb3JfY29yZShsZXZlbCwgbG9nLCBfX1ZBX0FSR1NfXykKQEAgLTgxLDcgKzgxLDcgQEAKIAogI2Vsc2UgLyogTk8gVkFSSUFESUMgTUFDUk9TICovCiAKLSNkZWZpbmUgSEFWRV9WQVJJQURJQ19NQUNST1MgIDAKKyNkZWZpbmUgTkdYX0hBVkVfVkFSSUFESUNfTUFDUk9TICAwCiAKIHZvaWQgbmd4X2xvZ19lcnJvcihuZ3hfdWludF90IGxldmVsLCBuZ3hfbG9nX3QgKmxvZywgbmd4X2Vycl90IGVyciwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLik7CkBAIC05OCw3ICs5OCw3IEBACiAKICNpZiAoTkdYX0RFQlVHKQogCi0jaWYgKEhBVkVfVkFSSUFESUNfTUFDUk9TKQorI2lmIChOR1hfSEFWRV9WQVJJQURJQ19NQUNST1MpCiAKICNkZWZpbmUgbmd4X2xvZ19kZWJ1ZzAobGV2ZWwsIGxvZywgZXJyLCBmbXQpIFwKICAgICBpZiAobG9nLT5sb2dfbGV2ZWwgJiBsZXZlbCkgXApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X291dHB1dF9jaGFpbi5jIGIvc3JjL2NvcmUvbmd4X291dHB1dF9jaGFpbi5jCmluZGV4IDc0ZTM4ZTEuLjIzYjc4NDYgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9vdXRwdXRfY2hhaW4uYworKysgYi9zcmMvY29yZS9uZ3hfb3V0cHV0X2NoYWluLmMKQEAgLTI0LDEzICsyNCwxMyBAQAogICAgIHNpemVfdCAgICAgICAgc2l6ZSwgYnNpemU7CiAgICAgbmd4X2NoYWluX3QgICpjbCwgKm91dCwgKipsYXN0X291dDsKIAotICAgIC8qCi0gICAgICogdGhlIHNob3J0IHBhdGggZm9yIHRoZSBjYXNlIHdoZW4gdGhlIGN0eC0+aW4gY2hhaW4gaXMgZW1wdHkKLSAgICAgKiBhbmQgdGhlIGluY29taW5nIGNoYWluIGlzIGVtcHR5IHRvbyBvciBpdCBoYXMgdGhlIHNpbmdsZSBidWYKLSAgICAgKiB0aGF0IGRvZXMgbm90IHJlcXVpcmUgdGhlIGNvcHkKLSAgICAgKi8KKyAgICBpZiAoY3R4LT5pbiA9PSBOVUxMICYmIGN0eC0+YnVzeSA9PSBOVUxMKSB7CiAKLSAgICBpZiAoY3R4LT5pbiA9PSBOVUxMKSB7CisgICAgICAgLyoKKyAgICAgICAgKiB0aGUgc2hvcnQgcGF0aCBmb3IgdGhlIGNhc2Ugd2hlbiB0aGUgY3R4LT5pbiBhbmQgY3R4LT5idXN5IGNoYWlucworICAgICAgICAqIGFyZSBlbXB0eSwgdGhlIGluY29taW5nIGNoYWluIGlzIGVtcHR5IHRvbyBvciBoYXMgdGhlIHNpbmdsZSBidWYKKyAgICAgICAgKiB0aGF0IGRvZXMgbm90IHJlcXVpcmUgdGhlIGNvcHkKKyAgICAgICAgKi8KIAogICAgICAgICBpZiAoaW4gPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuIGN0eC0+b3V0cHV0X2ZpbHRlcihjdHgtPmZpbHRlcl9jdHgsIGluKTsKQEAgLTE5Miw2ICsxOTIsNyBAQAogICAgIH0KIAogICAgIGlmICghY3R4LT5zZW5kZmlsZSkgeworCiAgICAgICAgIGlmICghbmd4X2J1Zl9pbl9tZW1vcnkoYnVmKSkgewogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KQEAgLTIyOCwxMiArMjI5LDE5IEBACiAgICAgICAgIHNyYy0+cG9zICs9IHNpemU7CiAgICAgICAgIGRzdC0+bGFzdCArPSBzaXplOwogCi0gICAgICAgIGlmIChzcmMtPmluX2ZpbGUgJiYgc2VuZGZpbGUpIHsKLSAgICAgICAgICAgIGRzdC0+aW5fZmlsZSA9IDE7Ci0gICAgICAgICAgICBkc3QtPmZpbGUgPSBzcmMtPmZpbGU7Ci0gICAgICAgICAgICBkc3QtPmZpbGVfcG9zID0gc3JjLT5maWxlX3BvczsKKyAgICAgICAgaWYgKHNyYy0+aW5fZmlsZSkgeworCisgICAgICAgICAgICBpZiAoc2VuZGZpbGUpIHsKKyAgICAgICAgICAgICAgICBkc3QtPmluX2ZpbGUgPSAxOworICAgICAgICAgICAgICAgIGRzdC0+ZmlsZSA9IHNyYy0+ZmlsZTsKKyAgICAgICAgICAgICAgICBkc3QtPmZpbGVfcG9zID0gc3JjLT5maWxlX3BvczsKKyAgICAgICAgICAgICAgICBkc3QtPmZpbGVfbGFzdCA9IHNyYy0+ZmlsZV9wb3MgKyBzaXplOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRzdC0+aW5fZmlsZSA9IDA7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHNyYy0+ZmlsZV9wb3MgKz0gc2l6ZTsKLSAgICAgICAgICAgIGRzdC0+ZmlsZV9sYXN0ID0gc3JjLT5maWxlX3BvczsKIAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZHN0LT5pbl9maWxlID0gMDsKQEAgLTI3MSwxNCArMjc5LDE0IEBACiAgICAgICAgICAgICBkc3QtPmluX2ZpbGUgPSAxOwogICAgICAgICAgICAgZHN0LT5maWxlID0gc3JjLT5maWxlOwogICAgICAgICAgICAgZHN0LT5maWxlX3BvcyA9IHNyYy0+ZmlsZV9wb3M7Ci0gICAgICAgICAgICBzcmMtPmZpbGVfcG9zICs9IHNpemU7Ci0gICAgICAgICAgICBkc3QtPmZpbGVfbGFzdCA9IHNyYy0+ZmlsZV9wb3M7CisgICAgICAgICAgICBkc3QtPmZpbGVfbGFzdCA9IHNyYy0+ZmlsZV9wb3MgKyBuOwogCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBkc3QtPmluX2ZpbGUgPSAwOwotICAgICAgICAgICAgc3JjLT5maWxlX3BvcyArPSBuOwogICAgICAgICB9CiAKKyAgICAgICAgc3JjLT5maWxlX3BvcyArPSBuOworCiAgICAgICAgIGlmIChzcmMtPmxhc3RfYnVmICYmIHNyYy0+ZmlsZV9wb3MgPT0gc3JjLT5maWxlX2xhc3QpIHsKICAgICAgICAgICAgIGRzdC0+bGFzdF9idWYgPSAxOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmMgYi9zcmMvY29yZS9uZ3hfc3RyaW5nLmMKaW5kZXggMzJhNDA3OS4uOGU0ZTA5YSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3N0cmluZy5jCisrKyBiL3NyYy9jb3JlL25neF9zdHJpbmcuYwpAQCAtMjgsNiArMjgsMjM4IEBACiB9CiAKIAorLyoKKyAqIHN1cHBvcnRlZCBmb3JtYXRzOgorICogICAgJVswXVt3aWR0aF1PICAgICBvZmZfdAorICogICAgJVswXVt3aWR0aF1UICAgICB0aW1lX3QKKyAqICAgICVbMF1bd2lkdGhdUyAgICAgc3NpemVfdAorICogICAgJVswXVt3aWR0aF11UyAgICBzaXplX3QKKyAqICAgICVbMF1bd2lkdGhddXhTICAgc2l6ZV90IGluIGhleAorICogICAgJVswXVt3aWR0aF1sICAgICBsb25nCisgKiAgICAlWzBdW3dpZHRoXWQgICAgIGludAorICogICAgJVswXVt3aWR0aF1pICAgICBuZ3hfaW50X3QKKyAqICAgICVbMF1bd2lkdGhddWkgICAgbmd4X3VpbnRfdAorICogICAgJVswXVt3aWR0aF11eGkgICBuZ3hfdWludF90IGluIGhleAorICogICAgJXMgICAgICAgICAgICAgICBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nCisgKiAgICAlJSAgICAgICAgICAgICAgICUKKyAqCisgKi8KKwordV9jaGFyICpuZ3hfc3ByaW50Zih1X2NoYXIgKmJ1ZiwgY2hhciAqZm10LCAuLi4pCit7CisgICAgdV9jaGFyICAgICAgICAqcCwgYywgdGVtcFtOR1hfTUFYX0lOVF9MRU5dOworICAgIGludCAgICAgICAgICAgIGQ7CisgICAgbG9uZyAgICAgICAgICAgbDsKKyAgICBvZmZfdCAgICAgICAgICBvZmZzZXQ7CisgICAgc2l6ZV90ICAgICAgICAgc2l6ZSwgbGVuOworICAgIHNzaXplX3QgICAgICAgIHNzaXplOworICAgIHRpbWVfdCAgICAgICAgIHNlYzsKKyAgICB2YV9saXN0ICAgICAgICBhcmc7CisgICAgbmd4X2ludF90ICAgICAgaTsKKyAgICBuZ3hfdWludF90ICAgICB1aSwgemVybywgd2lkdGgsIHNpZ24sIGhleGFkZWNpbWFsOworICAgIHN0YXRpYyB1X2NoYXIgIGhleFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiOworCisgICAgdmFfc3RhcnQoYXJnLCBmbXQpOworCisgICAgd2hpbGUgKCpmbXQpIHsKKyAgICAgICAgaWYgKCpmbXQgPT0gJyUnKSB7CisKKyAgICAgICAgICAgIHplcm8gPSAoKisrZm10ID09ICcwJykgPyAxIDogMDsKKyAgICAgICAgICAgIHdpZHRoID0gMDsKKyAgICAgICAgICAgIHNpZ24gPSAxOworICAgICAgICAgICAgaGV4YWRlY2ltYWwgPSAwOworCisgICAgICAgICAgICBwID0gdGVtcCArIE5HWF9NQVhfSU5UX0xFTjsKKworICAgICAgICAgICAgd2hpbGUgKCpmbXQgPj0gJzAnICYmICpmbXQgPD0gJzknKSB7CisgICAgICAgICAgICAgICAgd2lkdGggPSB3aWR0aCAqIDEwICsgKmZtdCsrIC0gJzAnOworICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgIGZvciAoIDs7ICkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoKmZtdCkgeworCisgICAgICAgICAgICAgICAgY2FzZSAndSc6CisgICAgICAgICAgICAgICAgICAgIHNpZ24gPSAwOworICAgICAgICAgICAgICAgICAgICBmbXQrKzsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgICAgICAgICAgaGV4YWRlY2ltYWwgPSAxOworICAgICAgICAgICAgICAgICAgICBmbXQrKzsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICBzd2l0Y2ggKCpmbXQpIHsKKworICAgICAgICAgICAgY2FzZSAnTyc6CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gdmFfYXJnKGFyZywgb2ZmX3QpOworCisgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgKmJ1ZisrID0gJy0nOworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgKi0tcCA9ICh1X2NoYXIpIChvZmZzZXQgJSAxMCArICcwJyk7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAob2Zmc2V0IC89IDEwKTsKKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdUJzoKKyAgICAgICAgICAgICAgICBzZWMgPSB2YV9hcmcoYXJnLCB0aW1lX3QpOworCisgICAgICAgICAgICAgICAgaWYgKHNlYyA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgKmJ1ZisrID0gJy0nOworICAgICAgICAgICAgICAgICAgICBzZWMgPSAtc2VjOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgKi0tcCA9ICh1X2NoYXIpIChzZWMgJSAxMCArICcwJyk7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoc2VjIC89IDEwKTsKKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdTJzoKKyAgICAgICAgICAgICAgICBpZiAoc2lnbikgeworICAgICAgICAgICAgICAgICAgICBzc2l6ZSA9IHZhX2FyZyhhcmcsIHNzaXplX3QpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChzc2l6ZSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpidWYrKyA9ICctJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAoc2l6ZV90KSAtc3NpemU7CisKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAoc2l6ZV90KSBzc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyhhcmcsIHNpemVfdCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGhleGFkZWNpbWFsKSB7CisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICotLXAgPSBoZXhbc2l6ZSAmIDB4Zl07CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHNpemUgPj49IDQpOworCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAgICAgKi0tcCA9ICh1X2NoYXIpIChzaXplICUgMTAgKyAnMCcpOworICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChzaXplIC89IDEwKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnbCc6CisgICAgICAgICAgICAgICAgbCA9IHZhX2FyZyhhcmcsIGxvbmcpOworCisgICAgICAgICAgICAgICAgaWYgKGwgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICpidWYrKyA9ICctJzsKKyAgICAgICAgICAgICAgICAgICAgbCA9IC1sOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgKi0tcCA9ICh1X2NoYXIpIChsICUgMTAgKyAnMCcpOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKGwgLz0gMTApOworCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgICAgIGQgPSB2YV9hcmcoYXJnLCBpbnQpOworCisgICAgICAgICAgICAgICAgaWYgKGQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICpidWYrKyA9ICctJzsKKyAgICAgICAgICAgICAgICAgICAgZCA9IC1kOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgKi0tcCA9ICh1X2NoYXIpIChkICUgMTAgKyAnMCcpOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKGQgLz0gMTApOworCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ2knOgorICAgICAgICAgICAgICAgIGlmIChzaWduKSB7CisgICAgICAgICAgICAgICAgICAgIGkgPSB2YV9hcmcoYXJnLCBuZ3hfaW50X3QpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZisrID0gJy0nOworICAgICAgICAgICAgICAgICAgICAgICAgdWkgPSAobmd4X3VpbnRfdCkgLWk7CisKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpID0gKG5neF91aW50X3QpIGk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVpID0gdmFfYXJnKGFyZywgbmd4X3VpbnRfdCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGhleGFkZWNpbWFsKSB7CisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICotLXAgPSBoZXhbdWkgJiAweGZdOworICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICh1aSA+Pj0gNCk7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICAqLS1wID0gKHVfY2hhcikgKHVpICUgMTAgKyAnMCcpOworICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICh1aSAvPSAxMCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgICAgIHAgPSB2YV9hcmcoYXJnLCB1X2NoYXIgKik7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoKnApIHsKKyAgICAgICAgICAgICAgICAgICAgKmJ1ZisrID0gKnArKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm10Kys7CisKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgY2FzZSAnJSc6CisgICAgICAgICAgICAgICAgKmJ1ZisrID0gJyUnOworICAgICAgICAgICAgICAgIGZtdCsrOworCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgKmJ1ZisrID0gKmZtdCsrOworCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxlbiA9ICh0ZW1wICsgTkdYX01BWF9JTlRfTEVOKSAtIHA7CisKKyAgICAgICAgICAgIGMgPSAodV9jaGFyKSAoemVybyA/ICcwJyA6ICcgJyk7CisKKyAgICAgICAgICAgIHdoaWxlIChsZW4rKyA8IHdpZHRoKSB7CisgICAgICAgICAgICAgICAgKmJ1ZisrID0gYzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnVmID0gbmd4X2NweW1lbShidWYsIHAsICgodGVtcCArIE5HWF9NQVhfSU5UX0xFTikgLSBwKSk7CisKKyAgICAgICAgICAgIGZtdCsrOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqYnVmKysgPSAqZm10Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2YV9lbmQoYXJnKTsKKworICAgICpidWYgPSAnXDAnOworCisgICAgcmV0dXJuIGJ1ZjsKK30KKworCiBuZ3hfaW50X3Qgbmd4X3JzdHJuY21wKHVfY2hhciAqczEsIHVfY2hhciAqczIsIHNpemVfdCBuKQogewogICAgIGlmIChuID09IDApIHsKQEAgLTUwLDYgKzI4Miw0MCBAQAogfQogCiAKK25neF9pbnRfdCBuZ3hfcnN0cm5jYXNlY21wKHVfY2hhciAqczEsIHVfY2hhciAqczIsIHNpemVfdCBuKQoreworICAgIHVfY2hhciAgYzEsIGMyOworCisgICAgaWYgKG4gPT0gMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBuLS07CisKKyAgICBmb3IgKCA7OyApIHsKKyAgICAgICAgYzEgPSBzMVtuXTsKKyAgICAgICAgaWYgKGMxID49ICdhJyAmJiBjMSA8PSAneicpIHsKKyAgICAgICAgICAgIGMxIC09ICdhJyAtICdBJzsKKyAgICAgICAgfQorCisgICAgICAgIGMyID0gczJbbl07CisgICAgICAgIGlmIChjMiA+PSAnYScgJiYgYzIgPD0gJ3onKSB7CisgICAgICAgICAgICBjMiAtPSAnYScgLSAnQSc7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYzEgIT0gYzIpIHsKKyAgICAgICAgICAgIHJldHVybiBjMSAtIGMyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG4gPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBuLS07CisgICAgfQorfQorCisKIG5neF9pbnRfdCBuZ3hfYXRvaSh1X2NoYXIgKmxpbmUsIHNpemVfdCBuKQogewogICAgIG5neF9pbnRfdCAgdmFsdWU7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmggYi9zcmMvY29yZS9uZ3hfc3RyaW5nLmgKaW5kZXggZThlNjljMC4uZDdjYWFhZiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3N0cmluZy5oCisrKyBiL3NyYy9jb3JlL25neF9zdHJpbmcuaApAQCAtNzAsNyArNzAsMTAgQEAKICNkZWZpbmUgbmd4X21lbWNtcCAgICAgICAgICAgICAgICBtZW1jbXAKIAogdV9jaGFyICpuZ3hfY3B5c3Rybih1X2NoYXIgKmRzdCwgdV9jaGFyICpzcmMsIHNpemVfdCBuKTsKK3VfY2hhciAqbmd4X3NwcmludGYodV9jaGFyICpidWYsIGNoYXIgKmZtdCwgLi4uKTsKKwogbmd4X2ludF90IG5neF9yc3RybmNtcCh1X2NoYXIgKnMxLCB1X2NoYXIgKnMyLCBzaXplX3Qgbik7CituZ3hfaW50X3Qgbmd4X3JzdHJuY2FzZWNtcCh1X2NoYXIgKnMxLCB1X2NoYXIgKnMyLCBzaXplX3Qgbik7CiAKIG5neF9pbnRfdCBuZ3hfYXRvaSh1X2NoYXIgKmxpbmUsIHNpemVfdCBuKTsKIG5neF9pbnRfdCBuZ3hfaGV4dG9pKHVfY2hhciAqbGluZSwgc2l6ZV90IG4pOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3RpbWVzLmMgYi9zcmMvY29yZS9uZ3hfdGltZXMuYwppbmRleCAyY2EzMWFjLi40MGRiYmRiIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfdGltZXMuYworKysgYi9zcmMvY29yZS9uZ3hfdGltZXMuYwpAQCAtMjEyLDEyICsyMTIsMjUgQEAKIH0KIAogCit1X2NoYXIgKm5neF9odHRwX3RpbWUodV9jaGFyICpidWYsIHRpbWVfdCB0KQorI2lmIDAKIHNpemVfdCBuZ3hfaHR0cF90aW1lKHVfY2hhciAqYnVmLCB0aW1lX3QgdCkKKyNlbmRpZgogewogICAgIG5neF90bV90ICB0bTsKIAogICAgIG5neF9nbXRpbWUodCwgJnRtKTsKIAorICAgIHJldHVybiBuZ3hfc3ByaW50ZihidWYsICIlcywgJTAyZCAlcyAlNGQgJTAyZDolMDJkOiUwMmQgR01UIiwKKyAgICAgICAgICAgICAgICAgICAgICAgd2Vla1t0bS5uZ3hfdG1fd2RheV0sCisgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9tZGF5LAorICAgICAgICAgICAgICAgICAgICAgICBtb250aHNbdG0ubmd4X3RtX21vbiAtIDFdLAorICAgICAgICAgICAgICAgICAgICAgICB0bS5uZ3hfdG1feWVhciwKKyAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX2hvdXIsCisgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9taW4sCisgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9zZWMpOworCisjaWYgMAogICAgIHJldHVybiBuZ3hfc25wcmludGYoKGNoYXIgKikgYnVmLCBzaXplb2YoIk1vbiwgMjggU2VwIDE5NzAgMDY6MDA6MDAgR01UIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcywgJTAyZCAlcyAlNGQgJTAyZDolMDJkOiUwMmQgR01UIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Vla1t0bS5uZ3hfdG1fd2RheV0sCkBAIC0yMjcsMTAgKzI0MCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bS5uZ3hfdG1faG91ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX21pbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX3NlYyk7CisjZW5kaWYKIH0KIAogCit1X2NoYXIgKm5neF9odHRwX2Nvb2tpZV90aW1lKHVfY2hhciAqYnVmLCB0aW1lX3QgdCkKKyNpZiAwCiBzaXplX3Qgbmd4X2h0dHBfY29va2llX3RpbWUodV9jaGFyICpidWYsIHRpbWVfdCB0KQorI2VuZGlmCiB7CiAgICAgbmd4X3RtX3QgIHRtOwogCkBAIC0yNDEsNiArMjU4LDIwIEBACiAgICAgICogMi1kaWdpdCB5ZWFycyBtb3JlIHRoYW4gIjM3IgogICAgICAqLwogCisgICAgcmV0dXJuIG5neF9zcHJpbnRmKGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgKHRtLm5neF90bV95ZWFyID4gMjAzNykgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMsICUwMmQtJXMtJWQgJTAyZDolMDJkOiUwMmQgR01UIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzLCAlMDJkLSVzLSUwMmQgJTAyZDolMDJkOiUwMmQgR01UIiwKKyAgICAgICAgICAgICAgICAgICAgICAgd2Vla1t0bS5uZ3hfdG1fd2RheV0sCisgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9tZGF5LAorICAgICAgICAgICAgICAgICAgICAgICBtb250aHNbdG0ubmd4X3RtX21vbiAtIDFdLAorICAgICAgICAgICAgICAgICAgICAgICAodG0ubmd4X3RtX3llYXIgPiAyMDM3KSA/IHRtLm5neF90bV95ZWFyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV95ZWFyICUgMTAwLAorICAgICAgICAgICAgICAgICAgICAgICB0bS5uZ3hfdG1faG91ciwKKyAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX21pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX3NlYyk7CisKKyNpZiAwCiAgICAgaWYgKHRtLm5neF90bV95ZWFyID4gMjAzNykgewogICAgICAgICByZXR1cm4gbmd4X3NucHJpbnRmKChjaGFyICopIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCJNb24sIDI4LVNlcC0xOTcwIDA2OjAwOjAwIEdNVCIpLApAQCAtMjY0LDYgKzI5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9taW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9zZWMpOwogICAgIH0KKyNlbmRpZgogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF90aW1lcy5oIGIvc3JjL2NvcmUvbmd4X3RpbWVzLmgKaW5kZXggZTFkMTUxNS4uNWVhYmFjNSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3RpbWVzLmgKKysrIGIvc3JjL2NvcmUvbmd4X3RpbWVzLmgKQEAgLTE0LDggKzE0LDggQEAKIAogdm9pZCBuZ3hfdGltZV9pbml0KCk7CiB2b2lkIG5neF90aW1lX3VwZGF0ZSh0aW1lX3Qgcyk7Ci1zaXplX3Qgbmd4X2h0dHBfdGltZSh1X2NoYXIgKmJ1ZiwgdGltZV90IHQpOwotc2l6ZV90IG5neF9odHRwX2Nvb2tpZV90aW1lKHVfY2hhciAqYnVmLCB0aW1lX3QgdCk7Cit1X2NoYXIgKm5neF9odHRwX3RpbWUodV9jaGFyICpidWYsIHRpbWVfdCB0KTsKK3VfY2hhciAqbmd4X2h0dHBfY29va2llX3RpbWUodV9jaGFyICpidWYsIHRpbWVfdCB0KTsKIHZvaWQgbmd4X2dtdGltZSh0aW1lX3QgdCwgbmd4X3RtX3QgKnRwKTsKIAogI2lmIChOR1hfVEhSRUFEUykKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9lcG9sbF9tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9lcG9sbF9tb2R1bGUuYwppbmRleCA0MDY3ZmQ4Li40NTc5MWU5IDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZXBvbGxfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2Vwb2xsX21vZHVsZS5jCkBAIC0xNzMsNyArMTczLDcgQEAKICNlbHNlCiAgICAgbmd4X2V2ZW50X2ZsYWdzID0gTkdYX1VTRV9MRVZFTF9FVkVOVAogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgfE5HWF9IQVZFX0dSRUVEWV9FVkVOVAorICAgICAgICAgICAgICAgICAgICAgIHxOR1hfVVNFX0dSRUVEWV9FVkVOVAogICAgICAgICAgICAgICAgICAgICAgIHxOR1hfVVNFX0VQT0xMX0VWRU5UOwogCiAgICAgcmV0dXJuIE5HWF9PSzsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9rcXVldWVfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfa3F1ZXVlX21vZHVsZS5jCmluZGV4IGRiNWI3NTYuLmU2YmViYjUgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9rcXVldWVfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2txdWV1ZV9tb2R1bGUuYwpAQCAtMTk0LDEwICsxOTQsMTAgQEAKICNlbHNlCiAgICAgICAgICAgICAgICAgICAgICB8TkdYX1VTRV9MRVZFTF9FVkVOVAogI2VuZGlmCi0jaWYgKEhBVkVfTE9XQVRfRVZFTlQpCi0gICAgICAgICAgICAgICAgICAgICB8TkdYX0hBVkVfTE9XQVRfRVZFTlQKKyNpZiAoTkdYX0hBVkVfTE9XQVRfRVZFTlQpCisgICAgICAgICAgICAgICAgICAgICB8TkdYX1VTRV9MT1dBVF9FVkVOVAogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICB8TkdYX0hBVkVfS1FVRVVFX0VWRU5UOworICAgICAgICAgICAgICAgICAgICAgfE5HWF9VU0VfS1FVRVVFX0VWRU5UOwogCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KQEAgLTI0NSw2ICsyNDUsOCBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAorI2lmIDEKKwogICAgIGlmIChuY2hhbmdlcyA+IDAKICAgICAgICAgJiYgZXYtPmluZGV4IDwgKHVfaW50KSBuY2hhbmdlcwogICAgICAgICAmJiAoKHVpbnRwdHJfdCkgY2hhbmdlX2xpc3RbZXYtPmluZGV4XS51ZGF0YSAmICh1aW50cHRyX3QpIH4xKQpAQCAtMjYyLDcgKzI2NCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZXZlbnRfaWRlbnQoZXYtPmRhdGEpLCBldmVudCk7CiAKICAgICAgICAgICAgIGlmIChldi0+aW5kZXggPCAodV9pbnQpIC0tbmNoYW5nZXMpIHsKLSAgICAgICAgICAgICAgICBlID0gKG5neF9ldmVudF90ICopIGNoYW5nZV9saXN0W25jaGFuZ2VzXS51ZGF0YTsKKyAgICAgICAgICAgICAgICBlID0gKG5neF9ldmVudF90ICopCisgICAgICAgICAgICAgICAgICAgICgodWludHB0cl90KSBjaGFuZ2VfbGlzdFtuY2hhbmdlc10udWRhdGEgJiAodWludHB0cl90KSB+MSk7CiAgICAgICAgICAgICAgICAgY2hhbmdlX2xpc3RbZXYtPmluZGV4XSA9IGNoYW5nZV9saXN0W25jaGFuZ2VzXTsKICAgICAgICAgICAgICAgICBlLT5pbmRleCA9IGV2LT5pbmRleDsKICAgICAgICAgICAgIH0KQEAgLTI4Miw2ICsyODUsOCBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAorI2VuZGlmCisKICAgICByYyA9IG5neF9rcXVldWVfc2V0X2V2ZW50KGV2LCBldmVudCwgRVZfQUREfEVWX0VOQUJMRXxmbGFncyk7CiAKICAgICBuZ3hfbXV0ZXhfdW5sb2NrKGxpc3RfbXV0ZXgpOwpAQCAtMzAyLDYgKzMwNyw4IEBACiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCisjaWYgMQorCiAgICAgaWYgKG5jaGFuZ2VzID4gMAogICAgICAgICAmJiBldi0+aW5kZXggPCAodV9pbnQpIG5jaGFuZ2VzCiAgICAgICAgICYmICgodWludHB0cl90KSBjaGFuZ2VfbGlzdFtldi0+aW5kZXhdLnVkYXRhICYgKHVpbnRwdHJfdCkgfjEpCkBAIC0zMTQsNyArMzIxLDggQEAKICAgICAgICAgLyogaWYgdGhlIGV2ZW50IGlzIHN0aWxsIG5vdCBwYXNzZWQgdG8gYSBrZXJuZWwgd2Ugd2lsbCBub3QgcGFzcyBpdCAqLwogCiAgICAgICAgIGlmIChldi0+aW5kZXggPCAodV9pbnQpIC0tbmNoYW5nZXMpIHsKLSAgICAgICAgICAgIGUgPSAobmd4X2V2ZW50X3QgKikgY2hhbmdlX2xpc3RbbmNoYW5nZXNdLnVkYXRhOworICAgICAgICAgICAgZSA9IChuZ3hfZXZlbnRfdCAqKQorICAgICAgICAgICAgICAgICAgICAoKHVpbnRwdHJfdCkgY2hhbmdlX2xpc3RbbmNoYW5nZXNdLnVkYXRhICYgKHVpbnRwdHJfdCkgfjEpOwogICAgICAgICAgICAgY2hhbmdlX2xpc3RbZXYtPmluZGV4XSA9IGNoYW5nZV9saXN0W25jaGFuZ2VzXTsKICAgICAgICAgICAgIGUtPmluZGV4ID0gZXYtPmluZGV4OwogICAgICAgICB9CkBAIC0zMjQsNiArMzMyLDggQEAKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CiAKKyNlbmRpZgorCiAgICAgLyoKICAgICAgKiB3aGVuIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgY2xvc2VkIHRoZSBrcXVldWUgYXV0b21hdGljYWxseSBkZWxldGVzCiAgICAgICogaXRzIGZpbHRlcnMgc28gd2UgZG8gbm90IG5lZWQgdG8gZGVsZXRlIGV4cGxpY2l0eSB0aGUgZXZlbnQKQEAgLTM5Myw3ICs0MDMsNyBAQAogICAgICAgICBrZXYtPmRhdGEgPSAwOwogCiAgICAgfSBlbHNlIHsKLSNpZiAoSEFWRV9MT1dBVF9FVkVOVCkKKyNpZiAoTkdYX0hBVkVfTE9XQVRfRVZFTlQpCiAgICAgICAgIGlmIChmbGFncyAmIE5HWF9MT1dBVF9FVkVOVCkgewogICAgICAgICAgICAga2V2LT5mZmxhZ3MgPSBOT1RFX0xPV0FUOwogICAgICAgICAgICAga2V2LT5kYXRhID0gZXYtPmF2YWlsYWJsZTsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9ydHNpZ19tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9ydHNpZ19tb2R1bGUuYwppbmRleCA3MmM1YjdjLi40ZjJmNDgwIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcnRzaWdfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3J0c2lnX21vZHVsZS5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIAogICAgIG5neF9ldmVudF9hY3Rpb25zID0gbmd4X3J0c2lnX21vZHVsZV9jdHguYWN0aW9uczsKIAotICAgIG5neF9ldmVudF9mbGFncyA9IE5HWF9VU0VfUlRTSUdfRVZFTlR8TkdYX0hBVkVfR1JFRURZX0VWRU5UOworICAgIG5neF9ldmVudF9mbGFncyA9IE5HWF9VU0VfUlRTSUdfRVZFTlR8TkdYX1VTRV9HUkVFRFlfRVZFTlQ7CiAKICAgICByZXR1cm4gTkdYX09LOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudC5jIGIvc3JjL2V2ZW50L25neF9ldmVudC5jCmluZGV4IDQ3MThkY2QuLmYwMDZjNmIgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKQEAgLTQ2NSw5ICs0NjUsOSBAQAogewogICAgIGludCAgc25kbG93YXQ7CiAKLSNpZiAoSEFWRV9MT1dBVF9FVkVOVCkKKyNpZiAoTkdYX0hBVkVfTE9XQVRfRVZFTlQpCiAKLSAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX0hBVkVfS1FVRVVFX0VWRU5UKSB7CisgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfS1FVRVVFX0VWRU5UKSB7CiAgICAgICAgIGMtPndyaXRlLT5hdmFpbGFibGUgPSBsb3dhdDsKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmggYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmgKaW5kZXggYzE3M2FkYy4uZjM0MWExNCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudC5oCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuaApAQCAtMjQwLDE5ICsyNDAsMTkgQEAKICAqIFRoZSBldmVudCBmaWx0ZXIgaGFzIGtxdWV1ZSBmZWF0dXJlcyAtIHRoZSBlb2YgZmxhZywgZXJybm8sCiAgKiBhdmFpbGFibGUgZGF0YSwgZXRjLgogICovCi0jZGVmaW5lIE5HWF9IQVZFX0tRVUVVRV9FVkVOVCAgICAweDAwMDAwMDA4CisjZGVmaW5lIE5HWF9VU0VfS1FVRVVFX0VWRU5UICAgIDB4MDAwMDAwMDgKIAogLyoKICAqIFRoZSBldmVudCBmaWx0ZXIgc3VwcG9ydHMgbG93IHdhdGVyIG1hcmsgLSBrcXVldWUncyBOT1RFX0xPV0FULgogICoga3F1ZXVlIGluIEZyZWVCU0QgNC4xLTQuMiBoYXMgbm8gTk9URV9MT1dBVCBzbyB3ZSBuZWVkIGEgc2VwYXJhdGUgZmxhZy4KICAqLwotI2RlZmluZSBOR1hfSEFWRV9MT1dBVF9FVkVOVCAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBOR1hfVVNFX0xPV0FUX0VWRU5UICAgICAweDAwMDAwMDEwCiAKIC8qCiAgKiBUaGUgZXZlbnQgZmlsdGVyIHJlcXVpcmVzIHRvIGRvIGkvbyBvcGVyYXRpb24gdW50aWwgRUFHQUlOIC0KICAqIGVwb2xsLCBydCBzaWduYWxzLgogICovCi0jZGVmaW5lIE5HWF9IQVZFX0dSRUVEWV9FVkVOVCAgICAweDAwMDAwMDIwCisjZGVmaW5lIE5HWF9VU0VfR1JFRURZX0VWRU5UICAgIDB4MDAwMDAwMjAKIAogLyoKICAqIFRoZSBldmVudCBmaWx0ZXIgaXMgZXBvbGwsCkBAIC01NzEsNyArNTcxLDcgQEAKICAgICBuZ3hfY29ubmVjdGlvbl90ICAqYzsKIAogICAgIGlmIChsb3dhdCkgewotICAgICAgICBjID0gd2V2LT5kYXRhOworICAgICAgICBjID0gKG5neF9jb25uZWN0aW9uX3QgKikgd2V2LT5kYXRhOwogCiAgICAgICAgIGlmIChuZ3hfc2VuZF9sb3dhdChjLCBsb3dhdCkgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMKaW5kZXggNWE1ZTBlMS4uOWFlNWNjZCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jCkBAIC0zOSw3ICszOSw3IEBACiAgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfUlRTSUdfRVZFTlQpIHsKICAgICAgICAgZXYtPmF2YWlsYWJsZSA9IDE7CiAKLSAgICB9IGVsc2UgaWYgKCEobmd4X2V2ZW50X2ZsYWdzICYgTkdYX0hBVkVfS1FVRVVFX0VWRU5UKSkgeworICAgIH0gZWxzZSBpZiAoIShuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0tRVUVVRV9FVkVOVCkpIHsKICAgICAgICAgZXYtPmF2YWlsYWJsZSA9IGVjZi0+bXVsdGlfYWNjZXB0OwogICAgIH0KIApAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzLT5saXN0ZW5pbmctPmFkZHJfdGV4dC5kYXRhKTsKIAogICAgICAgICAgICAgaWYgKGVyciA9PSBOR1hfRUNPTk5BQk9SVEVEKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9IQVZFX0tRVUVVRV9FVkVOVCkgeworICAgICAgICAgICAgICAgIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0tRVUVVRV9FVkVOVCkgewogICAgICAgICAgICAgICAgICAgICBldi0+YXZhaWxhYmxlLS07CiAgICAgICAgICAgICAgICAgfQogCkBAIC0zNDIsNyArMzQyLDcgQEAKIAogICAgICAgICBscy0+bGlzdGVuaW5nLT5oYW5kbGVyKGMpOwogCi0gICAgICAgIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfSEFWRV9LUVVFVUVfRVZFTlQpIHsKKyAgICAgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfS1FVRVVFX0VWRU5UKSB7CiAgICAgICAgICAgICBldi0+YXZhaWxhYmxlLS07CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9jb25uZWN0LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYwppbmRleCBjMWU2YzE5Li5iNDFlY2E3IDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYwpAQCAtMjk2LDYgKzI5Niw5IEBACiAKICAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9BSU9fRVZFTlQpIHsKIAorICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBwYy0+bG9nLCBuZ3hfc29ja2V0X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAiY29ubmVjdCgpOiAlZCIsIHJjKTsKKwogICAgICAgICAvKiBhaW8sIGlvY3AgKi8KIAogICAgICAgICBpZiAobmd4X2Jsb2NraW5nKHMpID09IC0xKSB7CkBAIC0zMTEsOCArMzE0LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qCi0gICAgICAgICAqIGFpbyBhbGxvd3MgdG8gcG9zdCBvcGVyYXRpb24gb24gbm9uLWNvbm5lY3RlZCBzb2NrZXQKLSAgICAgICAgICogYXQgbGVhc3QgaW4gRnJlZUJTRC4KKyAgICAgICAgICogRnJlZUJTRCBhaW8gYWxsb3dzIHRvIHBvc3Qgb3BlcmF0aW9uIG9uIG5vbi1jb25uZWN0ZWQgc29ja2V0LgogICAgICAgICAgKiBOVCBkb2VzIG5vdCBzdXBwb3J0IGl0LgogICAgICAgICAgKiAKICAgICAgICAgICogVE9ETzogY2hlY2sgaW4gV2luMzIsIGV0Yy4gQXMgd29ya2Fyb3VuZCB3ZSBjYW4gdXNlIE5HWF9PTkVTSE9UX0VWRU5UCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCmluZGV4IDE1MWNjNDIuLjdhNzAzOGQgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCkBAIC04Niw2ICs4Niw3IEBACiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLCAiU1NMX2dldF9lcnJvcjogJWQiLCBzc2xlcnIpOwogCiAgICAgaWYgKHNzbGVyciA9PSBTU0xfRVJST1JfV0FOVF9SRUFEKSB7CisgICAgICAgIGMtPnJlYWQtPnJlYWR5ID0gMDsKICAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2hhcnNldF9maWx0ZXIuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2hhcnNldF9maWx0ZXIuYwppbmRleCBkMjJhODZiLi5mMmU4NWU1IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlci5jCkBAIC0xMiw3ICsxMiw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgY2hhciAgICAgICAqKnRhYmxlczsKICAgICBuZ3hfc3RyX3QgICAgbmFtZTsKLSAgICB1bnNpZ25lZCAgICAgc2VydmVyOworICAgIG5neF91aW50X3QgICBzZXJ2ZXI7ICAvKiB1bnNpZ25lZCAgICAgc2VydmVyOjE7ICovCiB9IG5neF9odHRwX2NoYXJzZXRfdDsKIAogCkBAIC00NSw3ICs0NSw3IEBACiB9IG5neF9odHRwX2NoYXJzZXRfY3R4X3Q7CiAKIAotc3RhdGljIHZvaWQgbmd4X2NoYXJzZXRfcmVjb2RlKG5neF9idWZfdCAqYiwgY2hhciAqdGFibGUpOworc3RhdGljIG5neF91aW50X3Qgbmd4X2NoYXJzZXRfcmVjb2RlKG5neF9idWZfdCAqYiwgY2hhciAqdGFibGUpOwogCiBzdGF0aWMgY2hhciAqbmd4X2NoYXJzZXRfbWFwX2Jsb2NrKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNvbmYpOwpAQCAtMjMyLDE0ICsyMzIsMzEgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBuZ3hfY2hhcnNldF9yZWNvZGUobmd4X2J1Zl90ICpiLCBjaGFyICp0YWJsZSkKK3N0YXRpYyBuZ3hfdWludF90IG5neF9jaGFyc2V0X3JlY29kZShuZ3hfYnVmX3QgKmIsIGNoYXIgKnRhYmxlKQogewotICAgIHVfY2hhciAgKnAsIGM7CisgICAgdV9jaGFyICAgICAgKnA7CisgICAgbmd4X3VpbnRfdCAgIGNoYW5nZTsKKworICAgIGNoYW5nZSA9IDA7CiAKICAgICBmb3IgKHAgPSBiLT5wb3M7IHAgPCBiLT5sYXN0OyBwKyspIHsKLSAgICAgICAgYyA9ICpwOwotICAgICAgICAqcCA9IHRhYmxlW2NdOworICAgICAgICBpZiAoKnAgIT0gdGFibGVbKnBdKSB7CisgICAgICAgICAgICBjaGFuZ2UgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CisKKyAgICBpZiAoY2hhbmdlKSB7CisKKyAgICAgICAgd2hpbGUgKHAgPCBiLT5sYXN0KSB7CisgICAgICAgICAgICAqcCA9IHRhYmxlWypwXTsKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgfQorCisgICAgICAgIGItPmluX2ZpbGUgPSAwOworICAgIH0KKworICAgIHJldHVybiBjaGFuZ2U7CiB9CiAKIApAQCAtNDE5LDcgKzQzNiw5IEBACiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCisgICAgYy0+dGFibGVzID0gTlVMTDsKICAgICBjLT5uYW1lID0gKm5hbWU7CisgICAgYy0+c2VydmVyID0gMDsKIAogICAgIHJldHVybiBpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaHVua2VkX2ZpbHRlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaHVua2VkX2ZpbHRlci5jCmluZGV4IDIxMTI0NjEuLjc4ODEyNDggMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2h1bmtlZF9maWx0ZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NodW5rZWRfZmlsdGVyLmMKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2hhaW5fdCAqaW4pCiB7CiAgICAgdV9jaGFyICAgICAgICpjaHVuazsKLSAgICBzaXplX3QgICAgICAgIHNpemUsIGxlbjsKKyAgICBzaXplX3QgICAgICAgIHNpemU7CiAgICAgbmd4X2J1Zl90ICAgICpiOwogICAgIG5neF9jaGFpbl90ICAgb3V0LCB0YWlsLCAqY2wsICp0bCwgKipsbDsKIApAQCAtOTgsNiArOTgsMjAgQEAKICAgICB9CiAKICAgICBpZiAoc2l6ZSkgeworICAgICAgICBpZiAoIShiID0gbmd4X2NhbGxvY19idWYoci0+cG9vbCkpKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEoY2h1bmsgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIDExKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBiLT50ZW1wb3JhcnkgPSAxOworICAgICAgICBiLT5wb3MgPSBjaHVuazsKKyAgICAgICAgYi0+bGFzdCA9IG5neF9zcHJpbnRmKGNodW5rLCAiJXV4UyIgQ1JMRiwgc2l6ZSk7CisKKyAgICAgICAgb3V0LmJ1ZiA9IGI7CisjaWYgMAogICAgICAgICBuZ3hfdGVzdF9udWxsKGNodW5rLCBuZ3hfcGFsbG9jKHItPnBvb2wsIDExKSwgTkdYX0VSUk9SKTsKICAgICAgICAgbGVuID0gbmd4X3NucHJpbnRmKChjaGFyICopIGNodW5rLCAxMSwgU0laRV9UX1hfRk1UIENSTEYsIHNpemUpOwogCkBAIC0xMDcsNiArMTIxLDcgQEAKICAgICAgICAgYi0+bGFzdCA9IGNodW5rICsgbGVuOwogCiAgICAgICAgIG91dC5idWYgPSBiOworI2VuZGlmCiAgICAgfQogCiAgICAgaWYgKGNsLT5idWYtPmxhc3RfYnVmKSB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyLmMKaW5kZXggNDA4OWZmYi4uYmIzYTFmMCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlci5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ3ppcF9maWx0ZXIuYwpAQCAtODM3LDI2ICs4MzcsMzAgQEAKICAgICAgICAgcmV0dXJuIGJ1ZiArIDE7CiAgICAgfQogCi0jaWYgMAotICAgIHJldHVybiBidWYgKyBuZ3hfc25wcmludGYoKGNoYXIgKikgYnVmLCBOR1hfSU5UMzJfTEVOICsgNCwgIiUuMmYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KSBjdHgtPnppbiAvIGN0eC0+em91dCk7Ci0jZW5kaWYKLQogICAgIC8qIHdlIHByZWZlciBkbyBub3QgdXNlIHRoZSBGUFUgKi8KIAogICAgIHppbnQgPSAobmd4X3VpbnRfdCkgKGN0eC0+emluIC8gY3R4LT56b3V0KTsKICAgICB6ZnJhYyA9IChuZ3hfdWludF90KSAoKGN0eC0+emluICogMTAwIC8gY3R4LT56b3V0KSAlIDEwMCk7CiAKLSAgICBpZiAoKGN0eC0+emluICogMTAwMCAvIGN0eC0+em91dCkgJTEwID4gNCkgewotICAgICAgICBpZiAoKyt6ZnJhYyA+IDk5KSB7CisgICAgaWYgKChjdHgtPnppbiAqIDEwMDAgLyBjdHgtPnpvdXQpICUgMTAgPiA0KSB7CisKKyAgICAgICAgLyogdGhlIHJvdW5kaW5nLCBlLmcuLCAyLjEyNSB0byAyLjEzICovCisKKyAgICAgICAgemZyYWMrKzsKKworICAgICAgICBpZiAoemZyYWMgPiA5OSkgewogICAgICAgICAgICAgemludCsrOwogICAgICAgICAgICAgemZyYWMgPSAwOwogICAgICAgICB9CiAgICAgfQogCisgICAgcmV0dXJuIG5neF9zcHJpbnRmKGJ1ZiwgIiV1aS4lMDJ1aSIsIHppbnQsIHpmcmFjKTsKKworI2lmIDAKICAgICByZXR1cm4gYnVmICsgbmd4X3NucHJpbnRmKChjaGFyICopIGJ1ZiwgTkdYX0lOVDMyX0xFTiArIDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIgTkdYX1VJTlRfVF9GTVQgIi4lMDIiIE5HWF9VSU5UX1RfRk1ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemludCwgemZyYWMpOworI2VuZGlmCiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlci5jCmluZGV4IGY3ZmU1MmMuLmZhZjgxOTIgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaGVhZGVyc19maWx0ZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2hlYWRlcnNfZmlsdGVyLmMKQEAgLTEzNCwxMCArMTM0LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICAgICAgY2MtPnZhbHVlLmxlbiA9IG5neF9zcHJpbnRmKGNjLT52YWx1ZS5kYXRhLCAibWF4LWFnZT0lVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mLT5leHBpcmVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBjYy0+dmFsdWUuZGF0YTsKKworI2lmIDAKICAgICAgICAgICAgICAgICAgICAgY2MtPnZhbHVlLmxlbiA9IG5neF9zbnByaW50ZigoY2hhciAqKSBjYy0+dmFsdWUuZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCJtYXgtYWdlPSIpICsgVElNRV9UX0xFTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heC1hZ2U9IiBUSU1FX1RfRk1ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mLT5leHBpcmVzKTsKKyNlbmRpZgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yYW5nZV9maWx0ZXIuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmFuZ2VfZmlsdGVyLmMKaW5kZXggYTA4ZTI1Zi4uMDgyZmQzYyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yYW5nZV9maWx0ZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlci5jCkBAIC0yNjQsOSArMjY0LDE0IEBACiAgICAgICAgIH0KIAogICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3JhbmdlLT52YWx1ZS5sZW4gPQorICAgICAgICAgICAgICAgIG5neF9zcHJpbnRmKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfcmFuZ2UtPnZhbHVlLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGVzICovJU8iLCByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uKQorICAgICAgICAgICAgICAgIC0gci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZS0+dmFsdWUuZGF0YTsKKyNpZiAwCiAgICAgICAgICAgICAgICAgbmd4X3NucHJpbnRmKChjaGFyICopIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfcmFuZ2UtPnZhbHVlLmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggKyAyMCArIDEsICJieXRlcyAqLyIgT0ZGX1RfRk1ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uKTsKKyNlbmRpZgogCiAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX24gPSAtMTsKICAgICAgICAgaWYgKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoKSB7CkBAIC0yOTcsMTIgKzMwMiwyMCBAQAogICAgICAgICAgICAgLyogIkNvbnRlbnQtUmFuZ2U6IGJ5dGVzIFNTU1MtRUVFRS9UVFRUIiBoZWFkZXIgKi8KIAogICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZS0+dmFsdWUubGVuID0KKyAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc3ByaW50ZihyLT5oZWFkZXJzX291dC5jb250ZW50X3JhbmdlLT52YWx1ZS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJieXRlcyAlTy0lTy8lTyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UtPnN0YXJ0LCByYW5nZS0+ZW5kIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uKQorICAgICAgICAgICAgICAgICAgICAgICAgIC0gci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZS0+dmFsdWUuZGF0YTsKKworI2lmIDAKICAgICAgICAgICAgICAgICAgICBuZ3hfc25wcmludGYoKGNoYXIgKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZS0+dmFsdWUuZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiArIDIwICsgMSArIDIwICsgMSArIDIwICsgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGVzICIgT0ZGX1RfRk1UICItIiBPRkZfVF9GTVQgIi8iIE9GRl9UX0ZNVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UtPnN0YXJ0LCByYW5nZS0+ZW5kIC0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbik7CisjZW5kaWYKIAogICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbiA9IHJhbmdlLT5lbmQgLSByYW5nZS0+c3RhcnQ7CiAKQEAgLTM0Myw2ICszNTYsMTUgQEAKIAogICAgICAgICAgICAgaWYgKHItPmhlYWRlcnNfb3V0LmNoYXJzZXQubGVuKSB7CiAgICAgICAgICAgICAgICAgY3R4LT5ib3VuZGFyeV9oZWFkZXIubGVuID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3NwcmludGYoY3R4LT5ib3VuZGFyeV9oZWFkZXIuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JMRiAiLS0lMDEwdWkiIENSTEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZTogJXM7IGNoYXJzZXQ9JXMiIENSTEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQtUmFuZ2U6IGJ5dGVzICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUtPnZhbHVlLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNoYXJzZXQuZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLSBjdHgtPmJvdW5kYXJ5X2hlYWRlci5kYXRhOworI2lmIDAKICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc25wcmludGYoKGNoYXIgKikgY3R4LT5ib3VuZGFyeV9oZWFkZXIuZGF0YSwgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUkxGICItLSUwMTAiIE5HWF9VSU5UX1RfRk1UIENSTEYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZTogJXM7IGNoYXJzZXQ9JXMiIENSTEYKQEAgLTM1MCwxNyArMzcyLDI5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUtPnZhbHVlLmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNoYXJzZXQuZGF0YSk7CisjZW5kaWYKIAogICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNoYXJzZXQubGVuID0gMDsKIAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBjdHgtPmJvdW5kYXJ5X2hlYWRlci5sZW4gPQorICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc3ByaW50ZihjdHgtPmJvdW5kYXJ5X2hlYWRlci5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUkxGICItLSUwMTB1aSIgQ1JMRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlOiAlcyIgQ1JMRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1SYW5nZTogYnl0ZXMgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS0+dmFsdWUuZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLSBjdHgtPmJvdW5kYXJ5X2hlYWRlci5kYXRhOworCisjaWYgMAogICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9zbnByaW50ZigoY2hhciAqKSBjdHgtPmJvdW5kYXJ5X2hlYWRlci5kYXRhLCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSTEYgIi0tJTAxMCIgTkdYX1VJTlRfVF9GTVQgQ1JMRgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlOiAlcyIgQ1JMRgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1SYW5nZTogYnl0ZXMgIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS0+dmFsdWUuZGF0YSk7CisKKyNlbmRpZgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBuZ3hfdGVzdF9udWxsKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS0+dmFsdWUuZGF0YSwKQEAgLTM3MCwxMiArNDA0LDE4IEBACiAgICAgICAgICAgICAvKiAiQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYnl0ZXJhbmdlczsgYm91bmRhcnk9MDEyMzQ1Njc4OSIgKi8KIAogICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT52YWx1ZS5sZW4gPQorICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc3ByaW50ZihyLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUtPnZhbHVlLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBhcnQvYnl0ZXJhbmdlczsgYm91bmRhcnk9JTAxMHVpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkpCisgICAgICAgICAgICAgICAgICAgICAgIC0gci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT52YWx1ZS5kYXRhOworI2lmIDAKICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc25wcmludGYoKGNoYXIgKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT52YWx1ZS5kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMSArIDEwICsgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGFydC9ieXRlcmFuZ2VzOyBib3VuZGFyeT0lMDEwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfVUlOVF9UX0ZNVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkpOworI2VuZGlmCiAKICAgICAgICAgICAgIC8qIHRoZSBzaXplIG9mIHRoZSBsYXN0IGJvdW5kYXJ5IENSTEYgIi0tMDEyMzQ1Njc4OS0tIiBDUkxGICovCiAgICAgICAgICAgICBsZW4gPSA0ICsgMTAgKyA0OwpAQCAtMzg5LDExICs0MjksMTggQEAKICAgICAgICAgICAgICAgICAvKiB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2U6ICJTU1NTLUVFRUUvVFRUVCIgQ1JMRiBDUkxGICovCiAKICAgICAgICAgICAgICAgICByYW5nZVtpXS5jb250ZW50X3JhbmdlLmxlbiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc3ByaW50ZihyYW5nZVtpXS5jb250ZW50X3JhbmdlLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJU8tJU8vJU8iIENSTEYgQ1JMRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlW2ldLnN0YXJ0LCByYW5nZVtpXS5lbmQgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcmFuZ2VbaV0uY29udGVudF9yYW5nZS5kYXRhOworI2lmIDAKICAgICAgICAgICAgICAgICAgIG5neF9zbnByaW50ZigoY2hhciAqKSByYW5nZVtpXS5jb250ZW50X3JhbmdlLmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAgKyAxICsgMjAgKyAxICsgMjAgKyA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRl9UX0ZNVCAiLSIgT0ZGX1RfRk1UICIvIiBPRkZfVF9GTVQgQ1JMRiBDUkxGLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlW2ldLnN0YXJ0LCByYW5nZVtpXS5lbmQgLSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX24pOworI2VuZGlmCiAKICAgICAgICAgICAgICAgICBsZW4gKz0gY3R4LT5ib3VuZGFyeV9oZWFkZXIubGVuICsgcmFuZ2VbaV0uY29udGVudF9yYW5nZS5sZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKHNpemVfdCkgKHJhbmdlW2ldLmVuZCAtIHJhbmdlW2ldLnN0YXJ0KTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdHVzX2hhbmRsZXIuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdHVzX2hhbmRsZXIuYwppbmRleCA2MjA2YWMzLi4zNTdhZmZmIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0YXR1c19oYW5kbGVyLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0dXNfaGFuZGxlci5jCkBAIC0xNTksNiArMTU5LDkgQEAKICAgICAgICAgICAgICAgICAgICsgMSArIChyLT5zZXJ2ZXJfbmFtZSA/IGNtY2YtPm1heF9zZXJ2ZXJfbmFtZV9sZW4gOiAxKQogICAgICAgICAgICAgICAgICAgKyAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIlxyXG4iICovCiAKKyAgICAgICAgICAgIC8qIEJVRzogY21jZi0+bWF4X3NlcnZlcl9uYW1lX2xlbiBhbmQgIiouZG9tYWluLnRsZCIgKi8KKworCiAgICAgICAgICAgICBpZiAoci0+cmVxdWVzdF9saW5lLmxlbikgewogICAgICAgICAgICAgICAgIGxlbiArPSAxICsgMSArIHItPnJlcXVlc3RfbGluZS5sZW4gKyAxOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXIuYwppbmRleCA1ZjhlNDUyLi5iYWZkZWE4IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXIuYwpAQCAtMzY3LDcgKzM2Nyw3IEBACiAKICAgICB9IGVsc2UgaWYgKGNvbmYtPmV4cGlyZXMpIHsKICAgICAgICAgcCA9IG5neF9jcHltZW0ocCwgZXhwaXJlcywgc2l6ZW9mKCI7IGV4cGlyZXM9IikgLSAxKTsKLSAgICAgICAgcCArPSBuZ3hfaHR0cF9jb29raWVfdGltZShwLCBuZ3hfdGltZSgpICsgY29uZi0+ZXhwaXJlcyk7CisgICAgICAgIHAgPSBuZ3hfaHR0cF9jb29raWVfdGltZShwLCBuZ3hfdGltZSgpICsgY29uZi0+ZXhwaXJlcyk7CiAgICAgfQogCiAgICAgaWYgKGNvbmYtPmRvbWFpbi5sZW4gPiAxKSB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuYyBiL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5jCmluZGV4IGYwNzk0ZjMuLjVkNjExNjcgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5jCkBAIC0yODksNiArMjg5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9oZWFkZXJzX2luX3QsIGNvbnRlbnRfdHlwZSkgfSwKICAgICB7IG5neF9zdHJpbmcoIkNvbnRlbnQtTGVuZ3RoIiksCiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldG9mKG5neF9odHRwX3Byb3h5X2hlYWRlcnNfaW5fdCwgY29udGVudF9sZW5ndGgpIH0sCisgICAgeyBuZ3hfc3RyaW5nKCJDb250ZW50LUVuY29kaW5nIiksCisgICAgICAgICAgICAgICAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9oZWFkZXJzX2luX3QsIGNvbnRlbnRfZW5jb2RpbmcpIH0sCiAgICAgeyBuZ3hfc3RyaW5nKCJMYXN0LU1vZGlmaWVkIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9oZWFkZXJzX2luX3QsIGxhc3RfbW9kaWZpZWQpIH0sCiAgICAgeyBuZ3hfc3RyaW5nKCJMb2NhdGlvbiIpLApAQCAtNDAwLDcgKzQwMiw3IEBACiAKICNpZiAoSEFWRV9LUVVFVUUpCiAKLSAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX0hBVkVfS1FVRVVFX0VWRU5UKSB7CisgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfS1FVRVVFX0VWRU5UKSB7CiAKICAgICAgICAgaWYgKCFldi0+cGVuZGluZ19lb2YpIHsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEzMTAsMTAgKzEzMTIsMTAgQEAKIAogc3RhdGljIGNoYXIgKm5neF9odHRwX3Byb3h5X2xvd2F0X2NoZWNrKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKQogewotI2lmIF9fRnJlZUJTRF9fCi0KICAgICBzc2l6ZV90ICpucCA9IGRhdGE7CiAKKyNpZiAoTkdYX0ZSRUVCU0QpCisKICAgICBpZiAoKm5wID49IG5neF9mcmVlYnNkX25ldF9pbmV0X3RjcF9zZW5kc3BhY2UpIHsKICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwicHJveHlfc2VuZF9sb3dhdFwiIG11c3QgYmUgbGVzcyB0aGFuICVkICIKQEAgLTEzMjMsMTUgKzEzMjUsMTIgQEAKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAorI2VsaWYgIShIQVZFX1NPX1NORExPV0FUKQogCi0jZWxzZQotCi0jaWYgMAogICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX1dBUk4sIGNmLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAiXCJwcm94eV9zZW5kX2xvd2F0XCIgaXMgbm90IHN1cHBvcnRlZCwgaWdub3JlZCIpOwogCiAgICAgKm5wID0gMDsKLSNlbmRpZgogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmggYi9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuaAppbmRleCA3MjgyNTljLi4zZTcyMWJhIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuaAorKysgYi9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuaApAQCAtMTMwLDYgKzEzMCw3IEBACiAgICAgbmd4X3RhYmxlX2VsdF90ICAgICAgICAgICAgICAgICAqY29ubmVjdGlvbjsKICAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICAgICpjb250ZW50X3R5cGU7CiAgICAgbmd4X3RhYmxlX2VsdF90ICAgICAgICAgICAgICAgICAqY29udGVudF9sZW5ndGg7CisgICAgbmd4X3RhYmxlX2VsdF90ICAgICAgICAgICAgICAgICAqY29udGVudF9lbmNvZGluZzsKICAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICAgICpsYXN0X21vZGlmaWVkOwogICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgICAgICAgKmxvY2F0aW9uOwogICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgICAgICAgKmFjY2VwdF9yYW5nZXM7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hlYWRlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oZWFkZXIuYwppbmRleCAwNzcyMmZjLi5jZDVkZWViIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hlYWRlci5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGVhZGVyLmMKQEAgLTExMyw2ICsxMTMsMTEgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKCZoW2ldID09IGhlYWRlcnNfaW4tPmNvbnRlbnRfZW5jb2RpbmcpIHsKKyAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfZW5jb2RpbmcgPSBobzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKICAgICAgICAgaWYgKCZoW2ldID09IGhlYWRlcnNfaW4tPmxhc3RfbW9kaWZpZWQpIHsKICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0Lmxhc3RfbW9kaWZpZWQgPSBobzsKICAgICAgICAgICAgIC8qIFRPRE86IHVwZGF0ZSByLT5oZWFkZXJzX291dC5sYXN0X21vZGlmaWVkX3RpbWUgKi8KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfdXBzdHJlYW0uYyBiL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfdXBzdHJlYW0uYwppbmRleCBiZTVkNjlhLi44ODQ3OWRhIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV91cHN0cmVhbS5jCkBAIC02OTIsMTIgKzY5MiwxNCBAQAogCiAgICAgLyogcmMgPT0gTkdYX09LICovCiAKLSNpZiAxIC8qIHRlc3Qgb25seSwgc2VlIGJlbG93IGFib3V0ICJwb3N0IGFpbyBvcGVyYXRpb24iICovCisjaWYgMCAvKiB0ZXN0IG9ubHksIHNlZSBiZWxvdyBhYm91dCAicG9zdCBhaW8gb3BlcmF0aW9uIiAqLwogCiAgICAgaWYgKGMtPnJlYWQtPnJlYWR5KSB7CiAgICAgICAgIC8qIHBvc3QgYWlvIG9wZXJhdGlvbiAqLwogICAgICAgICBuZ3hfaHR0cF9wcm94eV9wcm9jZXNzX3Vwc3RyZWFtX3N0YXR1c19saW5lKGMtPnJlYWQpOworI2lmIDAKICAgICAgICAgcmV0dXJuOworI2VuZGlmCiAgICAgfQogCiAjZW5kaWYKQEAgLTcxOCw3ICs3MjAsNyBAQAogCiAjaWYgKEhBVkVfS1FVRVVFKQogCi0gICAgaWYgKChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfSEFWRV9LUVVFVUVfRVZFTlQpCisgICAgaWYgKChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0tRVUVVRV9FVkVOVCkKICAgICAgICAgJiYgIXAtPnJlcXVlc3Rfc2VudAogICAgICAgICAmJiBjLT53cml0ZS0+cGVuZGluZ19lb2YpCiAgICAgewpAQCAtNzc2LDcgKzc3OCw3IEBACiAKICAgICBuZ3hfYWRkX3RpbWVyKGMtPnJlYWQsIHAtPmxjZi0+cmVhZF90aW1lb3V0KTsKIAotI2lmIDAKKyNpZiAxCiAgICAgaWYgKGMtPnJlYWQtPnJlYWR5KSB7CiAKICAgICAgICAgLyogcG9zdCBhaW8gb3BlcmF0aW9uICovCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cC5jIGIvc3JjL2h0dHAvbmd4X2h0dHAuYwppbmRleCBhMzdmZmM2Li45MGJiYmUyIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwLmMKQEAgLTExLDYgKzExLDE0IEBACiAKIAogc3RhdGljIGNoYXIgKm5neF9odHRwX2Jsb2NrKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9hZGRfYWRkcmVzcyhuZ3hfY29uZl90ICpjZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfaW5fcG9ydF90ICppbl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9saXN0ZW5fdCAqbHNjZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICpjc2NmKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfYWRkX25hbWVzKG5neF9jb25mX3QgKmNmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfaW5fYWRkcl90ICppbl9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICpjc2NmKTsKKwogc3RhdGljIGNoYXIgKm5neF9odHRwX21lcmdlX2xvY2F0aW9ucyhuZ3hfY29uZl90ICpjZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2FycmF5X3QgKmxvY2F0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmxvY19jb25mLApAQCAtNzksNiArODcsMTEgQEAKICAgICBuZ3hfaW9jcF9jb25mX3QgICAgICAgICAgICAgKmlvY3BjZjsKICNlbmRpZgogCisjaWYgKE5HWF9TVVBQUkVTU19XQVJOKQorICAgIC8qIE1TVkMgdGhpbmtzICdpbl9wb3J0cycgbWF5IGJlIHVzZWQgd2l0aG91dCBoYXZpbmcgYmVlbiBpbml0aWFsaXplZCAqLworICAgIG5neF9tZW16ZXJvKCZpbl9wb3J0cywgc2l6ZW9mKG5neF9hcnJheV90KSk7CisjZW5kaWYKKwogICAgIC8qIHRoZSBtYWluIGh0dHAgY29udGV4dCAqLwogICAgIG5neF90ZXN0X251bGwoY3R4LAogICAgICAgICAgICAgICAgICAgbmd4X3BjYWxsb2MoY2YtPnBvb2wsIHNpemVvZihuZ3hfaHR0cF9jb25mX2N0eF90KSksCkBAIC0yNzQsMTggKzI4NywyMyBAQAogCiAKICAgICAvKgotICAgICAqIGNyZWF0ZSB0aGUgbGlzdHMgb2YgdGhlIHBvcnRzLCB0aGUgYWRkcmVzc2VzIGFuZCB0aGUgc2VydmVyIG5hbWVzCi0gICAgICogdG8gYWxsb3cgcXVpY2tseSBmaW5kIHRoZSBzZXJ2ZXIgY29yZSBtb2R1bGUgY29uZmlndXJhdGlvbiBhdCBydW4tdGltZQorICAgICAqIGNyZWF0ZSB0aGUgbGlzdHMgb2YgcG9ydHMsIGFkZHJlc3NlcyBhbmQgc2VydmVyIG5hbWVzCisgICAgICogdG8gcXVpY2tseSBmaW5kIHRoZSBzZXJ2ZXIgY29yZSBtb2R1bGUgY29uZmlndXJhdGlvbiBhdCBydW4tdGltZQogICAgICAqLwogCi0gICAgbmd4X2luaXRfYXJyYXkoaW5fcG9ydHMsIGNmLT5wb29sLCAxMCwgc2l6ZW9mKG5neF9odHRwX2luX3BvcnRfdCksCi0gICAgICAgICAgICAgICAgICAgTkdYX0NPTkZfRVJST1IpOworICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmaW5fcG9ydHMsIGNmLT5wb29sLCAxMCwgc2l6ZW9mKG5neF9odHRwX2luX3BvcnRfdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfRVJST1IpCisgICAgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQogCiAgICAgLyogInNlcnZlciIgZGlyZWN0aXZlcyAqLworCiAgICAgY3NjZnAgPSBjbWNmLT5zZXJ2ZXJzLmVsdHM7CiAgICAgZm9yIChzID0gMDsgcyA8IGNtY2YtPnNlcnZlcnMubmVsdHM7IHMrKykgewogCiAgICAgICAgIC8qICJsaXN0ZW4iIGRpcmVjdGl2ZXMgKi8KKwogICAgICAgICBsc2NmID0gY3NjZnBbc10tPmxpc3Rlbi5lbHRzOwogICAgICAgICBmb3IgKGwgPSAwOyBsIDwgY3NjZnBbc10tPmxpc3Rlbi5uZWx0czsgbCsrKSB7CiAKQEAgLTMwOCwzOCArMzI2LDI2IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsc2NmW2xdLmFkZHIgPT0gaW5fYWRkclthXS5hZGRyKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgYWRkcmVzcyBpcyBhbHJlYWR5IGJvdW5kIHRvIHRoaXMgcG9ydCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZSBhZGRyZXNzIGlzIGFscmVhZHkgaW4gdGhlIGFkZHJlc3MgbGlzdCAqLwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogInNlcnZlcl9uYW1lIiBkaXJlY3RpdmVzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc19uYW1lID0gY3NjZnBbc10tPnNlcnZlcl9uYW1lcy5lbHRzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBjc2NmcFtzXS0+c2VydmVyX25hbWVzLm5lbHRzOyBuKyspIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhZGQgdGhlIHNlcnZlciBuYW1lIGFuZCBzZXJ2ZXIgY29yZSBtb2R1bGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY29uZmlndXJhdGlvbiB0byB0aGUgYWRkcmVzczpwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRPRE86IGR1cGxpY2F0ZSBuYW1lcyBjYW4gYmUgY2hlY2tlZCBoZXJlICovCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3Rlc3RfbnVsbChuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9wdXNoX2FycmF5KCZpbl9hZGRyW2FdLm5hbWVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfQ09ORl9FUlJPUik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS0+bmFtZSA9IHNfbmFtZVtuXS5uYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLT5jb3JlX3Nydl9jb25mID0gc19uYW1lW25dLmNvcmVfc3J2X2NvbmY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5neF9odHRwX2FkZF9uYW1lcyhjZiwgJmluX2FkZHJbYV0sIGNzY2ZwW3NdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gTkdYX0VSUk9SKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY2hlY2sgZHVwbGljYXRlICJkZWZhdWx0IiBzZXJ2ZXIgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNlcnZlcyB0aGlzIGFkZHJlc3M6cG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNoZWNrIHRoZSBkdXBsaWNhdGUgImRlZmF1bHQiIHNlcnZlciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBmb3IgdGhpcyBhZGRyZXNzOnBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsc2NmW2xdLmRlZmF1bHRfc2VydmVyKSB7CisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluX2FkZHJbYV0uZGVmYXVsdF9zZXJ2ZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIGNmLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1cGxpY2F0ZSBkZWZhdWx0IHNlcnZlciBpbiAlczolZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNjZltsXS5maWxlX25hbWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc2NmW2xdLmxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgZHVwbGljYXRlIGRlZmF1bHQgc2VydmVyIGluICVzOiVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc2NmW2xdLmZpbGVfbmFtZS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzY2ZbbF0ubGluZSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzU0LDMxICszNjAsMzEgQEAKIAogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbl9hZGRyW2FdLmFkZHIgPT0gSU5BRERSX0FOWSkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAiKjpwb3J0IiBtdXN0IGJlIHRoZSBsYXN0IHJlc29ydCBzbyBtb3ZlIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdG8gdGhlIGVuZCBvZiB0aGUgYWRkcmVzcyBsaXN0IGFuZCBhZGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgbmV3IGFkZHJlc3MgYXQgaXRzIHBsYWNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlIElOQUREUl9BTlkgaXMgYWx3YXlzIHRoZSBsYXN0IGFkZHJlc3MgKi8KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF90ZXN0X251bGwoaW5hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3B1c2hfYXJyYXkoJmluX3BvcnRbcF0uYWRkcnMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0NPTkZfRVJST1IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGluYWRkciA9IG5neF9hcnJheV9wdXNoKCZpbl9wb3J0W3BdLmFkZHJzKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIElOQUREUl9BTlkgbXVzdCBiZSB0aGUgbGFzdCByZXNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzbyB3ZSBtb3ZlIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGFkZHJlc3MgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFuZCBwdXQgdGhlIG5ldyBhZGRyZXNzIGluIGl0cyBwbGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X21lbWNweShpbmFkZHIsICZpbl9hZGRyW2FdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9odHRwX2luX2FkZHJfdCkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fYWRkclthXS5hZGRyID0gbHNjZltsXS5hZGRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2FkZHJbYV0ubmFtZXMuZWx0cyA9IE5VTEw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fYWRkclthXS5kZWZhdWx0X3NlcnZlciA9IGxzY2ZbbF0uZGVmYXVsdF9zZXJ2ZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fYWRkclthXS5jb3JlX3Nydl9jb25mID0gY3NjZnBbc107CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNyZWF0ZSB0aGUgZW1wdHkgbGlzdCBvZiB0aGUgc2VydmVyIG5hbWVzIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjYW4gYmUgc2VydmVkIG9uIHRoaXMgYWRkcmVzczpwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaW5pdF9hcnJheShpbmFkZHItPm5hbWVzLCBjZi0+cG9vbCwgMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9odHRwX3NlcnZlcl9uYW1lX3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9DT05GX0VSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmd4X2h0dHBfYWRkX25hbWVzKGNmLCAmaW5fYWRkclthXSwgY3NjZnBbc10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfRVJST1IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9mb3VuZCA9IDE7CiAKQEAgLTM5MywyMiArMzk5LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKiBib3VuZCB0byB0aGlzIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgICAgICAgICAgICAgICAgICAgICBuZ3hfdGVzdF9udWxsKGluYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3B1c2hfYXJyYXkoJmluX3BvcnRbcF0uYWRkcnMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfQ09ORl9FUlJPUik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGluYWRkci0+YWRkciA9IGxzY2ZbbF0uYWRkcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluYWRkci0+ZGVmYXVsdF9zZXJ2ZXIgPSBsc2NmW2xdLmRlZmF1bHRfc2VydmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5hZGRyLT5jb3JlX3Nydl9jb25mID0gY3NjZnBbc107Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBjcmVhdGUgdGhlIGVtcHR5IGxpc3Qgb2YgdGhlIHNlcnZlciBuYW1lcyB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKiBjYW4gYmUgc2VydmVkIG9uIHRoaXMgYWRkcmVzczpwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2luaXRfYXJyYXkoaW5hZGRyLT5uYW1lcywgY2YtPnBvb2wsIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9odHRwX3NlcnZlcl9uYW1lX3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0NPTkZfRVJST1IpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5neF9odHRwX2FkZF9hZGRyZXNzKGNmLCAmaW5fcG9ydFtwXSwgJmxzY2ZbbF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzY2ZwW3NdKSA9PSBOR1hfRVJST1IpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDE3LDU0ICs0MTIsNDIgQEAKIAogICAgICAgICAgICAgICAgIC8qIGFkZCB0aGUgcG9ydCB0byB0aGUgaW5fcG9ydCBsaXN0ICovCiAKLSAgICAgICAgICAgICAgICBuZ3hfdGVzdF9udWxsKGluX3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcHVzaF9hcnJheSgmaW5fcG9ydHMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0NPTkZfRVJST1IpOworICAgICAgICAgICAgICAgIGlmICghKGluX3BvcnQgPSBuZ3hfYXJyYXlfcHVzaCgmaW5fcG9ydHMpKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaW5fcG9ydC0+cG9ydCA9IGxzY2ZbbF0ucG9ydDsKKyAgICAgICAgICAgICAgICBpbl9wb3J0LT5hZGRycy5lbHRzID0gTlVMTDsKIAotICAgICAgICAgICAgICAgIG5neF90ZXN0X251bGwoaW5fcG9ydC0+cG9ydF90ZXh0LmRhdGEsIG5neF9wYWxsb2MoY2YtPnBvb2wsIDcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0NPTkZfRVJST1IpOwotICAgICAgICAgICAgICAgIGluX3BvcnQtPnBvcnRfdGV4dC5sZW4gPSBuZ3hfc25wcmludGYoKGNoYXIgKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3BvcnQtPnBvcnRfdGV4dC5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIjolZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9wb3J0LT5wb3J0KTsKKyAgICAgICAgICAgICAgICBpZiAoIShpbl9wb3J0LT5wb3J0X3RleHQuZGF0YSA9IG5neF9wYWxsb2MoY2YtPnBvb2wsIDcpKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLyogY3JlYXRlIGxpc3Qgb2YgdGhlIGFkZHJlc3NlcyB0aGF0IGJvdW5kIHRvIHRoaXMgcG9ydCAuLi4gKi8KKyAgICAgICAgICAgICAgICBpbl9wb3J0LT5wb3J0X3RleHQubGVuID0gbmd4X3NwcmludGYoaW5fcG9ydC0+cG9ydF90ZXh0LmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6JWQiLCBpbl9wb3J0LT5wb3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGluX3BvcnQtPnBvcnRfdGV4dC5kYXRhOwogCi0gICAgICAgICAgICAgICAgbmd4X2luaXRfYXJyYXkoaW5fcG9ydC0+YWRkcnMsIGNmLT5wb29sLCAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2h0dHBfaW5fYWRkcl90KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfQ09ORl9FUlJPUik7Ci0KLSAgICAgICAgICAgICAgICBuZ3hfdGVzdF9udWxsKGluYWRkciwgbmd4X3B1c2hfYXJyYXkoJmluX3BvcnQtPmFkZHJzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9DT05GX0VSUk9SKTsKLQotICAgICAgICAgICAgICAgIC8qIC4uLiBhbmQgYWRkIHRoZSBhZGRyZXNzIHRvIHRoaXMgbGlzdCAqLwotCi0gICAgICAgICAgICAgICAgaW5hZGRyLT5hZGRyID0gbHNjZltsXS5hZGRyOwotICAgICAgICAgICAgICAgIGluYWRkci0+ZGVmYXVsdF9zZXJ2ZXIgPSBsc2NmW2xdLmRlZmF1bHRfc2VydmVyOwotICAgICAgICAgICAgICAgIGluYWRkci0+Y29yZV9zcnZfY29uZiA9IGNzY2ZwW3NdOwotCi0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBjcmVhdGUgdGhlIGVtcHR5IGxpc3Qgb2YgdGhlIHNlcnZlciBuYW1lcyB0aGF0Ci0gICAgICAgICAgICAgICAgICogY2FuIGJlIHNlcnZlZCBvbiB0aGlzIGFkZHJlc3M6cG9ydAotICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgbmd4X2luaXRfYXJyYXkoaW5hZGRyLT5uYW1lcywgY2YtPnBvb2wsIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF9zZXJ2ZXJfbmFtZV90KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfQ09ORl9FUlJPUik7CisgICAgICAgICAgICAgICAgaWYgKG5neF9odHRwX2FkZF9hZGRyZXNzKGNmLCBpbl9wb3J0LCAmbHNjZltsXSwgY3NjZnBbc10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfRVJST1IpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgLyogb3B0aW1pemUgdGhlIGxpc3RzIG9mIHRoZSBwb3J0cywgdGhlIGFkZHJlc3NlcyBhbmQgdGhlIHNlcnZlciBuYW1lcyAqLworCisgICAgLyogb3B0aW1pemUgdGhlIGxpc3RzIG9mIHBvcnRzLCBhZGRyZXNzZXMgYW5kIHNlcnZlciBuYW1lcyAqLwogCiAgICAgLyogQUZfSU5FVCBvbmx5ICovCiAKICAgICBpbl9wb3J0ID0gaW5fcG9ydHMuZWx0czsKICAgICBmb3IgKHAgPSAwOyBwIDwgaW5fcG9ydHMubmVsdHM7IHArKykgewogCi0gICAgICAgIC8qIGNoZWNrIHdoZXRoZXIgdGhlIGFsbCBzZXJ2ZXIgbmFtZXMgcG9pbnQgdG8gdGhlIHNhbWUgc2VydmVyICovCisgICAgICAgIC8qCisgICAgICAgICAqIGNoZWNrIHdoZXRoZXIgYWxsIG5hbWUtYmFzZWQgc2VydmVycyBoYXZlIHRoZSBzYW1lIGNvbmZpZ3VyYWl0b24KKyAgICAgICAgICogYXMgdGhlIGRlZmF1bHQgc2VydmVyLCBvciBzb21lIHNlcnZlcnMgcmVzdHJpY3QgdGhlIGhvc3QgbmFtZXMKKyAgICAgICAgICovCiAKICAgICAgICAgaW5fYWRkciA9IGluX3BvcnRbcF0uYWRkcnMuZWx0czsKICAgICAgICAgZm9yIChhID0gMDsgYSA8IGluX3BvcnRbcF0uYWRkcnMubmVsdHM7IGErKykgewpAQCAtNDczLDE1ICs0NTYsMTkgQEAKIAogICAgICAgICAgICAgbmFtZSA9IGluX2FkZHJbYV0ubmFtZXMuZWx0czsKICAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBpbl9hZGRyW2FdLm5hbWVzLm5lbHRzOyBuKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5fYWRkclthXS5jb3JlX3Nydl9jb25mICE9IG5hbWVbbl0uY29yZV9zcnZfY29uZikgeworICAgICAgICAgICAgICAgIGlmIChpbl9hZGRyW2FdLmNvcmVfc3J2X2NvbmYgIT0gbmFtZVtuXS5jb3JlX3Nydl9jb25mCisgICAgICAgICAgICAgICAgICAgIHx8IG5hbWVbbl0uY29yZV9zcnZfY29uZi0+cmVzdHJpY3RfaG9zdF9uYW1lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IE5HWF9IVFRQX1JFU1RSSUNUX0hPU1RfT0ZGKQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdmlydHVhbF9uYW1lcyA9IDE7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIGlmIHRoZSBhbGwgc2VydmVyIG5hbWVzIHBvaW50IHRvIHRoZSBzYW1lIHNlcnZlcgotICAgICAgICAgICAgICogdGhlbiB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayB0aGVtIGF0IHJ1bi10aW1lCisgICAgICAgICAgICAgKiBpZiBhbGwgbmFtZS1iYXNlZCBzZXJ2ZXJzIGhhdmUgdGhlIHNhbWUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICogYXMgdGhlIGRlZmF1bHQgc2VydmVyLCBhbmQgbm8gc2VydmVycyByZXN0cmljdCB0aGUgaG9zdCBuYW1lcworICAgICAgICAgICAgICogdGhlbiB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayB0aGVtIGF0IHJ1bi10aW1lIGF0IGFsbAogICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgIGlmICghdmlydHVhbF9uYW1lcykgewpAQCAtNTg4LDMwICs1NzUsMTE3IEBACiAgICAgfQogCiAjaWYgKE5HWF9ERUJVRykKKyAgICB7CisgICAgdV9jaGFyICAgICAgYWRkcmVzc1syMF07CisgICAgbmd4X3VpbnRfdCAgcCwgYSwgbjsKKwogICAgIGluX3BvcnQgPSBpbl9wb3J0cy5lbHRzOwogICAgIGZvciAocCA9IDA7IHAgPCBpbl9wb3J0cy5uZWx0czsgcCsrKSB7CiAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgY2YtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAicG9ydDogJWQgJTA4eCIsIGluX3BvcnRbcF0ucG9ydCwgJmluX3BvcnRbcF0pOwogICAgICAgICBpbl9hZGRyID0gaW5fcG9ydFtwXS5hZGRycy5lbHRzOwogICAgICAgICBmb3IgKGEgPSAwOyBhIDwgaW5fcG9ydFtwXS5hZGRycy5uZWx0czsgYSsrKSB7Ci0gICAgICAgICAgICB1X2NoYXIgaXBbMjBdOwotICAgICAgICAgICAgbmd4X2luZXRfbnRvcChBRl9JTkVULCAmaW5fYWRkclthXS5hZGRyLCBpcCwgMjApOwotICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCBjZi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICUwOHgiLCBpcCwgaW5fYWRkclthXS5jb3JlX3Nydl9jb25mKTsKKyAgICAgICAgICAgIG5neF9pbmV0X250b3AoQUZfSU5FVCwgJmluX2FkZHJbYV0uYWRkciwgYWRkcmVzcywgMjApOworICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19IVFRQLCBjZi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiVkICUwOHgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcywgaW5fcG9ydFtwXS5wb3J0LCBpbl9hZGRyW2FdLmNvcmVfc3J2X2NvbmYpOwogICAgICAgICAgICAgc19uYW1lID0gaW5fYWRkclthXS5uYW1lcy5lbHRzOwogICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IGluX2FkZHJbYV0ubmFtZXMubmVsdHM7IG4rKykgewotICAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIGNmLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyAlMDh4Iiwgc19uYW1lW25dLm5hbWUuZGF0YSwKKyAgICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzQoTkdYX0xPR19ERUJVR19IVFRQLCBjZi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6JWQgJXMgJTA4eCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsIGluX3BvcnRbcF0ucG9ydCwgc19uYW1lW25dLm5hbWUuZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc19uYW1lW25dLmNvcmVfc3J2X2NvbmYpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAgIH0KICNlbmRpZgogCiAgICAgcmV0dXJuIE5HWF9DT05GX09LOwogfQogCiAKKy8qCisgKiBhZGQgdGhlIHNlcnZlciBhZGRyZXNzLCB0aGUgc2VydmVyIG5hbWVzIGFuZCB0aGUgc2VydmVyIGNvcmUgbW9kdWxlCisgKiBjb25maWd1cmF0aW9ucyB0byB0aGUgcG9ydCAoaW5fcG9ydCkKKyAqLworCitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2FkZF9hZGRyZXNzKG5neF9jb25mX3QgKmNmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9pbl9wb3J0X3QgKmluX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2xpc3Rlbl90ICpsc2NmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jb3JlX3Nydl9jb25mX3QgKmNzY2YpCit7CisgICAgbmd4X2h0dHBfaW5fYWRkcl90ICAqaW5fYWRkcjsKKworICAgIGlmIChpbl9wb3J0LT5hZGRycy5lbHRzID09IE5VTEwpIHsKKyAgICAgICAgaWYgKG5neF9hcnJheV9pbml0KCZpbl9wb3J0LT5hZGRycywgY2YtPnBvb2wsIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2h0dHBfaW5fYWRkcl90KSkgPT0gTkdYX0VSUk9SKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCEoaW5fYWRkciA9IG5neF9hcnJheV9wdXNoKCZpbl9wb3J0LT5hZGRycykpKSB7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgaW5fYWRkci0+YWRkciA9IGxzY2YtPmFkZHI7CisgICAgaW5fYWRkci0+bmFtZXMuZWx0cyA9IE5VTEw7CisgICAgaW5fYWRkci0+ZGVmYXVsdF9zZXJ2ZXIgPSBsc2NmLT5kZWZhdWx0X3NlcnZlcjsKKyAgICBpbl9hZGRyLT5jb3JlX3Nydl9jb25mID0gY3NjZjsKKworI2lmIChOR1hfREVCVUcpCisgICAgeworICAgIHVfY2hhciB0ZXh0WzIwXTsKKyAgICBuZ3hfaW5ldF9udG9wKEFGX0lORVQsICZpbl9hZGRyLT5hZGRyLCB0ZXh0LCAyMCk7CisgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCBjZi0+bG9nLCAwLCAiYWRkcmVzczogJXM6JWQiLAorICAgICAgICAgICAgICAgICAgIHRleHQsIGluX3BvcnQtPnBvcnQpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIG5neF9odHRwX2FkZF9uYW1lcyhjZiwgaW5fYWRkciwgY3NjZik7Cit9CisKKworLyoKKyAqIGFkZCB0aGUgc2VydmVyIG5hbWVzIGFuZCB0aGUgc2VydmVyIGNvcmUgbW9kdWxlCisgKiBjb25maWd1cmF0aW9ucyB0byB0aGUgYWRkcmVzczpwb3J0IChpbl9hZGRyKQorICovCisKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfYWRkX25hbWVzKG5neF9jb25mX3QgKmNmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfaW5fYWRkcl90ICppbl9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICpjc2NmKQoreworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICBpOworICAgIG5neF9odHRwX3NlcnZlcl9uYW1lX3QgICpzZXJ2ZXJfbmFtZXMsICpuYW1lOworCisgICAgaWYgKGluX2FkZHItPm5hbWVzLmVsdHMgPT0gTlVMTCkgeworICAgICAgICBpZiAobmd4X2FycmF5X2luaXQoJmluX2FkZHItPm5hbWVzLCBjZi0+cG9vbCwgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9odHRwX3NlcnZlcl9uYW1lX3QpKSA9PSBOR1hfRVJST1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzZXJ2ZXJfbmFtZXMgPSBjc2NmLT5zZXJ2ZXJfbmFtZXMuZWx0czsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY3NjZi0+c2VydmVyX25hbWVzLm5lbHRzOyBpKyspIHsKKworICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIGNmLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICJuYW1lOiAlcyIsIHNlcnZlcl9uYW1lc1tpXS5uYW1lLmRhdGEpOworCisgICAgICAgIC8qIFRPRE86IGR1cGxpY2F0ZSBuYW1lcyBjYW4gYmUgY2hlY2tlZCBoZXJlICovCisKKyAgICAgICAgaWYgKCEobmFtZSA9IG5neF9hcnJheV9wdXNoKCZpbl9hZGRyLT5uYW1lcykpKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgKm5hbWUgPSBzZXJ2ZXJfbmFtZXNbaV07CisgICAgfQorCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfbWVyZ2VfbG9jYXRpb25zKG5neF9jb25mX3QgKmNmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfYXJyYXlfdCAqbG9jYXRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqbG9jX2NvbmYsCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwppbmRleCA1ODAyMWU4Li44NTQ0ZTI1IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZHVtbXkpOwogc3RhdGljIGNoYXIgKm5neF90eXBlc19ibG9jayhuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKTsKIHN0YXRpYyBjaGFyICpuZ3hfc2V0X3R5cGUobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmR1bW15LCB2b2lkICpjb25mKTsKLXN0YXRpYyBjaGFyICpuZ3hfc2V0X2xpc3RlbihuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKTsKK3N0YXRpYyBjaGFyICpuZ3hfaHR0cF9saXN0ZW4obmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZik7CiBzdGF0aWMgY2hhciAqbmd4X3NldF9zZXJ2ZXJfbmFtZShuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29uZik7CiBzdGF0aWMgY2hhciAqbmd4X3NldF9yb290KG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpOwpAQCAtMTI2LDkgKzEyNiw5IEBACiAjaWYgMAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9DT05GX1RBS0UxLAogI2Vsc2UKLSAgICAgIE5HWF9IVFRQX1NSVl9DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgTkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0NPTkZfVEFLRTEyLAogI2VuZGlmCi0gICAgICBuZ3hfc2V0X2xpc3RlbiwKKyAgICAgIG5neF9odHRwX2xpc3RlbiwKICAgICAgIE5HWF9IVFRQX1NSVl9DT05GX09GRlNFVCwKICAgICAgIDAsCiAgICAgICBOVUxMIH0sCkBAIC01NzYsNyArNTc2LDcgQEAKICAgICBjbGNmcCA9IGxvY2F0aW9ucy0+ZWx0czsKICAgICBmb3IgKGkgPSAwOyBpIDwgbG9jYXRpb25zLT5uZWx0czsgaSsrKSB7CiAKLSNpZiAoSEFWRV9QQ1JFKQorI2lmIChOR1hfUENSRSkKICAgICAgICAgaWYgKGNsY2ZwW2ldLT5yZWdleCkgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTYzOCw3ICs2MzgsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0jaWYgKEhBVkVfUENSRSkKKyNpZiAoTkdYX1BDUkUpCiAKICAgICAvKiByZWdleCBtYXRjaGVzICovCiAKQEAgLTY3Myw3ICs2NzMsNyBAQAogICAgICAgICByZXR1cm4gTkdYX0hUVFBfTE9DQVRJT05fUkVHRVg7CiAgICAgfQogCi0jZW5kaWYgLyogSEFWRV9QQ1JFICovCisjZW5kaWYgLyogTkdYX1BDUkUgKi8KIAogICAgIHJldHVybiBOR1hfT0s7CiB9CkBAIC05OTEsNyArOTkxLDcgQEAKICAgICBmaXJzdCA9ICoobmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICoqKSBvbmU7CiAgICAgc2Vjb25kID0gKihuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgKiopIHR3bzsKIAotI2lmIChIQVZFX1BDUkUpCisjaWYgKE5HWF9QQ1JFKQogCiAgICAgaWYgKGZpcnN0LT5yZWdleCAmJiAhc2Vjb25kLT5yZWdleCkgewogICAgICAgICAvKiBzaGlmdCB0aGUgcmVnZXggbWF0Y2hlcyB0byB0aGUgZW5kICovCkBAIC0xMDI2LDcgKzEwMjYsNyBAQAogICAgIG5neF9odHRwX2NvbmZfY3R4X3QgICAgICAgKmN0eCwgKnBjdHg7CiAgICAgbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICAqY3NjZjsKICAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICpjbGNmLCAqcGNsY2YsICoqY2xjZnA7Ci0jaWYgKEhBVkVfUENSRSkKKyNpZiAoTkdYX1BDUkUpCiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgZXJyOwogICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgIGVycnN0cltOR1hfTUFYX0NPTkZfRVJSU1RSXTsKICNlbmRpZgpAQCAtMTA3Niw3ICsxMDc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgJiYgdmFsdWVbMV0uZGF0YVswXSA9PSAnficKICAgICAgICAgICAgICAgICAgICAgICAgJiYgdmFsdWVbMV0uZGF0YVsxXSA9PSAnKicpKQogICAgICAgICB7Ci0jaWYgKEhBVkVfUENSRSkKKyNpZiAoTkdYX1BDUkUpCiAgICAgICAgICAgICBlcnIubGVuID0gTkdYX01BWF9DT05GX0VSUlNUUjsKICAgICAgICAgICAgIGVyci5kYXRhID0gZXJyc3RyOwogCkBAIC0xMTI5LDcgKzExMjksNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CiAKLSNpZiAoSEFWRV9QQ1JFKQorI2lmIChOR1hfUENSRSkKICAgICAgICAgaWYgKGNsY2YtPnJlZ2V4ID09IE5VTEwKICAgICAgICAgICAgICYmIG5neF9zdHJuY21wKGNsY2YtPm5hbWUuZGF0YSwgcGNsY2YtPm5hbWUuZGF0YSwgcGNsY2YtPm5hbWUubGVuKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IDApCkBAIC0xMzIzLDEyICsxMzIzLDggQEAKIAogICAgICAgICBuLT5uYW1lLmxlbiA9IG5neF9zdHJsZW4obi0+bmFtZS5kYXRhKTsKICAgICAgICAgbi0+Y29yZV9zcnZfY29uZiA9IGNvbmY7CisgICAgICAgIG4tPndpbGRjYXJkID0gMDsKIAotI2lmIDAKLSAgICAgICAgY3R4ID0gKG5neF9odHRwX2NvbmZfY3R4X3QgKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmLT5jeWNsZS0+Y29uZl9jdHhbbmd4X2h0dHBfbW9kdWxlLmluZGV4XTsKLSAgICAgICAgY21jZiA9IGN0eC0+bWFpbl9jb25mW25neF9odHRwX2NvcmVfbW9kdWxlLmN0eF9pbmRleF07Ci0jZW5kaWYKICAgICAgICAgY21jZiA9IG5neF9odHRwX2NvbmZfZ2V0X21vZHVsZV9tYWluX2NvbmYoY2YsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKIAogICAgICAgICBpZiAoY21jZi0+bWF4X3NlcnZlcl9uYW1lX2xlbiA8IG4tPm5hbWUubGVuKSB7CkBAIC0xNTEyLDcgKzE1MDgsNyBAQAogfQogCiAKLXN0YXRpYyBjaGFyICpuZ3hfc2V0X2xpc3RlbihuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQorc3RhdGljIGNoYXIgKm5neF9odHRwX2xpc3RlbihuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQogewogICAgIG5neF9odHRwX2NvcmVfc3J2X2NvbmZfdCAqc2NmID0gY29uZjsKIApAQCAtMTYwNywxMyArMTYwMyw4IEBACiAgICAgbmd4X2h0dHBfc2VydmVyX25hbWVfdCAgICAgKnNuOwogICAgIG5neF9odHRwX2NvcmVfbWFpbl9jb25mX3QgICpjbWNmOwogCi0gICAgLyogVE9ETzogc2V2ZXJhbCBuYW1lcyAqLwogICAgIC8qIFRPRE86IHdhcm4gYWJvdXQgZHVwbGljYXRlICdzZXJ2ZXJfbmFtZScgZGlyZWN0aXZlcyAqLwogCi0jaWYgMAotICAgIGN0eCA9IChuZ3hfaHR0cF9jb25mX2N0eF90ICopIGNmLT5jeWNsZS0+Y29uZl9jdHhbbmd4X2h0dHBfbW9kdWxlLmluZGV4XTsKLSAgICBjbWNmID0gY3R4LT5tYWluX2NvbmZbbmd4X2h0dHBfY29yZV9tb2R1bGUuY3R4X2luZGV4XTsKLSNlbmRpZgogICAgIGNtY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfbWFpbl9jb25mKGNmLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKICAgICB2YWx1ZSA9IGNmLT5hcmdzLT5lbHRzOwpAQCAtMTYyNywxMiArMTYxOCwyMyBAQAogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CiAKLSAgICAgICAgbmd4X3Rlc3RfbnVsbChzbiwgbmd4X3B1c2hfYXJyYXkoJnNjZi0+c2VydmVyX25hbWVzKSwgTkdYX0NPTkZfRVJST1IpOworICAgICAgICBpZiAoIShzbiA9IG5neF9hcnJheV9wdXNoKCZzY2YtPnNlcnZlcl9uYW1lcykpKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KIAogICAgICAgICBzbi0+bmFtZS5sZW4gPSB2YWx1ZVtpXS5sZW47CiAgICAgICAgIHNuLT5uYW1lLmRhdGEgPSB2YWx1ZVtpXS5kYXRhOwogICAgICAgICBzbi0+Y29yZV9zcnZfY29uZiA9IHNjZjsKIAorICAgICAgICBpZiAoc24tPm5hbWUuZGF0YVswXSA9PSAnKicpIHsKKyAgICAgICAgICAgIHNuLT5uYW1lLmxlbi0tOworICAgICAgICAgICAgc24tPm5hbWUuZGF0YSsrOworICAgICAgICAgICAgc24tPndpbGRjYXJkID0gMTsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc24tPndpbGRjYXJkID0gMDsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChjbWNmLT5tYXhfc2VydmVyX25hbWVfbGVuIDwgc24tPm5hbWUubGVuKSB7CiAgICAgICAgICAgICBjbWNmLT5tYXhfc2VydmVyX25hbWVfbGVuID0gc24tPm5hbWUubGVuOwogICAgICAgICB9CkBAIC0xODA2LDcgKzE4MDgsNyBAQAogewogICAgIHNzaXplX3QgKm5wID0gZGF0YTsKIAotI2lmIF9fRnJlZUJTRF9fCisjaWYgKE5HWF9GUkVFQlNEKQogCiAgICAgaWYgKCpucCA+PSBuZ3hfZnJlZWJzZF9uZXRfaW5ldF90Y3Bfc2VuZHNwYWNlKSB7CiAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmggYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCmluZGV4IDc4N2Y4YjguLjlhMTcxMzAgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaApAQCAtOTYsMTMgKzk2LDE1IEBACiAgICAgbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICAqY29yZV9zcnZfY29uZjsgIC8qIGRlZmF1bHQgc2VydmVyIGNvbmYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgYWRkcmVzczpwb3J0ICovCiAKLSAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3NlcnZlcjoxOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGRlZmF1bHRfc2VydmVyOyAvKiB1bnNpZ25lZCAgZGVmYXVsdF9zZXJ2ZXI6MTsgKi8KIH0gbmd4X2h0dHBfaW5fYWRkcl90OwogCiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICBuYW1lOwogICAgIG5neF9odHRwX2NvcmVfc3J2X2NvbmZfdCAgKmNvcmVfc3J2X2NvbmY7IC8qIHZpcnR1YWwgbmFtZSBzZXJ2ZXIgY29uZiAqLworCisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgd2lsZGNhcmQ7ICAvKnVuc2lnbmVkICB3aWxkY2FyZDoxOyAqLwogfSBuZ3hfaHR0cF9zZXJ2ZXJfbmFtZV90OwogCiAKQEAgLTEzNSw3ICsxMzcsNyBAQAogc3RydWN0IG5neF9odHRwX2NvcmVfbG9jX2NvbmZfcyB7CiAgICAgbmd4X3N0cl90ICAgICBuYW1lOyAgICAgICAgICAvKiBsb2NhdGlvbiBuYW1lICovCiAKLSNpZiAoSEFWRV9QQ1JFKQorI2lmIChOR1hfUENSRSkKICAgICBuZ3hfcmVnZXhfdCAgKnJlZ2V4OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXIuYyBiL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXIuYwppbmRleCA1YjdmM2ViLi5hMDgzYjQ1IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfaGVhZGVyX2ZpbHRlci5jCkBAIC0zMTcsMTAgKzMxNywxNSBAQAogCiAgICAgaWYgKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoID09IE5VTEwpIHsKICAgICAgICAgaWYgKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX24gPj0gMCkgeworICAgICAgICAgICAgYi0+bGFzdCA9IG5neF9zcHJpbnRmKGItPmxhc3QsICJDb250ZW50LUxlbmd0aDogJU8iIENSTEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbik7CisKKyNpZiAwCiAgICAgICAgICAgICBiLT5sYXN0ICs9IG5neF9zbnByaW50ZigoY2hhciAqKSBiLT5sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIkNvbnRlbnQtTGVuZ3RoOiAiKSArIE5HWF9PRkZfVF9MRU4gKyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1MZW5ndGg6ICIgT0ZGX1RfRk1UIENSTEYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX24pOworI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM3Miw3ICszNzcsNyBAQAogICAgIHsKICAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgIkxhc3QtTW9kaWZpZWQ6ICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigiTGFzdC1Nb2RpZmllZDogIikgLSAxKTsKLSAgICAgICAgYi0+bGFzdCArPSBuZ3hfaHR0cF90aW1lKGItPmxhc3QsIHItPmhlYWRlcnNfb3V0Lmxhc3RfbW9kaWZpZWRfdGltZSk7CisgICAgICAgIGItPmxhc3QgPSBuZ3hfaHR0cF90aW1lKGItPmxhc3QsIHItPmhlYWRlcnNfb3V0Lmxhc3RfbW9kaWZpZWRfdGltZSk7CiAKICAgICAgICAgKihiLT5sYXN0KyspID0gQ1I7ICooYi0+bGFzdCsrKSA9IExGOwogICAgIH0KQEAgLTM4OSwxMCArMzk0LDE0IEBACiAgICAgICAgIGlmIChjbGNmLT5rZWVwYWxpdmVfaGVhZGVyCiAgICAgICAgICAgICAmJiAoci0+aGVhZGVyc19pbi5nZWNrbyB8fCByLT5oZWFkZXJzX2luLmtvbnF1ZXJvcikpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGItPmxhc3QgPSBuZ3hfc3ByaW50ZihiLT5sYXN0LCAiS2VlcC1BbGl2ZTogdGltZW91dD0lVCIgQ1JMRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGNmLT5rZWVwYWxpdmVfaGVhZGVyKTsKKyNpZiAwCiAgICAgICAgICAgICBiLT5sYXN0ICs9IG5neF9zbnByaW50ZigoY2hhciAqKSBiLT5sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigiS2VlcC1BbGl2ZTogdGltZW91dD0iKSArIFRJTUVfVF9MRU4gKyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLZWVwLUFsaXZlOiB0aW1lb3V0PSIgVElNRV9UX0ZNVCBDUkxGLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsY2YtPmtlZXBhbGl2ZV9oZWFkZXIpOworI2VuZGlmCiAgICAgICAgIH0KIAogICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9sb2dfaGFuZGxlci5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfbG9nX2hhbmRsZXIuYwppbmRleCA1MTE2NmNmLi45YTEzODlkIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9sb2dfaGFuZGxlci5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2xvZ19oYW5kbGVyLmMKQEAgLTIxMCw5ICsyMTAsMTMgQEAKIHN0YXRpYyB1X2NoYXIgKm5neF9odHRwX2xvZ19jb25uZWN0aW9uKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdV9jaGFyICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IGRhdGEpCiB7CisgICAgcmV0dXJuIG5neF9zcHJpbnRmKGJ1ZiwgIiV1aSIsIHItPmNvbm5lY3Rpb24tPm51bWJlcik7CisKKyNpZiAwCiAgICAgcmV0dXJuIGJ1ZiArIG5neF9zbnByaW50ZigoY2hhciAqKSBidWYsIE5HWF9JTlRfVF9MRU4gKyAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiIE5HWF9VSU5UX1RfRk1ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+Y29ubmVjdGlvbi0+bnVtYmVyKTsKKyNlbmRpZgogfQogCiAKQEAgLTI0NCw4ICsyNDgsMTIgQEAKIAogICAgIG5neF9nZXR0aW1lb2ZkYXkoJnR2KTsKIAorICAgIHJldHVybiBuZ3hfc3ByaW50ZihidWYsICIlbC4lMDNsIiwgdHYudHZfc2VjLCB0di50dl91c2VjIC8gMTAwMCk7CisKKyNpZiAwCiAgICAgcmV0dXJuIGJ1ZiArIG5neF9zbnByaW50ZigoY2hhciAqKSBidWYsIFRJTUVfVF9MRU4gKyA1LCAiJWxkLiUwM2xkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2LnR2X3NlYywgdHYudHZfdXNlYyAvIDEwMDApOworI2VuZGlmCiB9CiAKIApAQCAtMjY0LDI0ICsyNzIsMzYgQEAKIHN0YXRpYyB1X2NoYXIgKm5neF9odHRwX2xvZ19zdGF0dXMobmd4X2h0dHBfcmVxdWVzdF90ICpyLCB1X2NoYXIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IGRhdGEpCiB7CisgICAgcmV0dXJuIG5neF9zcHJpbnRmKGJ1ZiwgIiV1aSIsCisgICAgICAgICAgICAgICAgICAgICAgIHItPmVycl9zdGF0dXMgPyByLT5lcnJfc3RhdHVzIDogci0+aGVhZGVyc19vdXQuc3RhdHVzKTsKKworI2lmIDAKICAgICByZXR1cm4gYnVmICsgbmd4X3NucHJpbnRmKChjaGFyICopIGJ1ZiwgNCwgIiUiIE5HWF9VSU5UX1RfRk1ULAogICAgICAgICAgICAgICAgICAgICAgICAgci0+ZXJyX3N0YXR1cyA/IHItPmVycl9zdGF0dXMgOiByLT5oZWFkZXJzX291dC5zdGF0dXMpOworI2VuZGlmCiB9CiAKIAogc3RhdGljIHVfY2hhciAqbmd4X2h0dHBfbG9nX2xlbmd0aChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIHVfY2hhciAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50cHRyX3QgZGF0YSkKIHsKKyAgICByZXR1cm4gbmd4X3NwcmludGYoYnVmLCAiJU8iLCByLT5jb25uZWN0aW9uLT5zZW50KTsKKworI2lmIDAKICAgICByZXR1cm4gYnVmICsgbmd4X3NucHJpbnRmKChjaGFyICopIGJ1ZiwgTkdYX09GRl9UX0xFTiArIDEsIE9GRl9UX0ZNVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmNvbm5lY3Rpb24tPnNlbnQpOworI2VuZGlmCiB9CiAKIAogc3RhdGljIHVfY2hhciAqbmd4X2h0dHBfbG9nX2FwYWNoZV9sZW5ndGgobmd4X2h0dHBfcmVxdWVzdF90ICpyLCB1X2NoYXIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnRwdHJfdCBkYXRhKQogeworICAgIHJldHVybiBuZ3hfc3ByaW50ZihidWYsICIlTyIsIHItPmNvbm5lY3Rpb24tPnNlbnQgLSByLT5oZWFkZXJfc2l6ZSk7CisjaWYgMAogICAgIHJldHVybiBidWYgKyBuZ3hfc25wcmludGYoKGNoYXIgKikgYnVmLCBOR1hfT0ZGX1RfTEVOICsgMSwgT0ZGX1RfRk1ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+Y29ubmVjdGlvbi0+c2VudCAtIHItPmhlYWRlcl9zaXplKTsKKyNlbmRpZgogfQogCiAKQEAgLTQ2Nyw4ICs0ODcsNyBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHVfY2hhciAqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIk1vbiwgMjggU2VwIDE5NzAgMDY6MDA6MDAgR01UIikgLSAxOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gYnVmICsgbmd4X2h0dHBfdGltZShidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQubGFzdF9tb2RpZmllZF90aW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfdGltZShidWYsIHItPmhlYWRlcnNfb3V0Lmxhc3RfbW9kaWZpZWRfdGltZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChidWYpIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwppbmRleCA2MDY5ODQ3Li43NDE3M2Q4IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCkBAIC0xMDkxLDI3ICsxMDkxLDQ3IEBACiAKICAgICAgICAgbmFtZSA9IHItPnZpcnR1YWxfbmFtZXMtPmVsdHM7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByLT52aXJ0dWFsX25hbWVzLT5uZWx0czsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoci0+aGVhZGVyc19pbi5ob3N0X25hbWVfbGVuICE9IG5hbWVbaV0ubmFtZS5sZW4pIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKG5neF9zdHJuY2FzZWNtcChyLT5oZWFkZXJzX2luLmhvc3QtPnZhbHVlLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVbaV0ubmFtZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX2luLmhvc3RfbmFtZV9sZW4pID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgci0+c3J2X2NvbmYgPSBuYW1lW2ldLmNvcmVfc3J2X2NvbmYtPmN0eC0+c3J2X2NvbmY7Ci0gICAgICAgICAgICAgICAgci0+bG9jX2NvbmYgPSBuYW1lW2ldLmNvcmVfc3J2X2NvbmYtPmN0eC0+bG9jX2NvbmY7Ci0gICAgICAgICAgICAgICAgci0+c2VydmVyX25hbWUgPSAmbmFtZVtpXS5uYW1lOworICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VydmVyIG5hbWU6ICVzIiwgbmFtZVtpXS5uYW1lLmRhdGEpOwogCi0gICAgICAgICAgICAgICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwotICAgICAgICAgICAgICAgIHItPmNvbm5lY3Rpb24tPmxvZy0+ZmlsZSA9IGNsY2YtPmVycl9sb2ctPmZpbGU7Ci0gICAgICAgICAgICAgICAgaWYgKCEoci0+Y29ubmVjdGlvbi0+bG9nLT5sb2dfbGV2ZWwgJiBOR1hfTE9HX0RFQlVHX0NPTk5FQ1RJT04pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgci0+Y29ubmVjdGlvbi0+bG9nLT5sb2dfbGV2ZWwgPSBjbGNmLT5lcnJfbG9nLT5sb2dfbGV2ZWw7CisgICAgICAgICAgICBpZiAobmFtZVtpXS53aWxkY2FyZCkgeworICAgICAgICAgICAgICAgIGlmIChyLT5oZWFkZXJzX2luLmhvc3RfbmFtZV9sZW4gPD0gbmFtZVtpXS5uYW1lLmxlbikgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAobmd4X3JzdHJuY2FzZWNtcChyLT5oZWFkZXJzX2luLmhvc3QtPnZhbHVlLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZVtpXS5uYW1lLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZVtpXS5uYW1lLmxlbikgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoci0+aGVhZGVyc19pbi5ob3N0X25hbWVfbGVuICE9IG5hbWVbaV0ubmFtZS5sZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG5neF9zdHJuY2FzZWNtcChyLT5oZWFkZXJzX2luLmhvc3QtPnZhbHVlLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lW2ldLm5hbWUuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVbaV0ubmFtZS5sZW4pICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHItPnNydl9jb25mID0gbmFtZVtpXS5jb3JlX3Nydl9jb25mLT5jdHgtPnNydl9jb25mOworICAgICAgICAgICAgci0+bG9jX2NvbmYgPSBuYW1lW2ldLmNvcmVfc3J2X2NvbmYtPmN0eC0+bG9jX2NvbmY7CisgICAgICAgICAgICByLT5zZXJ2ZXJfbmFtZSA9ICZuYW1lW2ldLm5hbWU7CisKKyAgICAgICAgICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKKyAgICAgICAgICAgIHItPmNvbm5lY3Rpb24tPmxvZy0+ZmlsZSA9IGNsY2YtPmVycl9sb2ctPmZpbGU7CisKKyAgICAgICAgICAgIGlmICghKHItPmNvbm5lY3Rpb24tPmxvZy0+bG9nX2xldmVsICYgTkdYX0xPR19ERUJVR19DT05ORUNUSU9OKSkgeworICAgICAgICAgICAgICAgIHItPmNvbm5lY3Rpb24tPmxvZy0+bG9nX2xldmVsID0gY2xjZi0+ZXJyX2xvZy0+bG9nX2xldmVsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpID09IHItPnZpcnR1YWxfbmFtZXMtPm5lbHRzKSB7CkBAIC0xNTYyLDcgKzE1ODIsMTMgQEAKIAogICAgICAgICBpZiAoYiAhPSBjLT5idWZmZXIpIHsKIAotICAgICAgICAgICAgLyogbW92ZSB0aGUgbGFyZ2UgaGVhZGVyIGJ1ZmZlcnMgdG8gdGhlIGZyZWUgbGlzdCAqLworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIElmIHRoZSBsYXJnZSBoZWFkZXIgYnVmZmVycyB3ZXJlIGFsbG9jYXRlZCB3aGlsZSB0aGUgcHJldmlvdXMKKyAgICAgICAgICAgICAqIHJlcXVlc3QgcHJvY2Vzc2luZyB0aGVuIHdlIGRvIG5vdCB1c2UgYy0+YnVmZmVyIGZvcgorICAgICAgICAgICAgICogdGhlIHBpcGVsaW5lZCByZXF1ZXN0IChzZWUgbmd4X2h0dHBfaW5pdF9yZXF1ZXN0KCkpLgorICAgICAgICAgICAgICogCisgICAgICAgICAgICAgKiBOb3cgd2Ugd291bGQgbW92ZSB0aGUgbGFyZ2UgaGVhZGVyIGJ1ZmZlcnMgdG8gdGhlIGZyZWUgbGlzdC4KKyAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICBjc2NmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9zcnZfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKQEAgLTE2MTQsNiArMTY0MCwxNCBAQAogCiAgICAgaGMtPnBpcGVsaW5lID0gMDsKIAorICAgIC8qCisgICAgICogVG8ga2VlcCBhIG1lbW9yeSBmb290cHJpbnQgYXMgc21hbGwgYXMgcG9zc2libGUgZm9yIGFuIGlkbGUKKyAgICAgKiBrZWVwYWxpdmUgY29ubmVjdGlvbiB3ZSB0cnkgdG8gZnJlZSB0aGUgbmd4X2h0dHBfcmVxdWVzdF90IGFuZAorICAgICAqIGMtPmJ1ZmZlcidzIG1lbW9yeSBpZiB0aGV5IHdlcmUgYWxsb2NhdGVkIG91dHNpZGUgdGhlIGMtPnBvb2wuCisgICAgICogVGhlIGxhcmdlIGhlYWRlciBidWZmZXJzIGFyZSBhbHdheXMgYWxsb2NhdGVkIG91dHNpZGUgdGhlIGMtPnBvb2wgYW5kCisgICAgICogYXJlIGZyZWVkIHRvby4KKyAgICAgKi8KKwogICAgIGlmIChuZ3hfcGZyZWUoYy0+cG9vbCwgcikgPT0gTkdYX09LKSB7CiAgICAgICAgIGhjLT5yZXF1ZXN0ID0gTlVMTDsKICAgICB9CkBAIC0xNjIxLDYgKzE2NTUsMTIgQEAKICAgICBiID0gYy0+YnVmZmVyOwogCiAgICAgaWYgKG5neF9wZnJlZShjLT5wb29sLCBiLT5zdGFydCkgPT0gTkdYX09LKSB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogdGhlIHNwZWNpYWwgbm90ZSBmb3Igbmd4X2h0dHBfa2VlcGFsaXZlX2hhbmRsZXIoKSB0aGF0CisgICAgICAgICAqIGMtPmJ1ZmZlcidzIG1lbW9yeSB3YXMgZnJlZWQKKyAgICAgICAgICovCisKICAgICAgICAgYi0+cG9zID0gTlVMTDsKIAogICAgIH0gZWxzZSB7CkBAIC0xNjU1LDcgKzE2OTUsNyBAQAogICAgIHJldi0+ZXZlbnRfaGFuZGxlciA9IG5neF9odHRwX2tlZXBhbGl2ZV9oYW5kbGVyOwogCiAgICAgaWYgKHdldi0+YWN0aXZlKSB7Ci0gICAgICAgIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfSEFWRV9LUVVFVUVfRVZFTlQpIHsKKyAgICAgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfS1FVRVVFX0VWRU5UKSB7CiAgICAgICAgICAgICBpZiAobmd4X2RlbF9ldmVudCh3ZXYsIE5HWF9XUklURV9FVkVOVCwgTkdYX0RJU0FCTEVfRVZFTlQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfRVJST1IpCiAgICAgICAgICAgICB7CkBAIC0xNzAyLDcgKzE3NDIsNyBAQAogICAgIH0KIAogI2lmIDAKLSAgICAvKiBpZiAia2VlcGFsaXZlX2J1ZmZlcnMgb2ZmIiB0aGVuIHdlIG5lZWQgc29tZSBvdGhlciBwbGFjZSAqLworICAgIC8qIGlmIG5neF9odHRwX3JlcXVlc3RfdCB3YXMgZnJlZWQgdGhlbiB3ZSBuZWVkIHNvbWUgb3RoZXIgcGxhY2UgKi8KICAgICByLT5odHRwX3N0YXRlID0gTkdYX0hUVFBfS0VFUEFMSVZFX1NUQVRFOwogI2VuZGlmCiAKQEAgLTE3MzQsNyArMTc3NCw3IEBACiAKICNpZiAoSEFWRV9LUVVFVUUpCiAKLSAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX0hBVkVfS1FVRVVFX0VWRU5UKSB7CisgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfS1FVRVVFX0VWRU5UKSB7CiAgICAgICAgIGlmIChyZXYtPnBlbmRpbmdfZW9mKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgYy0+bG9nLCByZXYtPmtxX2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAia2V2ZW50KCkgcmVwb3J0ZWQgdGhhdCBjbGllbnQgJXMgY2xvc2VkICIKQEAgLTE3NTEsNiArMTc5MSwxMyBAQAogICAgIHNpemUgPSBiLT5lbmQgLSBiLT5zdGFydDsKIAogICAgIGlmIChiLT5wb3MgPT0gTlVMTCkgeworCisgICAgICAgIC8qCisgICAgICAgICAqIFRoZSBjLT5idWZmZXIncyBtZW1vcnkgd2FzIGZyZWVkIGJ5IG5neF9odHRwX3NldF9rZWVwYWxpdmUoKS4KKyAgICAgICAgICogSG93ZXZlciwgdGhlIGMtPmJ1ZmZlci0+c3RhcnQgYW5kIGMtPmJ1ZmZlci0+ZW5kIHdlcmUgbm90IGNoYW5nZWQKKyAgICAgICAgICogdG8ga2VlcCB0aGUgYnVmZmVyIHNpemUuCisgICAgICAgICAqLworCiAgICAgICAgIGlmICghKGItPnBvcyA9IG5neF9wYWxsb2MoYy0+cG9vbCwgc2l6ZSkpKSB7CiAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKGMpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTgyNCw3ICsxODcxLDcgQEAKICAgICB3ZXYtPmV2ZW50X2hhbmRsZXIgPSBuZ3hfaHR0cF9lbXB0eV9oYW5kbGVyOwogCiAgICAgaWYgKHdldi0+YWN0aXZlKSB7Ci0gICAgICAgIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfSEFWRV9LUVVFVUVfRVZFTlQpIHsKKyAgICAgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfS1FVRVVFX0VWRU5UKSB7CiAgICAgICAgICAgICBpZiAobmd4X2RlbF9ldmVudCh3ZXYsIE5HWF9XUklURV9FVkVOVCwgTkdYX0RJU0FCTEVfRVZFTlQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfRVJST1IpCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmggYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKaW5kZXggMDIyYjhhOC4uOGE5YzhmMiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaApAQCAtMzgsMTEgKzM4LDExIEBACiAjZGVmaW5lIE5HWF9IVFRQX1BBUlNFX0hFQURFUl9FUlJPUiAgICAgICAgMTQKICNkZWZpbmUgTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9IRUFERVIgICAgICAxNAogI2RlZmluZSBOR1hfSFRUUF9QQVJTRV9UT09fTE9OR19IRUFERVIgICAgIDE1Ci0jZGVmaW5lIE5HWF9IVFRQX1BBUlNFX05PX0hPU1RfSEVBREVSICAgICAgMTcKLSNkZWZpbmUgTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9DTF9IRUFERVIgICAxOAotI2RlZmluZSBOR1hfSFRUUF9QQVJTRV9QT1NUX1dPX0NMX0hFQURFUiAgIDE5Ci0jZGVmaW5lIE5HWF9IVFRQX1BBUlNFX0hUVFBfVE9fSFRUUFMgICAgICAgMjAKLSNkZWZpbmUgTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9IT1NUICAgICAgICAyMQorI2RlZmluZSBOR1hfSFRUUF9QQVJTRV9OT19IT1NUX0hFQURFUiAgICAgIDE2CisjZGVmaW5lIE5HWF9IVFRQX1BBUlNFX0lOVkFMSURfQ0xfSEVBREVSICAgMTcKKyNkZWZpbmUgTkdYX0hUVFBfUEFSU0VfUE9TVF9XT19DTF9IRUFERVIgICAxOAorI2RlZmluZSBOR1hfSFRUUF9QQVJTRV9IVFRQX1RPX0hUVFBTICAgICAgIDE5CisjZGVmaW5lIE5HWF9IVFRQX1BBUlNFX0lOVkFMSURfSE9TVCAgICAgICAgMjAKIAogCiAjZGVmaW5lIE5HWF9IVFRQX09LICAgICAgICAgICAgICAgICAgICAgICAgMjAwCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF93cml0ZV9maWx0ZXIuYyBiL3NyYy9odHRwL25neF9odHRwX3dyaXRlX2ZpbHRlci5jCmluZGV4IGE4YzY4OTQuLjM3ZTBmM2YgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3dyaXRlX2ZpbHRlci5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3dyaXRlX2ZpbHRlci5jCkBAIC0xMjUsNiArMTI1LDcgQEAKICAgICAgICAgaWYgKCFsYXN0KSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBodHRwIG91dHB1dCBjaGFpbiBpcyBlbXB0eSIpOworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9maWxlcy5jIGIvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmMKaW5kZXggODYwM2FiMi4uZjJiYTNhNCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmMKQEAgLTIxMCw1OSArMjEwLDMgQEAKIAogICAgIHJldHVybiBOR1hfT0s7CiB9Ci0KLQotI2lmIDAKLQotc3NpemVfdCBuZ3hfcmVhZF9maWxlKG5neF9maWxlX3QgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIG9mZl90IG9mZnNldCkKLXsKLSAgICBpZiAoIWZpbGUtPnJlYWQtPnJlYWR5KSB7Ci0KLSAgICAgICAgbmd4X21lbXplcm8oJmZpbGUtPmlvY2IsIHNpemVvZihpb2NiKSk7Ci0gICAgICAgIGZpbGUtPmlvY2IuYWlvX2ZpbGRlcyA9IGZpbGUtPmZkOwotICAgICAgICBmaWxlLT5pb2NiLmFpb19idWYgPSBidWY7Ci0gICAgICAgIGZpbGUtPmlvY2IuYWlvX25ieXRlcyA9IHNpemU7Ci0gICAgICAgIGZpbGUtPmlvY2IuYWlvX29mZnNldCA9IG9mZnNldDsKLSNpZiAoVVNFX0FJT19LUVVFVUUpCi0gICAgICAgIGZpbGUtPmlvY2IuYWlvX3NpZ2V2ZW50LnNpZ2V2X25vdGlmeSA9IFNJR0VWX0tFVkVOVDsKLSAgICAgICAgZmlsZS0+aW9jYi5haW9fc2lnZXZlbnQuc2lnZXZfbm90aWZ5X2txdWV1ZSA9IHRpZC0+a3E7Ci0gICAgICAgIGZpbGUtPmlvY2IuYWlvX3NpZ2V2ZW50LnNpZ2V2X3ZhbHVlID0gKHVuaW9uIHNpZ3ZhbCkgZmlsZTsKLSNlbmRpZgotI2lmIChVU0VfQUlPX1NJR05BTCkKLSAgICAgICAgZmlsZS0+aW9jYi5haW9fc2lnZXZlbnQuc2lnZXZfbm90aWZ5ID0gU0lHRVZfU0lHTkFMOwotICAgICAgICBmaWxlLT5pb2NiLmFpb19zaWdldmVudC5zaWdldl9zaWdubyA9IE5HWF9TSUdBSU87Ci0jaWZuZGVmIF9fRnJlZUJTRF9fCi0gICAgICAgIGZpbGUtPmlvY2IuYWlvX3NpZ2V2ZW50LnNpZ2V2X3ZhbHVlLnNpdmFsX3B0ciA9IGZpbGU7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgICAgIGlmIChhaW9fcmVhZCgmZmlsZS0+aW9jYikgPT0gLTEpIHsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIGZpbGUtPmxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiYWlvX3JlYWQoKSBmYWlsZWQiKTsKLSAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0KLSAgICAgICAgbiA9IGFpb19lcnJvcigmZmlsZS0+aW9jYik7Ci0gICAgICAgIGlmIChuID09IEVJTlBST0dSRVNTKQotICAgICAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKLQotICAgICAgICBpZiAobiA9PSAtMSkgewotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgZmlsZS0+bG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJhaW9fcmVhZCgpIGZhaWxlZCIpOwotICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG5neF9hc3NlcnQoZmlsZS0+aW9jYi5haW9fYnVmID09IGJ1ZiksIHJldHVybiBOR1hfRVJST1IsCi0gICAgICAgICAgICAgICAibmd4X2Fpb19yZWFkX2ZpbGU6IGFub3RoZXIgYnVmZmVyIGlzIHBhc3NlZCIpOwotCi0gICAgbiA9IGFpb19yZXR1cm4oJmZpbGUtPmlvY2IpOwotICAgIGlmIChuID09IC0xKSB7Ci0gICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIGZpbGUtPmxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICJhaW9fcmVhZCgpIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgIH0KLQotICAgIHJldHVybiBuOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9maWxlcy5oIGIvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmgKaW5kZXggM2JhMTY3MC4uMDZjMjJmNSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmgKQEAgLTk5LDcgKzk5LDcgQEAKIAogCiAjZGVmaW5lIG5neF9kZV9uYW1lKGRpcikgICAgICAgICAoZGlyKS0+ZGUtPmRfbmFtZQotI2lmZGVmIF9fRnJlZUJTRF9fCisjaWYgKE5HWF9GUkVFQlNEKQogI2RlZmluZSBuZ3hfZGVfbmFtZWxlbihkaXIpICAgICAgKGRpciktPmRlLT5kX25hbWxlbgogI2Vsc2UKICNkZWZpbmUgbmd4X2RlX25hbWVsZW4oZGlyKSAgICAgIG5neF9zdHJsZW4oKGRpciktPmRlLT5kX25hbWUpCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9jb25maWcuaCBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2NvbmZpZy5oCmluZGV4IDc5NjFhM2IuLjQ4NDBhOTkgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2NvbmZpZy5oCisrKyBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2NvbmZpZy5oCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSA8Z3JwLmg+CiAjaW5jbHVkZSA8ZGlyZW50Lmg+CiAKLSNpbmNsdWRlIDxzeXMvdWlvLmg+CiAjaW5jbHVkZSA8c3lzL2ZpbGlvLmg+ICAgICAgICAgIC8qIEZJT05CSU8gKi8KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxmY250bC5oPgogCkBAIC00MSwxMiArNDEsMTEgQEAKICNpbmNsdWRlIDxsaWJ1dGlsLmg+ICAgICAgICAgICAgLyogc2V0cHJvY3RpdGxlKCkgYmVmb3JlIDQuMSAqLwogI2luY2x1ZGUgPG9zcmVsZGF0ZS5oPgogI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4gICAgICAgICAgLyogQUxJR04oKSAqLwogCiAKICNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDQwMDAxNwogCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+ICAgICAgICAgIC8qIEFMSUdOKCkgKi8KLQogLyogRnJlZUJTRCAzLnggaGFzIG5vIENNU0dfU1BBQ0UoKSBhdCBhbGwgYW5kIGhhcyB0aGUgYnJva2VuIENNU0dfREFUQSgpICovCiAKICN1bmRlZiAgQ01TR19TUEFDRQpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2Rfc2VuZGZpbGVfY2hhaW4uYyBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3NlbmRmaWxlX2NoYWluLmMKaW5kZXggZDI5ZGViZi4uODMwM2MwNiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2Rfc2VuZGZpbGVfY2hhaW4uYworKysgYi9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9zZW5kZmlsZV9jaGFpbi5jCkBAIC01Nyw3ICs1Nyw3IEBACiAKICNpZiAoSEFWRV9LUVVFVUUpCiAKLSAgICBpZiAoKG5neF9ldmVudF9mbGFncyAmIE5HWF9IQVZFX0tRVUVVRV9FVkVOVCkgJiYgd2V2LT5wZW5kaW5nX2VvZikgeworICAgIGlmICgobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9LUVVFVUVfRVZFTlQpICYmIHdldi0+cGVuZGluZ19lb2YpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgd2V2LT5rcV9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAia2V2ZW50KCkgcmVwb3J0ZWQgYWJvdXQgYW4gY2xvc2VkIGNvbm5lY3Rpb24iKTsKIApAQCAtMTMxLDcgKzEzMSw2IEBACiAgICAgICAgICAgICBzZW5kICs9IHNpemU7CiAgICAgICAgIH0KIAotICAgICAgICAvKiBnZXQgdGhlIGZpbGUgYnVmICovCiAKICAgICAgICAgaWYgKGNsICYmIGNsLT5idWYtPmluX2ZpbGUgJiYgc2VuZCA8IGxpbWl0KSB7CiAgICAgICAgICAgICBmaWxlID0gY2wtPmJ1ZjsKQEAgLTE2NCwxNyArMTYzLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAmJiBmcHJldiA9PSBjbC0+YnVmLT5maWxlX3Bvcyk7CiAgICAgICAgIH0KIAorCiAgICAgICAgIGlmIChmaWxlKSB7CisKICAgICAgICAgICAgIC8qIGNyZWF0ZSB0aGUgdGFpbGVyIGlvdmVjIGFuZCBjb2FsZXNjZSB0aGUgbmVpZ2hib3VyaW5nIGJ1ZnMgKi8KIAogICAgICAgICAgICAgcHJldiA9IE5VTEw7CiAgICAgICAgICAgICBpb3YgPSBOVUxMOwogCi0gICAgICAgICAgICBmb3IgKC8qIHZvaWQgKi87Ci0gICAgICAgICAgICAgICAgIGNsICYmIGhlYWRlci5uZWx0cyA8IElPVl9NQVggJiYgc2VuZCA8IGxpbWl0OwotICAgICAgICAgICAgICAgICBjbCA9IGNsLT5uZXh0KQotICAgICAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGNsICYmIGhlYWRlci5uZWx0cyA8IElPVl9NQVggJiYgc2VuZCA8IGxpbWl0KSB7CisKICAgICAgICAgICAgICAgICBpZiAobmd4X2J1Zl9zcGVjaWFsKGNsLT5idWYpKSB7CisgICAgICAgICAgICAgICAgICAgIGNsID0gY2wtPm5leHQ7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjAyLDYgKzIwMiw3IEBACiAKICAgICAgICAgICAgICAgICBwcmV2ID0gY2wtPmJ1Zi0+cG9zICsgc2l6ZTsKICAgICAgICAgICAgICAgICBzZW5kICs9IHNpemU7CisgICAgICAgICAgICAgICAgY2wgPSBjbC0+bmV4dDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yMTAsNyArMjExLDYgQEAKICAgICAgICAgICAgIGlmIChuZ3hfZnJlZWJzZF91c2VfdGNwX25vcHVzaAogICAgICAgICAgICAgICAgICYmIGMtPnRjcF9ub3B1c2ggPT0gTkdYX1RDUF9OT1BVU0hfVU5TRVQpCiAgICAgICAgICAgICB7Ci0KICAgICAgICAgICAgICAgICBpZiAobmd4X3RjcF9ub3B1c2goYy0+ZmQpID09IE5HWF9FUlJPUikgewogICAgICAgICAgICAgICAgICAgICBlcnIgPSBuZ3hfZXJybm87CiAKQEAgLTI3NSw2ICsyNzUsMjAgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChyYyA9PSAwICYmIHNlbnQgPT0gMCkgeworCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiByYyBhbmQgc2VudCBhcmUgZXF1YWxzIHRvIHplcm8gd2hlbiBzb21lb25lIGhhcyB0cnVuY2F0ZWQKKyAgICAgICAgICAgICAgICAgKiB0aGUgZmlsZSwgc28gdGhlIG9mZnNldCBiZWNhbWUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGZpbGUKKyAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgYy0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbmRmaWxlKCkgcmVwb3J0ZWQgdGhhdCBcIiVzXCIgd2FzIHRydW5jYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLT5maWxlLT5uYW1lLmRhdGEpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DSEFJTl9FUlJPUjsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzQoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbmRmaWxlOiAlZCwgQCIgT0ZGX1RfRk1UICIgIiBPRkZfVF9GTVQgIjolZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYywgZmlsZS0+ZmlsZV9wb3MsIHNlbnQsIGZzaXplICsgaHNpemUpOwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2xpbnV4X2NvbmZpZy5oIGIvc3JjL29zL3VuaXgvbmd4X2xpbnV4X2NvbmZpZy5oCmluZGV4IDExNDI3ZDMuLjlhMGZlZTkgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9saW51eF9jb25maWcuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfbGludXhfY29uZmlnLmgKQEAgLTgsMTEgKzgsMTEgQEAKICNkZWZpbmUgX05HWF9MSU5VWF9DT05GSUdfSF9JTkNMVURFRF8KIAogCisjaWZuZGVmIF9HTlVfU09VUkNFCiAjZGVmaW5lIF9HTlVfU09VUkNFICAgICAgICAgICAgIC8qIHByZWFkKCksIHB3cml0ZSgpLCBnZXRob3N0bmFtZSgpICovCisjZW5kaWYKIAogI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyAgNjQKLSNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKLQogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KQEAgLTUxLDExICs1MSwxMSBAQAogI2luY2x1ZGUgPG5neF9hdXRvX2NvbmZpZy5oPgogCiAKLSNpZiAoSEFWRV9QUkNUTCkKKyNpZiAoTkdYX0hBVkVfU1lTX1BSQ1RMX0gpCiAjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CiAjZW5kaWYKIAotI2lmIChIQVZFX1NFTkRGSUxFNjQpCisjaWYgKE5HWF9IQVZFX1NFTkRGSUxFNjQpCiAjaW5jbHVkZSA8c3lzL3NlbmRmaWxlLmg+CiAjZWxzZQogZXh0ZXJuIHNzaXplX3Qgc2VuZGZpbGUoaW50IHMsIGludCBmZCwgaW50MzJfdCAqb2Zmc2V0LCBzaXplX3Qgc2l6ZSk7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfbGludXhfc2VuZGZpbGVfY2hhaW4uYyBiL3NyYy9vcy91bml4L25neF9saW51eF9zZW5kZmlsZV9jaGFpbi5jCmluZGV4IDM4YTJhOTYuLjRkZTdhYzIgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9saW51eF9zZW5kZmlsZV9jaGFpbi5jCisrKyBiL3NyYy9vcy91bml4L25neF9saW51eF9zZW5kZmlsZV9jaGFpbi5jCkBAIC0zNyw3ICszNyw3IEBACiAgICAgbmd4X2V2ZW50X3QgICAgICp3ZXY7CiAgICAgbmd4X2NoYWluX3QgICAgICpjbDsKICAgICBzdHJ1Y3QgaW92ZWMgICAgKmlvdiwgaGVhZGVyc1tOR1hfSEVBREVSU107Ci0jaWYgKEhBVkVfU0VOREZJTEU2NCkKKyNpZiAoTkdYX0hBVkVfU0VOREZJTEU2NCkKICAgICBvZmZfdCAgICAgICAgICAgIG9mZnNldDsKICNlbHNlCiAgICAgaW50MzJfdCAgICAgICAgICBvZmZzZXQ7CkBAIC0xNjcsNyArMTY3LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChmaWxlKSB7Ci0jaWYgKEhBVkVfU0VOREZJTEU2NCkKKyNpZiAoTkdYX0hBVkVfU0VOREZJTEU2NCkKICAgICAgICAgICAgIG9mZnNldCA9IGZpbGUtPmZpbGVfcG9zOwogI2Vsc2UKICAgICAgICAgICAgIG9mZnNldCA9IChpbnQzMl90KSBmaWxlLT5maWxlX3BvczsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9vcy5oIGIvc3JjL29zL3VuaXgvbmd4X29zLmgKaW5kZXggYjI4YTczZi4uZGM5ZjdhOCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X29zLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X29zLmgKQEAgLTY2LDE3ICs2NiwxNSBAQAogCiAjZGVmaW5lIG5neF9zdGRlcnJfZmlsZW5vICBTVERFUlJfRklMRU5PCiAKLSNpZmRlZiBfX0ZyZWVCU0RfXworI2lmIChOR1hfRlJFRUJTRCkKICNpbmNsdWRlIDxuZ3hfZnJlZWJzZC5oPgotI2VuZGlmCiAKIAotI2lmZGVmIF9fbGludXhfXworI2VsaWYgKE5HWF9MSU5VWCkKICNpbmNsdWRlIDxuZ3hfbGludXguaD4KLSNlbmRpZgogCiAKLSNpZmRlZiBTT0xBUklTCisjZWxpZiAoTkdYX1NPTEFSSVMpCiAjaW5jbHVkZSA8bmd4X3NvbGFyaXMuaD4KICNlbmRpZgogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfY29uZmlnLmggYi9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfY29uZmlnLmgKaW5kZXggYmYwZjVkOC4uYmFjMDJmNyAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3Bvc2l4X2NvbmZpZy5oCisrKyBiL3NyYy9vcy91bml4L25neF9wb3NpeF9jb25maWcuaApAQCAtOCw5ICs4LDIwIEBACiAjZGVmaW5lIF9OR1hfUE9TSVhfQ09ORklHX0hfSU5DTFVERURfCiAKIAorI2lmIDAKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRQorI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEICAxCisjZW5kaWYKKworCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpZiAoTkdYX0hBVkVfVU5JU1REX0gpCiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiAoTkdYX0hBVkVfSU5UVFlQRVNfSCkKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+ICAgICAgICAgICAgIC8qIG9mZnNldG9mKCkgKi8KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMjIsOCArMzMsMTIgQEAKICNpbmNsdWRlIDxncnAuaD4KICNpbmNsdWRlIDxkaXJlbnQuaD4KIAotI2luY2x1ZGUgPHN5cy91aW8uaD4KKyNpZiAoTkdYX0hBVkVfU1lTX0ZJTElPX0gpCiAjaW5jbHVkZSA8c3lzL2ZpbGlvLmg+ICAgICAgICAgIC8qIEZJT05CSU8gKi8KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPiAgICAgICAgICAvKiBGSU9OQklPICovCisKKyNpbmNsdWRlIDxzeXMvdWlvLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxmY250bC5oPgogCkBAIC0zNCw5ICs0OSwxOSBAQAogCiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPiAgICAgICAgLyogVENQX05PREVMQVkgKi8KICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KICNpbmNsdWRlIDxuZXRkYi5oPgogCisjaWYgKE5HWF9IQVZFX0xJTUlUU19IKQorI2luY2x1ZGUgPGxpbWl0cy5oPiAgICAgICAgICAgICAvKiBJT1ZfTUFYICovCisjZW5kaWYKKworI2lmbmRlZiBJT1ZfTUFYCisjZGVmaW5lIElPVl9NQVggICAxNgorI2VuZGlmCisKKwogI2luY2x1ZGUgPG5neF9hdXRvX2NvbmZpZy5oPgogCiAKQEAgLTUzLDYgKzc4LDMyIEBACiAjZW5kaWYKIAogCisjaWYgKEhBVkVfS1FVRVVFKQorI2luY2x1ZGUgPHN5cy9ldmVudC5oPgorI2VuZGlmCisKKworI2lmIChIQVZFX0RFVlBPTEwpCisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL2RldnBvbGwuaD4KKyNlbmRpZgorCisKKyNpZiAoX19GcmVlQlNEX18pICYmIChfX0ZyZWVCU0RfdmVyc2lvbiA8IDQwMDAxNykKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPiAgICAgICAgICAvKiBBTElHTigpICovCisKKy8qIEZyZWVCU0QgMy54IGhhcyBubyBDTVNHX1NQQUNFKCkgYXQgYWxsIGFuZCBoYXMgdGhlIGJyb2tlbiBDTVNHX0RBVEEoKSAqLworCisjdW5kZWYgIENNU0dfU1BBQ0UKKyNkZWZpbmUgQ01TR19TUEFDRShsKSAgICAgICAoQUxJR04oc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSkgKyBBTElHTihsKSkKKworI3VuZGVmICBDTVNHX0RBVEEKKyNkZWZpbmUgQ01TR19EQVRBKGNtc2cpICAgICAoKHVfY2hhciAqKShjbXNnKSArIEFMSUdOKHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpKQorCisjZW5kaWYKKworCiAjZGVmaW5lIG5neF9zZXRwcm9jdGl0bGUodGl0bGUpCiAKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3Bvc2l4X2luaXQuYyBiL3NyYy9vcy91bml4L25neF9wb3NpeF9pbml0LmMKaW5kZXggMTM0YzI3Ni4uMWM3YjFiNiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3Bvc2l4X2luaXQuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfaW5pdC5jCkBAIC0zMyw2ICszMywxMiBAQAogfQogCiAKK3ZvaWQgbmd4X29zX3N0YXR1cyhuZ3hfbG9nX3QgKmxvZykKK3sKKyAgICBuZ3hfcG9zaXhfc3RhdHVzKGxvZyk7Cit9CisKKwogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuYyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmMKaW5kZXggYWZmMjQyYy4uNGY3ZWQ2NCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5jCkBAIC0yMzYsNyArMjM2LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSNpZiAoU09MQVJJUykKKyNpZiAoTkdYX1NPTEFSSVMpCiAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBTb2xhcmlzIGFsd2F5cyBjYWxscyB0aGUgc2lnbmFsIGhhbmRsZXIgZm9yIGVhY2ggZXhpdGVkIHByb2Nlc3MKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmggYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5oCmluZGV4IDBjZWEzMDIuLjljYjA3MDAgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuaApAQCAtNTQsNyArNTQsMTMgQEAKIG5neF9waWRfdCBuZ3hfZXhlY3V0ZShuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9leGVjX2N0eF90ICpjdHgpOwogdm9pZCBuZ3hfcHJvY2Vzc19nZXRfc3RhdHVzKHZvaWQpOwogCisKKyNpZiAoTkdYX0hBVkVfU0NIRURfWUlFTEQpCiAjZGVmaW5lIG5neF9zY2hlZF95aWVsZCgpICBzY2hlZF95aWVsZCgpCisjZWxzZQorI2RlZmluZSBuZ3hfc2NoZWRfeWllbGQoKSAgdXNsZWVwKDEpCisjZW5kaWYKKwogCiBleHRlcm4gaW50ICAgICAgICAgICAgbmd4X2FyZ2M7CiBleHRlcm4gY2hhciAgICAgICAgICoqbmd4X2FyZ3Y7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYwppbmRleCBjNDNhN2ViLi4xZGE0OTE1IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jCisrKyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMKQEAgLTE3NSwxMSArMTc1LDE0IEBACiAKICAgICAgICAgaWYgKG5neF90aW1lcikgewogICAgICAgICAgICAgbmd4X3RpbWVyID0gMDsKLSAgICAgICAgICAgIG5neF9zdGFydF93b3JrZXJfcHJvY2Vzc2VzKGN5Y2xlLCBjY2YtPndvcmtlcl9wcm9jZXNzZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfUFJPQ0VTU19KVVNUX1JFU1BBV04pOwotICAgICAgICAgICAgbGl2ZSA9IDE7Ci0gICAgICAgICAgICBuZ3hfc2lnbmFsX3dvcmtlcl9wcm9jZXNzZXMoY3ljbGUsCisKKyAgICAgICAgICAgIGlmICghbmd4X25vYWNjZXB0aW5nKSB7CisgICAgICAgICAgICAgICAgbmd4X3N0YXJ0X3dvcmtlcl9wcm9jZXNzZXMoY3ljbGUsIGNjZi0+d29ya2VyX3Byb2Nlc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfUFJPQ0VTU19KVVNUX1JFU1BBV04pOworICAgICAgICAgICAgICAgIGxpdmUgPSAxOworICAgICAgICAgICAgICAgIG5neF9zaWduYWxfd29ya2VyX3Byb2Nlc3NlcyhjeWNsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9TSFVURE9XTl9TSUdOQUwpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChuZ3hfcmVjb25maWd1cmUpIHsKQEAgLTU3OCwxNiArNTgxLDE0IEBACiAKICAgICBjY2YgPSAobmd4X2NvcmVfY29uZl90ICopIG5neF9nZXRfY29uZihjeWNsZS0+Y29uZl9jdHgsIG5neF9jb3JlX21vZHVsZSk7CiAKLSAgICBpZiAoY2NmLT5ncm91cCAhPSAoZ2lkX3QpIE5HWF9DT05GX1VOU0VUKSB7CisgICAgaWYgKGdldGV1aWQoKSA9PSAwKSB7CiAgICAgICAgIGlmIChzZXRnaWQoY2NmLT5ncm91cCkgPT0gLTEpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0Z2lkKCVkKSBmYWlsZWQiLCBjY2YtPmdyb3VwKTsKICAgICAgICAgICAgIC8qIGZhdGFsICovCiAgICAgICAgICAgICBleGl0KDIpOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgaWYgKGNjZi0+dXNlciAhPSAodWlkX3QpIE5HWF9DT05GX1VOU0VUKSB7CiAgICAgICAgIGlmIChzZXR1aWQoY2NmLT51c2VyKSA9PSAtMSkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXR1aWQoJWQpIGZhaWxlZCIsIGNjZi0+dXNlcik7CkBAIC01OTYsNyArNTk3LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotI2lmIChIQVZFX1BSX1NFVF9EVU1QQUJMRSkKKyNpZiAoTkdYX0hBVkVfUFJfU0VUX0RVTVBBQkxFKQogCiAgICAgLyogYWxsb3cgY29yZWR1bXAgYWZ0ZXIgc2V0dWlkKCkgaW4gTGludXggMi40LnggKi8KIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3JlYWR2X2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfcmVhZHZfY2hhaW4uYwppbmRleCBhNTI5YjNkLi4yZGI5OThhIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcmVhZHZfY2hhaW4uYworKysgYi9zcmMvb3MvdW5peC9uZ3hfcmVhZHZfY2hhaW4uYwpAQCAtMjIsNyArMjIsNyBAQAogCiAgICAgcmV2ID0gYy0+cmVhZDsgCiAKLSAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX0hBVkVfS1FVRVVFX0VWRU5UKSB7CisgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfS1FVRVVFX0VWRU5UKSB7CiAgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgInJlYWR2OiBlb2Y6JWQsIGF2YWlsOiVkLCBlcnI6JWQiLAogICAgICAgICAgICAgICAgICAgICAgICByZXYtPnBlbmRpbmdfZW9mLCByZXYtPmF2YWlsYWJsZSwgcmV2LT5rcV9lcnJubyk7CkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgIG4gPSByZWFkdihjLT5mZCwgKHN0cnVjdCBpb3ZlYyAqKSBpby5lbHRzLCBpby5uZWx0cyk7CiAKICAgICAgICAgaWYgKG4gPj0gMCkgewotICAgICAgICAgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9IQVZFX0tRVUVVRV9FVkVOVCkgeworICAgICAgICAgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfS1FVRVVFX0VWRU5UKSB7CiAgICAgICAgICAgICAgICAgcmV2LT5hdmFpbGFibGUgLT0gbjsKIAogICAgICAgICAgICAgICAgIC8qCkBAIC0xODYsNyArMTg2LDcgQEAKIAogICAgICAgICB9IGVsc2UgaWYgKG4gPiAwKSB7CiAKLSAgICAgICAgICAgIGlmIChuIDwgc2l6ZSAmJiAhKG5neF9ldmVudF9mbGFncyAmIE5HWF9IQVZFX0dSRUVEWV9FVkVOVCkpIHsKKyAgICAgICAgICAgIGlmIChuIDwgc2l6ZSAmJiAhKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfR1JFRURZX0VWRU5UKSkgewogICAgICAgICAgICAgICAgIHJldi0+cmVhZHkgPSAwOwogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcmVjdi5jIGIvc3JjL29zL3VuaXgvbmd4X3JlY3YuYwppbmRleCA2ZTViOGMwLi5kNThjYTllIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcmVjdi5jCisrKyBiL3NyYy9vcy91bml4L25neF9yZWN2LmMKQEAgLTE5LDcgKzE5LDcgQEAKIAogICAgIHJldiA9IGMtPnJlYWQ7CiAKLSAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX0hBVkVfS1FVRVVFX0VWRU5UKSB7CisgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfS1FVRVVFX0VWRU5UKSB7CiAgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgInJlY3Y6IGVvZjolZCwgYXZhaWw6JWQsIGVycjolZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJldi0+cGVuZGluZ19lb2YsIHJldi0+YXZhaWxhYmxlLCByZXYtPmtxX2Vycm5vKTsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgInJlY3Y6IGZkOiVkICVkIG9mICVkIiwgYy0+ZmQsIG4sIHNpemUpOwogCiAgICAgICAgIGlmIChuID49IDApIHsKLSAgICAgICAgICAgIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfSEFWRV9LUVVFVUVfRVZFTlQpIHsKKyAgICAgICAgICAgIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0tRVUVVRV9FVkVOVCkgewogICAgICAgICAgICAgICAgIHJldi0+YXZhaWxhYmxlIC09IG47CiAKICAgICAgICAgICAgICAgICAvKgpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgICAgIH0gZWxzZSBpZiAobiA+IDApIHsKIAogICAgICAgICAgICAgaWYgKChzaXplX3QpIG4gPCBzaXplCi0gICAgICAgICAgICAgICAgJiYgIShuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfSEFWRV9HUkVFRFlfRVZFTlQpKQorICAgICAgICAgICAgICAgICYmICEobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9HUkVFRFlfRVZFTlQpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldi0+cmVhZHkgPSAwOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3NlbmQuYyBiL3NyYy9vcy91bml4L25neF9zZW5kLmMKaW5kZXggZjA5ZGFkYi4uZmY1MDFjMyAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3NlbmQuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfc2VuZC5jCkBAIC0xOSw3ICsxOSw3IEBACiAKICNpZiAoSEFWRV9LUVVFVUUpCiAKLSAgICBpZiAoKG5neF9ldmVudF9mbGFncyAmIE5HWF9IQVZFX0tRVUVVRV9FVkVOVCkgJiYgd2V2LT5wZW5kaW5nX2VvZikgeworICAgIGlmICgobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9LUVVFVUVfRVZFTlQpICYmIHdldi0+cGVuZGluZ19lb2YpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgd2V2LT5rcV9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAia2V2ZW50KCkgcmVwb3J0ZWQgYWJvdXQgYW4gY2xvc2VkIGNvbm5lY3Rpb24iKTsKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3NldHByb2N0aXRsZS5jIGIvc3JjL29zL3VuaXgvbmd4X3NldHByb2N0aXRsZS5jCmluZGV4IDZhYzg3MDcuLjJlNDExMDggMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9zZXRwcm9jdGl0bGUuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfc2V0cHJvY3RpdGxlLmMKQEAgLTc2LDcgKzc2LDcgQEAKIHsKICAgICB1X2NoYXIgICAgICpwOwogCi0jaWYgKFNPTEFSSVMpCisjaWYgKE5HWF9TT0xBUklTKQogCiAgICAgbmd4X2ludF90ICAgaTsKICAgICBzaXplX3QgICAgICBzaXplOwpAQCAtOTAsNyArOTAsNyBAQAogCiAgICAgcCA9IG5neF9jcHlzdHJuKHAsICh1X2NoYXIgKikgdGl0bGUsIG5neF9vc19hcmd2X2xhc3QgLSAoY2hhciAqKSBwKTsKIAotI2lmIChTT0xBUklTKQorI2lmIChOR1hfU09MQVJJUykKIAogICAgIHNpemUgPSAwOwogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfc29ja2V0LmMgYi9zcmMvb3MvdW5peC9uZ3hfc29ja2V0LmMKaW5kZXggM2UxODhiZC4uZGE5MzZiMiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3NvY2tldC5jCisrKyBiL3NyYy9vcy91bml4L25neF9zb2NrZXQuYwpAQCAtNDQsNyArNDQsNyBAQAogI2VuZGlmCiAKIAotI2lmZGVmIF9fRnJlZUJTRF9fCisjaWYgKE5HWF9GUkVFQlNEKQogCiBpbnQgbmd4X3RjcF9ub3B1c2gobmd4X3NvY2tldF90IHMpCiB7CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgJnRjcF9ub3B1c2gsIHNpemVvZihpbnQpKTsKIH0KIAotI2VsaWYgX19saW51eF9fCisjZWxpZiAoTkdYX0xJTlVYKQogCiBpbnQgbmd4X3RjcF9ub3B1c2gobmd4X3NvY2tldF90IHMpCiB7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfc29ja2V0LmggYi9zcmMvb3MvdW5peC9uZ3hfc29ja2V0LmgKaW5kZXggNjdkMGQ0MS4uMzQ0NDlkMCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3NvY2tldC5oCisrKyBiL3NyYy9vcy91bml4L25neF9zb2NrZXQuaApAQCAtMzcsNyArMzcsNyBAQAogaW50IG5neF90Y3Bfbm9wdXNoKG5neF9zb2NrZXRfdCBzKTsKIGludCBuZ3hfdGNwX3B1c2gobmd4X3NvY2tldF90IHMpOwogCi0jaWZkZWYgX19saW51eF9fCisjaWYgKE5HWF9MSU5VWCkKIAogI2RlZmluZSBuZ3hfdGNwX25vcHVzaF9uICAgInNldHNvY2tvcHQoVENQX0NPUkspIgogI2RlZmluZSBuZ3hfdGNwX3B1c2hfbiAgICAgInNldHNvY2tvcHQoIVRDUF9DT1JLKSIKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9zb2xhcmlzX2NvbmZpZy5oIGIvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfY29uZmlnLmgKaW5kZXggOTZjMTE5Yy4uNWQ5NGNkYyAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfY29uZmlnLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfY29uZmlnLmgKQEAgLTgsOCArOCw2IEBACiAjZGVmaW5lIF9OR1hfU09MQVJJU19DT05GSUdfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIFNPTEFSSVMgIDEKLQogI2RlZmluZSBfUkVFTlRSQU5UCiAKICNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgIDY0ICAgLyogbXVzdCBiZSBiZWZvcmUgPHN5cy90eXBlcy5oPiAqLwpAQCAtMjgsOCArMjYsOCBAQAogI2luY2x1ZGUgPGdycC5oPgogI2luY2x1ZGUgPGRpcmVudC5oPgogCi0jaW5jbHVkZSA8c3lzL3Vpby5oPgogI2luY2x1ZGUgPHN5cy9maWxpby5oPiAgICAgICAgICAvKiBGSU9OQklPICovCisjaW5jbHVkZSA8c3lzL3Vpby5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3RocmVhZC5oIGIvc3JjL29zL3VuaXgvbmd4X3RocmVhZC5oCmluZGV4IDdiNWRjMjMuLjE2ZTIxNmUgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF90aHJlYWQuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfdGhyZWFkLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNkZWZpbmUgbmd4X3RocmVhZF9zZWxmKCkgICAgICAgICAgICBwdGhyZWFkX3NlbGYoKQogI2RlZmluZSBuZ3hfbG9nX3RpZCAgICAgICAgICAgICAgICAgIChpbnQpIG5neF90aHJlYWRfc2VsZigpCiAKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChOR1hfTElOVVhUSFJFQURTKQorI2lmIChOR1hfRlJFRUJTRCkgJiYgIShOR1hfTElOVVhUSFJFQURTKQogI2RlZmluZSBUSURfVF9GTVQgICAgICAgICAgICAgICAgICAgIFBUUl9GTVQKICNlbHNlCiAjZGVmaW5lIFRJRF9UX0ZNVCAgICAgICAgICAgICAgICAgICAgIiVkIgpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3RpbWUuaCBiL3NyYy9vcy91bml4L25neF90aW1lLmgKaW5kZXggNzkzZTMyZS4uMGVhZDBkOCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3RpbWUuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfdGltZS5oCkBAIC00Miw4ICs0MiwxNCBAQAogI2VuZGlmCiAKIAotI2lmIChTT0xBUklTKQorI2lmIChOR1hfU09MQVJJUykKKwogI2RlZmluZSBuZ3hfdGltZXpvbmUoaXNkc3QpICgtIChpc2RzdCA/IGFsdHpvbmUgOiB0aW1lem9uZSkgLyA2MCkKKworI2Vsc2UKKworI2RlZmluZSBuZ3hfdGltZXpvbmUoaXNkc3QpICgtIChpc2RzdCA/IHRpbWV6b25lICsgMzYwMCA6IHRpbWV6b25lKSAvIDYwKQorCiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfd3JpdGV2X2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfd3JpdGV2X2NoYWluLmMKaW5kZXggYTM1OTVmZi4uZTU3YjU5MyAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3dyaXRldl9jaGFpbi5jCisrKyBiL3NyYy9vcy91bml4L25neF93cml0ZXZfY2hhaW4uYwpAQCAtMzIsNyArMzIsNyBAQAogCiAjaWYgKEhBVkVfS1FVRVVFKQogCi0gICAgaWYgKChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfSEFWRV9LUVVFVUVfRVZFTlQpICYmIHdldi0+cGVuZGluZ19lb2YpIHsKKyAgICBpZiAoKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfS1FVRVVFX0VWRU5UKSAmJiB3ZXYtPnBlbmRpbmdfZW9mKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIHdldi0+a3FfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgImtldmVudCgpIHJlcG9ydGVkIGFib3V0IGFuIGNsb3NlZCBjb25uZWN0aW9uIik7CiAKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfd2luMzJfY29uZmlnLmggYi9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2NvbmZpZy5oCmluZGV4IGJhYmEzZGEuLmE2YzMzNmQgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfd2luMzJfY29uZmlnLmgKKysrIGIvc3JjL29zL3dpbjMyL25neF93aW4zMl9jb25maWcuaApAQCAtMzAsNyArMzAsMTIgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KIAorCiAjaWZkZWYgX01TQ19WRVIKKworLyogdGhlIGVuZCBvZiB0aGUgcHJlY29tcGlsZWQgaGVhZGVycyAqLworI3ByYWdtYSBoZHJzdG9wCisKICNwcmFnbWEgd2FybmluZyhkZWZhdWx0OjQyMDEpCiAKIAo=