ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL01ha2VmaWxlIGIvcnVudGltZS9kb2MvTWFrZWZpbGUKaW5kZXggYTg3NTY1ZS4uOGRhNTkyYyAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvTWFrZWZpbGUKKysrIGIvcnVudGltZS9kb2MvTWFrZWZpbGUKQEAgLTcxLDYgKzcxLDcgQEAKIAlwaV9nemlwLnR4dCBcCiAJcGlfbmV0cncudHh0IFwKIAlwaV9zcGVjLnR4dCBcCisJcHJpbnQudHh0IFwKIAlxdWlja2ZpeC50eHQgXAogCXF1aWNrcmVmLnR4dCBcCiAJcXVvdGVzLnR4dCBcCkBAIC0xMjYsNiArMTI3LDcgQEAKIAl2ZXJzaW9uNC50eHQgXAogCXZlcnNpb241LnR4dCBcCiAJdmVyc2lvbjYudHh0IFwKKwl2ZXJzaW9uNy50eHQgXAogCXZpX2RpZmYudHh0IFwKIAl2aXN1YWwudHh0IFwKIAl3aW5kb3dzLnR4dCBcCkBAIC0xODksNiArMTkxLDcgQEAKIAlwaV9nemlwLmh0bWwgXAogCXBpX25ldHJ3Lmh0bWwgXAogCXBpX3NwZWMuaHRtbCBcCisJcHJpbnQuaHRtbCBcCiAJcXVpY2tmaXguaHRtbCBcCiAJcXVpY2tyZWYuaHRtbCBcCiAJcXVvdGVzLmh0bWwgXApAQCAtMjQ1LDYgKzI0OCw3IEBACiAJdmVyc2lvbjQuaHRtbCBcCiAJdmVyc2lvbjUuaHRtbCBcCiAJdmVyc2lvbjYuaHRtbCBcCisJdmVyc2lvbjcuaHRtbCBcCiAJdmlfZGlmZi5odG1sIFwKIAl2aXN1YWwuaHRtbCBcCiAJd2luZG93cy5odG1sIFwKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2V2YWwudHh0IGIvcnVudGltZS9kb2MvZXZhbC50eHQKaW5kZXggNDVjMDE1OS4uZTUxZDM3MiAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvZXZhbC50eHQKKysrIGIvcnVudGltZS9kb2MvZXZhbC50eHQKQEAgLTkyOCw2ICs5MjgsOCBAQAogdGVtcG5hbWUoKQkJCVN0cmluZwluYW1lIGZvciBhIHRlbXBvcmFyeSBmaWxlCiB0b2xvd2VyKCB7ZXhwcn0pCQlTdHJpbmcJdGhlIFN0cmluZyB7ZXhwcn0gc3dpdGNoZWQgdG8gbG93ZXJjYXNlCiB0b3VwcGVyKCB7ZXhwcn0pCQlTdHJpbmcJdGhlIFN0cmluZyB7ZXhwcn0gc3dpdGNoZWQgdG8gdXBwZXJjYXNlCit0cigge3NyY30sIHtmcm9tc3RyfSwge3Rvc3RyfSkJU3RyaW5nCXRyYW5zbGF0ZSBjaGFycyBvZiB7c3JjfSBpbiB7ZnJvbXN0cn0KKwkJCQkJdG8gY2hhcnMgaW4ge3Rvc3RyfQogdHlwZSgge25hbWV9KQkJCU51bWJlcgl0eXBlIG9mIHZhcmlhYmxlIHtuYW1lfQogdmlydGNvbCgge2V4cHJ9KQkJTnVtYmVyCXNjcmVlbiBjb2x1bW4gb2YgY3Vyc29yIG9yIG1hcmsKIHZpc3VhbG1vZGUoIFtleHByXSkJCVN0cmluZwlsYXN0IHZpc3VhbCBtb2RlIHVzZWQKQEAgLTI2MDgsNiArMjYxMCwyMCBAQAogCQljaGFyYWN0ZXJzIHR1cm5lZCBpbnRvIHVwcGVyY2FzZSAoanVzdCBsaWtlIGFwcGx5aW5nIHxnVXwgdG8KIAkJdGhlIHN0cmluZykuCiAKK3RyKHtzcmN9LCB7ZnJvbXN0cn0sIHt0b3N0cn0pCQkJCSp0cigpKgorCQlUaGUgcmVzdWx0IGlzIGEgY29weSBvZiB0aGUge3NyY30gc3RyaW5nIHdpdGggYWxsIGNoYXJhY3RlcnMKKwkJd2hpY2ggYXBwZWFyIGluIHtmcm9tc3RyfSByZXBsYWNlZCBieSB0aGUgY2hhcmFjdGVyIGluIHRoYXQKKwkJcG9zaXRpb24gaW4gdGhlIHt0b3N0cn0gc3RyaW5nLiAgVGh1cyB0aGUgZmlyc3QgY2hhcmFjdGVyIGluCisJCXtmcm9tc3RyfSBpcyB0cmFuc2xhdGVkIGludG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB7dG9zdHJ9CisJCWFuZCBzbyBvbi4gIEV4YWN0bHkgbGlrZSB0aGUgdW5peCAidHIiIGNvbW1hbmQuCisJCVRoaXMgY29kZSBhbHNvIGRlYWxzIHdpdGggbXVsdGlieXRlIGNoYXJhY3RlcnMgcHJvcGVybHkuCisKKwkJRXhhbXBsZXM6ID4KKwkJCWVjaG8gdHIoImhlbGxvIHRoZXJlIiwgImh0IiwgIkhUIikKKzwJCXJldHVybnMgIkhlbGxvIFRIZXJlIiA+CisJCQllY2hvIHRyKCI8YmxvYj4iLCAiPD4iLCAie30iKQorPAkJcmV0dXJucyAie2Jsb2J9IgorCiB0eXBlKHtleHByfSkJCQkJCQkqdHlwZSgpKgogCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyOgogCQkJMCBpZiB7ZXhwcn0gaGFzIHRoZSB0eXBlIE51bWJlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvaGVscC50eHQgYi9ydW50aW1lL2RvYy9oZWxwLnR4dAppbmRleCAyODA3Njc2Li4wZTc3MTc5IDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9oZWxwLnR4dAorKysgYi9ydW50aW1lL2RvYy9oZWxwLnR4dApAQCAtMTI5LDYgKzEyOSw3IEBACiB8Zm9sZC50eHR8CWhpZGUgKGZvbGQpIHJhbmdlcyBvZiBsaW5lcwogCiBTcGVjaWFsIGlzc3VlcyB+Cit8cHJpbnQudHh0fAlwcmludGluZwogfHJlbW90ZS50eHR8CXVzaW5nIFZpbSBhcyBhIHNlcnZlciBvciBjbGllbnQKIHx0ZXJtLnR4dHwJdXNpbmcgZGlmZmVyZW50IHRlcm1pbmFscyBhbmQgbWljZQogfGRpZ3JhcGgudHh0fAlsaXN0IG9mIGF2YWlsYWJsZSBkaWdyYXBocwpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvaW5kZW50LnR4dCBiL3J1bnRpbWUvZG9jL2luZGVudC50eHQKaW5kZXggYTM1Y2U1NC4uZmQ5NGQzMiAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvaW5kZW50LnR4dAorKysgYi9ydW50aW1lL2RvYy9pbmRlbnQudHh0CkBAIC0xLDQgKzEsNCBAQAotKmluZGVudC50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEFwciAyNQorKmluZGVudC50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEp1bCAwNwogCiAKIAkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgpAQCAtNDI1LDggKzQyNSw4IEBACiAKIAogVGhlIGRlZmF1bHRzLCBzcGVsbGVkIG91dCBpbiBmdWxsLCBhcmU6Ci0JY2lub3B0aW9ucz0+cyxlMCxuMCxmMCx7MCx9MCxeMCw6cyw9cyxsMCxncyxocyxwcyx0cywrcyxjMyxDMCwoMnMsdXMsCi0JCSAgIFxVMCx3MCxtMCxqMCwpMjAsKjMwCisJY2lub3B0aW9ucz0+cyxlMCxuMCxmMCx7MCx9MCxeMCw6cyw9cyxsMCxiMCxncyxocyxwcyx0cyxpcywrcyxjMyxDMCwKKwkJICAgLzAsKDJzLHVzLFUwLHcwLFcwLG0wLGowLCkyMCwqMzAKIAogVmltIHB1dHMgYSBsaW5lIGluIGNvbHVtbiAxIGlmOgogLSBJdCBzdGFydHMgd2l0aCAnIycgKHByZXByb2Nlc3NvciBkaXJlY3RpdmVzKSwgaWYgJ2NpbmtleXMnIGNvbnRhaW5zICcjJy4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2luZGV4LnR4dCBiL3J1bnRpbWUvZG9jL2luZGV4LnR4dAppbmRleCA0MjYyYTc2Li40MmQ0YjdiIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9pbmRleC50eHQKKysrIGIvcnVudGltZS9kb2MvaW5kZXgudHh0CkBAIC0xLDQgKzEsNCBAQAotKmluZGV4LnR4dCogICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEp1bCAwNAorKmluZGV4LnR4dCogICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEp1bCAwNwogCiAKIAkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgpAQCAtMTIyNCw2ICsxMjI0LDggQEAKIHw6bWt2aW1yY3wJOm1rdltpbXJjXQl3cml0ZSBjdXJyZW50IG1hcHBpbmdzIGFuZCBzZXR0aW5ncyB0byBhIGZpbGUKIHw6bWt2aWV3fAk6bWt2aWVbd10Jd3JpdGUgdmlldyBvZiBjdXJyZW50IHdpbmRvdyB0byBhIGZpbGUKIHw6bW9kZXwJCTptb2RbZV0JCXNob3cgb3IgY2hhbmdlIHRoZSBzY3JlZW4gbW9kZQorfDptenNjaGVtZXwJOm16W3NjaGVtZV0JZXhlY3V0ZSBNelNjaGVtZSBjb21tYW5kCit8Om16ZmlsZXwJOm16ZltpbGVdCWV4ZWN1dGUgTXpTY2hlbWUgc2NyaXB0IGZpbGUKIHw6bmV4dHwJCTpuW2V4dF0JCWdvIHRvIG5leHQgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdAogfDpuZXd8CQk6bmV3CQljcmVhdGUgYSBuZXcgZW1wdHkgd2luZG93CiB8Om5tYXB8CQk6bm1bYXBdCQlsaWtlICI6bWFwIiBidXQgZm9yIE5vcm1hbCBtb2RlCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9tYnl0ZS50eHQgYi9ydW50aW1lL2RvYy9tYnl0ZS50eHQKaW5kZXggNTc2Njk4NC4uNDE3MjNkZSAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvbWJ5dGUudHh0CisrKyBiL3J1bnRpbWUvZG9jL21ieXRlLnR4dApAQCAtMSw0ICsxLDQgQEAKLSptYnl0ZS50eHQqICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdW4gMTYKKyptYnl0ZS50eHQqICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdWwgMDUKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwJICBieSBCcmFtIE1vb2xlbmFhciBldCBhbC4KQEAgLTc0Miw2ICs3NDIsOCBAQAogICBUcmFkaXRpb25hbCBhbmQgU2ltcGxpZmllZCBDaGluZXNlIGNoYXJhY3RlcnMuICBBbmQgaXQgY2FuIGFjY2VwdCBvdGhlcgogICBsb2NhbGUgaWYgeW91IG1ha2UgYSBjb3JyZWN0IGlucHV0IHRhYmxlLiAgWGNpbiBjYW4gYmUgZm91bmQgYXQ6CiAgIGh0dHA6Ly94Y2luLmxpbnV4Lm9yZy50dy8KKyAgT3RoZXJzIGFyZSBzY2ltOiBodHRwOi8vc2NpbS5mcmVlZGVza3RvcC5vcmcvIGFuZCBmY2l0eDoKKyAgaHR0cDovL3d3dy5mY2l0eC5vcmcvIAogCiAtIENvbnZlcnNpb24gU2VydmVyCiAJCQkJCQkJKmNvbnZlcnNpb24tc2VydmVyKgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2Mvb3B0aW9ucy50eHQgYi9ydW50aW1lL2RvYy9vcHRpb25zLnR4dAppbmRleCBiZjQ4Y2RlLi4xYTI4YmYxIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9vcHRpb25zLnR4dAorKysgYi9ydW50aW1lL2RvYy9vcHRpb25zLnR4dApAQCAtNDUxMSw1MiArNDUxMSwxNyBAQAogCQkJe25vdCBpbiBWaX0KIAkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrcHJpbnRlcnwKIAkJCWZlYXR1cmV9Ci0JVGhpcyBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBwcmludGVyIHRvIGJlIHVzZWQgd2hlbiB0aGUgfDpoYXJkY29weXwKLQljb21tYW5kIGlzIGlzc3VlZCB3aXRoIGEgYmFuZyAoISkgdG8gc2tpcCB0aGUgcHJpbnRlciBzZWxlY3Rpb24KLQlkaWFsb2cuICBPbiBXaW4zMiwgaXQgc2hvdWxkIGJlIHRoZSBwcmludGVyIG5hbWUgZXhhY3RseSBhcyBpdCBhcHBlYXJzCi0JaW4gdGhlIHN0YW5kYXJkIHByaW50ZXIgZGlhbG9nLgotCUlmIHRoZSBvcHRpb24gaXMgZW1wdHksIHRoZW4gdmltIHdpbGwgdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBwcmludGVyCi0JZm9yICI6aGFyZGNvcHkhIgorCVRoZSBuYW1lIG9mIHRoZSBwcmludGVyIHRvIGJlIHVzZWQgZm9yIHw6aGFyZGNvcHl8LgorCVNlZSB8cGRldi1vcHRpb258LgogCi0JCQkJCSoncHJpbnRlbmNvZGluZycqIConcGVuYycqICpFNjIwKgotJ3ByaW50ZW5jb2RpbmcnICdwZW5jJwlTdHJpbmcJKGRlZmF1bHQgZW1wdHksIGV4Y2VwdCBmb3I6Ci0JCQkJCVdpbmRvd3MsIE9TLzI6IGNwMTI1MiwKLQkJCQkJTWFjaW50b3NoOiBtYWMtcm9tYW4sCi0JCQkJCVZNUzogZGVjLW1jcywKLQkJCQkJSFBVWDogaHAtcm9tYW44LAotCQkJCQlFQkNESUM6IGViY2RpYy11aykKKwkJCQkJCSoncHJpbnRlbmNvZGluZycqIConcGVuYycqCisncHJpbnRlbmNvZGluZycgJ3BlbmMnCVN0cmluZwkoZGVmYXVsdCBlbXB0eSwgZXhjZXB0IGZvciBzb21lIHN5c3RlbXMpCiAJCQlnbG9iYWwKIAkJCXtub3QgaW4gVml9CiAJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3ByaW50ZXJ8CiAJCQlhbmQgfCtwb3N0c2NyaXB0fCBmZWF0dXJlc30KLQlTZXRzIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgdXNlZCB3aGVuIHByaW50aW5nLiAgVGhpcyBvcHRpb24gdGVsbHMgVklNCi0Jd2hpY2ggcHJpbnQgY2hhcmFjdGVyIGVuY29kaW5nIGZpbGUgZnJvbSB0aGUgInByaW50IiBkaXJlY3RvcnkgaW4KLQkncnVudGltZXBhdGgnIHRvIHVzZS4KLQotCVRoaXMgb3B0aW9uIHdpbGwgYWNjZXB0IGFueSB2YWx1ZSBmcm9tIHxlbmNvZGluZy1uYW1lc3wuICBBbnkKLQlyZWNvZ25pemVkIG5hbWVzIGFyZSBjb252ZXJ0ZWQgdG8gVklNIHN0YW5kYXJkIG5hbWVzIC0gc2VlICdlbmNvZGluZycKLQlmb3IgbW9yZSBkZXRhaWxzLiAgTmFtZXMgbm90IHJlY29nbml6ZWQgYnkgVklNIHdpbGwganVzdCBiZSBjb252ZXJ0ZWQKLQl0byBsb3dlciBjYXNlIGFuZCB1bmRlcnNjb3JlcyByZXBsYWNlZCB3aXRoICctJyBzaWducy4KLQotCUlmICdwcmludGVuY29kaW5nJyBpcyBlbXB0eSBvciBWSU0gY2Fubm90IGZpbmQgdGhlIGZpbGUgdGhlbiBpdCB3aWxsCi0JdXNlICdlbmNvZGluZycgKGlmIFZJTSBpcyBjb21waWxlZCB3aXRoIHwrbXVsdGlfYnl0ZXwgYW5kIGl0IGlzIHNldCBhbgotCTgtYml0IGVuY29kaW5nKSB0byBmaW5kIHRoZSBwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmcgZmlsZS4gIElmIFZJTSBpcwotCXVuYWJsZSB0byBmaW5kIGEgY2hhcmFjdGVyIGVuY29kaW5nIGZpbGUgdGhlbiBpdCB3aWxsIHVzZSB0aGUgImxhdGluMSIKLQlwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmcgZmlsZS4KLQotCVdoZW4gJ2VuY29kaW5nJyBpcyBzZXQgdG8gYSBtdWx0aS1ieXRlIGVuY29kaW5nLCBWSU0gd2lsbCB0cnkgdG8KLQljb252ZXJ0IGNoYXJhY3RlcnMgdG8gdGhlIHByaW50aW5nIGVuY29kaW5nIGZvciBwcmludGluZyAoaWYKLQkncHJpbnRlbmNvZGluZycgaXMgZW1wdHkgdGhlbiB0aGUgY29udmVyc2lvbiB3aWxsIGJlIHRvIGxhdGluMSkuCi0JQ29udmVyc2lvbiB0byBhIHByaW50aW5nIGVuY29kaW5nIG90aGVyIHRoYW4gbGF0aW4xIHdpbGwgcmVxdWlyZSBWSU0KLQl0byBiZSBjb21waWxlZCB3aXRoIHRoZSB8K2ljb252fCBmZWF0dXJlLiAgSWYgbm8gY29udmVyc2lvbiBpcwotCXBvc3NpYmxlIHRoZW4gcHJpbnRpbmcgd2lsbCBmYWlsLiAgQW55IGNoYXJhY3RlcnMgdGhhdCBjYW5ub3QgYmUKLQljb252ZXJ0ZWQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHVwc2lkZSBkb3duIHF1ZXN0aW9uIG1hcmtzLgotCi0JRm91ciBwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmcgZmlsZXMgYXJlIHByb3ZpZGVkIHRvIHN1cHBvcnQgZGVmYXVsdAotCU1hYywgVk1TLCBIUFVYLCBhbmQgRUJDRElDIGNoYXJhY3RlciBlbmNvZGluZ3MgYW5kIGFyZSB1c2VkIGJ5IGRlZmF1bHQKLQlvbiB0aGVzZSBwbGF0Zm9ybXMuICBDb2RlIHBhZ2UgMTI1MiBwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmcgaXMgdXNlZAotCWJ5IGRlZmF1bHQgb24gV2luZG93cyBhbmQgT1MvMiBwbGF0Zm9ybXMuCi0KKwlTZXRzIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgdXNlZCB3aGVuIHByaW50aW5nLgorCVNlZSB8cGVuYy1vcHRpb258LgogCiAJCQkJCQkqJ3ByaW50ZXhwcicqIConcGV4cHInKgogJ3ByaW50ZXhwcicgJ3BleHByJwlTdHJpbmcJKGRlZmF1bHQ6IHNlZSBiZWxvdykKQEAgLTQ1NjQsNjkgKzQ1MjksMTcgQEAKIAkJCXtub3QgaW4gVml9CiAJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3ByaW50ZXJ8CiAJCQlhbmQgfCtwb3N0c2NyaXB0fCBmZWF0dXJlc30KLQlFeHByZXNzaW9uIHRoYXQgaXMgZXZhbHVhdGVkIHRvIHByaW50IHRoZSBQb3N0U2NyaXB0IHByb2R1Y2VkIHdpdGgKLQkiOmhhcmRjb3B5Ii4KLQlUaGUgZmlsZSBuYW1lIHRvIGJlIHByaW50ZWQgaXMgaW4gfHY6Zm5hbWVfaW58LgotCVRoZSBhcmd1bWVudHMgdG8gdGhlICI6aGFyZGNvcHkiIGNvbW1hbmQgYXJlIGluIHx2OmNtZGFyZ3wuCi0JVGhlIGV4cHJlc3Npb24gbXVzdCB0YWtlIGNhcmUgb2YgZGVsZXRpbmcgdGhlIGZpbGUgYWZ0ZXIgcHJpbnRpbmcgaXQuCi0JV2hlbiB0aGVyZSBpcyBhbiBlcnJvciwgdGhlIGV4cHJlc3Npb24gbXVzdCByZXR1cm4gYSBub24temVybyBudW1iZXIuCi0JSWYgdGhlcmUgaXMgbm8gZXJyb3IsIHJldHVybiB6ZXJvIG9yIGFuIGVtcHR5IHN0cmluZy4KLQlUaGUgZGVmYXVsdCBmb3Igbm9uIE1TLVdpbmRvd3Mgb3IgVk1TIHN5c3RlbXMgaXMgdG8gc2ltcGx5IHVzZSAibHByIgotCXRvIHByaW50IHRoZSBmaWxlOiA+CisJRXhwcmVzc2lvbiB1c2VkIHRvIHByaW50IHRoZSBQb3N0U2NyaXB0IHByb2R1Y2VkIHdpdGggfDpoYXJkY29weXwuCisJU2VlIHxwZXhwci1vcHRpb258LgogCi0JICAgIHN5c3RlbSgnbHByJyAuICgmcHJpbnRkZXZpY2UgPT0gJycgPyAnJyA6ICcgLVAnIC4gJnByaW50ZGV2aWNlKQotCQkuICcgJyAuIHY6Zm5hbWVfaW4pIC4gZGVsZXRlKHY6Zm5hbWVfaW4pICsgdjpzaGVsbF9lcnJvcgotPAotCU9uIE1TLURvcywgTVMtV2luZG93cyBhbmQgT1MvMiBtYWNoaW5lcyB0aGUgZGVmYXVsdCBpcyB0byBjb3B5IHRoZQotCWZpbGUgdG8gdGhlIGN1cnJlbnRseSBzcGVjaWZpZWQgcHJpbnRkZXZpY2U6ID4KLQotCSAgICBzeXN0ZW0oJ2NvcHknIC4gJyAnIC4gdjpmbmFtZV9pbiAuICgmcHJpbnRkZXZpY2UgPT0gJycKLQkJCT8gJyBMUFQxOicgOiAoJyBcIicgLiAmcHJpbnRkZXZpY2UgLiAnXCInKSkpCi0JCQkuIGRlbGV0ZSh2OmZuYW1lX2luKQotPAotCU9uIFZNUyBtYWNoaW5lcyB0aGUgZGVmYXVsdCBpcyB0byBzZW5kIHRoZSBmaWxlIHRvIGVpdGhlciB0aGUgZGVmYXVsdAotCW9yIGN1cnJlbnRseSBzcGVjaWZpZWQgcHJpbnRkZXZpY2U6ID4KLQotCSAgICBzeXN0ZW0oJ3ByaW50JyAuICgmcHJpbnRkZXZpY2UgPT0gJycgPyAnJyA6ICcgL3F1ZXVlPScgLgotCQkJJnByaW50ZGV2aWNlKSAuICcgJyAuIHY6Zm5hbWVfaW4pIC4gZGVsZXRlKHY6Zm5hbWVfaW4pCi08Ci0JSWYgeW91IGNoYW5nZSB0aGlzIG9wdGlvbiwgdXNpbmcgYSBmdW5jdGlvbiBpcyBhbiBlYXN5IHdheSB0byBhdm9pZAotCWhhdmluZyB0byBlc2NhcGUgYWxsIHRoZSBzcGFjZXMuICBFeGFtcGxlOiA+Ci0KLQkJOnNldCBwcmludGV4cHI9UHJpbnRGaWxlKHY6Zm5hbWVfaW4pCi0JCTpmdW5jdGlvbiBQcmludEZpbGUoZm5hbWUpCi0JCTogIGNhbGwgc3lzdGVtKCJnaG9zdHZpZXcgIiAuIGE6Zm5hbWUpCi0JCTogIGNhbGwgZGVsZXRlKGE6Zm5hbWUpCi0JCTogIHJldHVybiB2OnNoZWxsX2Vycm9yCi0JCTplbmRmdW5jCi0KLTwJQmUgYXdhcmUgdGhhdCBzb21lIHByaW50IHByb2dyYW1zIHJldHVybiBjb250cm9sIGJlZm9yZSB0aGV5IGhhdmUgcmVhZAotCXRoZSBmaWxlLiAgSWYgeW91IGRlbGV0ZSB0aGUgZmlsZSB0b28gc29vbiBpdCB3aWxsIG5vdCBiZSBwcmludGVkLgotCVRoZXNlIHByb2dyYW1zIHVzdWFsbHkgb2ZmZXIgYW4gb3B0aW9uIHRvIGhhdmUgdGhlbSByZW1vdmUgdGhlIGZpbGUKLQl3aGVuIHByaW50aW5nIGlzIGRvbmUuCi0JCQkJCQkJCSpFMzY1KgotCUlmIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24gZmFpbHMgb3IgaXQgcmVzdWx0cyBpbiBhIG5vbi16ZXJvIG51bWJlciwKLQl5b3UgZ2V0IGFuIGVycm9yIG1lc3NhZ2UuICBJbiB0aGF0IGNhc2UgVmltIHdpbGwgZGVsZXRlIHRoZQotCWZpbGUuICBJbiB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Igbm9uLU1TLVdpbmRvd3MgYSB0cmljayBpcyB1c2VkOiBBZGRpbmcKLQkidjpzaGVsbF9lcnJvciIgd2lsbCByZXN1bHQgaW4gYSBub24temVybyBudW1iZXIgd2hlbiB0aGUgc3lzdGVtKCkKLQljYWxsIGZhaWxzLgotCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCi0Jc2VjdXJpdHkgcmVhc29ucy4KLQotCQkJCQkJKidwcmludGZvbnQnKiAqJ3BmbicqICpFNjEzKgorCQkJCQkJKidwcmludGZvbnQnKiAqJ3BmbicqCiAncHJpbnRmb250JyAncGZuJwlzdHJpbmcJKGRlZmF1bHQgImNvdXJpZXIiKQogCQkJZ2xvYmFsCiAJCQl7bm90IGluIFZpfQogCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtwcmludGVyfAogCQkJZmVhdHVyZX0KLQlUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBmb250IHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgfDpoYXJkY29weXwKLQljb21tYW5kJ3Mgb3V0cHV0LiAgSXQgaGFzIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgJ2d1aWZvbnQnIG9wdGlvbiwKLQlleGNlcHQgdGhhdCBvbmx5IG9uZSBmb250IG1heSBiZSBuYW1lZCwgYW5kIHRoZSBzcGVjaWFsICJndWlmb250PSoiCi0Jc3ludGF4IGlzIG5vdCBhdmFpbGFibGUuCi0JSW4gdGhlIFdpbjMyIEdVSSB2ZXJzaW9uIHRoaXMgc3BlY2lmaWVzIGEgZm9udCBuYW1lIHdpdGggaXRzIGV4dHJhCi0JYXR0cmlidXRlcywgYXMgd2l0aCB0aGUgJ2d1aWZvbnQnIG9wdGlvbi4KLQlGb3Igb3RoZXIgc3lzdGVtcywgb25seSAiOmgxMSIgaXMgcmVjb2duaXplZCwgd2hlcmUgIjExIiBpcyB0aGUgcG9pbnQKLQlzaXplIG9mIHRoZSBmb250LiAgV2hlbiBvbWl0dGVkLCB0aGUgcG9pbnQgc2l6ZSBpcyAxMC4KKwlUaGUgbmFtZSBvZiB0aGUgZm9udCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgfDpoYXJkY29weXwuCisJU2VlIHxwZm4tb3B0aW9ufC4KIAogCQkJCQkJKidwcmludGhlYWRlcicqIConcGhlYWRlcicqCiAncHJpbnRoZWFkZXInICdwaGVhZGVyJyAgc3RyaW5nICAoZGVmYXVsdCAiJTwlZiVoJW0lPVBhZ2UgJU4iKQpAQCAtNDYzNCwxMDAgKzQ1NDcsMzUgQEAKIAkJCXtub3QgaW4gVml9CiAJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3ByaW50ZXJ8CiAJCQlmZWF0dXJlfQotCVRoaXMgZGVmaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSBoZWFkZXIgcHJvZHVjZWQgaW4gfDpoYXJkY29weXwgb3V0cHV0LgotCVRoZSBvcHRpb24gaXMgZGVmaW5lZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlICdzdGF0dXNsaW5lJyBvcHRpb24uCi0JSWYgVmltIGhhcyBub3QgYmVlbiBjb21waWxlZCB3aXRoIHRoZSB8K3N0YXR1c2xpbmV8IGZlYXR1cmUsIHRoaXMKLQlvcHRpb24gaGFzIG5vIGVmZmVjdCBhbmQgYSBzaW1wbGUgZGVmYXVsdCBoZWFkZXIgaXMgdXNlZCwgd2hpY2ggc2hvd3MKLQl0aGUgcGFnZSBudW1iZXIuCisJVGhlIGZvcm1hdCBvZiB0aGUgaGVhZGVyIHByb2R1Y2VkIGluIHw6aGFyZGNvcHl8IG91dHB1dC4KKwlTZWUgfHBoZWFkZXItb3B0aW9ufC4KKworCQkJCQkJKidwcmludG1iY2hhcnNldCcqIConcG1iY3MnKgorJ3ByaW50bWJjaGFyc2V0JyAncG1iY3MnICBzdHJpbmcgKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3ByaW50ZXJ8CisJCQlhbmQgfCttdWx0aV9ieXRlfCBmZWF0dXJlc30KKwlUaGUgQ0pLIGNoYXJhY3RlciBzZXQgdG8gYmUgdXNlZCBmb3IgQ0pLIG91dHB1dCBmcm9tIHw6aGFyZGNvcHl8LgorCVNlZSB8cG1iY3Mtb3B0aW9ufC4KKworCQkJCQkJKidwcmludG1iZm9udCcqIConcG1iZm4nKgorJ3ByaW50bWJmb250JyAncG1iZm4nCXN0cmluZyAoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrcHJpbnRlcnwKKwkJCWFuZCB8K211bHRpX2J5dGV8IGZlYXR1cmVzfQorCUxpc3Qgb2YgZm9udCBuYW1lcyB0byBiZSB1c2VkIGZvciBDSksgb3V0cHV0IGZyb20gfDpoYXJkY29weXwuCisJU2VlIHxwbWJmbi1vcHRpb258LgogCiAJCQkJCQkqJ3ByaW50b3B0aW9ucycqIConcG9wdCcqCiAncHJpbnRvcHRpb25zJyAncG9wdCcgc3RyaW5nIChkZWZhdWx0ICIiKQogCQkJZ2xvYmFsCiAJCQl7bm90IGluIFZpfQogCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB8K3ByaW50ZXJ8IGZlYXR1cmV9Ci0JVGhpcyBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGl0ZW1zIHRoYXQgY29udHJvbCB0aGUgZm9ybWF0IG9mCi0JdGhlIG91dHB1dCBvZiB8OmhhcmRjb3B5fDoKKwlMaXN0IG9mIGl0ZW1zIHRoYXQgY29udHJvbCB0aGUgZm9ybWF0IG9mIHRoZSBvdXRwdXQgb2YgfDpoYXJkY29weXwuCisJU2VlIHxwb3B0LW9wdGlvbnwuCiAKLQkgIGxlZnQ6e3NwZWN9CQlsZWZ0IG1hcmdpbiAoZGVmYXVsdDogMTBwYykKLQkgIHJpZ2h0OntzcGVjfQkJcmlnaHQgbWFyZ2luIChkZWZhdWx0OiA1cGMpCi0JICB0b3A6e3NwZWN9CQl0b3AgbWFyZ2luIChkZWZhdWx0OiA1cGMpCi0JICBib3R0b206e3NwZWN9CQlib3R0b20gbWFyZ2luIChkZWZhdWx0OiA1cGMpCi0JCQkJe3NwZWN9IGlzIGEgbnVtYmVyIGZvbGxvd2VkIGJ5ICJpbiIgZm9yCi0JCQkJaW5jaGVzLCAicHQiIGZvciBwb2ludHMgKDEgcG9pbnQgaXMgMS83MiBvZiBhbgotCQkJCWluY2gpLCAibW0iIGZvciBtaWxsaW1ldGVycyBvciAicGMiIGZvciBhCi0JCQkJcGVyY2VudGFnZSBvZiB0aGUgbWVkaWEgc2l6ZS4KLQkJCQlXZWlyZCBleGFtcGxlOgotCQkJCSAgICBsZWZ0OjJpbix0b3A6MzBwdCxyaWdodDoxNm1tLGJvdHRvbTozcGMKLQkJCQlJZiB0aGUgdW5pdCBpcyBub3QgcmVjb2duaXplZCB0aGVyZSBpcyBubwotCQkJCWVycm9yIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB1c2VkLgotCi0JICBoZWFkZXI6e25yfQkJTnVtYmVyIG9mIGxpbmVzIHRvIHJlc2VydmUgZm9yIHRoZSBoZWFkZXIuCi0JCQkJT25seSB0aGUgZmlyc3QgbGluZSBpcyBhY3R1YWxseSBmaWxsZWQsIHRodXMKLQkJCQl3aGVuIHtucn0gaXMgMiB0aGVyZSBpcyBvbmUgZW1wdHkgbGluZS4gIFRoZQotCQkJCWhlYWRlciBpcyBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvCi0JCQkJJ3ByaW50aGVhZGVyJy4KLQkgIGhlYWRlcjowCQlEbyBub3QgcHJpbnQgYSBoZWFkZXIuCi0JICBoZWFkZXI6MiAgKGRlZmF1bHQpCVVzZSB0d28gbGluZXMgZm9yIHRoZSBoZWFkZXIKLQotCSAgc3ludGF4Om4JCURvIG5vdCB1c2Ugc3ludGF4IGhpZ2hsaWdodGluZy4gIFRoaXMgaXMKLQkJCQlmYXN0ZXIgYW5kIHRodXMgdXNlZnVsIHdoZW4gcHJpbnRpbmcgbGFyZ2UKLQkJCQlmaWxlcy4KLQkgIHN5bnRheDp5CQlEbyBzeW50YXggaGlnaGxpZ2h0aW5nLgotCSAgc3ludGF4OmEgIChkZWZhdWx0KQlVc2Ugc3ludGF4IGhpZ2hsaWdodGluZyBpZiB0aGUgcHJpbnRlciBhcHBlYXJzCi0JCQkJdG8gYmUgYWJsZSB0byBwcmludCBjb2xvciBvciBncmV5LgotCi0JICBudW1iZXI6eQkJSW5jbHVkZSBsaW5lIG51bWJlcnMgaW4gdGhlIHByaW50ZWQgb3V0cHV0LgotCSAgbnVtYmVyOm4gIChkZWZhdWx0KQlObyBsaW5lIG51bWJlcnMuCi0KLQkgIHdyYXA6eSAgICAoZGVmYXVsdCkJV3JhcCBsb25nIGxpbmVzLgotCSAgd3JhcDpuCQlUcnVuY2F0ZSBsb25nIGxpbmVzLgotCi0JICBkdXBsZXg6b2ZmCQlQcmludCBvbiBvbmUgc2lkZS4KLQkgIGR1cGxleDpsb25nIChkZWZhdWx0KQlQcmludCBvbiBib3RoIHNpZGVzICh3aGVuIHBvc3NpYmxlKSwgYmluZCBvbgotCQkJCWxvbmcgc2lkZS4KLQkgIGR1cGxleDpzaG9ydAkJUHJpbnQgb24gYm90aCBzaWRlcyAod2hlbiBwb3NzaWJsZSksIGJpbmQgb24KLQkJCQlzaG9ydCBzaWRlLgotCi0JICBjb2xsYXRlOnkgIChkZWZhdWx0KQlDb2xsYXRpbmc6IDEgMiAzLCAxIDIgMywgMSAyIDMKLQkgIGNvbGxhdGU6bgkJTm8gY29sbGF0aW5nOiAxIDEgMSwgMiAyIDIsIDMgMyAzCi0KLQkgIGpvYnNwbGl0Om4gKGRlZmF1bHQpCURvIGFsbCBjb3BpZXMgaW4gb25lIHByaW50IGpvYgotCSAgam9ic3BsaXQ6eQkJRG8gZWFjaCBjb3B5IGFzIGEgc2VwYXJhdGUgcHJpbnQgam9iLiAgVXNlZnVsCi0JCQkJd2hlbiBkb2luZyBOLXVwIHBvc3Rwcm9jZXNzaW5nLgotCi0JICBwb3J0cmFpdDp5IChkZWZhdWx0KQlPcmllbnRhdGlvbiBpcyBwb3J0cmFpdC4KLQkgIHBvcnRyYWl0Om4JCU9yaWVudGF0aW9uIGlzIGxhbmRzY2FwZS4KLQkJCQkJCQkqYTQqICpsZXR0ZXIqCi0JICBwYXBlcjpBNCAgIChkZWZhdWx0KQlQYXBlciBzaXplOiBBNAotCSAgcGFwZXI6e25hbWV9CQlQYXBlciBzaXplIGZyb20gdGhpcyB0YWJsZToKLQkJCQl7bmFtZX0JICAgIHNpemUgaW4gY20JICAgICBzaXplIGluIGluY2ggfgotCQkJCTEweDE0CSAgICAyNS40ICB4IDM1LjU3ICAgIDEwICAgIHggMTQKLQkJCQlBMwkgICAgMjkuNyAgeCA0MgkgICAgIDExLjY5IHggMTYuNTQKLQkJCQlBNAkgICAgMjEJICB4IDI5LjcgICAgICA4LjI3IHggMTEuNjkKLQkJCQlBNQkgICAgMTQuOCAgeCAyMQkgICAgICA1LjgzIHggIDguMjcKLQkJCQlCNAkgICAgMjUJICB4IDM1LjMgICAgIDEwLjEyIHggMTQuMzMKLQkJCQlCNQkgICAgMTcuNiAgeCAyNQkgICAgICA3LjE3IHggMTAuMTIKLQkJCQlleGVjdXRpdmUgICAxOC40MiB4IDI2LjY3ICAgICA3LjI1IHggMTAuNQotCQkJCWZvbGlvCSAgICAyMQkgIHggMzMJICAgICAgOC4yNyB4IDEzCi0JCQkJbGVkZ2VyCSAgICA0My4xMyB4IDI3Ljk2ICAgIDE3ICAgIHggMTEKLQkJCQlsZWdhbAkgICAgMjEuNTkgeCAzNS41NyAgICAgOC41ICB4IDE0Ci0JCQkJbGV0dGVyCSAgICAyMS41OSB4IDI3Ljk2ICAgICA4LjUgIHggMTEKLQkJCQlxdWFydG8JICAgIDIxLjU5IHggMjcuNSAgICAgIDguNSAgeCAxMC44MwotCQkJCXN0YXRlbWVudCAgIDEzLjk3IHggMjEuNTkgICAgIDUuNSAgeCAgOC41Ci0JCQkJdGFibG9pZCAgICAgMjcuOTYgeCA0My4xMyAgICAxMSAgICB4IDE3Ci0KLQkgIGZvcm1mZWVkOm4gKGRlZmF1bHQpCVRyZWF0IGZvcm0gZmVlZCBjaGFyYWN0ZXJzICgweDBjKSBhcyBhIG5vcm1hbAotCQkJCXByaW50IGNoYXJhY3Rlci4KLQkgIGZvcm1mZWVkOnkJCVdoZW4gYSBmb3JtIGZlZWQgY2hhcmFjdGVyIGlzIGVuY291bnRlcmVkLAotCQkJCWNvbnRpbnVlIHByaW50aW5nIG9mIHRoZSBjdXJyZW50IGxpbmUgYXQgdGhlCi0JCQkJYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCBsaW5lIG9uIGEgbmV3IHBhZ2UuCi0KLQlUaGUgaXRlbSBpbmRpY2F0ZWQgd2l0aCAoZGVmYXVsdCkgaXMgdXNlZCB3aGVuIHRoZSBpdGVtIGlzIG5vdAotCXByZXNlbnQuICBUaGUgdmFsdWVzIGFyZSBub3QgYWx3YXlzIHVzZWQsIGVzcGVjaWFsbHkgd2hlbiB1c2luZyBhCi0JZGlhbG9nIHRvIHNlbGVjdCB0aGUgcHJpbnRlciBhbmQgb3B0aW9ucy4KLQlFeGFtcGxlOiA+Ci0JCTpzZXQgcHJpbnRvcHRpb25zPXBhcGVyOmxldHRlcixkdXBsZXg6b2ZmCi08CiAJCQkJCQkqJ3F1b3RlZXNjYXBlJycqIConcWUnKgogJ3F1b3RlZXNjYXBlJyAncWUnCXN0cmluZwkoZGVmYXVsdCAiXCIpCiAJCQlsb2NhbCB0byBidWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3BpX25ldHJ3LnR4dCBiL3J1bnRpbWUvZG9jL3BpX25ldHJ3LnR4dAppbmRleCA1ZTI4ZWQ2Li44YmJkYjAyIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9waV9uZXRydy50eHQKKysrIGIvcnVudGltZS9kb2MvcGlfbmV0cncudHh0CkBAIC0xNywyMCArMTcsNiBAQAogNS4gIEV4IENvbW1hbmRzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctZXh8CiA2LiAgVmFyaWFibGVzIGFuZCBPcHRpb25zLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy12YXJ8CiA3LiAgUmVtb3RlIERpcmVjdG9yeSBCcm93c2VyLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1icm93c2V8Ci0gICAgID8uLi4uLi4uLi4uSGVscC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1oZWxwfAotICAgICA8Y3I+Li4uLi4uLkJyb3dzaW5nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctY3J8Ci0gICAgIDxjLWw+Li4uLi4uUmVmcmVzaGluZyB0aGUgTGlzdGluZy4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1jLWx8Ci0gICAgIDxkZWw+Li4uLi4uUmVtb3ZpbmcgRmlsZXMgb3IgRGlyZWN0b3JpZXMuLi4uLi4uLi4uLnxuZXRydy1kZWxldGV8Ci0gICAgIEQuLi4uLi4uLi4uUmVtb3ZpbmcgRmlsZXMgb3IgRGlyZWN0b3JpZXMuLi4uLi4uLi4uLnxuZXRydy1EfAotICAgICBSLi4uLi4uLi4uLlJlbmFtaW5nIEZpbGVzIG9yIERpcmVjdG9yaWVzLi4uLi4uLi4uLi58bmV0cnctUnwKLSAgICAgLS4uLi4uLi4uLi5Hb2luZyBVcC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LS18Ci0gICAgIGEuLi4uLi4uLi4uSGlkaW5nIEZpbGVzIG9yIERpcmVjdG9yaWVzLi4uLi4uLi4uLi4uLnxuZXRydy1hfAotICAgICBoLi4uLi4uLi4uLkVkaXQgRmlsZS9EaXJlY3RvcnkgSGlkaW5nLi4uLi4uLi4uLi4uLi58bmV0cnctaHwKLSAgICAgby4uLi4uLi4uLi5Ccm93c2luZyB3aXRoIGEgSG9yaXpvbnRhbCBTcGxpdC4uLi4uLi4ufG5ldHJ3LW98Ci0gICAgIHIuLi4uLi4uLi4uUmV2ZXJzaW5nIFNvcnRpbmcgT3JkZXIuLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1yfAotICAgICBzLi4uLi4uLi4uLlNlbGVjdGluZyBTb3J0aW5nIFN0eWxlLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctc3wKLSAgICAgdi4uLi4uLi4uLi5Ccm93c2luZyB3aXRoIGEgVmVydGljYWwgU3BsaXQuLi4uLi4uLi4ufG5ldHJ3LXZ8Ci0gICAgIHguLi4uLi4uLi4uQ3VzdG9taXppbmcgQnJvd3NpbmcuLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy14fAogOC4gIERlYnVnZ2luZy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctZGVidWd8CiA5LiAgSGlzdG9yeS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1oaXN0b3J5fAogMTAuIENyZWRpdHMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctY3JlZGl0c3wKQEAgLTUxNCw3ICs1MDAsMjYgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiA3LiBSZW1vdGUgRGlyZWN0b3J5IEJyb3dzZXIgKm5ldHJ3LWJyb3dzZSogKm5ldHJ3LWRpciogKm5ldHJ3LWxpc3QqICpuZXRydy1oZWxwKgorICAgICA/Li4uLi4uLi4uLkhlbHAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctaGVscHwKKyAgICAgPGNyPi4uLi4uLi5Ccm93c2luZy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWNyfAorICAgICA8Yy1sPi4uLi4uLlJlZnJlc2hpbmcgdGhlIExpc3RpbmcuLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctYy1sfAorICAgICA8ZGVsPi4uLi4uLlJlbW92aW5nIEZpbGVzIG9yIERpcmVjdG9yaWVzLi4uLi4uLi4uLi58bmV0cnctZGVsZXRlfAorICAgICBELi4uLi4uLi4uLlJlbW92aW5nIEZpbGVzIG9yIERpcmVjdG9yaWVzLi4uLi4uLi4uLi58bmV0cnctRHwKKyAgICAgXEguLi4uLi4uLi5FZGl0IEZpbGUvRGlyZWN0b3J5IEhpZGluZyBMaXN0Li4uLi4uLi4ufG5ldHJ3LUh8CisgICAgIFxNLi4uLi4uLi4uTWFrZSBBIE5ldyBEaXJlY3RvcnkuLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1NfAorICAgICBSLi4uLi4uLi4uLlJlbmFtaW5nIEZpbGVzIG9yIERpcmVjdG9yaWVzLi4uLi4uLi4uLi58bmV0cnctUnwKKyAgICAgLS4uLi4uLi4uLi5Hb2luZyBVcC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LS18CisgICAgIGEuLi4uLi4uLi4uSGlkaW5nIEZpbGVzIG9yIERpcmVjdG9yaWVzLi4uLi4uLi4uLi4uLnxuZXRydy1hfAorICAgICBpLi4uLi4uLi4uLkxvbmcgTGlzdGluZy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctaXwKKyAgICAgby4uLi4uLi4uLi5Ccm93c2luZyB3aXRoIGEgSG9yaXpvbnRhbCBTcGxpdC4uLi4uLi4ufG5ldHJ3LW98CisgICAgIHIuLi4uLi4uLi4uUmV2ZXJzaW5nIFNvcnRpbmcgT3JkZXIuLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1yfAorICAgICBzLi4uLi4uLi4uLlNlbGVjdGluZyBTb3J0aW5nIFN0eWxlLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctc3wKKyAgICAgdi4uLi4uLi4uLi5Ccm93c2luZyB3aXRoIGEgVmVydGljYWwgU3BsaXQuLi4uLi4uLi4ufG5ldHJ3LXZ8CisgICAgIHguLi4uLi4uLi4uQ3VzdG9taXppbmcgQnJvd3NpbmcuLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy14fAorICAgICAJCQkJKm5ldHJ3LWJyb3dzZS1jbWRzKgogPgorCQkJUXVpY2sgUmVmZXJlbmNlIENvbW1hbmRzIFRhYmxlCisgICAgICAgIC0tLS0tLS0JLS0tLS0tLS0tLS0KIAlDb21tYW5kCUV4cGxhbmF0aW9uCiAgICAgICAgIC0tLS0tLS0JLS0tLS0tLS0tLS0KIAkgICA/CUNhdXNlcyBOZXRydyB0byBpc3N1ZSBoZWxwCkBAIC01MjYsNiArNTMxLDcgQEAKIAkgICAtCU1ha2VzIE5ldHJ3IGdvIHVwIG9uZSBkaXJlY3RvcnkKIAkgICBhCVNob3cgYWxsIG9mIGEgZGlyZWN0b3J5ICh0ZW1wb3JhcmlseSBpZ25vcmUgZzpuZXRyd19saXN0X2hpZGUpCiAJICAgaAlFZGl0IGZpbGUgaGlkaW5nIGxpc3QKKwkgICBpCVRvZ2dsZXMgYmV0d2VlbiBsb25nIGFuZCBzaG9ydCBsaXN0aW5nCiAJICAgbwlFbnRlciB0aGUgZmlsZS9kaXJlY3RvcnkgdW5kZXIgdGhlIGN1cnNvciBpbiBhIG5ldyBicm93c2VyCiAJICAgCXdpbmRvdy4gIEEgaG9yaXpvbnRhbCBzcGxpdCBpcyB1c2VkLgogCSAgIHIJUmV2ZXJzZSBzb3J0aW5nIG9yZGVyCkBAIC01NDAsMTYgKzU0NiwyMiBAQAogCVZhcgkJCUV4cGxhbmF0aW9uCiAJLS0tCQkJLS0tLS0tLS0tLS0KIAlnOm5ldHJ3X2xpc3RfY21kCXN1cHBvcnRzIGxpc3RpbmcKLQlnOm5ldHJ3X3JtX2NtZAkJc3VwcG9ydHMgcmVtb3ZpbmcgZmlsZXMKLQlnOm5ldHJ3X3JtZl9jbWQJCXN1cHBvcnRzIHJlbW92aW5nIHNvZnRsaW5rcyB0byBkaXJlY3RvcmllcwotCWc6bmV0cndfcm1kaXJfY21kCXN1cHBvcnRzIHJlbW92aW5nIGRpcmVjdG9yaWVzCi0JZzpuZXRyd193aW5zaXplCQlzcGVjaWZ5IGluaXRpYWwgc2l6ZSBvZiBuZXcgby92IHdpbmRvd3MKIAlnOm5ldHJ3X2xpc3RfaGlkZQljb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBwYXR0ZXJucyBmb3IKIAkJCQloaWRpbmcgZmlsZXMKKwlnOm5ldHJ3X2xvY2FsX21rZGlyCXNwZWNpZnkgY29tbWFuZCBmb3IgbWFraW5nIGEgZGlyZWN0b3J5IGxvY2FsbHkKKwlnOm5ldHJ3X2xvY2FsX3JtZGlyCXJlbW92ZSBkaXJlY3RvcnkgY29tbWFuZCAgICAgICAgICBkZWZhdWx0OiBybWRpcgorCWc6bmV0cndfbG9jYWxfcmVuYW1lCXJlbmFtZSBmaWxlL2RpcmVjdG9yeSBjb21tYW5kCisJCQkJdW5peC1kZWZhdWx0OiBybSAgICB3aW4zMi1kZWZhdWx0OiByZW4KKwlnOm5ldHJ3X21rZGlyX2NtZAlzcGVjaWZ5IGNvbW1hbmQgZm9yIG1ha2luZyBhIGRpcmVjdG9yeSByZW1vdGVseQorCWc6bmV0cndfcm1fY21kCQlzdXBwb3J0cyByZW1vdmluZyBmaWxlcworCWc6bmV0cndfcm1kaXJfY21kCXN1cHBvcnRzIHJlbW92aW5nIGRpcmVjdG9yaWVzCisJZzpuZXRyd19ybWZfY21kCQlzdXBwb3J0cyByZW1vdmluZyBzb2Z0bGlua3MgdG8gZGlyZWN0b3JpZXMKIAlnOm5ldHJ3X3NvcnRfYnkJCXNvcnQgYnkgIm5hbWUiLCAidGltZSIsIG9yICJzaXplIgogCWc6bmV0cndfc29ydF9kaXJlY3Rpb24Jc29ydGluZyBkaXJlY3Rpb246ICJub3JtYWwiIG9yICJyZXZlcnNlIgogCWc6bmV0cndfc29ydF9zZXF1ZW5jZQl3aGVuIHNvcnRpbmcgYnkgbmFtZSwgZmlyc3Qgc29ydCBieSB0aGUKIAkJCQljb21tYS1zZXBhcmF0ZWQgcGF0dGVybiBzZXF1ZW5jZQorCWc6bmV0cndfdGltZWZtdAkJc3BlY2lmeSBmb3JtYXQgc3RyaW5nIHRvIHN0cmZ0aW1lKCkgIGRlZmF1bHQ6ICVjCisJZzpuZXRyd193aW5zaXplCQlzcGVjaWZ5IGluaXRpYWwgc2l6ZSBvZiBuZXcgby92IHdpbmRvd3MKIDwKIElOVFJPRFVDVElPTiBUTyBSRU1PVEUgRElSRUNUT1JZIEJST1dTSU5HCiAKQEAgLTU4OCwxNSArNjAwLDMzIEBACiBicm93c2luZyBleHBlY3RzIHRoYXQgZGlyZWN0b3JpZXMgd2lsbCBiZSBmbGFnZ2VkIGJ5IGEgdHJhaWxpbmcgc2xhc2guCiAKIAotQlJPV1NJTkcgCQkJCQkJKm5ldHJ3LWNyKgorQlJPV1NJTkcgCQkJCQkJCSpuZXRydy1jcioKIAogQnJvd3NpbmcgaXMgc2ltcGxlOiBtb3ZlIHRoZSBjdXJzb3Igb250byBhIGZpbGUgb3IgZGlyZWN0b3J5IG9mIGludGVyZXN0LgogSGl0dGluZyB0aGUgPGNyPiAodGhlIHJldHVybiBrZXkpIHdpbGwgc2VsZWN0IHRoZSBmaWxlIG9yIGRpcmVjdG9yeS4KIERpcmVjdG9yaWVzIHdpbGwgdGhlbXNlbHZlcyBiZSBsaXN0ZWQsIGFuZCBmaWxlcyB3aWxsIGJlIG9wZW5lZCB1c2luZyB0aGUKIHByb3RvY29sIGdpdmVuIGluIHRoZSBvcmlnaW5hbCByZWFkIHJlcXVlc3QuCiAKK0xPTkcgVlMgU0hPUlQgTElTVElORwkJCQkJCSpuZXRydy1pKgogCi1SRU1PVklORyBGSUxFUyBPUiBESVJFQ1RPUklFUwkqbmV0cnctZGVsZXRlKiAqbmV0cnctcmVtb3ZlKiAqbmV0cnctRCoKK1RoZSBzaG9ydCBsaXN0aW5nIGZvcm1hdCBnaXZlcyBqdXN0IHRoZSBmaWxlcycgYW5kIGRpcmVjdG9yaWVzJyBuYW1lcy4KK1RoZSBsb25nIGxpc3RpbmcgaXMgZWl0aGVyIGJhc2VkIG9uIHRoZSAibHMiIGNvbW1hbmQgdmlhIHNzaCBmb3IgcmVtb3RlCitkaXJlY3RvcmllcyBvciBkaXNwbGF5cyB0aGUgZmlsZW5hbWUsIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpLCBhbmQgdGhlCit0aW1lIGFuZCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uIGZvciBsb2NhbCBkaXJlY3Rvcmllcy4KKworCitNQUtJTkcgQSBORVcgRElSRUNUT1JZCQkJCQkJKm5ldHJ3LU0qCisKK0FjdHVhbGx5IDxMZWFkZXI+TSwgd2hlcmUgdGhlIDxMZWFkZXI+IGlzLCBieSBkZWZhdWx0LCB0aGUgYmFja3NsYXNoLgorCitXaXRoIHRoZSAiPExlYWRlcj5NIiBtYXAgb25lIG1heSBtYWtlIGEgbmV3IGRpcmVjdG9yeSBlaXRoZXIgcmVtb3RlbHkgKHdoaWNoCitkZXBlbmRzIG9uIHRoZSBnbG9iYWwgdmFyaWFibGUgZzpuZXRyd19ta2Rpcl9jbWQpIG9yIGxvY2FsbHkgKHdoaWNoIGRlcGVuZHMgb24KK3RoZSBnbG9iYWwgdmFyaWFibGUgZzpuZXRyd19sb2NhbF9ta2RpcikuICBOZXRydyB3aWxsIGlzc3VlIGEgcmVxdWVzdCBmb3IgdGhlCituZXcgZGlyZWN0b3J5J3MgbmFtZS4gIEEgYmFyZSA8Q1I+IGF0IHRoYXQgcG9pbnQgd2lsbCBhYm9ydCB0aGUgbWFraW5nIG9mIHRoZQorZGlyZWN0b3J5LiAgQXR0ZW1wdHMgdG8gbWFrZSBhIGxvY2FsIGRpcmVjdG9yeSB0aGF0IGFscmVhZHkgZXhpc3RzIChhcyBlaXRoZXIKK2EgZmlsZSBvciBhIGRpcmVjdG9yeSkgd2lsbCBiZSBkZXRlY3RlZCwgcmVwb3J0ZWQgb24sIGFuZCBpZ25vcmVkLgorCitSRU1PVklORyBGSUxFUyBPUiBESVJFQ1RPUklFUwkqbmV0cnctZGVsZXRlKiAqbmV0cnctcmVtb3ZlKgkqbmV0cnctRCoKIAogRGVsZXRpbmcvcmVtb3ZpbmcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGludm9sdmVzIG1vdmluZyB0aGUgY3Vyc29yIHRvIHRoZQogZmlsZS9kaXJlY3RvcnkgdG8gYmUgZGVsZXRlZCBhbmQgcHJlc3NpbmcgIkQiLiAgRGlyZWN0b3JpZXMgbXVzdCBiZSBlbXB0eSBmaXJzdApAQCAtNjI2LDcgKzY1Niw3IEBACiAJZzpuZXRyd19ybWZfY21kOiBzc2ggSE9TVE5BTUUgcm0gLWYKIAogCi1SRU5BTUlORyBGSUxFUyBPUiBESVJFQ1RPUklFUwkJCSpuZXRydy1tb3ZlKiAqbmV0cnctcmVuYW1lKgorUkVOQU1JTkcgRklMRVMgT1IgRElSRUNUT1JJRVMJCSpuZXRydy1tb3ZlKiAqbmV0cnctcmVuYW1lKiAqbmV0cnctUioKIAogUmVuYW1pbmcvbW92aW5nIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbnZvbHZlcyBtb3ZpbmcgdGhlIGN1cnNvciB0byB0aGUKIGZpbGUvZGlyZWN0b3J5IHRvIGJlIG1vdmVkIChyZW5hbWVkKSBhbmQgcHJlc3NpbmcgIlIiLiAgWW91IHdpbGwgdGhlbiBiZQpAQCAtNjQzLDEzICs2NzMsMTggQEAKIAogVGhlICJhIiBtYXAgbGV0cyB0aGUgYnJvd3NlciBpZ25vcmUgdGhlIGc6bmV0cndfbGlzdF9oaWRlIHZhcmlhYmxlLiAgTm9ybWFsbHkKIHRoZSBnOm5ldHJ3X2xpc3RfaGlkZSB2YXJpYWJsZSBob2xkcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHBhdHRlcm5zIHdoaWNoCi13aWxsIGJlIGhpZGRlbiAocmVtb3ZlZCkgZnJvbSB0aGUgZGlyZWN0b3J5IGxpc3RpbmcuCit3aWxsIGJlIGhpZGRlbiAocmVtb3ZlZCkgZnJvbSB0aGUgZGlyZWN0b3J5IGxpc3RpbmcuICBNbmVtb25pY2FsbHksIHRoZQorImEiIHN0YW5kcyBmb3Igc2hvdyBBbGwuCiAKIAotRURJVCBGSUxFIE9SIERJUkVDVE9SWSBISURJTkcJCQkJCSpuZXRydy1oKgorRURJVCBGSUxFIE9SIERJUkVDVE9SWSBISURJTkcgTElTVAkJCQkqbmV0cnctSCoKIAotVGhlICJoIiBtYXAgYnJpbmdzIHVwIGEgcmVxdWVzdG9yIGFsbG93aW5nIHRoZSB1c2VyIHRvIGNoYW5nZSB0aGUKLWZpbGUvZGlyZWN0b3J5IGhpZGluZyBsaXN0LgorQWN0dWFsbHkgPExlYWRlcj5ILCB3aGVyZSB0aGUgPExlYWRlcj4gaXMsIGJ5IGRlZmF1bHQsIHRoZSBiYWNrc2xhc2guCisKK1RoZSAiPExlYWRlcj5IIiBtYXAgYnJpbmdzIHVwIGEgcmVxdWVzdG9yIGFsbG93aW5nIHRoZSB1c2VyIHRvIGNoYW5nZSB0aGUKK2ZpbGUvZGlyZWN0b3J5IGhpZGluZyBsaXN0LiAgVGhlIGhpZGluZyBsaXN0IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlCitwYXR0ZXJucyBkZWxpbWl0ZWQgYnkgY29tbWFzLiAgRmlsZXMgYW5kL29yIGRpcmVjdG9yaWVzIHNhdGlzZnlpbmcKK3RoZXNlIHBhdHRlcm5zIHdpbGwgYmUgaGlkZGVuIChpZS4gbm90IHNob3duKS4KIAogCiBCUk9XU0lORyBXSVRIIEEgSE9SSVpPTlRBTExZIFNQTElUIFdJTkRPVwkJCSpuZXRydy1vKgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvcHJpbnQudHh0IGIvcnVudGltZS9kb2MvcHJpbnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYTYwOTcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9wcmludC50eHQKQEAgLTAsMCArMSw3NTEgQEAKKypwcmludC50eHQqICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdWwgMDUKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitQcmludGluZwkJCQkJCSpwcmludGluZyoKKworMS4gSW50cm9kdWN0aW9uCQkJCXxwcmludC1pbnRyb3wKKzIuIFByaW50IG9wdGlvbnMJCQl8cHJpbnQtb3B0aW9uc3wKKzMuIFBvc3RTY3JpcHQgUHJpbnRpbmcJCQl8cG9zdHNjcmlwdC1wcmludGluZ3wKKzQuIFBvc3RTY3JpcHQgUHJpbnRpbmcgRW5jb2RpbmcJCXxwb3N0c2NyaXB0LXByaW50LWVuY29kaW5nfAorNS4gUG9zdFNjcmlwdCBDSksgUHJpbnRpbmcgCQl8cG9zdHNjcmlwdC1jamstcHJpbnRpbmd8Cis2LiBQb3N0U2NyaXB0IFByaW50aW5nIFRyb3VibGVzaG9vdGluZwl8cG9zdHNjcmlwdC1wcmludC10cm91YmxlfAorNy4gUG9zdFNjcmlwdCBVdGlsaXRpZXMJCQl8cG9zdHNjcmlwdC1wcmludC11dGlsfAorOC4gRm9ybWZlZWQgQ2hhcmFjdGVycwkJCXxwcmludGluZy1mb3JtZmVlZHwKKwore1ZpIGhhcyBOb25lIG9mIHRoaXN9Cit7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3ByaW50ZXJ8IGZlYXR1cmV9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gSW50cm9kdWN0aW9uCQkJCQkJKnByaW50LWludHJvKgorCitPbiBNUy1XaW5kb3dzIFZpbSBjYW4gcHJpbnQgeW91ciB0ZXh0IG9uIGFueSBpbnN0YWxsZWQgcHJpbnRlci4gIE9uIG90aGVyCitzeXN0ZW1zIGEgUG9zdFNjcmlwdCBmaWxlIGlzIHByb2R1Y2VkLiAgVGhpcyBjYW4gYmUgZGlyZWN0bHkgc2VudCB0byBhCitQb3N0U2NyaXB0IHByaW50ZXIuICBGb3Igb3RoZXIgcHJpbnRlcnMgYSBwcm9ncmFtIGxpa2UgZ2hvc3RzY3JpcHQgbmVlZHMgdG8gYmUKK3VzZWQuCisKKwkJCQkJKjpoYSogKjpoYXJkY29weSogKkUyMzcqICpFMjM4KiAqRTMyNCoKKzpbcmFuZ2VdaGFbcmRjb3B5XVshXSBbYXJndW1lbnRzXQorCQkJU2VuZCBbcmFuZ2VdIGxpbmVzIChkZWZhdWx0IHdob2xlIGZpbGUpIHRvIHRoZQorCQkJcHJpbnRlci4KKworCQkJT24gTVMtV2luZG93cyBhIGRpYWxvZyBpcyBkaXNwbGF5ZWQgdG8gYWxsb3cgc2VsZWN0aW9uCisJCQlvZiBwcmludGVyLCBwYXBlciBzaXplIGV0Yy4gVG8gc2tpcCB0aGUgZGlhbG9nLCB1c2UKKwkJCXRoZSBbIV0uICBJbiB0aGlzIGNhc2UgdGhlIHByaW50ZXIgZGVmaW5lZCBieQorCQkJJ3ByaW50ZGV2aWNlJyBpcyB1c2VkLCBvciwgaWYgJ3ByaW50ZGV2aWNlJyBpcyBlbXB0eSwKKwkJCXRoZSBzeXN0ZW0gZGVmYXVsdCBwcmludGVyLgorCisJCQlGb3Igc3lzdGVtcyBvdGhlciB0aGFuIE1TLVdpbmRvd3MsIFBvc3RTY3JpcHQgaXMKKwkJCXdyaXR0ZW4gaW4gYSB0ZW1wIGZpbGUgYW5kICdwcmludGV4cHInIGlzIHVzZWQgdG8KKwkJCWFjdHVhbGx5IHByaW50IGl0LiAgVGhlbiBbYXJndW1lbnRzXSBjYW4gYmUgdXNlZCBieQorCQkJJ3ByaW50ZXhwcicgdGhyb3VnaCB8djpjbWRhcmd8LiAgT3RoZXJ3aXNlIFthcmd1bWVudHNdCisJCQlpcyBpZ25vcmVkLiAgJ3ByaW50b3B0aW9ucycgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeQorCQkJcGFwZXIgc2l6ZSwgZHVwbGV4LCBldGMuCisKKzpbcmFuZ2VdaGFbcmRjb3B5XVshXSA+e2ZpbGVuYW1lfQorCQkJQXMgYWJvdmUsIGJ1dCB3cml0ZSB0aGUgcmVzdWx0aW5nIFBvc3RTY3JpcHQgaW4gZmlsZQorCQkJe2ZpbGVuYW1lfS4KKwkJCVRoaW5ncyBsaWtlICIlIiBhcmUgZXhwYW5kZWQgfGNtZGxpbmUtc3BlY2lhbHwKKwkJCUNhcmVmdWw6IEFuIGV4aXN0aW5nIGZpbGUgaXMgc2lsZW50bHkgb3ZlcndyaXR0ZW4uCisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3Bvc3RzY3JpcHR8CisJCQlmZWF0dXJlfQorCQkJT24gTVMtV2luZG93cyB1c2UgdGhlICJwcmludCB0byBmaWxlIiBmZWF0dXJlIG9mIHRoZQorCQkJcHJpbnRlciBkcml2ZXIuCisKK1Byb2dyZXNzIGlzIGRpc3BsYXllZCBkdXJpbmcgcHJpbnRpbmcgYXMgYSBwYWdlIG51bWJlciBhbmQgYSBwZXJjZW50YWdlLiAgVG8KK2Fib3J0IHByaW50aW5nIHVzZSB0aGUgaW50ZXJydXB0IGtleSAoQ1RSTC1DIG9yLCBvbiBNUy1zeXN0ZW1zLCBDVFJMLUJyZWFrKS4KKworUHJpbnRlciBvdXRwdXQgaXMgY29udHJvbGxlZCBieSB0aGUgJ3ByaW50Zm9udCcgYW5kICdwcmludG9wdGlvbnMnIG9wdGlvbnMuCisncHJpbnRoZWFkZXInIHNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIGEgcGFnZSBoZWFkZXIuCisKK1RoZSBwcmludGVkIGZpbGUgaXMgYWx3YXlzIGxpbWl0ZWQgdG8gdGhlIHNlbGVjdGVkIG1hcmdpbnMsIGlycmVzcGVjdGl2ZSBvZgordGhlIGN1cnJlbnQgd2luZG93J3MgJ3dyYXAnIG9yICdsaW5lYnJlYWsnIHNldHRpbmdzLiAgVGhlICJ3cmFwIiBpdGVtIGluCisncHJpbnRvcHRpb25zJyBjYW4gYmUgdXNlZCB0byBzd2l0Y2ggd3JhcHBpbmcgb2ZmLgorVGhlIGN1cnJlbnQgaGlnaGxpZ2h0aW5nIGNvbG9ycyBhcmUgdXNlZCBpbiB0aGUgcHJpbnRvdXQsIHdpdGggdGhlIGZvbGxvd2luZworY29uc2lkZXJhdGlvbnM6CisxKSBUaGUgbm9ybWFsIGJhY2tncm91bmQgaXMgYWx3YXlzIHJlbmRlcmVkIGFzIHdoaXRlIChpLmUuIGJsYW5rIHBhcGVyLikKKzIpIFdoaXRlIHRleHQgb3IgdGhlIGRlZmF1bHQgZm9yZWdyb3VuZCBpcyByZW5kZXJlZCBhcyBibGFjaywgc28gdGhhdCBpdCBzaG93cworICAgdXAhCiszKSBJZiAnYmFja2dyb3VuZCcgaXMgImRhcmsiLCB0aGVuIHRoZSBjb2xvdXJzIGFyZSBkYXJrZW5lZCB0byBjb21wZW5zYXRlIGZvcgorICAgdGhlIGZhY3QgdGhhdCBvdGhlcndpc2UgdGhleSB3b3VsZCBiZSB0b28gYnJpZ2h0IHRvIHNob3cgdXAgY2xlYXJseSBvbgorICAgd2hpdGUgcGFwZXIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gUHJpbnQgb3B0aW9ucwkJCQkJKnByaW50LW9wdGlvbnMqCisKK0hlcmUgYXJlIHRoZSBkZXRhaWxzIGZvciB0aGUgb3B0aW9ucyB0aGF0IGNoYW5nZSB0aGUgd2F5IHByaW50aW5nIGlzIGRvbmUuCitGb3IgZ2VuZXJpYyBpbmZvIGFib3V0IHNldHRpbmcgb3B0aW9ucyBzZWUgfG9wdGlvbnMudHh0fC4KKworCQkJCQkJCSpwZGV2LW9wdGlvbioKKydwcmludGRldmljZScgJ3BkZXYnCXN0cmluZwkoZGVmYXVsdCBlbXB0eSkKKwkJCWdsb2JhbAorVGhpcyBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBwcmludGVyIHRvIGJlIHVzZWQgd2hlbiB0aGUgfDpoYXJkY29weXwgY29tbWFuZAoraXMgaXNzdWVkIHdpdGggYSBiYW5nICghKSB0byBza2lwIHRoZSBwcmludGVyIHNlbGVjdGlvbiBkaWFsb2cuICBPbiBXaW4zMiwgaXQKK3Nob3VsZCBiZSB0aGUgcHJpbnRlciBuYW1lIGV4YWN0bHkgYXMgaXQgYXBwZWFycyBpbiB0aGUgc3RhbmRhcmQgcHJpbnRlcgorZGlhbG9nLgorSWYgdGhlIG9wdGlvbiBpcyBlbXB0eSwgdGhlbiB2aW0gd2lsbCB1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IHByaW50ZXIgZm9yCisiOmhhcmRjb3B5ISIKKworCQkJCQkJCSpwZW5jLW9wdGlvbiogKkU2MjAqCisncHJpbnRlbmNvZGluZycgJ3BlbmMnCVN0cmluZwkoZGVmYXVsdCBlbXB0eSwgZXhjZXB0IGZvcjoKKwkJCQkJV2luZG93cywgT1MvMjogY3AxMjUyLAorCQkJCQlNYWNpbnRvc2g6IG1hYy1yb21hbiwKKwkJCQkJVk1TOiBkZWMtbWNzLAorCQkJCQlIUFVYOiBocC1yb21hbjgsCisJCQkJCUVCQ0RJQzogZWJjZGljLXVrKQorCQkJZ2xvYmFsCitTZXRzIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgdXNlZCB3aGVuIHByaW50aW5nLiAgVGhpcyBvcHRpb24gdGVsbHMgVklNIHdoaWNoCitwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmcgZmlsZSBmcm9tIHRoZSAicHJpbnQiIGRpcmVjdG9yeSBpbiAncnVudGltZXBhdGgnIHRvCit1c2UuCisKK1RoaXMgb3B0aW9uIHdpbGwgYWNjZXB0IGFueSB2YWx1ZSBmcm9tIHxlbmNvZGluZy1uYW1lc3wuICBBbnkgcmVjb2duaXplZCBuYW1lcworYXJlIGNvbnZlcnRlZCB0byBWSU0gc3RhbmRhcmQgbmFtZXMgLSBzZWUgJ2VuY29kaW5nJyBmb3IgbW9yZSBkZXRhaWxzLiAgTmFtZXMKK25vdCByZWNvZ25pemVkIGJ5IFZJTSB3aWxsIGp1c3QgYmUgY29udmVydGVkIHRvIGxvd2VyIGNhc2UgYW5kIHVuZGVyc2NvcmVzCityZXBsYWNlZCB3aXRoICctJyBzaWducy4KKworSWYgJ3ByaW50ZW5jb2RpbmcnIGlzIGVtcHR5IG9yIFZJTSBjYW5ub3QgZmluZCB0aGUgZmlsZSB0aGVuIGl0IHdpbGwgdXNlCisnZW5jb2RpbmcnIChpZiBWSU0gaXMgY29tcGlsZWQgd2l0aCB8K211bHRpX2J5dGV8IGFuZCBpdCBpcyBzZXQgYW4gOC1iaXQKK2VuY29kaW5nKSB0byBmaW5kIHRoZSBwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmcgZmlsZS4gIElmIFZJTSBpcyB1bmFibGUgdG8gZmluZAorYSBjaGFyYWN0ZXIgZW5jb2RpbmcgZmlsZSB0aGVuIGl0IHdpbGwgdXNlIHRoZSAibGF0aW4xIiBwcmludCBjaGFyYWN0ZXIKK2VuY29kaW5nIGZpbGUuCisKK1doZW4gJ2VuY29kaW5nJyBpcyBzZXQgdG8gYSBtdWx0aS1ieXRlIGVuY29kaW5nLCBWSU0gd2lsbCB0cnkgdG8gY29udmVydAorY2hhcmFjdGVycyB0byB0aGUgcHJpbnRpbmcgZW5jb2RpbmcgZm9yIHByaW50aW5nIChpZiAncHJpbnRlbmNvZGluZycgaXMgZW1wdHkKK3RoZW4gdGhlIGNvbnZlcnNpb24gd2lsbCBiZSB0byBsYXRpbjEpLiAgQ29udmVyc2lvbiB0byBhIHByaW50aW5nIGVuY29kaW5nCitvdGhlciB0aGFuIGxhdGluMSB3aWxsIHJlcXVpcmUgVklNIHRvIGJlIGNvbXBpbGVkIHdpdGggdGhlIHwraWNvbnZ8IGZlYXR1cmUuCitJZiBubyBjb252ZXJzaW9uIGlzIHBvc3NpYmxlIHRoZW4gcHJpbnRpbmcgd2lsbCBmYWlsLiAgQW55IGNoYXJhY3RlcnMgdGhhdAorY2Fubm90IGJlIGNvbnZlcnRlZCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdXBzaWRlIGRvd24gcXVlc3Rpb24gbWFya3MuCisKK0ZvdXIgcHJpbnQgY2hhcmFjdGVyIGVuY29kaW5nIGZpbGVzIGFyZSBwcm92aWRlZCB0byBzdXBwb3J0IGRlZmF1bHQgTWFjLCBWTVMsCitIUFVYLCBhbmQgRUJDRElDIGNoYXJhY3RlciBlbmNvZGluZ3MgYW5kIGFyZSB1c2VkIGJ5IGRlZmF1bHQgb24gdGhlc2UKK3BsYXRmb3Jtcy4gIENvZGUgcGFnZSAxMjUyIHByaW50IGNoYXJhY3RlciBlbmNvZGluZyBpcyB1c2VkIGJ5IGRlZmF1bHQgb24KK1dpbmRvd3MgYW5kIE9TLzIgcGxhdGZvcm1zLgorCisJCQkJCQkJKnBleHByLW9wdGlvbioKKydwcmludGV4cHInICdwZXhwcicJU3RyaW5nCShkZWZhdWx0OiBzZWUgYmVsb3cpCisJCQlnbG9iYWwKK0V4cHJlc3Npb24gdGhhdCBpcyBldmFsdWF0ZWQgdG8gcHJpbnQgdGhlIFBvc3RTY3JpcHQgcHJvZHVjZWQgd2l0aAorfDpoYXJkY29weXwuCitUaGUgZmlsZSBuYW1lIHRvIGJlIHByaW50ZWQgaXMgaW4gfHY6Zm5hbWVfaW58LgorVGhlIGFyZ3VtZW50cyB0byB0aGUgIjpoYXJkY29weSIgY29tbWFuZCBhcmUgaW4gfHY6Y21kYXJnfC4KK1RoZSBleHByZXNzaW9uIG11c3QgdGFrZSBjYXJlIG9mIGRlbGV0aW5nIHRoZSBmaWxlIGFmdGVyIHByaW50aW5nIGl0LgorV2hlbiB0aGVyZSBpcyBhbiBlcnJvciwgdGhlIGV4cHJlc3Npb24gbXVzdCByZXR1cm4gYSBub24temVybyBudW1iZXIuCitJZiB0aGVyZSBpcyBubyBlcnJvciwgcmV0dXJuIHplcm8gb3IgYW4gZW1wdHkgc3RyaW5nLgorVGhlIGRlZmF1bHQgZm9yIG5vbiBNUy1XaW5kb3dzIG9yIFZNUyBzeXN0ZW1zIGlzIHRvIHNpbXBseSB1c2UgImxwciIgdG8gcHJpbnQKK3RoZSBmaWxlOiA+CisKKyAgICBzeXN0ZW0oJ2xwcicgLiAoJnByaW50ZGV2aWNlID09ICcnID8gJycgOiAnIC1QJyAuICZwcmludGRldmljZSkKKwkuICcgJyAuIHY6Zm5hbWVfaW4pIC4gZGVsZXRlKHY6Zm5hbWVfaW4pICsgdjpzaGVsbF9lcnJvcgorCitPbiBNUy1Eb3MsIE1TLVdpbmRvd3MgYW5kIE9TLzIgbWFjaGluZXMgdGhlIGRlZmF1bHQgaXMgdG8gY29weSB0aGUgZmlsZSB0byB0aGUKK2N1cnJlbnRseSBzcGVjaWZpZWQgcHJpbnRkZXZpY2U6ID4KKworICAgIHN5c3RlbSgnY29weScgLiAnICcgLiB2OmZuYW1lX2luIC4gKCZwcmludGRldmljZSA9PSAnJworCQk/ICcgTFBUMTonIDogKCcgXCInIC4gJnByaW50ZGV2aWNlIC4gJ1wiJykpKQorCQkuIGRlbGV0ZSh2OmZuYW1lX2luKQorCitPbiBWTVMgbWFjaGluZXMgdGhlIGRlZmF1bHQgaXMgdG8gc2VuZCB0aGUgZmlsZSB0byBlaXRoZXIgdGhlIGRlZmF1bHQgb3IKK2N1cnJlbnRseSBzcGVjaWZpZWQgcHJpbnRkZXZpY2U6ID4KKworICAgIHN5c3RlbSgncHJpbnQnIC4gKCZwcmludGRldmljZSA9PSAnJyA/ICcnIDogJyAvcXVldWU9JyAuCisJCSZwcmludGRldmljZSkgLiAnICcgLiB2OmZuYW1lX2luKSAuIGRlbGV0ZSh2OmZuYW1lX2luKQorCitJZiB5b3UgY2hhbmdlIHRoaXMgb3B0aW9uLCB1c2luZyBhIGZ1bmN0aW9uIGlzIGFuIGVhc3kgd2F5IHRvIGF2b2lkIGhhdmluZyB0bworZXNjYXBlIGFsbCB0aGUgc3BhY2VzLiAgRXhhbXBsZTogPgorCisJOnNldCBwcmludGV4cHI9UHJpbnRGaWxlKHY6Zm5hbWVfaW4pCisJOmZ1bmN0aW9uIFByaW50RmlsZShmbmFtZSkKKwk6ICBjYWxsIHN5c3RlbSgiZ2hvc3R2aWV3ICIgLiBhOmZuYW1lKQorCTogIGNhbGwgZGVsZXRlKGE6Zm5hbWUpCisJOiAgcmV0dXJuIHY6c2hlbGxfZXJyb3IKKwk6ZW5kZnVuYworCitCZSBhd2FyZSB0aGF0IHNvbWUgcHJpbnQgcHJvZ3JhbXMgcmV0dXJuIGNvbnRyb2wgYmVmb3JlIHRoZXkgaGF2ZSByZWFkIHRoZQorZmlsZS4gIElmIHlvdSBkZWxldGUgdGhlIGZpbGUgdG9vIHNvb24gaXQgd2lsbCBub3QgYmUgcHJpbnRlZC4gIFRoZXNlIHByb2dyYW1zCit1c3VhbGx5IG9mZmVyIGFuIG9wdGlvbiB0byBoYXZlIHRoZW0gcmVtb3ZlIHRoZSBmaWxlIHdoZW4gcHJpbnRpbmcgaXMgZG9uZS4KKwkJCQkJCQkqRTM2NSoKK0lmIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24gZmFpbHMgb3IgaXQgcmVzdWx0cyBpbiBhIG5vbi16ZXJvIG51bWJlciwgeW91IGdldAorYW4gZXJyb3IgbWVzc2FnZS4gIEluIHRoYXQgY2FzZSBWaW0gd2lsbCBkZWxldGUgdGhlIGZpbGUuICBJbiB0aGUgZGVmYXVsdAordmFsdWUgZm9yIG5vbi1NUy1XaW5kb3dzIGEgdHJpY2sgaXMgdXNlZDogQWRkaW5nICJ2OnNoZWxsX2Vycm9yIiB3aWxsIHJlc3VsdAoraW4gYSBub24temVybyBudW1iZXIgd2hlbiB0aGUgc3lzdGVtKCkgY2FsbCBmYWlscy4KKworVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3Igc2VjdXJpdHkKK3JlYXNvbnMuCisKKwkJCQkJCQkqcGZuLW9wdGlvbiogKkU2MTMqCisncHJpbnRmb250JyAncGZuJwlzdHJpbmcJKGRlZmF1bHQgImNvdXJpZXIiKQorCQkJZ2xvYmFsCitUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBmb250IHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgfDpoYXJkY29weXwgY29tbWFuZCdzCitvdXRwdXQuICBJdCBoYXMgdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSAnZ3VpZm9udCcgb3B0aW9uLCBleGNlcHQgdGhhdCBvbmx5IG9uZQorZm9udCBtYXkgYmUgbmFtZWQsIGFuZCB0aGUgc3BlY2lhbCAiZ3VpZm9udD0qIiBzeW50YXggaXMgbm90IGF2YWlsYWJsZS4KKworSW4gdGhlIFdpbjMyIEdVSSB2ZXJzaW9uIHRoaXMgc3BlY2lmaWVzIGEgZm9udCBuYW1lIHdpdGggaXRzIGV4dHJhIGF0dHJpYnV0ZXMsCithcyB3aXRoIHRoZSAnZ3VpZm9udCcgb3B0aW9uLgorCitGb3Igb3RoZXIgc3lzdGVtcywgb25seSAiOmgxMSIgaXMgcmVjb2duaXplZCwgd2hlcmUgIjExIiBpcyB0aGUgcG9pbnQgc2l6ZSBvZgordGhlIGZvbnQuICBXaGVuIG9taXR0ZWQsIHRoZSBwb2ludCBzaXplIGlzIDEwLgorCisJCQkJCQkJKnBoZWFkZXItb3B0aW9uKgorJ3ByaW50aGVhZGVyJyAncGhlYWRlcicgIHN0cmluZyAgKGRlZmF1bHQgIiU8JWYlaCVtJT1QYWdlICVOIikKKwkJCSBnbG9iYWwKK1RoaXMgZGVmaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSBoZWFkZXIgcHJvZHVjZWQgaW4gfDpoYXJkY29weXwgb3V0cHV0LiAgVGhlCitvcHRpb24gaXMgZGVmaW5lZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlICdzdGF0dXNsaW5lJyBvcHRpb24uICBJZiBWaW0gaGFzIG5vdAorYmVlbiBjb21waWxlZCB3aXRoIHRoZSB8K3N0YXR1c2xpbmV8IGZlYXR1cmUsIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgYW5kIGEKK3NpbXBsZSBkZWZhdWx0IGhlYWRlciBpcyB1c2VkLCB3aGljaCBzaG93cyB0aGUgcGFnZSBudW1iZXIuCisKKwkJCQkJCQkqcG1iY3Mtb3B0aW9uKgorJ3ByaW50bWJjaGFyc2V0JyAncG1iY3MnICBzdHJpbmcgKGRlZmF1bHQgIiIpCisJCQkgIGdsb2JhbAorU2V0cyB0aGUgQ0pLIGNoYXJhY3RlciBzZXQgdG8gYmUgdXNlZCB3aGVuIGdlbmVyYXRpbmcgQ0pLIG91dHB1dCBmcm9tCit8OmhhcmRjb3B5fC4gIFRoZSBmb2xsb3dpbmcgcHJlZGVmaW5lZCB2YWx1ZXMgYXJlIGN1cnJlbnRseSByZWNvZ25pc2VkIGJ5IFZJTToKKworCQlWYWx1ZQkJRGVzY3JpcHRpb24gfgorICBDaGluZXNlCUdCXzIzMTItODAKKyAgKFNpbXBsaWZpZWQpCUdCVF8xMjM0NS05MAorCQlNQUMJCUFwcGxlIE1hYyBTaW1wbGlmaWVkIENoaW5lc2UKKwkJR0JULTkwX01BQwlHQi9UIDEyMzQ1LTkwIEFwcGxlIE1hYyBTaW1wbGlmaWVkCisJCQkJICBDaGluZXNlCisJCUdCSwkJR0JLIChHQiAxMzAwMC4xLTkzKQorCQlJU08xMDY0NglJU08gMTA2NDYtMToxOTkzCisKKyAgQ2hpbmVzZQlDTlNfMTk5MwlDTlMgMTE2NDMtMTk5MywgUGxhbmVzIDEgJiAyCisgIChUcmFkaXRpb25hbCkJQklHNQorCQlFVEVOCQlCaWc1IHdpdGggRVRlbiBleHRlbnNpb25zCisJCUlTTzEwNjQ2CUlTTyAxMDY0Ni0xOjE5OTMKKworICBKYXBhbmVzZQlKSVNfQ18xOTc4CisJCUpJU19YXzE5ODMKKwkJSklTX1hfMTk5MAorCQlNU1dJTkRPV1MJV2luMy4xLzk1SiAoSklTIFggMTk5NyArIE5FQyArIAorCQkJCSAgSUJNIGV4dGVuc2lvbnMpCisJCUtBTkpJVEFMSzYJQXBwbGUgTWFjIEthbmppVGFsayBWNi54CisJCUtBTkpJVEFMSzcJQXBwbGUgTWFjIEthbmppVGFsayBWNy54CisKKyAgS29yZWFuCUtTX1hfMTk5MgorCQlNQUMJCUFwcGxlIE1hY2ludG9zaCBLb3JlYW4KKwkJTVNXSU5ET1dTCUtTIFggMTk5MiB3aXRoIE1TIGV4dGVuc2lvbnMKKwkJSVNPMTA2NDYJSVNPIDEwNjQ2LTE6MTk5MworCitPbmx5IGNlcnRhaW4gY29tYmluYXRpb25zIG9mIHRoZSBhYm92ZSB2YWx1ZXMgYW5kICdwcmludGVuY29kaW5nJyBhcmUKK3Bvc3NpYmxlLiAgVGhlIGZvbGxvd2luZyB0YWJsZXMgc2hvdyB0aGUgdmFsaWQgY29tYmluYXRpb25zOgorCisJCQkJZXVjLWNuCSBnYmsJdWNzLTIJdXRmLTggfgorICBDaGluZXNlCUdCXzIzMTItODAJICAgeAorICAoU2ltcGxpZmllZCkJR0JUXzEyMzQ1LTkwCSAgIHgKKwkJTUFDCQkgICB4CisJCUdCVC05MF9NQUMJICAgeAorCQlHQksJCQkgICB4CisJCUlTTzEwNjQ2CQkJICB4CSAgeAorCisJCQkJZXVjLXR3CSBiaWc1CXVjcy0yCXV0Zi04IH4KKyAgQ2hpbmVzZQlDTlNfMTk5MwkgICB4CisgIChUcmFkaXRpb25hbCkJQklHNQkJCSAgIHgKKwkJRVRFTgkJCSAgIHgKKwkJSVNPMTA2NDYJCQkgIHgJICB4CisKKwkJCQlldWMtanAJIHNqaXMJdWNzLTIJdXRmLTggfgorICBKYXBhbmVzZQlKSVNfQ18xOTc4CSAgIHgJICAgeAorCQlKSVNfWF8xOTgzCSAgIHgJICAgeAorCQlKSVNfWF8xOTkwCSAgIHgJCSAgeAkgIHgKKwkJTVNXSU5ET1dTCSAgIHgKKwkJS0FOSklUQUxLNgkgICB4CisJCUtBTkpJVEFMSzcJICAgeAorCisJCQkJZXVjLWtyCSBjcDk0OQl1Y3MtMgl1dGYtOCB+CisgIEtvcmVhbglLU19YXzE5OTIJICAgeCAgIAorCQlNQUMJCSAgIHgKKwkJTVNXSU5ET1dTCQkgICB4CisJCUlTTzEwNjQ2CQkJICB4CSAgeAorCitUbyBzZXQgdXAgdGhlIGNvcnJlY3QgZW5jb2RpbmcgYW5kIGNoYXJhY3RlciBzZXQgZm9yIHByaW50aW5nIHNvbWUKK0phcGFuZXNlIHRleHQgeW91IHdvdWxkIGRvIHRoZSBmb2xsb3dpbmc7ID4KKwk6c2V0IHByaW50ZW5jb2Rpbmc9ZXVjLWpwCisJOnNldCBwcmludG1iY2hhcnNldD1KSVNfWF8xOTgzCisKK0lmICdwcmludG1iY2hhcnNldCcgaXMgbm90IG9uZSBvZiB0aGUgYWJvdmUgdmFsdWVzIHRoZW4gaXQgaXMgYXNzdW1lZCB0bworc3BlY2lmeSBhIGN1c3RvbSBtdWx0aS1ieXRlIGNoYXJhY3RlciBzZXQgYW5kIG5vIGNoZWNrIHdpbGwgYmUgbWFkZSB0aGF0IGl0IGlzCitjb21wYXRpYmxlIHdpdGggdGhlIHZhbHVlIGZvciAncHJpbnRlbmNvZGluZycuICBWSU0gd2lsbCBsb29rIGZvciBhIGZpbGUKK2RlZmluaW5nIHRoZSBjaGFyYWN0ZXIgc2V0IGluIHRoZSAicHJpbnQiIGRpcmVjdG9yeSBpbiAncnVudGltZXBhdGgnLgorCisJCQkJCQkJKnBtYmZuLW9wdGlvbioKKydwcmludG1iZm9udCcgJ3BtYmZuJwlzdHJpbmcgKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKK1RoaXMgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmaWVsZHMgZm9yIGZvbnQgbmFtZXMgdG8gYmUgdXNlZCB3aGVuCitnZW5lcmF0aW5nIENKSyBvdXRwdXQgZnJvbSB8OmhhcmRjb3B5fC4gIEVhY2ggZm9udCBuYW1lIGhhcyB0byBiZSBwcmVjZWRlZAord2l0aCBhIGxldHRlciBpbmRpY2F0aW5nIHRoZSBzdHlsZSB0aGUgZm9udCBpcyB0byBiZSB1c2VkIGZvciBhcyBmb2xsb3dzOgorCisgIHI6e2ZvbnQtbmFtZX0JCWZvbnQgdG8gdXNlIGZvciBub3JtYWwgY2hhcmFjdGVycworICBiOntmb250LW5hbWV9CQlmb250IHRvIHVzZSBmb3IgYm9sZCBjaGFyYWN0ZXJzCisgIGk6e2ZvbnQtbmFtZX0JCWZvbnQgdG8gdXNlIGZvciBpdGFsaWMgY2hhcmFjdGVycworICBvOntmb250LW5hbWV9CQlmb250IHRvIHVzZSBmb3IgYm9sZC1pdGFsaWMgY2hhcmFjdGVycworCitBIGZpZWxkIHdpdGggdGhlIHI6IHByZWZpeCBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIGRvaW5nIENKSyBwcmludGluZy4gIFRoZQorb3RoZXIgZm9udG5hbWUgc3BlY2lmaWVycyBhcmUgb3B0aW9uYWwuICBJZiBhIHNwZWNpZmllciBpcyBtaXNzaW5nIHRoZW4KK2Fub3RoZXIgZm9udCB3aWxsIGJlIHVzZWQgYXMgZm9sbG93czoKKworICBpZiBiOiBpcyBtaXNzaW5nLCB0aGVuIHVzZSByOgorICBpZiBpOiBpcyBtaXNzaW5nLCB0aGVuIHVzZSByOgorICBpZiBvOiBpcyBtaXNzaW5nLCB0aGVuIHVzZSBpOgorCitTb21lIENKSyBmb250cyBkbyBub3QgY29udGFpbiBjaGFyYWN0ZXJzIGZvciBjb2RlcyBpbiB0aGUgQVNDSUkgY29kZSByYW5nZS4KK0Fsc28sIHNvbWUgY2hhcmFjdGVycyBpbiB0aGUgQ0pLIEFTQ0lJIGNvZGUgcmFuZ2VzIGRpZmZlciBpbiBhIGZldyBjb2RlIHBvaW50cworZnJvbSB0cmFkaXRpb25hbCBBU0NJSSBjaGFyYWN0ZXJzLiAgVGhlcmUgYXJlIHR3byBhZGRpdGlvbmFsIGZpZWxkcyB0byBjb250cm9sCitwcmludGluZyBvZiBjaGFyYWN0ZXJzIGluIHRoZSBBU0NJSSBjb2RlIHJhbmdlLgorCisgIGM6eWVzCQkJVXNlIENvdXJpZXIgZm9udCBmb3IgY2hhcmFjdGVycyBpbiB0aGUgQVNDSUkKKyAgYzpubyAoZGVmYXVsdCkJY29kZSByYW5nZS4KKworICBhOnllcwkJCVVzZSBBU0NJSSBjaGFyYWN0ZXIgc2V0IGZvciBjb2RlcyBpbiB0aGUgQVNDSUkKKyAgYTpubyAoZGVmYXVsdCkJY29kZSByYW5nZS4KKworVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIHNwZWNpZnlpbmcgdHdvIG11bHRpLWJ5dGUgZm9udHMsIG9uZSBmb3Igbm9ybWFsCithbmQgaXRhbGljIHByaW50aW5nIGFuZCBvbmUgZm9yIGJvbGQgYW5kIGJvbGQtaXRhbGljIHByaW50aW5nLCBhbmQgdXNpbmcKK0NvdXJpZXIgdG8gcHJpbnQgY29kZXMgaW4gdGhlIEFTQ0lJIGNvZGUgcmFuZ2UgYnV0IHVzaW5nIHRoZSBuYXRpb25hbAorY2hhcmFjdGVyIHNldDogPgorCTpzZXQgcHJpbnRtYmZvbnQ9cjpXYWRhTWluLVJlZ3VsYXIsYjpXYWRhTWluLUJvbGQsYzp5ZXMKKzwKKwkJCQkJCQkqcG9wdC1vcHRpb24qCisncHJpbnRvcHRpb25zJyAncG9wdCcgCXN0cmluZyAoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorVGhpcyBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGl0ZW1zIHRoYXQgY29udHJvbCB0aGUgZm9ybWF0IG9mIHRoZSBvdXRwdXQKK29mIHw6aGFyZGNvcHl8OgorCisgIGxlZnQ6e3NwZWN9CQlsZWZ0IG1hcmdpbiAoZGVmYXVsdDogMTBwYykKKyAgcmlnaHQ6e3NwZWN9CQlyaWdodCBtYXJnaW4gKGRlZmF1bHQ6IDVwYykKKyAgdG9wOntzcGVjfQkJdG9wIG1hcmdpbiAoZGVmYXVsdDogNXBjKQorICBib3R0b206e3NwZWN9CQlib3R0b20gbWFyZ2luIChkZWZhdWx0OiA1cGMpCisJCQl7c3BlY30gaXMgYSBudW1iZXIgZm9sbG93ZWQgYnkgImluIiBmb3IgaW5jaGVzLCAicHQiCisJCQlmb3IgcG9pbnRzICgxIHBvaW50IGlzIDEvNzIgb2YgYW4gaW5jaCksICJtbSIgZm9yCisJCQltaWxsaW1ldGVycyBvciAicGMiIGZvciBhIHBlcmNlbnRhZ2Ugb2YgdGhlIG1lZGlhCisJCQlzaXplLgorCQkJV2VpcmQgZXhhbXBsZToKKwkJCSAgICBsZWZ0OjJpbix0b3A6MzBwdCxyaWdodDoxNm1tLGJvdHRvbTozcGMKKwkJCUlmIHRoZSB1bml0IGlzIG5vdCByZWNvZ25pemVkIHRoZXJlIGlzIG5vIGVycm9yIGFuZAorCQkJdGhlIGRlZmF1bHQgdmFsdWUgaXMgdXNlZC4KKworICBoZWFkZXI6e25yfQkJTnVtYmVyIG9mIGxpbmVzIHRvIHJlc2VydmUgZm9yIHRoZSBoZWFkZXIuCisJCQlPbmx5IHRoZSBmaXJzdCBsaW5lIGlzIGFjdHVhbGx5IGZpbGxlZCwgdGh1cyB3aGVuIHtucn0KKwkJCWlzIDIgdGhlcmUgaXMgb25lIGVtcHR5IGxpbmUuICBUaGUgaGVhZGVyIGlzIGZvcm1hdHRlZAorCQkJYWNjb3JkaW5nIHRvICdwcmludGhlYWRlcicuCisgIGhlYWRlcjowCQlEbyBub3QgcHJpbnQgYSBoZWFkZXIuCisgIGhlYWRlcjoyICAoZGVmYXVsdCkJVXNlIHR3byBsaW5lcyBmb3IgdGhlIGhlYWRlcgorCisgIHN5bnRheDpuCQlEbyBub3QgdXNlIHN5bnRheCBoaWdobGlnaHRpbmcuICBUaGlzIGlzIGZhc3RlciBhbmQKKwkJCXRodXMgdXNlZnVsIHdoZW4gcHJpbnRpbmcgbGFyZ2UgZmlsZXMuCisgIHN5bnRheDp5CQlEbyBzeW50YXggaGlnaGxpZ2h0aW5nLgorICBzeW50YXg6YSAgKGRlZmF1bHQpCVVzZSBzeW50YXggaGlnaGxpZ2h0aW5nIGlmIHRoZSBwcmludGVyIGFwcGVhcnMgdG8gYmUKKyAgCQkJYWJsZSB0byBwcmludCBjb2xvciBvciBncmV5LgorCisgIG51bWJlcjp5CQlJbmNsdWRlIGxpbmUgbnVtYmVycyBpbiB0aGUgcHJpbnRlZCBvdXRwdXQuCisgIG51bWJlcjpuICAoZGVmYXVsdCkJTm8gbGluZSBudW1iZXJzLgorCisgIHdyYXA6eSAgICAoZGVmYXVsdCkJV3JhcCBsb25nIGxpbmVzLgorICB3cmFwOm4JCVRydW5jYXRlIGxvbmcgbGluZXMuCisKKyAgZHVwbGV4Om9mZgkJUHJpbnQgb24gb25lIHNpZGUuCisgIGR1cGxleDpsb25nIChkZWZhdWx0KQlQcmludCBvbiBib3RoIHNpZGVzICh3aGVuIHBvc3NpYmxlKSwgYmluZCBvbiBsb25nCisgIAkJCXNpZGUuCisgIGR1cGxleDpzaG9ydAkJUHJpbnQgb24gYm90aCBzaWRlcyAod2hlbiBwb3NzaWJsZSksIGJpbmQgb24gc2hvcnQKKyAgCQkJc2lkZS4KKworICBjb2xsYXRlOnkgIChkZWZhdWx0KQlDb2xsYXRpbmc6IDEgMiAzLCAxIDIgMywgMSAyIDMKKyAgY29sbGF0ZTpuCQlObyBjb2xsYXRpbmc6IDEgMSAxLCAyIDIgMiwgMyAzIDMKKworICBqb2JzcGxpdDpuIChkZWZhdWx0KQlEbyBhbGwgY29waWVzIGluIG9uZSBwcmludCBqb2IKKyAgam9ic3BsaXQ6eQkJRG8gZWFjaCBjb3B5IGFzIGEgc2VwYXJhdGUgcHJpbnQgam9iLiAgVXNlZnVsIHdoZW4KKyAgCQkJZG9pbmcgTi11cCBwb3N0cHJvY2Vzc2luZy4KKworICBwb3J0cmFpdDp5IChkZWZhdWx0KQlPcmllbnRhdGlvbiBpcyBwb3J0cmFpdC4KKyAgcG9ydHJhaXQ6bgkJT3JpZW50YXRpb24gaXMgbGFuZHNjYXBlLgorCQkJCQkJKmE0KiAqbGV0dGVyKgorICBwYXBlcjpBNCAgIChkZWZhdWx0KQlQYXBlciBzaXplOiBBNAorICBwYXBlcjp7bmFtZX0JCVBhcGVyIHNpemUgZnJvbSB0aGlzIHRhYmxlOgorCQkJe25hbWV9CSAgICBzaXplIGluIGNtCSAgICAgc2l6ZSBpbiBpbmNoIH4KKwkJCTEweDE0CSAgICAyNS40ICB4IDM1LjU3ICAgIDEwICAgIHggMTQKKwkJCUEzCSAgICAyOS43ICB4IDQyCSAgICAgMTEuNjkgeCAxNi41NAorCQkJQTQJICAgIDIxCSAgeCAyOS43ICAgICAgOC4yNyB4IDExLjY5CisJCQlBNQkgICAgMTQuOCAgeCAyMQkgICAgICA1LjgzIHggIDguMjcKKwkJCUI0CSAgICAyNQkgIHggMzUuMyAgICAgMTAuMTIgeCAxNC4zMworCQkJQjUJICAgIDE3LjYgIHggMjUJICAgICAgNy4xNyB4IDEwLjEyCisJCQlleGVjdXRpdmUgICAxOC40MiB4IDI2LjY3ICAgICA3LjI1IHggMTAuNQorCQkJZm9saW8JICAgIDIxCSAgeCAzMwkgICAgICA4LjI3IHggMTMKKwkJCWxlZGdlcgkgICAgNDMuMTMgeCAyNy45NiAgICAxNyAgICB4IDExCisJCQlsZWdhbAkgICAgMjEuNTkgeCAzNS41NyAgICAgOC41ICB4IDE0CisJCQlsZXR0ZXIJICAgIDIxLjU5IHggMjcuOTYgICAgIDguNSAgeCAxMQorCQkJcXVhcnRvCSAgICAyMS41OSB4IDI3LjUgICAgICA4LjUgIHggMTAuODMKKwkJCXN0YXRlbWVudCAgIDEzLjk3IHggMjEuNTkgICAgIDUuNSAgeCAgOC41CisJCQl0YWJsb2lkICAgICAyNy45NiB4IDQzLjEzICAgIDExICAgIHggMTcKKworICBmb3JtZmVlZDpuIChkZWZhdWx0KQlUcmVhdCBmb3JtIGZlZWQgY2hhcmFjdGVycyAoMHgwYykgYXMgYSBub3JtYWwgcHJpbnQKKyAgCQkJY2hhcmFjdGVyLgorICBmb3JtZmVlZDp5CQlXaGVuIGEgZm9ybSBmZWVkIGNoYXJhY3RlciBpcyBlbmNvdW50ZXJlZCwgY29udGludWUKKwkJCXByaW50aW5nIG9mIHRoZSBjdXJyZW50IGxpbmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKwkJCWZpcnN0IGxpbmUgb24gYSBuZXcgcGFnZS4KKworVGhlIGl0ZW0gaW5kaWNhdGVkIHdpdGggKGRlZmF1bHQpIGlzIHVzZWQgd2hlbiB0aGUgaXRlbSBpcyBub3QgcHJlc2VudC4gIFRoZQordmFsdWVzIGFyZSBub3QgYWx3YXlzIHVzZWQsIGVzcGVjaWFsbHkgd2hlbiB1c2luZyBhIGRpYWxvZyB0byBzZWxlY3QgdGhlCitwcmludGVyIGFuZCBvcHRpb25zLgorRXhhbXBsZTogPgorCTpzZXQgcHJpbnRvcHRpb25zPXBhcGVyOmxldHRlcixkdXBsZXg6b2ZmCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gUG9zdFNjcmlwdCBQcmludGluZwkJCQkJKnBvc3RzY3JpcHQtcHJpbnRpbmcqCisJCQkJCQkqRTQ1NSogKkU0NTYqICpFNDU3KiAqRTYyNCoKK1Byb3ZpZGVkIHlvdSBoYXZlIGVub3VnaCBkaXNrIHNwYWNlIHRoZXJlIHNob3VsZCBiZSBubyBwcm9ibGVtcyBnZW5lcmF0aW5nIGEKK1Bvc3RTY3JpcHQgZmlsZS4gIFlvdSBuZWVkIHRvIGhhdmUgdGhlIHJ1bnRpbWUgZmlsZXMgY29ycmVjdGx5IGluc3RhbGxlZCAoaWYKK3lvdSBjYW4gZmluZCB0aGUgaGVscCBmaWxlcywgdGhleSBwcm9iYWJseSBhcmUpLgorCitUaGVyZSBhcmUgY3VycmVudGx5IGEgbnVtYmVyIG9mIGxpbWl0YXRpb25zIHdpdGggUG9zdFNjcmlwdCBwcmludGluZzoKKworLSAncHJpbnRmb250JyAtIFRoZSBmb250IG5hbWUgaXMgaWdub3JlZCAodGhlIENvdXJpZXIgZmFtaWx5IGlzIGFsd2F5cyB1c2VkIC0KKyAgaXQgc2hvdWxkIGJlIGF2YWlsYWJsZSBvbiBhbGwgUG9zdFNjcmlwdCBwcmludGVycykgYnV0IHRoZSBmb250IHNpemUgaXMKKyAgdXNlZC4KKworLSAncHJpbnRvcHRpb25zJyAtIFRoZSBkdXBsZXggc2V0dGluZyBpcyB1c2VkIHdoZW4gZ2VuZXJhdGluZyBQb3N0U2NyaXB0CisgIG91dHB1dCwgYnV0IGl0IGlzIHVwIHRvIHRoZSBwcmludGVyIHRvIHRha2Ugbm90aWNlIG9mIHRoZSBzZXR0aW5nLiAgSWYgdGhlCisgIHByaW50ZXIgZG9lcyBub3Qgc3VwcG9ydCBkdXBsZXggcHJpbnRpbmcgdGhlbiBpdCBzaG91bGQgYmUgc2lsZW50bHkgaWdub3JlZC4KKyAgU29tZSBwcmludGVycywgaG93ZXZlciwgZG9uJ3QgcHJpbnQgYXQgYWxsLgorCistIDgtYml0IHN1cHBvcnQgLSBXaGlsZSBhIG51bWJlciBvZiA4LWJpdCBwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmdzIGFyZQorICBzdXBwb3J0ZWQgaXQgaXMgcG9zc2libGUgdGhhdCBzb21lIGNoYXJhY3RlcnMgd2lsbCBub3QgcHJpbnQuICBXaGV0aGVyIGEKKyAgY2hhcmFjdGVyIHdpbGwgcHJpbnQgZGVwZW5kcyBvbiB0aGUgZm9udCBpbiB0aGUgcHJpbnRlciBrbm93aW5nIHRoZQorICBjaGFyYWN0ZXIuICBNaXNzaW5nIGNoYXJhY3RlcnMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGFuIHVwc2lkZSBkb3duIHF1ZXN0aW9uCisgIG1hcmssIG9yIGEgc3BhY2UgaWYgdGhhdCBjaGFyYWN0ZXIgaXMgYWxzbyBub3Qga25vd24gYnkgdGhlIGZvbnQuICBJdCBtYXkgYmUKKyAgcG9zc2libGUgdG8gZ2V0IGFsbCB0aGUgY2hhcmFjdGVycyBpbiBhbiBlbmNvZGluZyB0byBwcmludCBieSBpbnN0YWxsaW5nIGEKKyAgbmV3IHZlcnNpb24gb2YgdGhlIENvdXJpZXIgZm9udCBmYW1pbHkuCisKKy0gTXVsdGktYnl0ZSBzdXBwb3J0IC0gQ3VycmVudGx5IFZJTSB3aWxsIHRyeSB0byBjb252ZXJ0IG11bHRpLWJ5dGUgY2hhcmFjdGVycworICB0byB0aGUgOC1iaXQgZW5jb2Rpbmcgc3BlY2lmaWVkIGJ5ICdwcmludGVuY29kaW5nJyAob3IgbGF0aW4xIGlmIGl0IGlzCisgIGVtcHR5KS4gIEFueSBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBzdWNjZXNzZnVsbHkgY29udmVydGVkIGFyZSBzaG93biBhcworICB1bmtub3duIGNoYXJhY3RlcnMuICBQcmludGluZyB3aWxsIGZhaWwgaWYgVklNIGNhbm5vdCBjb252ZXJ0IHRoZSBtdWx0aS1ieXRlCisgIHRvIHRoZSA4LWJpdCBlbmNvZGluZy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBDdXN0b20gOC1iaXQgUHJpbnQgQ2hhcmFjdGVyIEVuY29kaW5ncwkqcG9zdHNjcmlwdC1wcmludC1lbmNvZGluZyoKKwkJCQkJCQkJKkU2MTgqICpFNjE5KgorVG8gdXNlIHlvdXIgb3duIHByaW50IGNoYXJhY3RlciBlbmNvZGluZyB3aGVuIHByaW50aW5nIDgtYml0IGNoYXJhY3RlciBkYXRhCit5b3UgbmVlZCB0byBkZWZpbmUgeW91ciBvd24gUG9zdFNjcmlwdCBmb250IGVuY29kaW5nIHZlY3Rvci4gIERldGFpbHMgb24gaG93Cit0byB0byBkZWZpbmUgYSBmb250IGVuY29kaW5nIHZlY3RvciBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgaGVscCBmaWxlLCBidXQKK3lvdSBjYW4gZmluZCBkZXRhaWxzIGluIHRoZSBQb3N0U2NyaXB0IExhbmd1YWdlIFJlZmVyZW5jZSBNYW51YWwsIDNyZCBFZGl0aW9uLAorcHVibGlzaGVkIGJ5IEFkZGlzb24tV2VzbGV5IGFuZCBhdmFpbGFibGUgaW4gUERGIGZvcm0gYXQKK2h0dHA6Ly93d3cuYWRvYmUuY29tLy4gIFRoZSBmb2xsb3dpbmcgZGVzY3JpYmVzIHdoYXQgeW91IG5lZWQgdG8gZG8gZm9yIFZJTSB0bworbG9jYXRlIGFuZCB1c2UgeW91ciBwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmcuCisKK2kuICAgRGVjaWRlIG9uIGEgdW5pcXVlIG5hbWUgZm9yIHlvdXIgZW5jb2RpbmcgdmVjdG9yLCBvbmUgdGhhdCBkb2VzIG5vdCBjbGFzaAorICAgICB3aXRoIGFueSBvZiB0aGUgcmVjb2duaXplZCBvciBzdGFuZGFyZCBlbmNvZGluZyBuYW1lcyB0aGF0IFZJTSB1c2VzIChzZWUKKyAgICAgfGVuY29kaW5nLW5hbWVzfCBmb3IgYSBsaXN0KSwgYW5kIHRoYXQgbm8gb25lIGVsc2UgaXMgbGlrZWx5IHRvIHVzZS4KK2lpLiAgQ29weSAkVklNUlVOVElNRS9wcmludC9sYXRpbjEucHMgdG8gdGhlIHByaW50IHN1YmRpcmVjdG9yeSBpbiB5b3VyCisgICAgICdydW50aW1lcGF0aCcgYW5kIHJlbmFtZSBpdCB3aXRoIHlvdXIgdW5pcXVlIG5hbWUuCitpaWkuIEVkaXQgeW91ciByZW5hbWVkIGNvcHkgb2YgbGF0aW4xLnBzLCByZXBsYWNpbmcgYWxsIG9jY3VycmVuY2VzIG9mIGxhdGluMQorICAgICB3aXRoIHlvdXIgdW5pcXVlIG5hbWUgKGRvbid0IGZvcmdldCB0aGUgbGluZSBzdGFydGluZyAlJVRpdGxlOiksIGFuZAorICAgICBtb2RpZnkgdGhlIGFycmF5IG9mIGdseXBoIG5hbWVzIHRvIGRlZmluZSB5b3VyIG5ldyBlbmNvZGluZyB2ZWN0b3IuICBUaGUKKyAgICAgYXJyYXkgbXVzdCBoYXZlIGV4YWN0bHkgMjU2IGVudHJpZXMgb3IgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gcHJpbnQhCitpdi4gIFdpdGhpbiBWSU0sIHNldCAncHJpbnRlbmNvZGluZycgdG8geW91ciB1bmlxdWUgZW5jb2RpbmcgbmFtZSBhbmQgdGhlbgorICAgICBwcmludCB5b3VyIGZpbGUuICBWSU0gd2lsbCBub3cgdXNlIHlvdXIgY3VzdG9tIHByaW50IGNoYXJhY3RlciBlbmNvZGluZy4KKworVklNIHdpbGwgcmVwb3J0IGFuIGVycm9yIHdpdGggdGhlIHJlc291cmNlIGZpbGUgaWYgeW91IGNoYW5nZSB0aGUgb3JkZXIgb3IKK2NvbnRlbnQgb2YgdGhlIGZpcnN0IDMgbGluZXMsIG90aGVyIHRoYW4gdGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nIG9uIHRoZSBsaW5lCitzdGFydGluZyAlJVRpdGxlOiBvciB0aGUgdmVyc2lvbiBudW1iZXIgb24gdGhlIGxpbmUgc3RhcnRpbmcgJSVWZXJzaW9uOi4KKworW1RlY2huaWNhbCBleHBsYW5hdGlvbiBmb3IgdGhvc2UgdGhhdCBrbm93IFBvc3RTY3JpcHQgLSBWSU0gbG9va3MgZm9yIGEgZmlsZQord2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBlbmNvZGluZyBpdCB3aWxsIHVzZSB3aGVuIHByaW50aW5nLiAgVGhlIGZpbGUKK2RlZmluZXMgYSBuZXcgUG9zdFNjcmlwdCBFbmNvZGluZyByZXNvdXJjZSBjYWxsZWQgL1ZJTS1uYW1lLCB3aGVyZSBuYW1lIGlzIHRoZQorcHJpbnQgY2hhcmFjdGVyIGVuY29kaW5nIFZJTSB3aWxsIHVzZS5dCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gUG9zdFNjcmlwdCBDSksgUHJpbnRpbmcJCQkqcG9zdHNjcmlwdC1jamstcHJpbnRpbmcqCisJCQkJCQkJKkU2NzMqICpFNjc0KiAqRTY3NSoKKworVklNIHN1cHBvcnRzIHByaW50aW5nIG9mIENoaW5lc2UsIEphcGFuZXNlLCBhbmQgS29yZWFuIGZpbGVzLiAgU2V0dGluZyB1cCBWSU0KK3RvIGNvcnJlY3RseSBwcmludCBDSksgZmlsZXMgcmVxdWlyZXMgc2V0dGluZyB1cCBhIGZldyBtb3JlIG9wdGlvbnMuCisKK0VhY2ggb2YgdGhlc2UgY291bnRyaWVzIGhhcyBtYW55IHN0YW5kYXJkIGNoYXJhY3RlciBzZXRzIGFuZCBlbmNvZGluZ3Mgd2hpY2gKK3JlcXVpcmUgdGhhdCBib3RoIGJlIHNwZWNpZmllZCB3aGVuIHByaW50aW5nLiAgSW4gYWRkaXRpb24sIENKSyBmb250cyBub3JtYWxseQorZG8gbm90IGhhdmUgdGhlIGNvbmNlcHQgb2YgaXRhbGljIGdseXBocyBhbmQgdXNlIGRpZmZlcmVudCB3ZWlnaHQgb3Igc3Ryb2tlCitzdHlsZSB0byBhY2hpZXZlIGVtcGhhc2lzIHdoZW4gcHJpbnRpbmcuICBUaGlzIGluIHR1cm4gcmVxdWlyZXMgYSBkaWZmZXJlbnQKK2FwcHJvYWNoIHRvIHNwZWNpZnlpbmcgZm9udHMgdG8gdXNlIHdoZW4gcHJpbnRpbmcuCisKK1RoZSBlbmNvZGluZyBhbmQgY2hhcmFjdGVyIHNldCBhcmUgc3BlY2lmaWVkIHdpdGggdGhlICdwcmludGVuY29kaW5nJyBhbmQKKydwcmludG1iY2hhcnNldCcgb3B0aW9ucy4gIElmICdwcmludGVuY29kaW5nJyBpcyBub3Qgc3BlY2lmaWVkIHRoZW4gJ2VuY29kaW5nJworaXMgdXNlZCBhcyBub3JtYWwuICBJZiAncHJpbnRlbmNvZGluZycgaXMgc3BlY2lmaWVkIHRoZW4gY2hhcmFjdGVycyB3aWxsIGJlCit0cmFuc2xhdGVkIHRvIHRoaXMgZW5jb2RpbmcgZm9yIHByaW50aW5nLiAgWW91IHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgZW5jb2RpbmcKK2lzIGNvbXBhdGlibGUgd2l0aCB0aGUgY2hhcmFjdGVyIHNldCBuZWVkZWQgZm9yIHRoZSBmaWxlIGNvbnRlbnRzIG9yIHNvbWUKK2NoYXJhY3RlcnMgbWF5IG5vdCBhcHBlYXIgd2hlbiBwcmludGVkLgorCitUaGUgZm9udHMgdG8gdXNlIGZvciBDSksgcHJpbnRpbmcgYXJlIHNwZWNpZmllZCB3aXRoICdwcmludG1iZm9udCcuICBUaGlzCitvcHRpb24gYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGRpZmZlcmVudCBmb250cyB0byB1c2Ugd2hlbiBwcmludGluZyBjaGFyYWN0ZXJzCit3aGljaCBhcmUgc3ludGF4IGhpZ2hsaWdodGVkIHdpdGggdGhlIGZvbnQgc3R5bGVzIG5vcm1hbCwgaXRhbGljLCBib2xkIGFuZAorYm9sZC1pdGFsaWMuCisKK05vIENKSyBmb250cyBhcmUgc3VwcGxpZWQgd2l0aCBWSU0uICBUaGVyZSBhcmUgc29tZSBmcmVlIEtvcmVhbiwgSmFwYW5lc2UsIGFuZAorVHJhZGl0aW9uYWwgQ2hpbmVzZSBmb250cyBhdmFpbGFibGUgYXQ6CisKKyAgaHR0cDovL2V4YW1wbGVzLm9yZWlsbHkuY29tL2Nqa3ZpbmZvL2Fkb2JlL3NhbXBsZXMvCisKK1lvdSBjYW4gZmluZCBkZXNjcmlwdGlvbnMgb2YgdGhlIHZhcmlvdXMgZm9udHMgaW4gdGhlIHJlYWQgbWUgZmlsZSBhdCAKKworICBodHRwOi8vZXhhbXBsZXMub3JlaWxseS5jb20vY2prdmluZm8vYWRvYmUvMDBSRUFETUUKKworUGxlYXNlIHJlYWQgeW91ciBwcmludGVyIGRvY3VtZW50YXRpb24gb24gaG93IHRvIGluc3RhbGwgbmV3IGZvbnRzLgorCitDSksgZm9udHMgY2FuIGJlIGxhcmdlIGNvbnRhaW5pbmcgc2V2ZXJhbCB0aG91c2FuZCBnbHlwaHMsIGFuZCBpdCBpcyBub3QKK3VuY29tbW9uIHRvIGZpbmQgdGhhdCB0aGV5IG9ubHkgY29udGFpbiBhIHN1YnNldCBvZiBhIG5hdGlvbmFsIHN0YW5kYXJkLiAgSXQKK2lzIG5vdCB1bnVzdWFsIHRvIGZpbmQgdGhlIGZvbnRzIHRvIG5vdCBpbmNsdWRlIGNoYXJhY3RlcnMgZm9yIGNvZGVzIGluIHRoZQorQVNDSUkgY29kZSByYW5nZS4gIElmIHlvdSBmaW5kIGhhbGYtd2lkdGggUm9tYW4gY2hhcmFjdGVycyBhcmUgbm90IGFwcGVhcmluZworaW4geW91ciBwcmludG91dCB0aGVuIHlvdSBzaG91bGQgY29uZmlndXJlIFZJTSB0byB1c2UgdGhlIENvdXJpZXIgZm9udCB0aGUKK2hhbGYtd2lkdGggQVNDSUkgY2hhcmFjdGVycyB3aXRoICdwcmludG1iZm9udCcuICBJZiB5b3VyIGZvbnQgZG9lcyBub3QgaW5jbHVkZQorb3RoZXIgY2hhcmFjdGVycyB0aGVuIHlvdSB3aWxsIG5lZWQgdG8gZmluZCBhbm90aGVyIGZvbnQgdGhhdCBkb2VzLgorCitBbm90aGVyIGlzc3VlIHdpdGggQVNDSUkgY2hhcmFjdGVycywgaXMgdGhhdCB0aGUgdmFyaW91cyBuYXRpb25hbCBjaGFyYWN0ZXIKK3NldHMgc3BlY2lmeSBhIGNvdXBsZSBvZiBkaWZmZXJlbnQgZ2x5cGhzIGluIHRoZSBBU0NJSSBjb2RlIHJhbmdlLiAgSWYgeW91CitwcmludCBBU0NJSSB0ZXh0IHVzaW5nIHRoZSBuYXRpb25hbCBjaGFyYWN0ZXIgc2V0IHlvdSBtYXkgc2VlIHNvbWUgdW5leHBlY3RlZAorY2hhcmFjdGVycy4gIElmIHlvdSB3YW50IHRydWUgQVNDSUkgY29kZSBwcmludGluZyB0aGVuIHlvdSBuZWVkIHRvIGNvbmZpZ3VyZQorVklNIHRvIG91dHB1dCBBU0NJSSBjaGFyYWN0ZXJzIGZvciB0aGUgQVNDSUkgY29kZSByYW5nZSB3aXRoICdwcmludG1iZm9udCcuCisKK0l0IGlzIHBvc3NpYmxlIHRvIGRlZmluZSB5b3VyIG93biBtdWx0aS1ieXRlIGNoYXJhY3RlciBzZXQgYWx0aG91Z2ggdGhpcworc2hvdWxkIG5vdCBiZSBhdHRlbXB0ZWQgbGlnaHRseS4gIEEgZGlzY3Vzc2lvbiBvbiB0aGUgcHJvY2VzcyBpZiBiZXlvbmQgdGhlCitzY29wZSBvZiB0aGVzZSBoZWxwIGZpbGVzLiAgWW91IGNhbiBmaW5kIGRldGFpbHMgb24gQ01hcCAoY2hhcmFjdGVyIG1hcCkgZmlsZXMKK2luIHRoZSBkb2N1bWVudCAnQWRvYmUgQ01hcCBhbmQgQ0lERm9udCBGaWxlcyBTcGVjaWZpY2F0aW9uLCBWZXJzaW9uIDEuMCcsCithdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LmFkb2JlLmNvbSBhcyBhIFBERiBmaWxlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIFBvc3RTY3JpcHQgUHJpbnRpbmcgVHJvdWJsZXNob290aW5nCQkqcG9zdHNjcmlwdC1wcmludC10cm91YmxlKgorCQkJCQkJCQkJKkU2MjEqCitVc3VhbGx5IHRoZSBvbmx5IHNpZ24gb2YgYSBwcm9ibGVtIHdoZW4gcHJpbnRpbmcgd2l0aCBQb3N0U2NyaXB0IGlzIHRoYXQgeW91cgorcHJpbnRvdXQgZG9lcyBub3QgYXBwZWFyLiAgSWYgeW91IGFyZSBsdWNreSB5b3UgbWF5IGdldCBhIHByaW50ZWQgcGFnZSB0aGF0Cit0ZWxscyB5b3UgdGhlIFBvc3RTY3JpcHQgb3BlcmF0b3IgdGhhdCBnZW5lcmF0ZWQgdGhlIGVycm9yIHRoYXQgcHJldmVudGVkIHRoZQorcHJpbnQgam9iIGNvbXBsZXRpbmcuCisKK1RoZXJlIGFyZSBhIG51bWJlciBvZiBwb3NzaWJsZSBjYXVzZXMgYXMgdG8gd2h5IHRoZSBwcmludGluZyBtYXkgaGF2ZSBmYWlsZWQ6CisKKy0gV3JvbmcgdmVyc2lvbiBvZiB0aGUgcHJvbG9nIHJlc291cmNlIGZpbGUuICBUaGUgcHJvbG9nIHJlc291cmNlIGZpbGUKKyAgY29udGFpbnMgc29tZSBQb3N0U2NyaXB0IHRoYXQgVklNIG5lZWRzIHRvIGJlIGFibGUgdG8gcHJpbnQuICBFYWNoIHZlcnNpb24KKyAgb2YgVklNIG5lZWRzIG9uZSBwYXJ0aWN1bGFyIHZlcnNpb24uICBNYWtlIHN1cmUgeW91IGhhdmUgY29ycmVjdGx5IGluc3RhbGxlZAorICB0aGUgcnVudGltZSBmaWxlcywgYW5kIGRvbid0IGhhdmUgYW55IG9sZCB2ZXJzaW9ucyBvZiBhIGZpbGUgY2FsbGVkIHByb2xvZworICBpbiB0aGUgcHJpbnQgZGlyZWN0b3J5IGluIHlvdXIgJ3J1bnRpbWVwYXRoJyBkaXJlY3RvcnkuCisKKy0gUGFwZXIgc2l6ZS4gIFNvbWUgUG9zdFNjcmlwdCBwcmludGVycyB3aWxsIGFib3J0IHByaW50aW5nIGEgZmlsZSBpZiB0aGV5IGRvCisgIG5vdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgcGFwZXIgc2l6ZS4gIEJ5IGRlZmF1bHQgVklNIHVzZXMgQTQgcGFwZXIuICBGaW5kCisgIG91dCB3aGF0IHNpemUgcGFwZXIgeW91ciBwcmludGVyIG5vcm1hbGx5IHVzZXMgYW5kIHNldCB0aGUgYXBwcm9wcmlhdGUgcGFwZXIKKyAgc2l6ZSB3aXRoICdwcmludG9wdGlvbnMnLiAgSWYgeW91IGNhbm5vdCBmaW5kIHRoZSBuYW1lIG9mIHRoZSBwYXBlciB1c2VkLAorICBtZWFzdXJlIGEgc2hlZXQgYW5kIGNvbXBhcmUgaXQgd2l0aCB0aGUgdGFibGUgb2Ygc3VwcG9ydGVkIHBhcGVyIHNpemVzIGxpc3RlZAorICBmb3IgJ3ByaW50b3B0aW9ucycsIHVzaW5nIHRoZSBwYXBlciB0aGF0IGlzIGNsb3Nlc3QgaW4gYm90aCB3aWR0aCBBTkQgaGVpZ2h0LgorICBOb3RlOiBUaGUgZGltZW5zaW9ucyBvZiBhY3R1YWwgcGFwZXIgbWF5IHZhcnkgc2xpZ2h0bHkgZnJvbSB0aGUgb25lcyBsaXN0ZWQuCisgIElmIHRoZXJlIGlzIG5vIHBhcGVyIGxpc3RlZCBjbG9zZSBlbm91Z2gsIHRoZW4geW91IG1heSB3YW50IHRvIHRyeSBwc3Jlc2l6ZQorICBmcm9tIFBTVXRpbHMsIGRpc2N1c3NlZCBiZWxvdy4KKworLSBUd28tc2lkZWQgcHJpbnRpbmcgKGR1cGxleCkuICBOb3JtYWxseSBhIFBvc3RTY3JpcHQgcHJpbnRlciB0aGF0IGRvZXMgbm90CisgIHN1cHBvcnQgdHdvLXNpZGVkIHByaW50aW5nIHdpbGwgaWdub3JlIGFueSByZXF1ZXN0IHRvIGRvIGl0LiAgSG93ZXZlciwgc29tZQorICBwcmludGVycyBtYXkgYWJvcnQgdGhlIGpvYiBhbHRvZ2V0aGVyLiAgVHJ5IHByaW50aW5nIHdpdGggZHVwbGV4IHR1cm5lZCBvZmYuCisgIE5vdGU6IER1cGxleCBwcmludHMgY2FuIGJlIGFjaGlldmVkIG1hbnVhbGx5IHVzaW5nIFBTIHV0aWxzIC0gc2VlIGJlbG93LgorCistIENvbGxhdGVkIHByaW50aW5nLiAgQXMgd2l0aCBEdXBsZXggcHJpbnRpbmcsIG1vc3QgUG9zdFNjcmlwdCBwcmludGVycyB0aGF0CisgIGRvIG5vdCBzdXBwb3J0IGNvbGxhdGluZyBwcmludG91dHMgd2lsbCBpZ25vcmUgYSByZXF1ZXN0IHRvIGRvIHNvLiAgU29tZSBtYXkKKyAgbm90LiAgVHJ5IHByaW50aW5nIHdpdGggY29sbGF0aW9uIHR1cm5lZCBvZmYuCisKKy0gU3ludGF4IGhpZ2hsaWdodGluZy4gIFNvbWUgcHJpbnQgbWFuYWdlbWVudCBjb2RlIG1heSBwcmV2ZW50IHRoZSBnZW5lcmF0ZWQKKyAgUG9zdFNjcmlwdCBmaWxlIGZyb20gYmVpbmcgcHJpbnRlZCBvbiBhIGJsYWNrIGFuZCB3aGl0ZSBwcmludGVyIHdoZW4gc3ludGF4CisgIGhpZ2hsaWdodGluZyBpcyB0dXJuZWQgb24sIGV2ZW4gaWYgc29saWQgYmxhY2sgaXMgdGhlIG9ubHkgY29sb3IgdXNlZC4gIFRyeQorICBwcmludGluZyB3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcgdHVybmVkIG9mZi4KKworQSBzYWZlIHByaW50b3B0aW9ucyBzZXR0aW5nIHRvIHRyeSBpczogPgorCisJOnNldCBwcmludG9wdGlvbnM9cGFwZXI6QTQsZHVwbGV4Om9mZixjb2xsYXRlOm4sc3ludGF4Om4KKworUmVwbGFjZSAiQTQiIHdpdGggdGhlIHBhcGVyIHNpemUgdGhhdCBiZXN0IG1hdGNoZXMgeW91ciBwcmludGVyIHBhcGVyLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzcuIFBvc3RTY3JpcHQgVXRpbGl0aWVzCQkJCSpwb3N0c2NyaXB0LXByaW50LXV0aWwqCisKKzcuMSBHaG9zdHNjcmlwdAorCitHaG9zdHNjcmlwdCBpcyBhIFBvc3RTY3JpcHQgYW5kIFBERiBpbnRlcnByZXRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkKK2FuZCBwcmludCBvbiBub24tUG9zdFNjcmlwdCBwcmludGVycyBQb3N0U2NyaXB0IGFuZCBQREYgZmlsZXMuICBJdCBjYW4gYWxzbworZ2VuZXJhdGUgUERGIGZpbGVzIGZyb20gUG9zdFNjcmlwdC4KKworR2hvc3RzY3JpcHQgd2lsbCBydW4gb24gYSB3aWRlIHZhcmlldHkgb2YgcGxhdGZvcm1zLgorCitUaGVyZSBhcmUgdGhyZWUgYXZhaWxhYmxlIHZlcnNpb25zOgorCistIEFGUEwgR2hvc3RzY3JpcHQgKGZvcm1lcmx5IEFsYWRkaW4gR2hvc3RzY3JpcHQpIHdoaWNoIGlzIGZyZWUgZm9yCisgIG5vbi1jb21tZXJjaWFsIHVzZS4gIEl0IGNhbiBiZSBvYnRhaW5lZCBmcm9tOgorCisgICAgaHR0cDovL3d3dy5jcy53aXNjLmVkdS9+Z2hvc3QvCisKKy0gR05VIEdob3N0c2NyaXB0IHdoaWNoIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBJdAorICBjYW4gYmUgb2J0YWluZWQgZnJvbToKKworICAgIGZ0cDovL21pcnJvci5jcy53aXNjLmVkdS9wdWIvbWlycm9ycy9naG9zdC9nbnUvCisKKy0gQSBjb21tZXJjaWFsIHZlcnNpb24gZm9yIGluY2x1c2lvbiBpbiBjb21tZXJjaWFsIHByb2R1Y3RzLgorCitBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIEdob3N0c2NyaXB0IGNhbiBhbHNvIGJlIGZvdW5kIGF0OgorCisgIGh0dHA6Ly93d3cuZ2hvc3RzY3JpcHQuY29tLworCitTdXBwb3J0IGZvciBhIG51bWJlciBvZiBub24gUG9zdFNjcmlwdCBwcmludGVycyBpcyBwcm92aWRlZCBpbiB0aGUKK2Rpc3RyaWJ1dGlvbiBhcyBzdGFuZGFyZCwgYnV0IGlmIHlvdSBjYW5ub3QgZmluZCBzdXBwb3J0IGZvciB5b3VyIHByaW50ZXIKK2NoZWNrIHRoZSBHaG9zdHNjcmlwdCBzaXRlIGZvciBvdGhlciBwcmludGVycyBub3QgaW5jbHVkZWQgYnkgZGVmYXVsdC4KKworCis3LjIgR2hvc3RzY3JpcHQgUHJldmlld2Vycy4KKworVGhlIGludGVyZmFjZSB0byBHaG9zdHNjcmlwdCBpcyB2ZXJ5IHByaW1pdGl2ZSBzbyBhIG51bWJlciBvZiBncmFwaGljYWwgZnJvbnQKK2VuZHMgaGF2ZSBiZWVuIGNyZWF0ZWQuICBUaGVzZSBhbGxvdyBlYXNpZXIgUG9zdFNjcmlwdCBmaWxlIHNlbGVjdGlvbiwKK3ByZXZpZXdpbmcgYXQgZGlmZmVyZW50IHpvb20gbGV2ZWxzLCBhbmQgcHJpbnRpbmcuICBDaGVjayBzdXBwbGllZAorZG9jdW1lbnRhdGlvbiBmb3IgZnVsbCBkZXRhaWxzLgorCitYMTEKKworLSBHaG9zdHZpZXcuICBPYnRhaW5hYmxlIGZyb206CisKKyAgICBodHRwOi8vd3d3LmNzLndpc2MuZWR1L35naG9zdC9ndi8KKworLSBndi4gIERlcml2ZWQgZnJvbSBHaG9zdHZpZXcuICBPYnRhaW5hYmxlIGZyb206CisKKyAgICBodHRwOi8vd3d3dGhlcC5waHlzaWsudW5pLW1haW56LmRlL35wbGFzcy9ndi8KKworICBDb3BpZXMgKHBvc3NpYmx5IG5vdCB0aGUgbW9zdCByZWNlbnQpIGNhbiBiZSBmb3VuZCBhdDoKKworICAgIGh0dHA6Ly93d3cuY3Mud2lzYy5lZHUvfmdob3N0L2d2LworCitPcGVuVk1TCisKKy0gSXMgYXBwYXJlbnRseSBzdXBwb3J0ZWQgaW4gdGhlIG1haW4gY29kZSBub3cgKHVudGVzdGVkKS4gIFNlZToKKworICAgIGh0dHA6Ly93d3d0aGVwLnBoeXNpay51bmktbWFpbnouZGUvfnBsYXNzL2d2LworCitXaW5kb3dzIGFuZCBPUy8yCisKKy0gR1N2aWV3LiAgT2J0YWluYWJsZSBmcm9tOgorCisgICAgaHR0cDovL3d3dy5jcy53aXNjLmVkdS9+Z2hvc3QvZ3N2aWV3LworCitET1MKKworLSBwc192aWV3LiAgT2J0YWluYWJsZSBmcm9tOgorCisgICAgZnRwOi8vZnRwLnBnLmdkYS5wbC9wdWIvVGVYL3N1cHBvcnQvcHNfdmlldy8KKyAgICBmdHA6Ly9mdHAuZGFudGUuZGUvdGV4LWFyY2hpdmUvc3VwcG9ydC9wc192aWV3LworCitMaW51eAorCistIEdTdmlldy4gIExpbnV4IHZlcnNpb24gb2YgdGhlIHBvcHVsYXIgV2luZG93cyBhbmQgT1MvMiBwcmV2aWV3ZXIuCisgIE9idGFpbmFibGUgZnJvbToKKworICAgIGh0dHA6Ly93d3cuY3Mud2lzYy5lZHUvfmdob3N0L2dzdmlldy8KKworLSBCTVYuICBEaWZmZXJlbnQgZnJvbSBHaG9zdHZpZXcgYW5kIGd2IGluIHRoYXQgaXQgZG9lc24ndCB1c2UgWCBidXQgc3ZnYWxpYi4KKyAgT2J0YWluYWJsZSBmcm9tOgorCisgICAgZnRwOi8vc3Vuc2l0ZS51bmMuZWR1L3B1Yi9MaW51eC9hcHBzL2dyYXBoaWNzL3ZpZXdlcnMvc3ZnYS9ibXYtMS4yLnRnegorCisKKzcuMyBQU1V0aWxzCisKK1BTVXRpbHMgaXMgYSBjb2xsZWN0aW9uIG9mIHV0aWxpdHkgcHJvZ3JhbXMgZm9yIG1hbmlwdWxhdGluZyBQb3N0U2NyaXB0Citkb2N1bWVudHMuICBCaW5hcnkgZGlzdHJpYnV0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciBtYW55IHBsYXRmb3JtcywgYXMgd2VsbCBhcwordGhlIGZ1bGwgc291cmNlLiAgUFNVdGlscyBjYW4gYmUgZm91bmQgYXQ6CisKKyAgaHR0cDovL2tuYWNrZXJlZC5vcmcvYW5ndXMvcHN1dGlscworCitUaGUgdXRpbGl0aWVzIG9mIGludGVyZXN0IGluY2x1ZGU6CisKKy0gcHNudXAuICAgICBDb252ZXJ0IFBTIGZpbGVzIGZvciBOLXVwIHByaW50aW5nLgorLSBwc3NlbGVjdC4gIFNlbGVjdCBwYWdlIHJhbmdlIGFuZCBvcmRlciBvZiBwcmludGluZy4KKy0gcHNyZXNpemUuICBDaGFuZ2UgdGhlIHBhZ2Ugc2l6ZS4KKy0gcHNib29rLiAgICBSZW9yZGVyIGFuZCBsYXkgb3V0IHBhZ2VzIHJlYWR5IGZvciBtYWtpbmcgYSBib29rLgorCitUaGUgb3V0cHV0IG9mIG9uZSBwcm9ncmFtIGNhbiBiZSB1c2VkIGFzIHRoZSBpbnB1dCB0byB0aGUgbmV4dCwgYWxsb3dpbmcgZm9yCitjb21wbGV4IHByaW50IGRvY3VtZW50IGNyZWF0aW9uLgorCisKK04tVVAgUFJJTlRJTkcKKworVGhlIHBzbnVwIHV0aWxpdHkgdGFrZXMgYW4gZXhpc3RpbmcgUG9zdFNjcmlwdCBmaWxlIGdlbmVyYXRlZCBmcm9tIFZJTSBhbmQKK2NvbnZlcnQgaXQgdG8gYW4gbi11cCB2ZXJzaW9uLiAgVGhlIHNpbXBsZXN0IHdheSB0byBjcmVhdGUgYSAyLXVwIHByaW50b3V0IGlzCit0byBmaXJzdCBjcmVhdGUgYSBQb3N0U2NyaXB0IGZpbGUgd2l0aDogPgorCisJOmhhcmRjb3B5ID4gdGVzdC5wcworCitUaGVuIG9uIHlvdXIgY29tbWFuZCBsaW5lIGV4ZWN1dGU6ID4KKworCXBzbnVwIC1uIDIgdGVzdC5wcyBmaW5hbC5wcworCitOb3RlOiBZb3UgbWF5IGdldCB3YXJuaW5ncyBmcm9tIHNvbWUgR2hvc3RzY3JpcHQgcHJldmlld2VycyBmb3IgZmlsZXMgcHJvZHVjZWQKK2J5IHBzbnVwIC0gdGhlc2UgbWF5IHNhZmVseSBiZSBpZ25vcmVkLgorCitGaW5hbGx5IHByaW50IHRoZSBmaWxlIGZpbmFsLnBzIHRvIHlvdXIgUG9zdFNjcmlwdCBwcmludGVyIHdpdGggeW91cgorcGxhdGZvcm0ncyBwcmludCBjb21tYW5kLiAgKFlvdSB3aWxsIG5lZWQgdG8gZGVsZXRlIHRoZSB0d28gUG9zdFNjcmlwdCBmaWxlcworYWZ0ZXJ3YXJkcyB5b3Vyc2VsZi4pICAncHJpbnRleHByJyBjb3VsZCBiZSBtb2RpZmllZCB0byBwZXJmb3JtIHRoaXMgZXh0cmEKK3N0ZXAgYmVmb3JlIHByaW50aW5nLgorCisKK0FMVEVSTkFURSBEVVBMRVggUFJJTlRJTkcKKworSXQgaXMgcG9zc2libGUgdG8gYWNoaWV2ZSBhIHBvb3IgbWFuJ3MgdmVyc2lvbiBvZiBkdXBsZXggcHJpbnRpbmcgdXNpbmcgdGhlIFBTCit1dGlsaXR5IHBzc2VsZWN0LiAgVGhpcyB1dGlsaXR5IGhhcyBvcHRpb25zIC1lIGFuZCAtbyBmb3IgcHJpbnRpbmcganVzdCB0aGUKK2V2ZW4gb3Igb2RkIHBhZ2VzIG9mIGEgUFMgZmlsZSByZXNwZWN0aXZlbHkuCisKK0ZpcnN0IGdlbmVyYXRlIGEgUFMgZmlsZSB3aXRoIHRoZSAnaGFyZGNvcHknIGNvbW1hbmQsIHRoZW4gZ2VuZXJhdGUgYSBuZXcKK2ZpbGVzIHdpdGggYWxsIHRoZSBvZGQgYW5kIGV2ZW4gbnVtYmVyZWQgcGFnZXMgd2l0aDogPgorCisJcHNzZWxlY3QgLW8gdGVzdC5wcyBvZGQucHMKKwlwc3NlbGVjdCAtZSB0ZXN0LnBzIGV2ZW4ucHMKKworTmV4dCBwcmludCBvZGQucHMgd2l0aCB5b3VyIHBsYXRmb3JtJ3Mgbm9ybWFsIHByaW50IGNvbW1hbmQuICBUaGVuIHRha2UgdGhlCitwcmludCBvdXRwdXQsIHR1cm4gaXQgb3ZlciBhbmQgcGxhY2UgaXQgYmFjayBpbiB0aGUgcGFwZXIgZmVlZGVyLiAgTm93IHByaW50CitldmVuLnBzIHdpdGggeW91ciBwbGF0Zm9ybSdzIHByaW50IGNvbW1hbmQuICBBbGwgdGhlIGV2ZW4gcGFnZXMgc2hvdWxkIG5vdworYXBwZWFyIG9uIHRoZSBiYWNrIG9mIHRoZSBvZGQgcGFnZXMuCisKK1RoZXJlIGEgY291cGxlIG9mIHBvaW50cyB0byBiZWFyIGluIG1pbmQ6CisKKzEuIFBvc2l0aW9uIG9mIHRoZSBmaXJzdCBwYWdlLiAgSWYgdGhlIGZpcnN0IHBhZ2UgaXMgb24gdG9wIG9mIHRoZSBwcmludG91dAorICAgd2hlbiBwcmludGluZyB0aGUgb2RkIHBhZ2VzIHRoZW4geW91IG5lZWQgdG8gcmV2ZXJzZSB0aGUgb3JkZXIgdGhhdCB0aGUgb2RkCisgICBwYWdlcyBhcmUgcHJpbnRlZC4gIFRoaXMgY2FuIGJlIGRvbmUgd2l0aCB0aGUgLXIgb3B0aW9uIHRvIHBzc2VsZWN0LiAgVGhpcworICAgd2lsbCBlbnN1cmUgcGFnZSAyIGlzIHByaW50ZWQgb24gdGhlIGJhY2sgb2YgcGFnZSAxLgorICAgTm90ZTogaXQgaXMgYmV0dGVyIHRvIHJldmVyc2UgdGhlIG9kZCBudW1iZXJlZCBwYWdlcyByYXRoZXIgdGhhbiB0aGUgZXZlbgorICAgbnVtYmVyZWQgaW4gY2FzZSB0aGVyZSBhcmUgYW4gb2RkIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgb3JpZ2luYWwgUFMgZmlsZS4KKworMi4gUGFwZXIgZmxpcHBpbmcuICBXaGVuIHR1cm5pbmcgb3ZlciB0aGUgcGFwZXIgd2l0aCB0aGUgb2RkIHBhZ2VzIHByaW50ZWQgb24KKyAgIHRoZW0geW91IG1heSBoYXZlIHRvIGVpdGhlciBmbGlwIHRoZW0gaG9yaXpvbnRhbGx5IChhbG9uZyB0aGUgbG9uZyBlZGdlKSBvcgorICAgdmVydGljYWxseSAoYWxvbmcgdGhlIHNob3J0IGVkZ2UpLCBhcyB3ZWxsIGFzIHBvc3NpYmx5IHJvdGF0aW5nIHRoZW0gMTgwCisgICBkZWdyZWVzLiAgQWxsIHRoaXMgZGVwZW5kcyBvbiB0aGUgcHJpbnRlciAtIGl0IHdpbGwgYmUgbW9yZSBvYnZpb3VzIGZvcgorICAgZGVza3RvcCBpbmsgamV0cyB0aGFuIGZvciBzbWFsbCBvZmZpY2UgbGFzZXIgcHJpbnRlcnMgd2hlcmUgdGhlIHBhcGVyIHBhdGgKKyAgIGlzIGhpZGRlbiBmcm9tIHZpZXcuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis4LiBGb3JtZmVlZCBDaGFyYWN0ZXJzCQkJCQkqcHJpbnRpbmctZm9ybWZlZWQqCisKK0J5IGRlZmF1bHQgVklNIGRvZXMgbm90IGRvIGFueSBzcGVjaWFsIHByb2Nlc3Npbmcgb2YgfGZvcm1mZWVkfCBjb250cm9sCitjaGFyYWN0ZXJzLiAgU2V0dGluZyB0aGUgJ3ByaW50b3B0aW9ucycgZm9ybWZlZWQgaXRlbSB3aWxsIG1ha2UgVklNIHJlY29nbml6ZQorZm9ybWZlZWQgY2hhcmFjdGVycyBhbmQgY29udGludWUgcHJpbnRpbmcgdGhlIGN1cnJlbnQgbGluZSBhdCB0aGUgYmVnaW5uaW5nCitvZiB0aGUgZmlyc3QgbGluZSBvbiBhIG5ldyBwYWdlLiAgVGhlIHVzZSBvZiBmb3JtZmVlZCBjaGFyYWN0ZXJzIHByb3ZpZGVzCitydWRpbWVudGFyeSBwcmludCBjb250cm9sIGJ1dCB0aGVyZSBhcmUgY2VydGFpbiB0aGluZ3MgdG8gYmUgYXdhcmUgb2YuCisKK1ZJTSB3aWxsIGFsd2F5cyBzdGFydCBwcmludGluZyBhIGxpbmUgKGluY2x1ZGluZyBhIGxpbmUgbnVtYmVyIGlmIGVuYWJsZWQpCitjb250YWluaW5nIGEgZm9ybWZlZWQgY2hhcmFjdGVyLCBldmVuIGlmIGl0IGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb24gdGhlCitsaW5lLiAgVGhpcyBtZWFucyBpZiBhIGxpbmUgc3RhcnRpbmcgd2l0aCBhIGZvcm1mZWVkIGNoYXJhY3RlciBpcyB0aGUgZmlyc3QKK2xpbmUgb2YgYSBwYWdlIHRoZW4gVklNIHdpbGwgcHJpbnQgYSBibGFuayBwYWdlLgorCitTaW5jZSB0aGUgbGluZSBudW1iZXIgaXMgcHJpbnRlZCBhdCB0aGUgc3RhcnQgb2YgcHJpbnRpbmcgdGhlIGxpbmUgY29udGFpbmluZwordGhlIGZvcm1mZWVkIGNoYXJhY3RlciwgdGhlIHJlbWFpbmRlciBvZiB0aGUgbGluZSBwcmludGVkIG9uIHRoZSBuZXcgcGFnZQord2lsbCBub3QgaGF2ZSBhIGxpbmUgbnVtYmVyIHByaW50ZWQgZm9yIGl0IChpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIHdyYXBwZWQKK2xpbmVzIG9mIGEgbG9uZyBsaW5lIHdoZW4gd3JhcCBpbiAncHJpbnRvcHRpb25zJyBpcyBlbmFibGVkKS4KKworSWYgdGhlIGZvcm1mZWVkIGNoYXJhY3RlciBpcyB0aGUgbGFzdCBjaGFyYWN0ZXIgb24gYSBsaW5lLCB0aGVuIHByaW50aW5nIHdpbGwKK2NvbnRpbnVlIG9uIHRoZSBzZWNvbmQgbGluZSBvZiB0aGUgbmV3IHBhZ2UsIG5vdCB0aGUgZmlyc3QuICBUaGlzIGlzIGR1ZSB0bworVklNIHByb2Nlc3NpbmcgdGhlIGVuZCBvZiB0aGUgbGluZSBhZnRlciB0aGUgZm9ybWZlZWQgY2hhcmFjdGVyIGFuZCBtb3ZpbmcKK2Rvd24gYSBsaW5lIHRvIGNvbnRpbnVlIHByaW50aW5nLgorCitEdWUgdG8gdGhlIHBvaW50cyBtYWRlIGFib3ZlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgd2hlbiBmb3JtZmVlZCBjaGFyYWN0ZXIKK3Byb2Nlc3NpbmcgaXMgZW5hYmxlZCwgcHJpbnRpbmcgb2YgbGluZSBudW1iZXJzIGlzIGRpc2FibGVkLCBhbmQgdGhhdCBmb3JtCitmZWVkIGNoYXJhY3RlcnMgYXJlIG5vdCB0aGUgbGFzdCBjaGFyYWN0ZXIgb24gYSBsaW5lLiAgRXZlbiB0aGVuIHlvdSBtYXkgbmVlZAordG8gYWRqdXN0IHRoZSBudW1iZXIgb2YgbGluZXMgYmVmb3JlIGEgZm9ybWZlZWQgY2hhcmFjdGVyIHRvIHByZXZlbnQKK2FjY2lkZW50YWwgYmxhbmsgcGFnZXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3F1aWNrcmVmLnR4dCBiL3J1bnRpbWUvZG9jL3F1aWNrcmVmLnR4dAppbmRleCBlZjgzMmViLi5hMTZjZDRhIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9xdWlja3JlZi50eHQKKysrIGIvcnVudGltZS9kb2MvcXVpY2tyZWYudHh0CkBAIC0xLDQgKzEsNCBAQAotKnF1aWNrcmVmLnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEp1bCAwNAorKnF1aWNrcmVmLnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEp1bCAwNQogCiAKIAkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgpAQCAtNzgyLDYgKzc4Miw4IEBACiB8J3ByaW50ZXhwcid8ICAgICB8J3BleHByJ3wgIGV4cHJlc3Npb24gdXNlZCB0byBwcmludCBQb3N0U2NyaXB0IGZvciA6aGFyZGNvcHkKIHwncHJpbnRmb250J3wJICB8J3Bmbid8ICAgIG5hbWUgb2YgdGhlIGZvbnQgdG8gYmUgdXNlZCBmb3IgOmhhcmRjb3B5CiB8J3ByaW50aGVhZGVyJ3wgICB8J3BoZWFkZXInfCBmb3JtYXQgb2YgdGhlIGhlYWRlciB1c2VkIGZvciA6aGFyZGNvcHkKK3wncHJpbnRtYmNoYXJzZXQnfCB8J3BtYmNzJ3wgQ0pLIGNoYXJhY3RlciBzZXQgdG8gYmUgdXNlZCBmb3IgOmhhcmRjb3B5Cit8J3ByaW50bWJmb250J3wgICB8J3BtYmZuJ3wgIGZvbnQgbmFtZXMgdG8gYmUgdXNlZCBmb3IgQ0pLIG91dHB1dCBvZiA6aGFyZGNvcHkKIHwncHJpbnRvcHRpb25zJ3wgIHwncG9wdCd8ICAgY29udHJvbHMgdGhlIGZvcm1hdCBvZiA6aGFyZGNvcHkgb3V0cHV0CiB8J3F1b3RlZXNjYXBlJ3wgICB8J3FlJ3wgICAgIGVzY2FwZSBjaGFyYWN0ZXJzIHVzZWQgaW4gYSBzdHJpbmcKIHwncmVhZG9ubHknfAkgIHwncm8nfCAgICAgZGlzYWxsb3cgd3JpdGluZyB0aGUgYnVmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9zeW50YXgudHh0IGIvcnVudGltZS9kb2Mvc3ludGF4LnR4dAppbmRleCA0ZTJhMjc0Li5jMWU3ZGU3IDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9zeW50YXgudHh0CisrKyBiL3J1bnRpbWUvZG9jL3N5bnRheC50eHQKQEAgLTEsNCArMSw0IEBACi0qc3ludGF4LnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVsIDAxCisqc3ludGF4LnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVsIDA2CiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCSAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTgxMiwxMSArODEyLDIwIEBACiB0aGlzIHNob3VsZCBoYXZlIHRoZSB2YWx1ZSAxLCBhbmQgZm9yIFdpbmRvd3MgMjAwMCBpdCBzaG91bGQgYmUgMi4KIFNlbGVjdCB0aGUgdmVyc2lvbiB5b3Ugd2FudCB3aXRoIHRoZSBmb2xsb3dpbmcgbGluZTogPgogCi0gIDpsZXQgZG9zYmF0Y2hfY21kZXh0dmVyc2lvbiA9IDEKKyAgIDpsZXQgZG9zYmF0Y2hfY21kZXh0dmVyc2lvbiA9IDEKIAogSWYgdGhpcyB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZCBpdCBkZWZhdWx0cyB0byBhIHZhbHVlIG9mIDIgdG8gc3VwcG9ydAogV2luZG93cyAyMDAwLgogCitBIHNlY29uZCBvcHRpb24gY292ZXJzIHdoZXRoZXIgKi5idG0gZmlsZXMgc2hvdWxkIGJlIGRldGVjdGVkIGFzIHR5cGUKKyJkb3NiYXRjaCIgKE1TLURPUyBiYXRjaCBmaWxlcykgb3IgdHlwZSAiYnRtIiAoNERPUyBiYXRjaCBmaWxlcykuIFRoZSBsYXR0ZXIKK2lzIHVzZWQgYnkgZGVmYXVsdC4gWW91IG1heSBzZWxlY3QgdGhlIGZvcm1lciB3aXRoIHRoZSBmb2xsb3dpbmcgbGluZTogPgorCisgICA6bGV0IGc6ZG9zYmF0Y2hfc3ludGF4X2Zvcl9idG0gPSAxCisKK0lmIHRoaXMgdmFyaWFibGUgaXMgdW5kZWZpbmVkIG9yIHplcm8sIGJ0bSBzeW50YXggaXMgc2VsZWN0ZWQuCisKKwogCiBEVEQJCQkJCQkqZHRkLnZpbSogKmR0ZC1zeW50YXgqCiAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3RhZ3MgYi9ydW50aW1lL2RvYy90YWdzCmluZGV4IDQ4NTkyM2MuLjU5N2UzMDcgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3RhZ3MKKysrIGIvcnVudGltZS9kb2MvdGFncwpAQCAtNjE1LDYgKzYxNSw4IEBACiAncGhlYWRlcicJb3B0aW9ucy50eHQJLyoncGhlYWRlcicqCiAncGknCW9wdGlvbnMudHh0CS8qJ3BpJyoKICdwbScJb3B0aW9ucy50eHQJLyoncG0nKgorJ3BtYmNzJwlvcHRpb25zLnR4dAkvKidwbWJjcycqCisncG1iZm4nCW9wdGlvbnMudHh0CS8qJ3BtYmZuJyoKICdwb3B0JwlvcHRpb25zLnR4dAkvKidwb3B0JyoKICdwcmVzZXJ2ZWluZGVudCcJb3B0aW9ucy50eHQJLyoncHJlc2VydmVpbmRlbnQnKgogJ3ByZXZpZXdoZWlnaHQnCW9wdGlvbnMudHh0CS8qJ3ByZXZpZXdoZWlnaHQnKgpAQCAtNjI0LDYgKzYyNiw4IEBACiAncHJpbnRleHByJwlvcHRpb25zLnR4dAkvKidwcmludGV4cHInKgogJ3ByaW50Zm9udCcJb3B0aW9ucy50eHQJLyoncHJpbnRmb250JyoKICdwcmludGhlYWRlcicJb3B0aW9ucy50eHQJLyoncHJpbnRoZWFkZXInKgorJ3ByaW50bWJjaGFyc2V0JwlvcHRpb25zLnR4dAkvKidwcmludG1iY2hhcnNldCcqCisncHJpbnRtYmZvbnQnCW9wdGlvbnMudHh0CS8qJ3ByaW50bWJmb250JyoKICdwcmludG9wdGlvbnMnCW9wdGlvbnMudHh0CS8qJ3ByaW50b3B0aW9ucycqCiAncHJvbXB0Jwl2aV9kaWZmLnR4dAkvKidwcm9tcHQnKgogJ3B0JwlvcHRpb25zLnR4dAkvKidwdCcqCkBAIC0xOTIzLDggKzE5MjcsOCBAQAogOmd2CWd1aV94MTEudHh0CS8qOmd2KgogOmd2aW0JZ3VpX3gxMS50eHQJLyo6Z3ZpbSoKIDpoCXZhcmlvdXMudHh0CS8qOmgqCi06aGEJdmFyaW91cy50eHQJLyo6aGEqCi06aGFyZGNvcHkJdmFyaW91cy50eHQJLyo6aGFyZGNvcHkqCis6aGEJcHJpbnQudHh0CS8qOmhhKgorOmhhcmRjb3B5CXByaW50LnR4dAkvKjpoYXJkY29weSoKIDpoZWxwCXZhcmlvdXMudHh0CS8qOmhlbHAqCiA6aGVscGYJdmFyaW91cy50eHQJLyo6aGVscGYqCiA6aGVscGZpbmQJdmFyaW91cy50eHQJLyo6aGVscGZpbmQqCkBAIC0zMDQ2LDggKzMwNTAsOCBAQAogRTIzNAlvcHRpb25zLnR4dAkvKkUyMzQqCiBFMjM1CW9wdGlvbnMudHh0CS8qRTIzNSoKIEUyMzYJb3B0aW9ucy50eHQJLypFMjM2KgotRTIzNwl2YXJpb3VzLnR4dAkvKkUyMzcqCi1FMjM4CXZhcmlvdXMudHh0CS8qRTIzOCoKK0UyMzcJcHJpbnQudHh0CS8qRTIzNyoKK0UyMzgJcHJpbnQudHh0CS8qRTIzOCoKIEUyMzkJc2lnbi50eHQJLypFMjM5KgogRTI0CW1lc3NhZ2UudHh0CS8qRTI0KgogRTI0MAlyZW1vdGUudHh0CS8qRTI0MCoKQEAgLTMxNDAsNyArMzE0NCw3IEBACiBFMzIxCWVkaXRpbmcudHh0CS8qRTMyMSoKIEUzMjIJbWVzc2FnZS50eHQJLypFMzIyKgogRTMyMwltZXNzYWdlLnR4dAkvKkUzMjMqCi1FMzI0CXZhcmlvdXMudHh0CS8qRTMyNCoKK0UzMjQJcHJpbnQudHh0CS8qRTMyNCoKIEUzMjUJdXNyXzExLnR4dAkvKkUzMjUqCiBFMzI2CXJlY292ZXIudHh0CS8qRTMyNioKIEUzMjcJZ3VpLnR4dAkvKkUzMjcqCkBAIC0zMTg1LDcgKzMxODksNyBAQAogRTM2Mgl0ZXJtLnR4dAkvKkUzNjIqCiBFMzYzCXBhdHRlcm4udHh0CS8qRTM2MyoKIEUzNjQJZXZhbC50eHQJLypFMzY0KgotRTM2NQlvcHRpb25zLnR4dAkvKkUzNjUqCitFMzY1CXByaW50LnR4dAkvKkUzNjUqCiBFMzY2CW9wdGlvbnMudHh0CS8qRTM2NioKIEUzNjcJYXV0b2NtZC50eHQJLypFMzY3KgogRTM2OAlldmFsLnR4dAkvKkUzNjgqCkBAIC0zMjg0LDkgKzMyODgsOSBAQAogRTQ1Mglvc19tc2Rvcy50eHQJLypFNDUyKgogRTQ1Mwlvc19tc2Rvcy50eHQJLypFNDUzKgogRTQ1NAlvc19tc2Rvcy50eHQJLypFNDU0KgotRTQ1NQl2YXJpb3VzLnR4dAkvKkU0NTUqCi1FNDU2CXZhcmlvdXMudHh0CS8qRTQ1NioKLUU0NTcJdmFyaW91cy50eHQJLypFNDU3KgorRTQ1NQlwcmludC50eHQJLypFNDU1KgorRTQ1NglwcmludC50eHQJLypFNDU2KgorRTQ1NwlwcmludC50eHQJLypFNDU3KgogRTQ1OAltZXNzYWdlLnR4dAkvKkU0NTgqCiBFNDU5CW1lc3NhZ2UudHh0CS8qRTQ1OSoKIEU0NgltZXNzYWdlLnR4dAkvKkU0NioKQEAgLTM0NTQsMTkgKzM0NTgsMTkgQEAKIEU2MTAJb3B0aW9ucy50eHQJLypFNjEwKgogRTYxMQlvcHRpb25zLnR4dAkvKkU2MTEqCiBFNjEyCXNpZ24udHh0CS8qRTYxMioKLUU2MTMJb3B0aW9ucy50eHQJLypFNjEzKgorRTYxMwlwcmludC50eHQJLypFNjEzKgogRTYxNAllZGl0aW5nLnR4dAkvKkU2MTQqCiBFNjE1CWVkaXRpbmcudHh0CS8qRTYxNSoKIEU2MTYJZWRpdGluZy50eHQJLypFNjE2KgogRTYxNwlvcHRpb25zLnR4dAkvKkU2MTcqCi1FNjE4CXZhcmlvdXMudHh0CS8qRTYxOCoKLUU2MTkJdmFyaW91cy50eHQJLypFNjE5KgorRTYxOAlwcmludC50eHQJLypFNjE4KgorRTYxOQlwcmludC50eHQJLypFNjE5KgogRTYyCXBhdHRlcm4udHh0CS8qRTYyKgotRTYyMAlvcHRpb25zLnR4dAkvKkU2MjAqCi1FNjIxCXZhcmlvdXMudHh0CS8qRTYyMSoKK0U2MjAJcHJpbnQudHh0CS8qRTYyMCoKK0U2MjEJcHJpbnQudHh0CS8qRTYyMSoKIEU2MjIJaWZfY3Njb3AudHh0CS8qRTYyMioKIEU2MjMJaWZfY3Njb3AudHh0CS8qRTYyMyoKLUU2MjQJdmFyaW91cy50eHQJLypFNjI0KgorRTYyNAlwcmludC50eHQJLypFNjI0KgogRTYyNQlpZl9jc2NvcC50eHQJLypFNjI1KgogRTYyNglpZl9jc2NvcC50eHQJLypFNjI2KgogRTYyNwluZXRiZWFucy50eHQJLypFNjI3KgpAQCAtMzUyMCw2ICszNTI0LDkgQEAKIEU2NzAJdmFyaW91cy50eHQJLypFNjcwKgogRTY3MQlzdGFydGluZy50eHQJLypFNjcxKgogRTY3MglzdGFydGluZy50eHQJLypFNjcyKgorRTY3MwlwcmludC50eHQJLypFNjczKgorRTY3NAlwcmludC50eHQJLypFNjc0KgorRTY3NQlwcmludC50eHQJLypFNjc1KgogRTY4CXBhdHRlcm4udHh0CS8qRTY4KgogRTY5CXBhdHRlcm4udHh0CS8qRTY5KgogRTcwCXBhdHRlcm4udHh0CS8qRTcwKgpAQCAtMzg4Miw3ICszODg5LDcgQEAKIGEnCW1vdGlvbi50eHQJLyphJyoKIGEoCW1vdGlvbi50eHQJLyphKCoKIGEpCW1vdGlvbi50eHQJLyphKSoKLWE0CW9wdGlvbnMudHh0CS8qYTQqCithNAlwcmludC50eHQJLyphNCoKIGE6Zmlyc3RsaW5lCWV2YWwudHh0CS8qYTpmaXJzdGxpbmUqCiBhOmxhc3RsaW5lCWV2YWwudHh0CS8qYTpsYXN0bGluZSoKIGE6dmFyCWV2YWwudHh0CS8qYTp2YXIqCkBAIC01MjA1LDcgKzUyMTIsNyBAQAogbGNfdGltZS12YXJpYWJsZQlldmFsLnR4dAkvKmxjX3RpbWUtdmFyaWFibGUqCiBsZWZ0LXJpZ2h0LW1vdGlvbnMJbW90aW9uLnR4dAkvKmxlZnQtcmlnaHQtbW90aW9ucyoKIGxlc3MJdmFyaW91cy50eHQJLypsZXNzKgotbGV0dGVyCW9wdGlvbnMudHh0CS8qbGV0dGVyKgorbGV0dGVyCXByaW50LnR4dAkvKmxldHRlcioKIGxleC1zeW50YXgJc3ludGF4LnR4dAkvKmxleC1zeW50YXgqCiBsZXgudmltCXN5bnRheC50eHQJLypsZXgudmltKgogbGhhc2tlbGwudmltCXN5bnRheC50eHQJLypsaGFza2VsbC52aW0qCkBAIC01NDYyLDYgKzU0NjksOCBAQAogbmV3LTYJdmVyc2lvbjYudHh0CS8qbmV3LTYqCiBuZXctNwl2ZXJzaW9uNy50eHQJLypuZXctNyoKIG5ldy1HVEstR1VJCXZlcnNpb241LnR4dAkvKm5ldy1HVEstR1VJKgorbmV3LUtERQl2ZXJzaW9uNy50eHQJLypuZXctS0RFKgorbmV3LU16U2NoZW1lCXZlcnNpb243LnR4dAkvKm5ldy1NelNjaGVtZSoKIG5ldy1TZWxlY3QtbW9kZQl2ZXJzaW9uNS50eHQJLypuZXctU2VsZWN0LW1vZGUqCiBuZXctVmlldwl2ZXJzaW9uNi50eHQJLypuZXctVmlldyoKIG5ldy1hcmd1bWVudC1saXN0CXZlcnNpb242LnR4dAkvKm5ldy1hcmd1bWVudC1saXN0KgpAQCAtNTQ5MCw3ICs1NDk5LDYgQEAKIG5ldy1pbmRlbnQtZmxleAl2ZXJzaW9uNi50eHQJLypuZXctaW5kZW50LWZsZXgqCiBuZXctaXRlbXMtNgl2ZXJzaW9uNi50eHQJLypuZXctaXRlbXMtNioKIG5ldy1pdGVtcy03CXZlcnNpb243LnR4dAkvKm5ldy1pdGVtcy03KgotbmV3LWtkZQl2ZXJzaW9uNy50eHQJLypuZXcta2RlKgogbmV3LWxpbmUtY29udGludWF0aW9uCXZlcnNpb241LnR4dAkvKm5ldy1saW5lLWNvbnRpbnVhdGlvbioKIG5ldy1tdWx0aS1ieXRlCXZlcnNpb241LnR4dAkvKm5ldy1tdWx0aS1ieXRlKgogbmV3LW11bHRpLWxhbmcJdmVyc2lvbjYudHh0CS8qbmV3LW11bHRpLWxhbmcqCkBAIC01NTAwLDYgKzU1MDgsNyBAQAogbmV3LW9wdGlvbnMtNS40CXZlcnNpb241LnR4dAkvKm5ldy1vcHRpb25zLTUuNCoKIG5ldy1wZXJsLXB5dGhvbgl2ZXJzaW9uNS50eHQJLypuZXctcGVybC1weXRob24qCiBuZXctcGx1Z2lucwl2ZXJzaW9uNi50eHQJLypuZXctcGx1Z2lucyoKK25ldy1wcmludC1tdWx0aS1ieXRlCXZlcnNpb243LnR4dAkvKm5ldy1wcmludC1tdWx0aS1ieXRlKgogbmV3LXByaW50aW5nCXZlcnNpb242LnR4dAkvKm5ldy1wcmludGluZyoKIG5ldy1ydW50aW1lLWRpcgl2ZXJzaW9uNS50eHQJLypuZXctcnVudGltZS1kaXIqCiBuZXctc2NyaXB0CXZlcnNpb241LnR4dAkvKm5ldy1zY3JpcHQqCkBAIC01NTg5LDYgKzU1OTgsOCBAQAogcGF0dGVybi1vdmVydmlldwlwYXR0ZXJuLnR4dAkvKnBhdHRlcm4tb3ZlcnZpZXcqCiBwYXR0ZXJuLXNlYXJjaGVzCXBhdHRlcm4udHh0CS8qcGF0dGVybi1zZWFyY2hlcyoKIHBhdHRlcm4udHh0CXBhdHRlcm4udHh0CS8qcGF0dGVybi50eHQqCitwZGV2LW9wdGlvbglwcmludC50eHQJLypwZGV2LW9wdGlvbioKK3BlbmMtb3B0aW9uCXByaW50LnR4dAkvKnBlbmMtb3B0aW9uKgogcGVybAlpZl9wZXJsLnR4dAkvKnBlcmwqCiBwZXJsLUFwcGVuZAlpZl9wZXJsLnR4dAkvKnBlcmwtQXBwZW5kKgogcGVybC1CdWZmZXIJaWZfcGVybC50eHQJLypwZXJsLUJ1ZmZlcioKQEAgLTU2MTMsNiArNTYyNCw5IEBACiBwZXJsLXN5bnRheAlzeW50YXgudHh0CS8qcGVybC1zeW50YXgqCiBwZXJsLXVzaW5nCWlmX3BlcmwudHh0CS8qcGVybC11c2luZyoKIHBlcmwudmltCXN5bnRheC50eHQJLypwZXJsLnZpbSoKK3BleHByLW9wdGlvbglwcmludC50eHQJLypwZXhwci1vcHRpb24qCitwZm4tb3B0aW9uCXByaW50LnR4dAkvKnBmbi1vcHRpb24qCitwaGVhZGVyLW9wdGlvbglwcmludC50eHQJLypwaGVhZGVyLW9wdGlvbioKIHBob3Rvbi1mb250cwlvc19xbngudHh0CS8qcGhvdG9uLWZvbnRzKgogcGhvdG9uLWd1aQlvc19xbngudHh0CS8qcGhvdG9uLWd1aSoKIHBocC1zeW50YXgJc3ludGF4LnR4dAkvKnBocC1zeW50YXgqCkBAIC01NjI4LDE2ICs1NjQyLDIwIEBACiBwbHVnaW4tZGV0YWlscwlmaWxldHlwZS50eHQJLypwbHVnaW4tZGV0YWlscyoKIHBsdWdpbi1maWxldHlwZQl1c3JfNDEudHh0CS8qcGx1Z2luLWZpbGV0eXBlKgogcGx1Z2luLXNwZWNpYWwJdXNyXzQxLnR4dAkvKnBsdWdpbi1zcGVjaWFsKgorcG1iY3Mtb3B0aW9uCXByaW50LnR4dAkvKnBtYmNzLW9wdGlvbioKK3BtYmZuLW9wdGlvbglwcmludC50eHQJLypwbWJmbi1vcHRpb24qCitwb3B0LW9wdGlvbglwcmludC50eHQJLypwb3B0LW9wdGlvbioKIHBvcHVwLW1lbnUJZ3VpLnR4dAkvKnBvcHVwLW1lbnUqCiBwb3B1cC1tZW51LWFkZGVkCXZlcnNpb241LnR4dAkvKnBvcHVwLW1lbnUtYWRkZWQqCiBwb3J0cy01LjIJdmVyc2lvbjUudHh0CS8qcG9ydHMtNS4yKgogcG9ydHMtNgl2ZXJzaW9uNi50eHQJLypwb3J0cy02KgogcG9zdHNjci1zeW50YXgJc3ludGF4LnR4dAkvKnBvc3RzY3Itc3ludGF4KgogcG9zdHNjci52aW0Jc3ludGF4LnR4dAkvKnBvc3RzY3IudmltKgotcG9zdHNjcmlwdC1wcmludC1lbmNvZGluZwl2YXJpb3VzLnR4dAkvKnBvc3RzY3JpcHQtcHJpbnQtZW5jb2RpbmcqCi1wb3N0c2NyaXB0LXByaW50LXRyb3VibGUJdmFyaW91cy50eHQJLypwb3N0c2NyaXB0LXByaW50LXRyb3VibGUqCi1wb3N0c2NyaXB0LXByaW50LXV0aWwJdmFyaW91cy50eHQJLypwb3N0c2NyaXB0LXByaW50LXV0aWwqCi1wb3N0c2NyaXB0LXByaW50aW5nCXZhcmlvdXMudHh0CS8qcG9zdHNjcmlwdC1wcmludGluZyoKK3Bvc3RzY3JpcHQtY2prLXByaW50aW5nCXByaW50LnR4dAkvKnBvc3RzY3JpcHQtY2prLXByaW50aW5nKgorcG9zdHNjcmlwdC1wcmludC1lbmNvZGluZwlwcmludC50eHQJLypwb3N0c2NyaXB0LXByaW50LWVuY29kaW5nKgorcG9zdHNjcmlwdC1wcmludC10cm91YmxlCXByaW50LnR4dAkvKnBvc3RzY3JpcHQtcHJpbnQtdHJvdWJsZSoKK3Bvc3RzY3JpcHQtcHJpbnQtdXRpbAlwcmludC50eHQJLypwb3N0c2NyaXB0LXByaW50LXV0aWwqCitwb3N0c2NyaXB0LXByaW50aW5nCXByaW50LnR4dAkvKnBvc3RzY3JpcHQtcHJpbnRpbmcqCiBwcHdpei1zeW50YXgJc3ludGF4LnR4dAkvKnBwd2l6LXN5bnRheCoKIHBwd2l6LnZpbQlzeW50YXgudHh0CS8qcHB3aXoudmltKgogcHJlc3MtZW50ZXIJbWVzc2FnZS50eHQJLypwcmVzcy1lbnRlcioKQEAgLTU2NDUsOSArNTY2MywxMiBAQAogcHJldmNvdW50LXZhcmlhYmxlCWV2YWwudHh0CS8qcHJldmNvdW50LXZhcmlhYmxlKgogcHJldmlldy13aW5kb3cJd2luZG93cy50eHQJLypwcmV2aWV3LXdpbmRvdyoKIHByZXZub25ibGFuaygpCWV2YWwudHh0CS8qcHJldm5vbmJsYW5rKCkqCitwcmludC1pbnRybwlwcmludC50eHQJLypwcmludC1pbnRybyoKK3ByaW50LW9wdGlvbnMJcHJpbnQudHh0CS8qcHJpbnQtb3B0aW9ucyoKK3ByaW50LnR4dAlwcmludC50eHQJLypwcmludC50eHQqCiBwcmludGNhcC1zeW50YXgJc3ludGF4LnR4dAkvKnByaW50Y2FwLXN5bnRheCoKLXByaW50aW5nCXZhcmlvdXMudHh0CS8qcHJpbnRpbmcqCi1wcmludGluZy1mb3JtZmVlZAl2YXJpb3VzLnR4dAkvKnByaW50aW5nLWZvcm1mZWVkKgorcHJpbnRpbmcJcHJpbnQudHh0CS8qcHJpbnRpbmcqCitwcmludGluZy1mb3JtZmVlZAlwcmludC50eHQJLypwcmludGluZy1mb3JtZmVlZCoKIHByb2duYW1lLXZhcmlhYmxlCWV2YWwudHh0CS8qcHJvZ25hbWUtdmFyaWFibGUqCiBwcm9ncmVzcy1zeW50YXgJc3ludGF4LnR4dAkvKnByb2dyZXNzLXN5bnRheCoKIHByb2dyZXNzLnZpbQlzeW50YXgudHh0CS8qcHJvZ3Jlc3MudmltKgpAQCAtNjI0Nyw2ICs2MjY4LDcgQEAKIHRvbG93ZXIoKQlldmFsLnR4dAkvKnRvbG93ZXIoKSoKIHRvb2xiYXItaWNvbglndWkudHh0CS8qdG9vbGJhci1pY29uKgogdG91cHBlcigpCWV2YWwudHh0CS8qdG91cHBlcigpKgordHIoKQlldmFsLnR4dAkvKnRyKCkqCiB0cm9qYW4taG9yc2UJc3RhcnRpbmcudHh0CS8qdHJvamFuLWhvcnNlKgogdHJ5LWNvbmRpdGlvbmFscwlldmFsLnR4dAkvKnRyeS1jb25kaXRpb25hbHMqCiB0cnktZWNob2VycglldmFsLnR4dAkvKnRyeS1lY2hvZXJyKgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdG9kby50eHQgYi9ydW50aW1lL2RvYy90b2RvLnR4dAppbmRleCA4ODBkNzcwLi44ODEyNDk2IDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy90b2RvLnR4dAorKysgYi9ydW50aW1lL2RvYy90b2RvLnR4dApAQCAtMSw0ICsxLDQgQEAKLSp0b2RvLnR4dCogICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdWwgMDUKKyp0b2RvLnR4dCogICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdWwgMDkKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwJICBieSBCcmFtIE1vb2xlbmFhcgpAQCAtMzAsNzggKzMwLDIxIEBACiAJCQkJCQkJKmtub3duLWJ1Z3MqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBLbm93biBidWdzIGFuZCBjdXJyZW50IHdvcmsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorOnN5biBzeW5jIGNjb21tZW50IGFzZGYgZ2l2ZXMgYSB3YXJuaW5nIHdpdGhvdXQgYSBsaW5lIG51bWJlci4KKworQDogZG9lc24ndCB3b3JrIGlmIGNtZGxpbmUgaGFzIGEgXk0sIHJlcXVpcmVzIHVzaW5nIF5WLiAoVGltIENoYXNlKQorCitNYWM6IENvbXBpbGluZyAtLWVuYWJsZS1ndWk9YXRoZW5hIGRvZXNuJ3Qgd29yay4gIFRyeSB0byBmaXggd2l0aG91dCBkaXNhYmxpbmcKK0NhcmJvbi4gIE90aGVyd2lzZSBhZGp1c3QgY29uZmlndXJlIHRvIGRpc2FibGUgZGFyd2luLiAocmFmKQorCitNYWM6ICJtYWtlIGluc3RhbGwiIGRvZXNuJ3QgaW5zdGFsbC4KKworTWFrZSBhYXAgYnVpbGQgc2NyaXB0IHdvcmsgYWdhaW4uCisKKwogRm9yIHZlcnNpb24gNy4wOgogLSAgIEluY2x1ZGUgbWFueSBQQVRDSEVTOgotICAgIDggICAiOmhhcmRjb3B5IjoKLQktIHN1cHBvcnQgcHJpbnRpbmcgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLiAgUGF0Y2ggZnJvbSBNb3Rvbm9idQotCSAgSWNoaW11cmEuICBOZXcgKGJldHRlcikgcGF0Y2ggZnJvbSBNaWtlIFdpbGxpYW1zICgyMDA0IEphbiAyMCkKLQkgIFVwZGF0ZWQgcGF0Y2g6IGh0dHA6Ly93d3cuZWFuZGVtLmNvLnVrL21ydy92aW0vc3BlY2lhbC9pbmRleC5odG1sCi0gICAgNyAgIEFkZCBwYXRjaCBmcm9tIFdhbGwgZm9yIHRoaXMgb25lICggfi9NYWlsL29sZG1haWwvd2FsbC9pbi4wMDAxOSApOgotCSdmbGlwY2FzZScgdmFyaWFibGU6IHVwcGVyL2xvd2VyY2FzZSBwYWlycy4KLQlJbnNlcnQgY29tbWEncyBiZXR3ZWVuIHBhaXJzIGFuZCBhbGxvdyBhIHJhbmdlLCBtYWtlIGl0IGxvb2sgbGlrZQotCSdpc2ZuYW1lJy4gIEUuZy4gIjpzZXQgZmxpcGNhc2U9YS16QS1aLHhYLDIzLTMzOjE0My0xNTMiLiAgVGhlIGNvbG9uIHRvCi0Jc2VwYXJhdGUgdGhlIGZyb20gYW5kIHRvIHBhcnQgaXMgb3B0aW9uYWwuCi0JUmVzcDogbm8gdGltZSBub3cuCi0gICAgOCAgIEFkZCBHVEsgMi4zIGZpbGUgZGlhbG9nIHN1cHBvcnQuICBQYXRjaCBieSBHcmFoYW1lIEJvd2xhbmQsIDIwMDQgTWFyIDE1LAotCWJ1dCBpdCBkb2Vzbid0IHVzZSAiaW5pdGRpciIgb3IgImRmbHQiLiAod2lsbCB1cGRhdGUgcGF0Y2gpCi0gICAgOCAgIEFkZCAiOm4iIHRvIGZuYW1lbW9kaWZ5KCk6IG5vcm1hbGl6ZSBwYXRoLCByZW1vdmUgIi4uLyIgd2hlbiBwb3NzaWJsZS4KLQlBcmljIEJsdW1lciBoYXMgYSBwYXRjaCBmb3IgdGhpcy4KLQlIZSB3aWxsIHVwZGF0ZSB0aGUgcGF0Y2ggZm9yIDYuMy4KLSAgICA4ICAgQWRkIGJ1ZmZlci1sb2NhbCBhdXRvY29tbWFuZHM/ICBSZWR1Y2VzIG92ZXJoZWFkIGZvciBhdXRvY29tbWFuZHMgdGhhdAotCXRyaWdnZXIgb2Z0ZW4gKGluc2VydGluZyBhIGNoYXJhY3Rlciwgc3dpdGNoaW5nIG1vZGUpLgotCSAgICA6YXUgRXZlbnQgPGJ1ZmZlcj4gZG8tc29tZXRoaW5nCi0JRS5nLjoKLQkgICAgOmF1IEJ1ZkVudGVyIDxidWZmZXI+IG1lbnUgZW5hYmxlIC4uLgotCSAgICA6YXUgQnVmTGVhdmUgPGJ1ZmZlcj4gbWVudSBkaXNhYmxlIC4uLgotCVBhdGNoIGZyb20gWWFrb3YgTGVybmVyLCBpbmNsdWRpbmcgdGVzdCAoMjAwNCBKYW4gNykuCi0gICAgICAgIEhlJ2xsIHNlbmQgdXBkYXRlZCBwYXRjaC4KLSAgICBBdXRvY29tbWFuZHM6Ci0JVmltUmVzaXplZAkgICAgLSBXaGVuIHRoZSBWaW0gd2luZG93IGhhcyBiZWVuIHJlc2l6ZWQgKFNJR1dJTkNIKQotCSAgcGF0Y2ggZnJvbSBZYWtvdiBMZXJuZXIsIDIwMDMgSnVseSAyNC4KLQkgIEhlJ2xsIHdyaXRlIGRvY3VtZW50YXRpb24gYW5kIHNlbmQgdXBkYXRlZCBwYXRjaC4KLSAgICA3ICAgQ29tcGxldGlvbiBvZiBuZXR3b3JrIHNoYXJlcywgcGF0Y2ggYnkgWWFzdWhpcm8gTWF0c3Vtb3RvLgotCVVwZGF0ZSAyMDA0IEp1biAxNy4KLQlIb3cgZG9lcyB0aGlzIHdvcms/ICBNaXNzaW5nIGNvbW1lbnRzLgotICAgIGdldHRleHQoKQkJVHJhbnNsYXRlIGEgbWVzc2FnZS4gIChQYXRjaCBmcm9tIFlhc3VoaXJvIE1hdHN1bW90bykKLQkJCVVwZGF0ZSAyMDA0IEp1biAxNwotCQkJTWlzc2luZyBkb2NzLiAgU2VhcmNoIGluICdydW50aW1lcGF0aCc/Ci0JCQlIb3cgdG8gZ2V0IHRoZSBtZXNzYWdlcyBpbnRvIHRoZSAucG8gZmlsZXM/Ci0gICAgOCAgIE1ha2UgaXQgcG9zc2libGUgdG8gZGVsZXRlIG1hcmtzLiAgQ2hhcmxlcyBDYW1wYmVsbCBoYXMgYSBwYXRjaCB0aGF0Ci0JZG9lcyB0aGlzIHdpdGggdGhlIG1hcmtjbGVhcigpIGZ1bmN0aW9uICgyMDA0IEphbiA5KS4KLQlBbmQgdGhlICI6ZGVsbWFyayIgY29tbWFuZCAoMjAwNCBGZWIgOSkKLQlodHRwOi8vbXlzaXRlLnZlcml6b24ubmV0L2FzdHJvbmF1dC92aW0vaW5kZXguaHRtbCNQYXRjaAotCX4vdG1wL3B0Y2guZGVsbWFyay5iejIKLQl+L3RtcC9wdGNoLm1hcmtjbGVhcgotCUltcGxlbWVudCBzZXRtYXJrKG1hcmtuYW1lLCBsbnVtLCBjb2wgWywgZmlsZW5hbWVdKSBpbnN0ZWFkPwotICAgIC0tLSByZXNwb25zZXMgYWJvdmUgLS0KLSAgICA3ICAgTWFrZSAiNWRkIiBvbiBsYXN0LWJ1dC1vbmUtbGluZSBub3QgZGVsZXRlIGFueXRoaW5nIChWaSBjb21wYXRpYmxlKS4KLQlBZGQgZmxhZyBpbiAnY3BvcHRpb25zJyBmb3IgdGhpcy4gIFdoZW4gbm90IHByZXNlbnQsICIyZGQiIGluIHRoZSBsYXN0Ci0JbGluZSBzaG91bGQgZGVsZXRlIHRoZSBsYXN0IGxpbmUuICBQYXRjaCBmcm9tIGdyZWVueCAyMDAyIEFwciAxMS4KLSAgICA4ICAgQWNjZWxlcmF0b3JzIGRvbid0IHdvcmsgaW4gYSBkaWFsb2cuICBJbmNsdWRlIHBhdGNoIGZyb20gTWFydGluIERhbGVja2kKLQkoSmFuIDMsIHRlc3RlZCBieSBEYXZpZCBIYXJyaXNvbikuICBTaG91bGQgd29yayB3aXRoIEFsdC1vIHRoZW4uCi0gICAgNyAgIFVzZSBhY2NlbGVyYXRvcnMgZm9yIHRoZSBNb3RpZiBmaWxlIHNlbGVjdGlvbiBkaWFsb2cuICBQYXRjaCBmcm9tCi0JTWFydGluIERhbGVja2kgMjAwMiBKYW4gMTEuCi0gICAgOCAgIEFkZCBhIGZldyBtb3JlIGNvbW1hbmQgbmFtZXMgdG8gdGhlIG1lbnVzLiAgUGF0Y2ggZnJvbSBKaXJpIEJyZXppbmEKLQkoMjggZmViIDIwMDIpLgotICAgIDcgICBBVFRFTlRJT04gZGlhbG9nIGNob2ljZXMgYXJlIG1vcmUgbG9naWNhbCB3aGVuICJEZWxldGUgaXQnIGFwcGVhcnMKLQliZWZvcmUgIlF1aXQiLiAgUGF0Y2ggYnkgUm9iZXJ0IFdlYmIsIDIwMDQgTWF5IDMuCi0gICAgLSAgIEluY2x1ZGUgZmxpcGNhc2UgcGF0Y2g6IH4vdmltL3BhdGNoZXMvd2FsbC5mbGlwY2FzZTIgPyAgTWFrZSBpdCB3b3JrCi0JZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KLSAgICAtICAgV2luMzI6IGFkZCBvcHRpb25zIHRvIHByaW50IGRpYWxvZy4gIFBhdGNoIGZyb20gVmlwaW4gQXJhdmluZC4KLSAgICAtICAgUGF0Y2ggdG8gYWRkIGhpZ2hsaWdodGluZyBmb3Igd2hpdGVzcGFjZS4gKFRvbSBTY2h1bW0sIDIwMDMgSnVsIDUpCi0JdXNlIHRoZSBwYXRjaCB0aGF0IGtlZXBzIHVzaW5nIEhMRl84IGlmIEhMRl9XUyBoYXMgbm90Ci0JYmVlbiBnaXZlbiB2YWx1ZXMuCi0JQWRkIHNlY3Rpb24gaW4gaGVscCBmaWxlcyBmb3IgdGhlc2UgaGlnaGxpZ2h0IGdyb3Vwcz8KLSAgICA4ICAgImZnIiBhbmQgImJnIiBkb24ndCB3b3JrIGluIGFuIHh0ZXJtLiAgR2V0IGRlZmF1bHQgY29sb3JzIGZyb20geHRlcm0KLQl3aXRoIGFuIEVTQyBzZXF1ZW5jZS4gIElkZWFzIGluOiB+L3ZpbS9wYXRjaGVzL3Zpa2FzLnh0ZXJtY29sb3JzIC4KLSAgICA3ICAgQWRkICJEZWZhdWx0RkciIGFuZCAiRGVmYXVsdEJHIiBmb3IgdGhlIGNvbG9ycyBvZiB0aGUgbWVudS4gKE1hcnRpbgotCURhbGVja2kgaGFzIGEgcGF0Y2ggZm9yIE1vdGlmKQotICAgIC0gICBBZGQgcG9zc2liaWxpdHkgdG8gaGlnaGxpZ2h0IHNwZWNpZmljIGNvbHVtbnMgKGZvciBGb3J0cmFuKS4gIE9yIHB1dCBhCi0JbGluZSBpbiBiZXR3ZWVuIGNvbHVtbnMgKGUuZy4gZm9yICd0ZXh0d2lkdGgnKS4KLQlQYXRjaCB0byBhZGQgJ2hsY29sdW1uJyBmcm9tIFZpdCBTdHJhZGFsLCAyMDA0IE1heSAyMC4KICAgICA4ICAgQWRkIGZ1bmN0aW9uczoKLQl0cihleHByLCBmcm9tLCB0bykJdHJhbnNsYXRlIGNoYXJzIChQYXRjaCBmcm9tIFJvbiBBYXJvbiwgQXByIDgKLQkJCQkyMDA0KQogCXN0cnJlcCgpCQlSZXBlYXQgYSBzdHJpbmcgKHBhdGNoIGZyb20gQ2hyaXN0b3BoZSBQb3VjZXQsCiAJCQkJMjAwMyBTZXAgMTIsIGFsc28gY29udGFpbnMgWFgpCiAJCQkJQWx0OiByZXBlYXQoZXhwciwgY291bnQpIHdlcmt0IG9vayB2b29yIGxpc3RzLgpAQCAtMTQwLDcgKzgzLDc1IEBACiAJc2VhcmNoKCkJCUFkZCBvcHRpb25hbCBvZmZzZXQgYXJndW1lbnQuCiAJCQkJQWRkICduJyBmbGFnLiAgKHBhdGNoIGZyb20gTmlrb2xhaSBXZWlidWxsCiAJCQkJMjAwMyBKYW4gMTMpCi0JLS0tCisgICAgOCAgIE1ha2UgaXQgcG9zc2libGUgdG8gZGVsZXRlIG1hcmtzLiAgQ2hhcmxlcyBDYW1wYmVsbCBoYXMgYSBwYXRjaCB0aGF0CisJZG9lcyB0aGlzIHdpdGggdGhlIG1hcmtjbGVhcigpIGZ1bmN0aW9uICgyMDA0IEphbiA5KS4KKwlBbmQgdGhlICI6ZGVsbWFyayIgY29tbWFuZCAoMjAwNCBGZWIgOSkKKwlodHRwOi8vbXlzaXRlLnZlcml6b24ubmV0L2FzdHJvbmF1dC92aW0vaW5kZXguaHRtbCNQYXRjaAorCX4vdG1wL3B0Y2guZGVsbWFyay5iejIKKwl+L3RtcC9wdGNoLm1hcmtjbGVhcgorCUltcGxlbWVudCBzZXRtYXJrKG1hcmtuYW1lLCBsbnVtIFssIGNvbCBbLCBmaWxlbmFtZV1dKSBpbnN0ZWFkPworCVdoZW4gImxudW0iIGlzIHplcm8gZGVsZXRlIHRoZSBtYXJrLgorCVdoZW4gImZpbGVuYW1lIiBoYXMgbm8gd2lsZGNhcmRzIGFuZCB0aGVyZSBpcyBubyBtYXRjaGluZyBidWZmZXIsIGFkZAorCXRoZSBidWZmZXIgKHVubGlzdGVkKS4KKyAgICBQYXRjaCBmb3IgXHhubiAoQ2lhcmFuIE1jQ3JlZXNoKSAgMjAwNCBKdWwgNworICAgIC0tLSBhd2FpdGluZyB1cGRhdGVkIHBhdGNoIC0tLQorICAgIDcgICBBZGQgcGF0Y2ggZnJvbSBXYWxsIGZvciB0aGlzIG9uZSAoIH4vTWFpbC9vbGRtYWlsL3dhbGwvaW4uMDAwMTkgKToKKwknZmxpcGNhc2UnIHZhcmlhYmxlOiB1cHBlci9sb3dlcmNhc2UgcGFpcnMuCisJSW5zZXJ0IGNvbW1hJ3MgYmV0d2VlbiBwYWlycyBhbmQgYWxsb3cgYSByYW5nZSwgbWFrZSBpdCBsb29rIGxpa2UKKwknaXNmbmFtZScuICBFLmcuICI6c2V0IGZsaXBjYXNlPWEtekEtWix4WCwyMy0zMzoxNDMtMTUzIi4gIFRoZSBjb2xvbiB0bworCXNlcGFyYXRlIHRoZSBmcm9tIGFuZCB0byBwYXJ0IGlzIG9wdGlvbmFsLgorCVJlc3A6IG5vIHRpbWUgbm93LgorICAgIDggICBBZGQgR1RLIDIuMyBmaWxlIGRpYWxvZyBzdXBwb3J0LiAgUGF0Y2ggYnkgR3JhaGFtZSBCb3dsYW5kLCAyMDA0IE1hciAxNSwKKwlidXQgaXQgZG9lc24ndCB1c2UgImluaXRkaXIiIG9yICJkZmx0Ii4gKHdpbGwgdXBkYXRlIHBhdGNoKQorICAgIDggICBBZGQgIjpuIiB0byBmbmFtZW1vZGlmeSgpOiBub3JtYWxpemUgcGF0aCwgcmVtb3ZlICIuLi8iIHdoZW4gcG9zc2libGUuCisJQXJpYyBCbHVtZXIgaGFzIGEgcGF0Y2ggZm9yIHRoaXMuCisJSGUgd2lsbCB1cGRhdGUgdGhlIHBhdGNoIGZvciA2LjMuCisgICAgOCAgIEFkZCBidWZmZXItbG9jYWwgYXV0b2NvbW1hbmRzPyAgUmVkdWNlcyBvdmVyaGVhZCBmb3IgYXV0b2NvbW1hbmRzIHRoYXQKKwl0cmlnZ2VyIG9mdGVuIChpbnNlcnRpbmcgYSBjaGFyYWN0ZXIsIHN3aXRjaGluZyBtb2RlKS4KKwkgICAgOmF1IEV2ZW50IDxidWZmZXI+IGRvLXNvbWV0aGluZworCUUuZy46CisJICAgIDphdSBCdWZFbnRlciA8YnVmZmVyPiBtZW51IGVuYWJsZSAuLi4KKwkgICAgOmF1IEJ1ZkxlYXZlIDxidWZmZXI+IG1lbnUgZGlzYWJsZSAuLi4KKwlQYXRjaCBmcm9tIFlha292IExlcm5lciwgaW5jbHVkaW5nIHRlc3QgKDIwMDQgSmFuIDcpLgorICAgICAgICBIZSdsbCBzZW5kIHVwZGF0ZWQgcGF0Y2guCisgICAgQXV0b2NvbW1hbmRzOgorCVZpbVJlc2l6ZWQJICAgIC0gV2hlbiB0aGUgVmltIHdpbmRvdyBoYXMgYmVlbiByZXNpemVkIChTSUdXSU5DSCkKKwkgIHBhdGNoIGZyb20gWWFrb3YgTGVybmVyLCAyMDAzIEp1bHkgMjQuCisJICBIZSdsbCB3cml0ZSBkb2N1bWVudGF0aW9uIGFuZCBzZW5kIHVwZGF0ZWQgcGF0Y2guCisgICAgNyAgIENvbXBsZXRpb24gb2YgbmV0d29yayBzaGFyZXMsIHBhdGNoIGJ5IFlhc3VoaXJvIE1hdHN1bW90by4KKwlVcGRhdGUgMjAwNCBKdW4gMTcuCisJSG93IGRvZXMgdGhpcyB3b3JrPyAgTWlzc2luZyBjb21tZW50cy4KKyAgICBnZXR0ZXh0KCkJCVRyYW5zbGF0ZSBhIG1lc3NhZ2UuICAoUGF0Y2ggZnJvbSBZYXN1aGlybyBNYXRzdW1vdG8pCisJCQlVcGRhdGUgMjAwNCBKdW4gMTcKKwkJCU1pc3NpbmcgZG9jcy4gIFNlYXJjaCBpbiAncnVudGltZXBhdGgnPworCQkJSG93IHRvIGdldCB0aGUgbWVzc2FnZXMgaW50byB0aGUgLnBvIGZpbGVzPworICAgIC0tLSBkaWQgbm90IHJlc3BvbmQgKHlldCkgLS0KKyAgICA3ICAgTWFrZSAiNWRkIiBvbiBsYXN0LWJ1dC1vbmUtbGluZSBub3QgZGVsZXRlIGFueXRoaW5nIChWaSBjb21wYXRpYmxlKS4KKwlBZGQgZmxhZyBpbiAnY3BvcHRpb25zJyBmb3IgdGhpcy4gIFdoZW4gbm90IHByZXNlbnQsICIyZGQiIGluIHRoZSBsYXN0CisJbGluZSBzaG91bGQgZGVsZXRlIHRoZSBsYXN0IGxpbmUuICBQYXRjaCBmcm9tIGdyZWVueCAyMDAyIEFwciAxMS4KKyAgICA4ICAgQWNjZWxlcmF0b3JzIGRvbid0IHdvcmsgaW4gYSBkaWFsb2cuICBJbmNsdWRlIHBhdGNoIGZyb20gTWFydGluIERhbGVja2kKKwkoSmFuIDMsIHRlc3RlZCBieSBEYXZpZCBIYXJyaXNvbikuICBTaG91bGQgd29yayB3aXRoIEFsdC1vIHRoZW4uCisgICAgNyAgIFVzZSBhY2NlbGVyYXRvcnMgZm9yIHRoZSBNb3RpZiBmaWxlIHNlbGVjdGlvbiBkaWFsb2cuICBQYXRjaCBmcm9tCisJTWFydGluIERhbGVja2kgMjAwMiBKYW4gMTEuCisgICAgOCAgIEFkZCBhIGZldyBtb3JlIGNvbW1hbmQgbmFtZXMgdG8gdGhlIG1lbnVzLiAgUGF0Y2ggZnJvbSBKaXJpIEJyZXppbmEKKwkoMjggZmViIDIwMDIpLgorICAgIDcgICBBVFRFTlRJT04gZGlhbG9nIGNob2ljZXMgYXJlIG1vcmUgbG9naWNhbCB3aGVuICJEZWxldGUgaXQnIGFwcGVhcnMKKwliZWZvcmUgIlF1aXQiLiAgUGF0Y2ggYnkgUm9iZXJ0IFdlYmIsIDIwMDQgTWF5IDMuCisgICAgLSAgIEluY2x1ZGUgZmxpcGNhc2UgcGF0Y2g6IH4vdmltL3BhdGNoZXMvd2FsbC5mbGlwY2FzZTIgPyAgTWFrZSBpdCB3b3JrCisJZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KKyAgICAtICAgV2luMzI6IGFkZCBvcHRpb25zIHRvIHByaW50IGRpYWxvZy4gIFBhdGNoIGZyb20gVmlwaW4gQXJhdmluZC4KKyAgICAtICAgUGF0Y2ggdG8gYWRkIGhpZ2hsaWdodGluZyBmb3Igd2hpdGVzcGFjZS4gKFRvbSBTY2h1bW0sIDIwMDMgSnVsIDUpCisJdXNlIHRoZSBwYXRjaCB0aGF0IGtlZXBzIHVzaW5nIEhMRl84IGlmIEhMRl9XUyBoYXMgbm90CisJYmVlbiBnaXZlbiB2YWx1ZXMuCisJQWRkIHNlY3Rpb24gaW4gaGVscCBmaWxlcyBmb3IgdGhlc2UgaGlnaGxpZ2h0IGdyb3Vwcz8KKyAgICA4ICAgImZnIiBhbmQgImJnIiBkb24ndCB3b3JrIGluIGFuIHh0ZXJtLiAgR2V0IGRlZmF1bHQgY29sb3JzIGZyb20geHRlcm0KKwl3aXRoIGFuIEVTQyBzZXF1ZW5jZS4gIElkZWFzIGluOiB+L3ZpbS9wYXRjaGVzL3Zpa2FzLnh0ZXJtY29sb3JzIC4KKyAgICA3ICAgQWRkICJEZWZhdWx0RkciIGFuZCAiRGVmYXVsdEJHIiBmb3IgdGhlIGNvbG9ycyBvZiB0aGUgbWVudS4gKE1hcnRpbgorCURhbGVja2kgaGFzIGEgcGF0Y2ggZm9yIE1vdGlmKQorICAgIC0gICBBZGQgcG9zc2liaWxpdHkgdG8gaGlnaGxpZ2h0IHNwZWNpZmljIGNvbHVtbnMgKGZvciBGb3J0cmFuKS4gIE9yIHB1dCBhCisJbGluZSBpbiBiZXR3ZWVuIGNvbHVtbnMgKGUuZy4gZm9yICd0ZXh0d2lkdGgnKS4KKwlQYXRjaCB0byBhZGQgJ2hsY29sdW1uJyBmcm9tIFZpdCBTdHJhZGFsLCAyMDA0IE1heSAyMC4KKyAgICA4ICAgQWRkIGZ1bmN0aW9uczoKIAljb25maXJtKCkJCWFkZCAiZmxhZ3MiIGFyZ3VtZW50LCB3aXRoICd2JyBmb3IgdmVydGljYWwKIAkJCQlsYXlvdXQgYW5kICdjJyBmb3IgY29uc29sZSBkaWFsb2cuIChIYWVnZykKIAkJCQlGbGVtbWluZyBNYWRzZW4gaGFzIGEgcGF0Y2ggZm9yIHRoZSAnYycgZmxhZwpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdmFyaW91cy50eHQgYi9ydW50aW1lL2RvYy92YXJpb3VzLnR4dAppbmRleCAzNjI0YTdiLi45Njc2ODAxIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy92YXJpb3VzLnR4dAorKysgYi9ydW50aW1lL2RvYy92YXJpb3VzLnR4dApAQCAtMSw0ICsxLDQgQEAKLSp2YXJpb3VzLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdW4gMTgKKyp2YXJpb3VzLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdWwgMDUKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTgsOCArOCw3IEBACiAKIDEuIFZhcmlvdXMgY29tbWFuZHMJCXx2YXJpb3VzLWNtZHN8CiAyLiBPbmxpbmUgaGVscAkJCXxvbmxpbmUtaGVscHwKLTMuIFByaW50aW5nCQkJfHByaW50aW5nfAotNC4gVXNpbmcgVmltIGxpa2UgbGVzcyBvciBtb3JlCXxsZXNzfAorMy4gVXNpbmcgVmltIGxpa2UgbGVzcyBvciBtb3JlCXxsZXNzfAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIDEuIFZhcmlvdXMgY29tbWFuZHMJCQkJCSp2YXJpb3VzLWNtZHMqCkBAIC03MjIsMzY5ICs3MjEsNiBAQAogICBsYW5ndWFnZXMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkuCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotMy4gUHJpbnRpbmcJCQkJCQkqcHJpbnRpbmcqCi0KLU9uIE1TLVdpbmRvd3MgVmltIGNhbiBwcmludCB5b3VyIHRleHQgb24gYW55IGluc3RhbGxlZCBwcmludGVyLiAgT24gb3RoZXIKLXN5c3RlbXMgYSBQb3N0U2NyaXB0IGZpbGUgaXMgcHJvZHVjZWQuICBUaGlzIGNhbiBiZSBkaXJlY3RseSBzZW50IHRvIGEKLVBvc3RTY3JpcHQgcHJpbnRlci4gIEZvciBvdGhlciBwcmludGVycyBhIHByb2dyYW0gbGlrZSBnaG9zdHNjcmlwdCBuZWVkcyB0byBiZQotdXNlZC4KLQotMy4xIFBvc3RTY3JpcHQgUHJpbnRpbmcJCQl8cG9zdHNjcmlwdC1wcmludGluZ3wKLTMuMiBQb3N0U2NyaXB0IFByaW50aW5nIEVuY29kaW5nCXxwb3N0c2NyaXB0LXByaW50LWVuY29kaW5nfAotMy4zIFBvc3RTY3JpcHQgUHJpbnRpbmcgVHJvdWJsZXNob290aW5nIHxwb3N0c2NyaXB0LXByaW50LXRyb3VibGV8Ci0zLjQgUG9zdFNjcmlwdCBVdGlsaXRpZXMJCXxwb3N0c2NyaXB0LXByaW50LXV0aWx8Ci0zLjUgRm9ybWZlZWQgQ2hhcmFjdGVycwkJCXxwcmludGluZy1mb3JtZmVlZHwKLQote25vdCBpbiBWaX0KLXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggfCtwcmludGVyfCBmZWF0dXJlfQotCi0JCQkJCSo6aGEqICo6aGFyZGNvcHkqICpFMjM3KiAqRTIzOCogKkUzMjQqCi06W3JhbmdlXWhhW3JkY29weV1bIV0gW2FyZ3VtZW50c10KLQkJCVNlbmQgW3JhbmdlXSBsaW5lcyAoZGVmYXVsdCB3aG9sZSBmaWxlKSB0byB0aGUKLQkJCXByaW50ZXIuCi0KLQkJCU9uIE1TLVdpbmRvd3MgYSBkaWFsb2cgaXMgZGlzcGxheWVkIHRvIGFsbG93IHNlbGVjdGlvbgotCQkJb2YgcHJpbnRlciwgcGFwZXIgc2l6ZSBldGMuIFRvIHNraXAgdGhlIGRpYWxvZywgdXNlCi0JCQl0aGUgWyFdLiAgSW4gdGhpcyBjYXNlIHRoZSBwcmludGVyIGRlZmluZWQgYnkKLQkJCSdwcmludGRldmljZScgaXMgdXNlZCwgb3IsIGlmICdwcmludGRldmljZScgaXMgZW1wdHksCi0JCQl0aGUgc3lzdGVtIGRlZmF1bHQgcHJpbnRlci4KLQotCQkJRm9yIHN5c3RlbXMgb3RoZXIgdGhhbiBNUy1XaW5kb3dzLCBQb3N0U2NyaXB0IGlzCi0JCQl3cml0dGVuIGluIGEgdGVtcCBmaWxlIGFuZCAncHJpbnRleHByJyBpcyB1c2VkIHRvCi0JCQlhY3R1YWxseSBwcmludCBpdC4gIFRoZW4gW2FyZ3VtZW50c10gY2FuIGJlIHVzZWQgYnkKLQkJCSdwcmludGV4cHInIHRocm91Z2ggfHY6Y21kYXJnfC4gIE90aGVyd2lzZSBbYXJndW1lbnRzXQotCQkJaXMgaWdub3JlZC4gICdwcmludG9wdGlvbnMnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkKLQkJCXBhcGVyIHNpemUsIGR1cGxleCwgZXRjLgotCi06W3JhbmdlXWhhW3JkY29weV1bIV0gPntmaWxlbmFtZX0KLQkJCUFzIGFib3ZlLCBidXQgd3JpdGUgdGhlIHJlc3VsdGluZyBQb3N0U2NyaXB0IGluIGZpbGUKLQkJCXtmaWxlbmFtZX0uCi0JCQlUaGluZ3MgbGlrZSAiJSIgYXJlIGV4cGFuZGVkIHxjbWRsaW5lLXNwZWNpYWx8Ci0JCQlDYXJlZnVsOiBBbiBleGlzdGluZyBmaWxlIGlzIHNpbGVudGx5IG92ZXJ3cml0dGVuLgotCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtwb3N0c2NyaXB0fAotCQkJZmVhdHVyZX0KLQkJCU9uIE1TLVdpbmRvd3MgdXNlIHRoZSAicHJpbnQgdG8gZmlsZSIgZmVhdHVyZSBvZiB0aGUKLQkJCXByaW50ZXIgZHJpdmVyLgotCi1Qcm9ncmVzcyBpcyBkaXNwbGF5ZWQgZHVyaW5nIHByaW50aW5nIGFzIGEgcGFnZSBudW1iZXIgYW5kIGEgcGVyY2VudGFnZS4gIFRvCi1hYm9ydCBwcmludGluZyB1c2UgdGhlIGludGVycnVwdCBrZXkgKENUUkwtQyBvciwgb24gTVMtc3lzdGVtcywgQ1RSTC1CcmVhaykuCi0KLVByaW50ZXIgb3V0cHV0IGlzIGNvbnRyb2xsZWQgYnkgdGhlICdwcmludGZvbnQnIGFuZCAncHJpbnRvcHRpb25zJyBvcHRpb25zLgotJ3ByaW50aGVhZGVyJyBzcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiBhIHBhZ2UgaGVhZGVyLgotCi1UaGUgcHJpbnRlZCBmaWxlIGlzIGFsd2F5cyBsaW1pdGVkIHRvIHRoZSBzZWxlY3RlZCBtYXJnaW5zLCBpcnJlc3BlY3RpdmUgb2YKLXRoZSBjdXJyZW50IHdpbmRvdydzICd3cmFwJyBvciAnbGluZWJyZWFrJyBzZXR0aW5ncy4gIFRoZSAid3JhcCIgaXRlbSBpbgotJ3ByaW50b3B0aW9ucycgY2FuIGJlIHVzZWQgdG8gc3dpdGNoIHdyYXBwaW5nIG9mZi4KLVRoZSBjdXJyZW50IGhpZ2hsaWdodGluZyBjb2xvcnMgYXJlIHVzZWQgaW4gdGhlIHByaW50b3V0LCB3aXRoIHRoZSBmb2xsb3dpbmcKLWNvbnNpZGVyYXRpb25zOgotMSkgVGhlIG5vcm1hbCBiYWNrZ3JvdW5kIGlzIGFsd2F5cyByZW5kZXJlZCBhcyB3aGl0ZSAoaS5lLiBibGFuayBwYXBlci4pCi0yKSBXaGl0ZSB0ZXh0IG9yIHRoZSBkZWZhdWx0IGZvcmVncm91bmQgaXMgcmVuZGVyZWQgYXMgYmxhY2ssIHNvIHRoYXQgaXQgc2hvd3MKLSAgIHVwIQotMykgSWYgJ2JhY2tncm91bmQnIGlzICJkYXJrIiwgdGhlbiB0aGUgY29sb3VycyBhcmUgZGFya2VuZWQgdG8gY29tcGVuc2F0ZSBmb3IKLSAgIHRoZSBmYWN0IHRoYXQgb3RoZXJ3aXNlIHRoZXkgd291bGQgYmUgdG9vIGJyaWdodCB0byBzaG93IHVwIGNsZWFybHkgb24KLSAgIHdoaXRlIHBhcGVyLgotCi0KLTMuMSBQb3N0U2NyaXB0IFByaW50aW5nCQkJCQkqcG9zdHNjcmlwdC1wcmludGluZyoKLQkJCQkJCSpFNDU1KiAqRTQ1NiogKkU0NTcqICpFNjI0KgotUHJvdmlkZWQgeW91IGhhdmUgZW5vdWdoIGRpc2sgc3BhY2UgdGhlcmUgc2hvdWxkIGJlIG5vIHByb2JsZW1zIGdlbmVyYXRpbmcgYQotUG9zdFNjcmlwdCBmaWxlLiAgWW91IG5lZWQgdG8gaGF2ZSB0aGUgcnVudGltZSBmaWxlcyBjb3JyZWN0bHkgaW5zdGFsbGVkIChpZgoteW91IGNhbiBmaW5kIHRoZSBoZWxwIGZpbGVzLCB0aGV5IHByb2JhYmx5IGFyZSkuCi0KLVRoZXJlIGFyZSBjdXJyZW50bHkgYSBudW1iZXIgb2YgbGltaXRhdGlvbnMgd2l0aCBQb3N0U2NyaXB0IHByaW50aW5nOgotCi0tICdwcmludGZvbnQnIC0gVGhlIGZvbnQgbmFtZSBpcyBpZ25vcmVkICh0aGUgQ291cmllciBmYW1pbHkgaXMgYWx3YXlzIHVzZWQgLQotICBpdCBzaG91bGQgYmUgYXZhaWxhYmxlIG9uIGFsbCBQb3N0U2NyaXB0IHByaW50ZXJzKSBidXQgdGhlIGZvbnQgc2l6ZSBpcwotICB1c2VkLgotCi0tICdwcmludG9wdGlvbnMnIC0gVGhlIGR1cGxleCBzZXR0aW5nIGlzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIFBvc3RTY3JpcHQKLSAgb3V0cHV0LCBidXQgaXQgaXMgdXAgdG8gdGhlIHByaW50ZXIgdG8gdGFrZSBub3RpY2Ugb2YgdGhlIHNldHRpbmcuICBJZiB0aGUKLSAgcHJpbnRlciBkb2VzIG5vdCBzdXBwb3J0IGR1cGxleCBwcmludGluZyB0aGVuIGl0IHNob3VsZCBiZSBzaWxlbnRseSBpZ25vcmVkLgotICBTb21lIHByaW50ZXJzLCBob3dldmVyLCBkb24ndCBwcmludCBhdCBhbGwuCi0KLS0gOC1iaXQgc3VwcG9ydCAtIFdoaWxlIGEgbnVtYmVyIG9mIDgtYml0IHByaW50IGNoYXJhY3RlciBlbmNvZGluZ3MgYXJlCi0gIHN1cHBvcnRlZCBpdCBpcyBwb3NzaWJsZSB0aGF0IHNvbWUgY2hhcmFjdGVycyB3aWxsIG5vdCBwcmludC4gIFdoZXRoZXIgYQotICBjaGFyYWN0ZXIgd2lsbCBwcmludCBkZXBlbmRzIG9uIHRoZSBmb250IGluIHRoZSBwcmludGVyIGtub3dpbmcgdGhlCi0gIGNoYXJhY3Rlci4gIE1pc3NpbmcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYW4gdXBzaWRlIGRvd24gcXVlc3Rpb24KLSAgbWFyaywgb3IgYSBzcGFjZSBpZiB0aGF0IGNoYXJhY3RlciBpcyBhbHNvIG5vdCBrbm93biBieSB0aGUgZm9udC4gIEl0IG1heSBiZQotICBwb3NzaWJsZSB0byBnZXQgYWxsIHRoZSBjaGFyYWN0ZXJzIGluIGFuIGVuY29kaW5nIHRvIHByaW50IGJ5IGluc3RhbGxpbmcgYQotICBuZXcgdmVyc2lvbiBvZiB0aGUgQ291cmllciBmb250IGZhbWlseS4KLQotLSBNdWx0aS1ieXRlIHN1cHBvcnQgLSBDdXJyZW50bHkgVklNIHdpbGwgdHJ5IHRvIGNvbnZlcnQgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzCi0gIHRvIHRoZSA4LWJpdCBlbmNvZGluZyBzcGVjaWZpZWQgYnkgJ3ByaW50ZW5jb2RpbmcnIChvciBsYXRpbjEgaWYgaXQgaXMKLSAgZW1wdHkpLiAgQW55IGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHN1Y2Nlc3NmdWxseSBjb252ZXJ0ZWQgYXJlIHNob3duIGFzCi0gIHVua25vd24gY2hhcmFjdGVycy4gIFByaW50aW5nIHdpbGwgZmFpbCBpZiBWSU0gY2Fubm90IGNvbnZlcnQgdGhlIG11bHRpLWJ5dGUKLSAgdG8gdGhlIDgtYml0IGVuY29kaW5nLgotCi0KLTMuMiBDdXN0b20gOC1iaXQgUHJpbnQgQ2hhcmFjdGVyIEVuY29kaW5ncwkqcG9zdHNjcmlwdC1wcmludC1lbmNvZGluZyoKLQkJCQkJCQkJKkU2MTgqICpFNjE5KgotVG8gdXNlIHlvdXIgb3duIHByaW50IGNoYXJhY3RlciBlbmNvZGluZyB3aGVuIHByaW50aW5nIDgtYml0IGNoYXJhY3RlciBkYXRhCi15b3UgbmVlZCB0byBkZWZpbmUgeW91ciBvd24gUG9zdFNjcmlwdCBmb250IGVuY29kaW5nIHZlY3Rvci4gIERldGFpbHMgb24gaG93Ci10byB0byBkZWZpbmUgYSBmb250IGVuY29kaW5nIHZlY3RvciBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgaGVscCBmaWxlLCBidXQKLXlvdSBjYW4gZmluZCBkZXRhaWxzIGluIHRoZSBQb3N0U2NyaXB0IExhbmd1YWdlIFJlZmVyZW5jZSBNYW51YWwsIDNyZCBFZGl0aW9uLAotcHVibGlzaGVkIGJ5IEFkZGlzb24tV2VzbGV5IGFuZCBhdmFpbGFibGUgaW4gUERGIGZvcm0gYXQKLWh0dHA6Ly93d3cuYWRvYmUuY29tLy4gIFRoZSBmb2xsb3dpbmcgZGVzY3JpYmVzIHdoYXQgeW91IG5lZWQgdG8gZG8gZm9yIFZJTSB0bwotbG9jYXRlIGFuZCB1c2UgeW91ciBwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmcuCi0KLWkuICAgRGVjaWRlIG9uIGEgdW5pcXVlIG5hbWUgZm9yIHlvdXIgZW5jb2RpbmcgdmVjdG9yLCBvbmUgdGhhdCBkb2VzIG5vdCBjbGFzaAotICAgICB3aXRoIGFueSBvZiB0aGUgcmVjb2duaXplZCBvciBzdGFuZGFyZCBlbmNvZGluZyBuYW1lcyB0aGF0IFZJTSB1c2VzIChzZWUKLSAgICAgfGVuY29kaW5nLW5hbWVzfCBmb3IgYSBsaXN0KSwgYW5kIHRoYXQgbm8gb25lIGVsc2UgaXMgbGlrZWx5IHRvIHVzZS4KLWlpLiAgQ29weSAkVklNUlVOVElNRS9wcmludC9sYXRpbjEucHMgdG8gdGhlIHByaW50IHN1YmRpcmVjdG9yeSBpbiB5b3VyCi0gICAgICdydW50aW1lcGF0aCcgYW5kIHJlbmFtZSBpdCB3aXRoIHlvdXIgdW5pcXVlIG5hbWUuCi1paWkuIEVkaXQgeW91ciByZW5hbWVkIGNvcHkgb2YgbGF0aW4xLnBzLCByZXBsYWNpbmcgYWxsIG9jY3VycmVuY2VzIG9mIGxhdGluMQotICAgICB3aXRoIHlvdXIgdW5pcXVlIG5hbWUgKGRvbid0IGZvcmdldCB0aGUgbGluZSBzdGFydGluZyAlJVRpdGxlOiksIGFuZAotICAgICBtb2RpZnkgdGhlIGFycmF5IG9mIGdseXBoIG5hbWVzIHRvIGRlZmluZSB5b3VyIG5ldyBlbmNvZGluZyB2ZWN0b3IuICBUaGUKLSAgICAgYXJyYXkgbXVzdCBoYXZlIGV4YWN0bHkgMjU2IGVudHJpZXMgb3IgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gcHJpbnQhCi1pdi4gIFdpdGhpbiBWSU0sIHNldCAncHJpbnRlbmNvZGluZycgdG8geW91ciB1bmlxdWUgZW5jb2RpbmcgbmFtZSBhbmQgdGhlbgotICAgICBwcmludCB5b3VyIGZpbGUuICBWSU0gd2lsbCBub3cgdXNlIHlvdXIgY3VzdG9tIHByaW50IGNoYXJhY3RlciBlbmNvZGluZy4KLQotVklNIHdpbGwgcmVwb3J0IGFuIGVycm9yIHdpdGggdGhlIHJlc291cmNlIGZpbGUgaWYgeW91IGNoYW5nZSB0aGUgb3JkZXIgb3IKLWNvbnRlbnQgb2YgdGhlIGZpcnN0IDMgbGluZXMsIG90aGVyIHRoYW4gdGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nIG9uIHRoZSBsaW5lCi1zdGFydGluZyAlJVRpdGxlOiBvciB0aGUgdmVyc2lvbiBudW1iZXIgb24gdGhlIGxpbmUgc3RhcnRpbmcgJSVWZXJzaW9uOi4KLQotW1RlY2huaWNhbCBleHBsYW5hdGlvbiBmb3IgdGhvc2UgdGhhdCBrbm93IFBvc3RTY3JpcHQgLSBWSU0gbG9va3MgZm9yIGEgZmlsZQotd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBlbmNvZGluZyBpdCB3aWxsIHVzZSB3aGVuIHByaW50aW5nLiAgVGhlIGZpbGUKLWRlZmluZXMgYSBuZXcgUG9zdFNjcmlwdCBFbmNvZGluZyByZXNvdXJjZSBjYWxsZWQgL1ZJTS1uYW1lLCB3aGVyZSBuYW1lIGlzIHRoZQotcHJpbnQgY2hhcmFjdGVyIGVuY29kaW5nIFZJTSB3aWxsIHVzZS5dCi0KLQotMy4zIFBvc3RTY3JpcHQgUHJpbnRpbmcgVHJvdWJsZXNob290aW5nCQkqcG9zdHNjcmlwdC1wcmludC10cm91YmxlKgotCQkJCQkJCQkJKkU2MjEqCi1Vc3VhbGx5IHRoZSBvbmx5IHNpZ24gb2YgYSBwcm9ibGVtIHdoZW4gcHJpbnRpbmcgd2l0aCBQb3N0U2NyaXB0IGlzIHRoYXQgeW91cgotcHJpbnRvdXQgZG9lcyBub3QgYXBwZWFyLiAgSWYgeW91IGFyZSBsdWNreSB5b3UgbWF5IGdldCBhIHByaW50ZWQgcGFnZSB0aGF0Ci10ZWxscyB5b3UgdGhlIFBvc3RTY3JpcHQgb3BlcmF0b3IgdGhhdCBnZW5lcmF0ZWQgdGhlIGVycm9yIHRoYXQgcHJldmVudGVkIHRoZQotcHJpbnQgam9iIGNvbXBsZXRpbmcuCi0KLVRoZXJlIGFyZSBhIG51bWJlciBvZiBwb3NzaWJsZSBjYXVzZXMgYXMgdG8gd2h5IHRoZSBwcmludGluZyBtYXkgaGF2ZSBmYWlsZWQ6Ci0KLS0gV3JvbmcgdmVyc2lvbiBvZiB0aGUgcHJvbG9nIHJlc291cmNlIGZpbGUuICBUaGUgcHJvbG9nIHJlc291cmNlIGZpbGUKLSAgY29udGFpbnMgc29tZSBQb3N0U2NyaXB0IHRoYXQgVklNIG5lZWRzIHRvIGJlIGFibGUgdG8gcHJpbnQuICBFYWNoIHZlcnNpb24KLSAgb2YgVklNIG5lZWRzIG9uZSBwYXJ0aWN1bGFyIHZlcnNpb24uICBNYWtlIHN1cmUgeW91IGhhdmUgY29ycmVjdGx5IGluc3RhbGxlZAotICB0aGUgcnVudGltZSBmaWxlcywgYW5kIGRvbid0IGhhdmUgYW55IG9sZCB2ZXJzaW9ucyBvZiBhIGZpbGUgY2FsbGVkIHByb2xvZwotICBpbiB0aGUgcHJpbnQgZGlyZWN0b3J5IGluIHlvdXIgJ3J1bnRpbWVwYXRoJyBkaXJlY3RvcnkuCi0KLS0gUGFwZXIgc2l6ZS4gIFNvbWUgUG9zdFNjcmlwdCBwcmludGVycyB3aWxsIGFib3J0IHByaW50aW5nIGEgZmlsZSBpZiB0aGV5IGRvCi0gIG5vdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgcGFwZXIgc2l6ZS4gIEJ5IGRlZmF1bHQgVklNIHVzZXMgQTQgcGFwZXIuICBGaW5kCi0gIG91dCB3aGF0IHNpemUgcGFwZXIgeW91ciBwcmludGVyIG5vcm1hbGx5IHVzZXMgYW5kIHNldCB0aGUgYXBwcm9wcmlhdGUgcGFwZXIKLSAgc2l6ZSB3aXRoICdwcmludG9wdGlvbnMnLiAgSWYgeW91IGNhbm5vdCBmaW5kIHRoZSBuYW1lIG9mIHRoZSBwYXBlciB1c2VkLAotICBtZWFzdXJlIGEgc2hlZXQgYW5kIGNvbXBhcmUgaXQgd2l0aCB0aGUgdGFibGUgb2Ygc3VwcG9ydGVkIHBhcGVyIHNpemVzIGxpc3RlZAotICBmb3IgJ3ByaW50b3B0aW9ucycsIHVzaW5nIHRoZSBwYXBlciB0aGF0IGlzIGNsb3Nlc3QgaW4gYm90aCB3aWR0aCBBTkQgaGVpZ2h0LgotICBOb3RlOiBUaGUgZGltZW5zaW9ucyBvZiBhY3R1YWwgcGFwZXIgbWF5IHZhcnkgc2xpZ2h0bHkgZnJvbSB0aGUgb25lcyBsaXN0ZWQuCi0gIElmIHRoZXJlIGlzIG5vIHBhcGVyIGxpc3RlZCBjbG9zZSBlbm91Z2gsIHRoZW4geW91IG1heSB3YW50IHRvIHRyeSBwc3Jlc2l6ZQotICBmcm9tIFBTVXRpbHMsIGRpc2N1c3NlZCBiZWxvdy4KLQotLSBUd28tc2lkZWQgcHJpbnRpbmcgKGR1cGxleCkuICBOb3JtYWxseSBhIFBvc3RTY3JpcHQgcHJpbnRlciB0aGF0IGRvZXMgbm90Ci0gIHN1cHBvcnQgdHdvLXNpZGVkIHByaW50aW5nIHdpbGwgaWdub3JlIGFueSByZXF1ZXN0IHRvIGRvIGl0LiAgSG93ZXZlciwgc29tZQotICBwcmludGVycyBtYXkgYWJvcnQgdGhlIGpvYiBhbHRvZ2V0aGVyLiAgVHJ5IHByaW50aW5nIHdpdGggZHVwbGV4IHR1cm5lZCBvZmYuCi0gIE5vdGU6IER1cGxleCBwcmludHMgY2FuIGJlIGFjaGlldmVkIG1hbnVhbGx5IHVzaW5nIFBTIHV0aWxzIC0gc2VlIGJlbG93LgotCi0tIENvbGxhdGVkIHByaW50aW5nLiAgQXMgd2l0aCBEdXBsZXggcHJpbnRpbmcsIG1vc3QgUG9zdFNjcmlwdCBwcmludGVycyB0aGF0Ci0gIGRvIG5vdCBzdXBwb3J0IGNvbGxhdGluZyBwcmludG91dHMgd2lsbCBpZ25vcmUgYSByZXF1ZXN0IHRvIGRvIHNvLiAgU29tZSBtYXkKLSAgbm90LiAgVHJ5IHByaW50aW5nIHdpdGggY29sbGF0aW9uIHR1cm5lZCBvZmYuCi0KLS0gU3ludGF4IGhpZ2hsaWdodGluZy4gIFNvbWUgcHJpbnQgbWFuYWdlbWVudCBjb2RlIG1heSBwcmV2ZW50IHRoZSBnZW5lcmF0ZWQKLSAgUG9zdFNjcmlwdCBmaWxlIGZyb20gYmVpbmcgcHJpbnRlZCBvbiBhIGJsYWNrIGFuZCB3aGl0ZSBwcmludGVyIHdoZW4gc3ludGF4Ci0gIGhpZ2hsaWdodGluZyBpcyB0dXJuZWQgb24sIGV2ZW4gaWYgc29saWQgYmxhY2sgaXMgdGhlIG9ubHkgY29sb3IgdXNlZC4gIFRyeQotICBwcmludGluZyB3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcgdHVybmVkIG9mZi4KLQotQSBzYWZlIHByaW50b3B0aW9ucyBzZXR0aW5nIHRvIHRyeSBpczogPgotCi0JOnNldCBwcmludG9wdGlvbnM9cGFwZXI6QTQsZHVwbGV4Om9mZixjb2xsYXRlOm4sc3ludGF4Om4KLQotUmVwbGFjZSAiQTQiIHdpdGggdGhlIHBhcGVyIHNpemUgdGhhdCBiZXN0IG1hdGNoZXMgeW91ciBwcmludGVyIHBhcGVyLgotCi0KLTMuNCBQb3N0U2NyaXB0IFV0aWxpdGllcwkJCSpwb3N0c2NyaXB0LXByaW50LXV0aWwqCi0KLTMuNC4xIEdob3N0c2NyaXB0Ci0KLUdob3N0c2NyaXB0IGlzIGEgUG9zdFNjcmlwdCBhbmQgUERGIGludGVycHJldGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheQotYW5kIHByaW50IG9uIG5vbi1Qb3N0U2NyaXB0IHByaW50ZXJzIFBvc3RTY3JpcHQgYW5kIFBERiBmaWxlcy4gIEl0IGNhbiBhbHNvCi1nZW5lcmF0ZSBQREYgZmlsZXMgZnJvbSBQb3N0U2NyaXB0LgotCi1HaG9zdHNjcmlwdCB3aWxsIHJ1biBvbiBhIHdpZGUgdmFyaWV0eSBvZiBwbGF0Zm9ybXMuCi0KLVRoZXJlIGFyZSB0aHJlZSBhdmFpbGFibGUgdmVyc2lvbnM6Ci0KLS0gQUZQTCBHaG9zdHNjcmlwdCAoZm9ybWVybHkgQWxhZGRpbiBHaG9zdHNjcmlwdCkgd2hpY2ggaXMgZnJlZSBmb3IKLSAgbm9uLWNvbW1lcmNpYWwgdXNlLiAgSXQgY2FuIGJlIG9idGFpbmVkIGZyb206Ci0KLSAgICBodHRwOi8vd3d3LmNzLndpc2MuZWR1L35naG9zdC8KLQotLSBHTlUgR2hvc3RzY3JpcHQgd2hpY2ggaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEl0Ci0gIGNhbiBiZSBvYnRhaW5lZCBmcm9tOgotCi0gICAgZnRwOi8vbWlycm9yLmNzLndpc2MuZWR1L3B1Yi9taXJyb3JzL2dob3N0L2dudS8KLQotLSBBIGNvbW1lcmNpYWwgdmVyc2lvbiBmb3IgaW5jbHVzaW9uIGluIGNvbW1lcmNpYWwgcHJvZHVjdHMuCi0KLUFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gR2hvc3RzY3JpcHQgY2FuIGFsc28gYmUgZm91bmQgYXQ6Ci0KLSAgaHR0cDovL3d3dy5naG9zdHNjcmlwdC5jb20vCi0KLVN1cHBvcnQgZm9yIGEgbnVtYmVyIG9mIG5vbiBQb3N0U2NyaXB0IHByaW50ZXJzIGlzIHByb3ZpZGVkIGluIHRoZQotZGlzdHJpYnV0aW9uIGFzIHN0YW5kYXJkLCBidXQgaWYgeW91IGNhbm5vdCBmaW5kIHN1cHBvcnQgZm9yIHlvdXIgcHJpbnRlcgotY2hlY2sgdGhlIEdob3N0c2NyaXB0IHNpdGUgZm9yIG90aGVyIHByaW50ZXJzIG5vdCBpbmNsdWRlZCBieSBkZWZhdWx0LgotCi0KLTMuNC4yIEdob3N0c2NyaXB0IFByZXZpZXdlcnMuCi0KLVRoZSBpbnRlcmZhY2UgdG8gR2hvc3RzY3JpcHQgaXMgdmVyeSBwcmltaXRpdmUgc28gYSBudW1iZXIgb2YgZ3JhcGhpY2FsIGZyb250Ci1lbmRzIGhhdmUgYmVlbiBjcmVhdGVkLiAgVGhlc2UgYWxsb3cgZWFzaWVyIFBvc3RTY3JpcHQgZmlsZSBzZWxlY3Rpb24sCi1wcmV2aWV3aW5nIGF0IGRpZmZlcmVudCB6b29tIGxldmVscywgYW5kIHByaW50aW5nLiAgQ2hlY2sgc3VwcGxpZWQKLWRvY3VtZW50YXRpb24gZm9yIGZ1bGwgZGV0YWlscy4KLQotWDExCi0KLS0gR2hvc3R2aWV3LiAgT2J0YWluYWJsZSBmcm9tOgotCi0gICAgaHR0cDovL3d3dy5jcy53aXNjLmVkdS9+Z2hvc3QvZ3YvCi0KLS0gZ3YuICBEZXJpdmVkIGZyb20gR2hvc3R2aWV3LiAgT2J0YWluYWJsZSBmcm9tOgotCi0gICAgaHR0cDovL3d3d3RoZXAucGh5c2lrLnVuaS1tYWluei5kZS9+cGxhc3MvZ3YvCi0KLSAgQ29waWVzIChwb3NzaWJseSBub3QgdGhlIG1vc3QgcmVjZW50KSBjYW4gYmUgZm91bmQgYXQ6Ci0KLSAgICBodHRwOi8vd3d3LmNzLndpc2MuZWR1L35naG9zdC9ndi8KLQotT3BlblZNUwotCi0tIElzIGFwcGFyZW50bHkgc3VwcG9ydGVkIGluIHRoZSBtYWluIGNvZGUgbm93ICh1bnRlc3RlZCkuICBTZWU6Ci0KLSAgICBodHRwOi8vd3d3dGhlcC5waHlzaWsudW5pLW1haW56LmRlL35wbGFzcy9ndi8KLQotV2luZG93cyBhbmQgT1MvMgotCi0tIEdTdmlldy4gIE9idGFpbmFibGUgZnJvbToKLQotICAgIGh0dHA6Ly93d3cuY3Mud2lzYy5lZHUvfmdob3N0L2dzdmlldy8KLQotRE9TCi0KLS0gcHNfdmlldy4gIE9idGFpbmFibGUgZnJvbToKLQotICAgIGZ0cDovL2Z0cC5wZy5nZGEucGwvcHViL1RlWC9zdXBwb3J0L3BzX3ZpZXcvCi0gICAgZnRwOi8vZnRwLmRhbnRlLmRlL3RleC1hcmNoaXZlL3N1cHBvcnQvcHNfdmlldy8KLQotTGludXgKLQotLSBHU3ZpZXcuICBMaW51eCB2ZXJzaW9uIG9mIHRoZSBwb3B1bGFyIFdpbmRvd3MgYW5kIE9TLzIgcHJldmlld2VyLgotICBPYnRhaW5hYmxlIGZyb206Ci0KLSAgICBodHRwOi8vd3d3LmNzLndpc2MuZWR1L35naG9zdC9nc3ZpZXcvCi0KLS0gQk1WLiAgRGlmZmVyZW50IGZyb20gR2hvc3R2aWV3IGFuZCBndiBpbiB0aGF0IGl0IGRvZXNuJ3QgdXNlIFggYnV0IHN2Z2FsaWIuCi0gIE9idGFpbmFibGUgZnJvbToKLQotICAgIGZ0cDovL3N1bnNpdGUudW5jLmVkdS9wdWIvTGludXgvYXBwcy9ncmFwaGljcy92aWV3ZXJzL3N2Z2EvYm12LTEuMi50Z3oKLQotCi0zLjQuMyBQU1V0aWxzCi0KLVBTVXRpbHMgaXMgYSBjb2xsZWN0aW9uIG9mIHV0aWxpdHkgcHJvZ3JhbXMgZm9yIG1hbmlwdWxhdGluZyBQb3N0U2NyaXB0Ci1kb2N1bWVudHMuICBCaW5hcnkgZGlzdHJpYnV0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciBtYW55IHBsYXRmb3JtcywgYXMgd2VsbCBhcwotdGhlIGZ1bGwgc291cmNlLiAgUFNVdGlscyBjYW4gYmUgZm91bmQgYXQ6Ci0KLSAgaHR0cDovL2tuYWNrZXJlZC5vcmcvYW5ndXMvcHN1dGlscwotCi1UaGUgdXRpbGl0aWVzIG9mIGludGVyZXN0IGluY2x1ZGU6Ci0KLS0gcHNudXAuICAgICBDb252ZXJ0IFBTIGZpbGVzIGZvciBOLXVwIHByaW50aW5nLgotLSBwc3NlbGVjdC4gIFNlbGVjdCBwYWdlIHJhbmdlIGFuZCBvcmRlciBvZiBwcmludGluZy4KLS0gcHNyZXNpemUuICBDaGFuZ2UgdGhlIHBhZ2Ugc2l6ZS4KLS0gcHNib29rLiAgICBSZW9yZGVyIGFuZCBsYXkgb3V0IHBhZ2VzIHJlYWR5IGZvciBtYWtpbmcgYSBib29rLgotCi1UaGUgb3V0cHV0IG9mIG9uZSBwcm9ncmFtIGNhbiBiZSB1c2VkIGFzIHRoZSBpbnB1dCB0byB0aGUgbmV4dCwgYWxsb3dpbmcgZm9yCi1jb21wbGV4IHByaW50IGRvY3VtZW50IGNyZWF0aW9uLgotCi0KLU4tVVAgUFJJTlRJTkcKLQotVGhlIHBzbnVwIHV0aWxpdHkgdGFrZXMgYW4gZXhpc3RpbmcgUG9zdFNjcmlwdCBmaWxlIGdlbmVyYXRlZCBmcm9tIFZJTSBhbmQKLWNvbnZlcnQgaXQgdG8gYW4gbi11cCB2ZXJzaW9uLiAgVGhlIHNpbXBsZXN0IHdheSB0byBjcmVhdGUgYSAyLXVwIHByaW50b3V0IGlzCi10byBmaXJzdCBjcmVhdGUgYSBQb3N0U2NyaXB0IGZpbGUgd2l0aDogPgotCi0JOmhhcmRjb3B5ID4gdGVzdC5wcwotCi1UaGVuIG9uIHlvdXIgY29tbWFuZCBsaW5lIGV4ZWN1dGU6ID4KLQotCXBzbnVwIC1uIDIgdGVzdC5wcyBmaW5hbC5wcwotCi1Ob3RlOiBZb3UgbWF5IGdldCB3YXJuaW5ncyBmcm9tIHNvbWUgR2hvc3RzY3JpcHQgcHJldmlld2VycyBmb3IgZmlsZXMgcHJvZHVjZWQKLWJ5IHBzbnVwIC0gdGhlc2UgbWF5IHNhZmVseSBiZSBpZ25vcmVkLgotCi1GaW5hbGx5IHByaW50IHRoZSBmaWxlIGZpbmFsLnBzIHRvIHlvdXIgUG9zdFNjcmlwdCBwcmludGVyIHdpdGggeW91cgotcGxhdGZvcm0ncyBwcmludCBjb21tYW5kLiAgKFlvdSB3aWxsIG5lZWQgdG8gZGVsZXRlIHRoZSB0d28gUG9zdFNjcmlwdCBmaWxlcwotYWZ0ZXJ3YXJkcyB5b3Vyc2VsZi4pICAncHJpbnRleHByJyBjb3VsZCBiZSBtb2RpZmllZCB0byBwZXJmb3JtIHRoaXMgZXh0cmEKLXN0ZXAgYmVmb3JlIHByaW50aW5nLgotCi0KLUFMVEVSTkFURSBEVVBMRVggUFJJTlRJTkcKLQotSXQgaXMgcG9zc2libGUgdG8gYWNoaWV2ZSBhIHBvb3IgbWFuJ3MgdmVyc2lvbiBvZiBkdXBsZXggcHJpbnRpbmcgdXNpbmcgdGhlIFBTCi11dGlsaXR5IHBzc2VsZWN0LiAgVGhpcyB1dGlsaXR5IGhhcyBvcHRpb25zIC1lIGFuZCAtbyBmb3IgcHJpbnRpbmcganVzdCB0aGUKLWV2ZW4gb3Igb2RkIHBhZ2VzIG9mIGEgUFMgZmlsZSByZXNwZWN0aXZlbHkuCi0KLUZpcnN0IGdlbmVyYXRlIGEgUFMgZmlsZSB3aXRoIHRoZSAnaGFyZGNvcHknIGNvbW1hbmQsIHRoZW4gZ2VuZXJhdGUgYSBuZXcKLWZpbGVzIHdpdGggYWxsIHRoZSBvZGQgYW5kIGV2ZW4gbnVtYmVyZWQgcGFnZXMgd2l0aDogPgotCi0JcHNzZWxlY3QgLW8gdGVzdC5wcyBvZGQucHMKLQlwc3NlbGVjdCAtZSB0ZXN0LnBzIGV2ZW4ucHMKLQotTmV4dCBwcmludCBvZGQucHMgd2l0aCB5b3VyIHBsYXRmb3JtJ3Mgbm9ybWFsIHByaW50IGNvbW1hbmQuICBUaGVuIHRha2UgdGhlCi1wcmludCBvdXRwdXQsIHR1cm4gaXQgb3ZlciBhbmQgcGxhY2UgaXQgYmFjayBpbiB0aGUgcGFwZXIgZmVlZGVyLiAgTm93IHByaW50Ci1ldmVuLnBzIHdpdGggeW91ciBwbGF0Zm9ybSdzIHByaW50IGNvbW1hbmQuICBBbGwgdGhlIGV2ZW4gcGFnZXMgc2hvdWxkIG5vdwotYXBwZWFyIG9uIHRoZSBiYWNrIG9mIHRoZSBvZGQgcGFnZXMuCi0KLVRoZXJlIGEgY291cGxlIG9mIHBvaW50cyB0byBiZWFyIGluIG1pbmQ6Ci0KLTEuIFBvc2l0aW9uIG9mIHRoZSBmaXJzdCBwYWdlLiAgSWYgdGhlIGZpcnN0IHBhZ2UgaXMgb24gdG9wIG9mIHRoZSBwcmludG91dAotICAgd2hlbiBwcmludGluZyB0aGUgb2RkIHBhZ2VzIHRoZW4geW91IG5lZWQgdG8gcmV2ZXJzZSB0aGUgb3JkZXIgdGhhdCB0aGUgb2RkCi0gICBwYWdlcyBhcmUgcHJpbnRlZC4gIFRoaXMgY2FuIGJlIGRvbmUgd2l0aCB0aGUgLXIgb3B0aW9uIHRvIHBzc2VsZWN0LiAgVGhpcwotICAgd2lsbCBlbnN1cmUgcGFnZSAyIGlzIHByaW50ZWQgb24gdGhlIGJhY2sgb2YgcGFnZSAxLgotICAgTm90ZTogaXQgaXMgYmV0dGVyIHRvIHJldmVyc2UgdGhlIG9kZCBudW1iZXJlZCBwYWdlcyByYXRoZXIgdGhhbiB0aGUgZXZlbgotICAgbnVtYmVyZWQgaW4gY2FzZSB0aGVyZSBhcmUgYW4gb2RkIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgb3JpZ2luYWwgUFMgZmlsZS4KLQotMi4gUGFwZXIgZmxpcHBpbmcuICBXaGVuIHR1cm5pbmcgb3ZlciB0aGUgcGFwZXIgd2l0aCB0aGUgb2RkIHBhZ2VzIHByaW50ZWQgb24KLSAgIHRoZW0geW91IG1heSBoYXZlIHRvIGVpdGhlciBmbGlwIHRoZW0gaG9yaXpvbnRhbGx5IChhbG9uZyB0aGUgbG9uZyBlZGdlKSBvcgotICAgdmVydGljYWxseSAoYWxvbmcgdGhlIHNob3J0IGVkZ2UpLCBhcyB3ZWxsIGFzIHBvc3NpYmx5IHJvdGF0aW5nIHRoZW0gMTgwCi0gICBkZWdyZWVzLiAgQWxsIHRoaXMgZGVwZW5kcyBvbiB0aGUgcHJpbnRlciAtIGl0IHdpbGwgYmUgbW9yZSBvYnZpb3VzIGZvcgotICAgZGVza3RvcCBpbmsgamV0cyB0aGFuIGZvciBzbWFsbCBvZmZpY2UgbGFzZXIgcHJpbnRlcnMgd2hlcmUgdGhlIHBhcGVyIHBhdGgKLSAgIGlzIGhpZGRlbiBmcm9tIHZpZXcuCi0KLQotMy41IEZvcm1mZWVkIENoYXJhY3RlcnMJCQkJCSpwcmludGluZy1mb3JtZmVlZCoKLQotQnkgZGVmYXVsdCBWSU0gZG9lcyBub3QgZG8gYW55IHNwZWNpYWwgcHJvY2Vzc2luZyBvZiB8Zm9ybWZlZWR8IGNvbnRyb2wKLWNoYXJhY3RlcnMuICBTZXR0aW5nIHRoZSAncHJpbnRvcHRpb25zJyBmb3JtZmVlZCBpdGVtIHdpbGwgbWFrZSBWSU0gcmVjb2duaXplCi1mb3JtZmVlZCBjaGFyYWN0ZXJzIGFuZCBjb250aW51ZSBwcmludGluZyB0aGUgY3VycmVudCBsaW5lIGF0IHRoZSBiZWdpbm5pbmcKLW9mIHRoZSBmaXJzdCBsaW5lIG9uIGEgbmV3IHBhZ2UuICBUaGUgdXNlIG9mIGZvcm1mZWVkIGNoYXJhY3RlcnMgcHJvdmlkZXMKLXJ1ZGltZW50YXJ5IHByaW50IGNvbnRyb2wgYnV0IHRoZXJlIGFyZSBjZXJ0YWluIHRoaW5ncyB0byBiZSBhd2FyZSBvZi4KLQotVklNIHdpbGwgYWx3YXlzIHN0YXJ0IHByaW50aW5nIGEgbGluZSAoaW5jbHVkaW5nIGEgbGluZSBudW1iZXIgaWYgZW5hYmxlZCkKLWNvbnRhaW5pbmcgYSBmb3JtZmVlZCBjaGFyYWN0ZXIsIGV2ZW4gaWYgaXQgaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvbiB0aGUKLWxpbmUuICBUaGlzIG1lYW5zIGlmIGEgbGluZSBzdGFydGluZyB3aXRoIGEgZm9ybWZlZWQgY2hhcmFjdGVyIGlzIHRoZSBmaXJzdAotbGluZSBvZiBhIHBhZ2UgdGhlbiBWSU0gd2lsbCBwcmludCBhIGJsYW5rIHBhZ2UuCi0KLVNpbmNlIHRoZSBsaW5lIG51bWJlciBpcyBwcmludGVkIGF0IHRoZSBzdGFydCBvZiBwcmludGluZyB0aGUgbGluZSBjb250YWluaW5nCi10aGUgZm9ybWZlZWQgY2hhcmFjdGVyLCB0aGUgcmVtYWluZGVyIG9mIHRoZSBsaW5lIHByaW50ZWQgb24gdGhlIG5ldyBwYWdlCi13aWxsIG5vdCBoYXZlIGEgbGluZSBudW1iZXIgcHJpbnRlZCBmb3IgaXQgKGluIHRoZSBzYW1lIHdheSBhcyB0aGUgd3JhcHBlZAotbGluZXMgb2YgYSBsb25nIGxpbmUgd2hlbiB3cmFwIGluICdwcmludG9wdGlvbnMnIGlzIGVuYWJsZWQpLgotCi1JZiB0aGUgZm9ybWZlZWQgY2hhcmFjdGVyIGlzIHRoZSBsYXN0IGNoYXJhY3RlciBvbiBhIGxpbmUsIHRoZW4gcHJpbnRpbmcgd2lsbAotY29udGludWUgb24gdGhlIHNlY29uZCBsaW5lIG9mIHRoZSBuZXcgcGFnZSwgbm90IHRoZSBmaXJzdC4gIFRoaXMgaXMgZHVlIHRvCi1WSU0gcHJvY2Vzc2luZyB0aGUgZW5kIG9mIHRoZSBsaW5lIGFmdGVyIHRoZSBmb3JtZmVlZCBjaGFyYWN0ZXIgYW5kIG1vdmluZwotZG93biBhIGxpbmUgdG8gY29udGludWUgcHJpbnRpbmcuCi0KLUR1ZSB0byB0aGUgcG9pbnRzIG1hZGUgYWJvdmUgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB3aGVuIGZvcm1mZWVkIGNoYXJhY3RlcgotcHJvY2Vzc2luZyBpcyBlbmFibGVkLCBwcmludGluZyBvZiBsaW5lIG51bWJlcnMgaXMgZGlzYWJsZWQsIGFuZCB0aGF0IGZvcm0KLWZlZWQgY2hhcmFjdGVycyBhcmUgbm90IHRoZSBsYXN0IGNoYXJhY3RlciBvbiBhIGxpbmUuICBFdmVuIHRoZW4geW91IG1heSBuZWVkCi10byBhZGp1c3QgdGhlIG51bWJlciBvZiBsaW5lcyBiZWZvcmUgYSBmb3JtZmVlZCBjaGFyYWN0ZXIgdG8gcHJldmVudAotYWNjaWRlbnRhbCBibGFuayBwYWdlcy4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiA0LiBVc2luZyBWaW0gbGlrZSBsZXNzIG9yIG1vcmUJCQkJCSpsZXNzKgogCiBJZiB5b3UgdXNlIHRoZSBsZXNzIG9yIG1vcmUgcHJvZ3JhbSB0byB2aWV3IGEgZmlsZSwgeW91IGRvbid0IGdldCBzeW50YXgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3ZlcnNpb243LnR4dCBiL3J1bnRpbWUvZG9jL3ZlcnNpb243LnR4dAppbmRleCA4YWM5NmI3Li45NmYyOGMzIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy92ZXJzaW9uNy50eHQKKysrIGIvcnVudGltZS9kb2MvdmVyc2lvbjcudHh0CkBAIC03OSw2ICs3OSwxMyBAQAogVGhlIHw6bXpzY2hlbWV8IGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSBNelNjaGVtZSBjb21tYW5kcy4KIFRoZSB8Om16ZmlsZXwgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBleGVjdXRlIGFuIE16U2NoZW1lIHNjcmlwdCBmaWxlLgogCitQcmludGluZyBtdWx0aS1ieXRlIHRleHQJCQkJKm5ldy1wcmludC1tdWx0aS1ieXRlKgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB8OmhhcmRjb3B5fCBjb21tYW5kIG5vdyBzdXBwb3J0cyBwcmludGluZyBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCitUaGUgJ3ByaW50bWJjaGFyc2V0JyBhbmQgJ3ByaW50bWJmb250JyBvcHRpb25zIGFyZSB1c2VkIGZvciB0aGlzLgorQWxzbyBzZWUgfHBvc3RzY3JpcHQtY2prLXByaW50aW5nfC4gIChNaWtlIFdpbGxpYW1zKQorCiAKIFZhcmlvdXMgbmV3IGl0ZW1zCQkJCQkqbmV3LWl0ZW1zLTcqCiAtLS0tLS0tLS0tLS0tLS0tLQpAQCAtOTgsMjcgKzEwNSwzMSBAQAogJ251bWJlcndpZHRoJwkJTWluaW1hbCB3aWR0aCBvZiB0aGUgc3BhY2UgdXNlZCBmb3IgdGhlICdudW1iZXInCiAJCQlvcHRpb24uIChFbW1hbnVlbCBSZW5pZXJpcykKICdtenF1YW50dW0nCQlUaW1lIGluIG1zZWMgdG8gc2NoZWR1bGUgTXpTY2hlbWUgdGhyZWFkcy4KKydwcmludG1iY2hhcnNldCcJQ0pLIGNoYXJhY3RlciBzZXQgdG8gYmUgdXNlZCBmb3IgOmhhcmRjb3B5CisncHJpbnRtYmZvbnQnCQlmb250IG5hbWVzIHRvIGJlIHVzZWQgZm9yIENKSyBvdXRwdXQgb2YgOmhhcmRjb3B5CiAKIAogRXggY29tbWFuZHM6IH4KIAogV2luMzI6IFRoZSAiOndpbnBvcyIgY29tbWFuZCBub3cgYWxzbyB3b3JrcyBpbiB0aGUgY29uc29sZS4gKFZpcGluIEFyYXZpbmQpCiAKLTpzdGFydHJlcGxhY2UJCVN0YXJ0IFJlcGxhY2UgbW9kZS4gKENoYXJsZXMgQ2FtcGJlbGwpCit8OnN0YXJ0cmVwbGFjZXwJCVN0YXJ0IFJlcGxhY2UgbW9kZS4gKENoYXJsZXMgQ2FtcGJlbGwpCiAKLTowZmlsZQkJCVJlbW92ZXMgdGhlIG5hbWUgb2YgdGhlIGJ1ZmZlci4gKENoYXJsZXMgQ2FtcGJlbGwpCit8OjBmaWxlfAkJUmVtb3ZlcyB0aGUgbmFtZSBvZiB0aGUgYnVmZmVyLiAoQ2hhcmxlcyBDYW1wYmVsbCkKIAogCiBOZXcgZnVuY3Rpb25zOiB+CiAKK3RyKGV4cHIsIGZyb20sIHRvKQl8dHIoKXwgVHJhbnNsYXRlIGNoYXJhY3RlcnMuIChSb24gQWFyb24pCisKIAogTmV3IGF1dG9jb21tYW5kIGV2ZW50czogfgogCi1JbnNlcnRFbnRlcgkJc3RhcnRpbmcgSW5zZXJ0IG9yIFJlcGxhY2UgbW9kZQotSW5zZXJ0Q2hhbmdlCQlnb2luZyBmcm9tIEluc2VydCB0byBSZXBsYWNlIG1vZGUgb3IgYmFjawotSW5zZXJ0TGVhdmUJCWxlYXZpbmcgSW5zZXJ0IG9yIFJlcGxhY2UgbW9kZQorfEluc2VydEVudGVyfAkJc3RhcnRpbmcgSW5zZXJ0IG9yIFJlcGxhY2UgbW9kZQorfEluc2VydENoYW5nZXwJCWdvaW5nIGZyb20gSW5zZXJ0IHRvIFJlcGxhY2UgbW9kZSBvciBiYWNrCit8SW5zZXJ0TGVhdmV8CQlsZWF2aW5nIEluc2VydCBvciBSZXBsYWNlIG1vZGUKIAotQ29sb3JTY2hlbWUJCWFmdGVyIGxvYWRpbmcgYSBjb2xvciBzY2hlbWUKK3xDb2xvclNjaGVtZXwJCWFmdGVyIGxvYWRpbmcgYSBjb2xvciBzY2hlbWUKIAogCiBOZXcgU3ludGF4L0luZGVudC9GVHBsdWdpbiBmaWxlczogfgpAQCAtMTQzLDYgKzE1NCw4IEBACiAKICI6aGVscGdyZXAiIGFjY2VwdHMgYSBsYW5ndWFnZSBzcGVjaWZpZXIgYWZ0ZXIgdGhlIHBhdHRlcm46ICJwYXRAaXQiLgogCitNb3ZlIHRoZSBoZWxwIGZvciBwcmludGluZyB0byBhIHNlcGFyYXRlIGhlbHAgZmlsZS4gIEl0J3MgcXVpdGUgYSBsb3Qgbm93LgorCiAiOmJyZWFrYWRkIGhlcmUiIGFuZCAiOmJyZWFrZGVsIGhlcmUiIGNhbiBiZSB1c2VkIHRvIHNldCBvciBkZWxldGUgYQogYnJlYWtwb2ludCBhdCB0aGUgY3Vyc29yLgogCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy92aW10dXRvci5tYW4gYi9ydW50aW1lL2RvYy92aW10dXRvci5tYW4KaW5kZXggYzM2YjFjMS4uOGJjNGE4MCAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvdmltdHV0b3IubWFuCisrKyBiL3J1bnRpbWUvZG9jL3ZpbXR1dG9yLm1hbgpAQCAtMSw5ICsxLDcgQEAKK1ZJTVRVVE9SKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSU1UVVRPUigxKQogCiAKIAotVklNVFVUT1IoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVklNVFVUT1IoMSkKLQotCiBOQU1FCiAgICAgICAgdmltdHV0b3IgLSB0aGUgVmltIHR1dG9yCiAKQEAgLTExLDE4ICs5LDE3IEBACiAgICAgICAgdmltdHV0b3IgW2xhbmd1YWdlXQogCiBERVNDUklQVElPTgotICAgICAgIFZpbXR1dG9yICBzdGFydHMgIHRoZSBWaW0gdHV0b3IuICBJdCBjb3BpZXMgdGhlIHR1dG9yIGZpbGUKLSAgICAgICBmaXJzdCwgc28gdGhhdCBpdCBjYW4gYmUgIG1vZGlmaWVkICB3aXRob3V0ICBjaGFuZ2luZyAgdGhlCi0gICAgICAgb3JpZ2luYWwgZmlsZS4KKyAgICAgICBWaW10dXRvciBzdGFydHMgdGhlIFZpbSB0dXRvci4gIEl0IGNvcGllcyB0aGUgdHV0b3IgZmlsZSBmaXJzdCwgc28gdGhhdAorICAgICAgIGl0IGNhbiBiZSBtb2RpZmllZCB3aXRob3V0IGNoYW5naW5nIHRoZSBvcmlnaW5hbCBmaWxlLgogCi0gICAgICAgVGhlIFZpbXR1dG9yIGlzIHVzZWZ1bCBmb3IgcGVvcGxlIHRoYXQgd2FudCB0byBsZWFybiB0aGVpcgotICAgICAgIGZpcnN0IFZpbSBjb21tYW5kcy4KKyAgICAgICBUaGUgVmltdHV0b3IgaXMgdXNlZnVsIGZvciBwZW9wbGUgdGhhdCB3YW50IHRvIGxlYXJuICB0aGVpciAgZmlyc3QgIFZpbQorICAgICAgIGNvbW1hbmRzLgogCi0gICAgICAgVGhlIG9wdGlvbmFsIFtsYW5ndWFnZV0gYXJndW1lbnQgaXMgdGhlIHR3by1sZXR0ZXIgbmFtZSBvZgotICAgICAgIGEgbGFuZ3VhZ2UsIGxpa2UgIml0IiBvciAiZXMiLiAgSWYgdGhlIFtsYW5ndWFnZV0gYXJndW1lbnQKLSAgICAgICBpcyBtaXNzaW5nLCB0aGUgbGFuZ3VhZ2Ugb2YgdGhlICBjdXJyZW50ICBsb2NhbGUgIHdpbGwgIGJlCi0gICAgICAgdXNlZC4gICBJZiAgYSB0dXRvciBpbiB0aGlzIGxhbmd1YWdlIGlzIGF2YWlsYWJsZSwgaXQgd2lsbAotICAgICAgIGJlIHVzZWQuICBPdGhlcndpc2UgdGhlIEVuZ2xpc2ggdmVyc2lvbiB3aWxsIGJlIHVzZWQuCisgICAgICAgVGhlICBvcHRpb25hbCBbbGFuZ3VhZ2VdIGFyZ3VtZW50IGlzIHRoZSB0d28tbGV0dGVyIG5hbWUgb2YgYSBsYW5ndWFnZSwKKyAgICAgICBsaWtlICJpdCIgb3IgImVzIi4gIElmIHRoZSBbbGFuZ3VhZ2VdIGFyZ3VtZW50IGlzIG1pc3NpbmcsIHRoZSBsYW5ndWFnZQorICAgICAgIG9mICB0aGUgIGN1cnJlbnQgIGxvY2FsZSAgd2lsbCBiZSB1c2VkLiAgSWYgYSB0dXRvciBpbiB0aGlzIGxhbmd1YWdlIGlzCisgICAgICAgYXZhaWxhYmxlLCBpdCB3aWxsIGJlIHVzZWQuICBPdGhlcndpc2UgIHRoZSAgRW5nbGlzaCAgdmVyc2lvbiAgd2lsbCAgYmUKKyAgICAgICB1c2VkLgogCiAgICAgICAgVmltIGlzIGFsd2F5cyBzdGFydGVkIGluIFZpIGNvbXBhdGlibGUgbW9kZS4KIApAQCAtMzEsMzYgKzI4LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgVGhlIFZpbXR1dG9yIHRleHQgZmlsZShzKS4KIAogICAgICAgIC91c3IvbG9jYWwvbGliL3ZpbS90dXRvci90dXRvci52aW0KLSAgICAgICAgICAgICAgICAgICAgICBUaGUgVmltIHNjcmlwdCB1c2VkIHRvICBjb3B5ICB0aGUgIFZpbXR1dG9yCi0gICAgICAgICAgICAgICAgICAgICAgdGV4dCBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgIFRoZSBWaW0gc2NyaXB0IHVzZWQgdG8gY29weSB0aGUgVmltdHV0b3IgdGV4dCBmaWxlLgogCiBBVVRIT1IKLSAgICAgICBUaGUgIFZpbXR1dG9yICB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGZvciBWaSBieSBNaWNoYWVsIEMuCi0gICAgICAgUGllcmNlIGFuZCBSb2JlcnQgSy4gV2FyZSwgQ29sb3JhZG8gU2Nob29sIG9mIE1pbmVzICB1c2luZwotICAgICAgIGlkZWFzICBzdXBwbGllZCAgYnkgIENoYXJsZXMgU21pdGgsIENvbG9yYWRvIFN0YXRlIFVuaXZlci0KLSAgICAgICBzaXR5LiAgRS1tYWlsOiBid2FyZUBtaW5lcy5jb2xvcmFkby5lZHUuCi0gICAgICAgSXQgd2FzIG1vZGlmaWVkIGZvciBWaW0gYnkgQnJhbSBNb29sZW5hYXIuICBGb3IgdGhlICBuYW1lcwotICAgICAgIG9mIHRoZSB0cmFuc2xhdG9ycyBzZWUgdGhlIHR1dG9yIGZpbGVzLgorICAgICAgIFRoZSAgVmltdHV0b3IgIHdhcyAgb3JpZ2luYWxseSAgd3JpdHRlbiBmb3IgVmkgYnkgTWljaGFlbCBDLiBQaWVyY2UgYW5kCisgICAgICAgUm9iZXJ0IEsuIFdhcmUsIENvbG9yYWRvICBTY2hvb2wgIG9mICBNaW5lcyAgdXNpbmcgIGlkZWFzICBzdXBwbGllZCAgYnkKKyAgICAgICBDaGFybGVzICBTbWl0aCwgIENvbG9yYWRvICBTdGF0ZSAgVW5pdmVyc2l0eS4gIEUtbWFpbDogYndhcmVAbWluZXMuY29sLQorICAgICAgIG9yYWRvLmVkdS4KKyAgICAgICBJdCB3YXMgbW9kaWZpZWQgZm9yIFZpbSBieSBCcmFtIE1vb2xlbmFhci4gIEZvciB0aGUgbmFtZXMgb2YgdGhlIHRyYW5zLQorICAgICAgIGxhdG9ycyBzZWUgdGhlIHR1dG9yIGZpbGVzLgogCiBTRUUgQUxTTwogICAgICAgIHZpbSgxKQogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEgQXByaWwgMiAgICAgICAgICAgICAgICAgICAgICAgICAxCi0KLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMSBBcHJpbCAyICAgICAgICAgICAgICAgICAgICAgIFZJTVRVVE9SKDEpCmRpZmYgLS1naXQgYS9ydW50aW1lL2ZpbGV0eXBlLnZpbSBiL3J1bnRpbWUvZmlsZXR5cGUudmltCmluZGV4IDkxOWVmZDcuLjE5NjY5ZmIgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZmlsZXR5cGUudmltCisrKyBiL3J1bnRpbWUvZmlsZXR5cGUudmltCkBAIC0xLDcgKzEsNyBAQAogIiBWaW0gc3VwcG9ydCBmaWxlIHRvIGRldGVjdCBmaWxlIHR5cGVzCiAiCiAiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+Ci0iIExhc3QgQ2hhbmdlOgkyMDA0IEp1bCAwMQorIiBMYXN0IENoYW5nZToJMjAwNCBKdWwgMDYKIAogIiBMaXN0ZW4gdmVyeSBjYXJlZnVsbHksIEkgd2lsbCBzYXkgdGhpcyBvbmx5IG9uY2UKIGlmIGV4aXN0cygiZGlkX2xvYWRfZmlsZXR5cGVzIikKQEAgLTIwNSwxMyArMjA1LDIwIEBACiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi52YnMsKi5kc20sKi5jdGwJCXNldGYgdmIKIAogIiBCYXRjaCBmaWxlIGZvciBNU0RPUy4KLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmJhdCwqLmJ0bSwqLnN5cwkJc2V0ZiBkb3NiYXRjaAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYmF0LCouc3lzCQlzZXRmIGRvc2JhdGNoCiAiICouY21kIGlzIGNsb3NlIHRvIGEgQmF0Y2ggZmlsZSwgYnV0IG9uIE9TLzIgUmV4eCBmaWxlcyBhbHNvIHVzZSAqLmNtZC4KIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmNtZAogCVwgaWYgZ2V0bGluZSgxKSA9fiAnXi9cKicgfCBzZXRmIHJleHggfCBlbHNlIHwgc2V0ZiBkb3NiYXRjaCB8IGVuZGlmCiAKICIgQmF0Y2ggZmlsZSBmb3IgNERPUwotYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYnRtCQkJc2V0ZiBidG0KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmJ0bQkJCWNhbGwgPFNJRD5GVGJ0bSgpCitmdW4hIDxTSUQ+RlRidG0oKQorICBpZiBleGlzdHMoImc6ZG9zYmF0Y2hfc3ludGF4X2Zvcl9idG0iKSAmJiBnOmRvc2JhdGNoX3N5bnRheF9mb3JfYnRtCisgICAgc2V0ZiBkb3NiYXRjaAorICBlbHNlCisgICAgc2V0ZiBidG0KKyAgZW5kaWYKK2VuZGZ1bgogCiAiIEJDIGNhbGN1bGF0b3IKIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmJjCQkJc2V0ZiBiYwpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9hYmFxdXMudmltIGIvcnVudGltZS9mdHBsdWdpbi9hYmFxdXMudmltCmluZGV4IGY2Mzk2MmYuLjE3OTg1YjMgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZnRwbHVnaW4vYWJhcXVzLnZpbQorKysgYi9ydW50aW1lL2Z0cGx1Z2luL2FiYXF1cy52aW0KQEAgLTEsNyArMSw3IEBACiAiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQogIiBMYW5ndWFnZTogICAgIEFiYXF1cyBmaW5pdGUgZWxlbWVudCBpbnB1dCBmaWxlICh3d3cuYWJhcXVzLmNvbSkKICIgTWFpbnRhaW5lcjogICBDYXJsIE9zdGVyd2lzY2ggPG9zdGVyd2lzY2hjQGFzbWUub3JnPgotIiBMYXN0IENoYW5nZTogIDIwMDQgTWF5CisiIExhc3QgQ2hhbmdlOiAgMjAwNCBKdWwgMDYKIAogIiBPbmx5IGRvIHRoaXMgd2hlbiBub3QgZG9uZSB5ZXQgZm9yIHRoaXMgYnVmZmVyCiBpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikgfCBmaW5pc2ggfCBlbmRpZgpAQCAtMjcsNiArMjcsMTAgQEAKICIgUmVtb3ZlIGNoYXJhY3RlcnMgdXAgdG8gdGhlIGZpcnN0ID0gd2hlbiBldmFsdWF0aW5nIGZpbGVuYW1lcwogc2V0bG9jYWwgaW5jbHVkZWV4cHI9c3Vic3RpdHV0ZSh2OmZuYW1lLCcuXFx7LX09JywnJywnJykKIAorIiBSZW1vdmUgY29tbWEgZnJvbSB2YWxpZCBmaWxlbmFtZSBjaGFyYWN0ZXJzIHNpbmNlIGl0IGlzIHVzZWQgdG8KKyIgc2VwYXJhdGUga2V5d29yZCBwYXJhbWV0ZXJzCitzZXRsb2NhbCBpc2ZuYW1lLT0sCisKICIgRGVmaW5lIGZvcm1hdCBvZiBjb21tZW50IGxpbmVzIChzZWUgJ2Zvcm1hdG9wdGlvbnMnIGZvciB1c2VzKQogc2V0bG9jYWwgY29tbWVudHM9OioqCiBzZXRsb2NhbCBjb21tZW50c3RyaW5nPSoqJXMKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vYnRtLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vYnRtLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2RjNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9idG0udmltCkBAIC0wLDAgKzEsMTIgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglCVE0KKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgSnVsIDA2CisKKyIgT25seSBkbyB0aGlzIHdoZW4gbm90IGRvbmUgeWV0IGZvciB0aGlzIGJ1ZmZlcgoraWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpCisgIGZpbmlzaAorZW5kaWYKKworIiBCZWhhdmVzIGp1c3QgbGlrZSBkb3NiYXRjaAorcnVudGltZSEgZnRwbHVnaW4vZG9zYmF0Y2gudmltIGZ0cGx1Z2luL2Rvc2JhdGNoXyoudmltIGZ0cGx1Z2luL2Rvc2JhdGNoLyoudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL2NvbmZpZy52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL2NvbmZpZy52aW0KaW5kZXggZTRlMWE0MS4uNDI3ZDBlZCAxMDA2NDQKLS0tIGEvcnVudGltZS9mdHBsdWdpbi9jb25maWcudmltCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vY29uZmlnLnZpbQpAQCAtMSw3ICsxLDcgQEAKICIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCiAiIExhbmd1YWdlOgljb25maWcKICIgTWFpbnRhaW5lcjoJRGFuIFNoYXJwIDxkd3NoYXJwIGF0IGhvdG1haWwgZG90IGNvbT4KLSIgTGFzdCBDaGFuZ2VkOiAyMDAzIFNlcCAyOQorIiBMYXN0IENoYW5nZWQ6IDIwMDQgSnVsIDA4CiAiIFVSTDoJCWh0dHA6Ly9teXdlYnBhZ2UubmV0c2NhcGUuY29tL3NoYXJwcGVvcGxlL3ZpbS9mdHBsdWdpbgogCiBpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikgfCBmaW5pc2ggfCBlbmRpZgpAQCAtMzAsNyArMzAsNyBAQAogCiAiIENoYW5nZSB0aGUgOmJyb3dzZSBlIGZpbHRlciB0byBwcmltYXJpbHkgc2hvdyBjb25maWd1cmUtcmVsYXRlZCBmaWxlcy4KIGlmIGhhcygiZ3VpX3dpbjMyIikKLSAgICBsZXQgIGI6YnJvd3NlZmlsdGVyPSJDb25maWd1cmUgU2NyaXB0cyAoY29uZmlndXJlLiopXHRjb25maWd1cmUuKlxuIiAuCisgICAgbGV0ICBiOmJyb3dzZWZpbHRlcj0iQ29uZmlndXJlIFNjcmlwdHMgKGNvbmZpZ3VyZS4qLCBjb25maWcuKilcdGNvbmZpZ3VyZSo7Y29uZmlnLipcbiIgLgogCQlcCXM6YnJvd3NlZmlsdGVyCiBlbmRpZgogCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL2Rvc2JhdGNoLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vZG9zYmF0Y2gudmltCmluZGV4IDM5YTgzYzQuLjkxZDU3ZDkgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZnRwbHVnaW4vZG9zYmF0Y2gudmltCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vZG9zYmF0Y2gudmltCkBAIC0xNyw1ICsxNyw1IEBACiAKICIgRGVmaW5lIHBhdHRlcm5zIGZvciB0aGUgYnJvd3NlIGZpbGUgZmlsdGVyCiBpZiBoYXMoImd1aV93aW4zMiIpICYmICFleGlzdHMoImI6YnJvd3NlZmlsdGVyIikKLSAgbGV0IGI6YnJvd3NlZmlsdGVyID0gIkRPUyBCYXRjaCBGaWxlcyAoKi5iYXQsICouY21kKVx0Ki5iYXQ7Ki5jbWRcbkFsbCBGaWxlcyAoKi4qKVx0Ki4qXG4iCisgIGxldCBiOmJyb3dzZWZpbHRlciA9ICJET1MgQmF0Y2ggRmlsZXMgKCouYmF0LCAqLmJ0bSwgKi5jbWQpXHQqLmJhdDsqLmJ0bTsqLmNtZFxuQWxsIEZpbGVzICgqLiopXHQqLipcbiIKIGVuZGlmCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL2h0bWwudmltIGIvcnVudGltZS9mdHBsdWdpbi9odG1sLnZpbQppbmRleCA3MzM0YjE1Li44MGIwNGNkIDEwMDY0NAotLS0gYS9ydW50aW1lL2Z0cGx1Z2luL2h0bWwudmltCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vaHRtbC52aW0KQEAgLTEsNyArMSw3IEBACiAiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQogIiBMYW5ndWFnZToJaHRtbAogIiBNYWludGFpbmVyOglEYW4gU2hhcnAgPGR3c2hhcnAgYXQgaG90bWFpbCBkb3QgY29tPgotIiBMYXN0IENoYW5nZWQ6IDIwMDQgTWF5IDExCisiIExhc3QgQ2hhbmdlZDogMjAwNCBKdWwgMDgKICIgVVJMOgkJaHR0cDovL215d2VicGFnZS5uZXRzY2FwZS5jb20vc2hhcnBwZW9wbGUvdmltL2Z0cGx1Z2luCiAKIGlmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKSB8IGZpbmlzaCB8IGVuZGlmCkBAIC0yNiw3ICsyNiw3IEBACiAKICIgQ2hhbmdlIHRoZSA6YnJvd3NlIGUgZmlsdGVyIHRvIHByaW1hcmlseSBzaG93IEhUTUwtcmVsYXRlZCBmaWxlcy4KIGlmIGhhcygiZ3VpX3dpbjMyIikKLSAgICBsZXQgIGI6YnJvd3NlZmlsdGVyPSJIVE1MIEZpbGVzICgqLmh0bWwsKi5odG0pXHQqLmh0bSpcbiIgLgorICAgIGxldCAgYjpicm93c2VmaWx0ZXI9IkhUTUwgRmlsZXMgKCouaHRtbCwqLmh0bSlcdCouaHRtOyouaHRtbFxuIiAuCiAJCVwJIkphdmFTY3JpcHQgRmlsZXMgKCouanMpXHQqLmpzXG4iIC4KIAkJXAkiQ2FzY2FkaW5nIFN0eWxlU2hlZXRzICgqLmNzcylcdCouY3NzXG4iIC4KIAkJXAkiQWxsIEZpbGVzICgqLiopXHQqLipcbiIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vanNwLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vanNwLnZpbQppbmRleCA3YzZhYzg0Li40OTY4YWFiIDEwMDY0NAotLS0gYS9ydW50aW1lL2Z0cGx1Z2luL2pzcC52aW0KKysrIGIvcnVudGltZS9mdHBsdWdpbi9qc3AudmltCkBAIC0xLDcgKzEsNyBAQAogIiBWaW0gZmlsZXR5cGUgcGx1Z2luIGZpbGUKICIgTGFuZ3VhZ2U6CWpzcAogIiBNYWludGFpbmVyOglEYW4gU2hhcnAgPGR3c2hhcnAgYXQgaG90bWFpbCBkb3QgY29tPgotIiBMYXN0IENoYW5nZWQ6IDIwMDMgU2VwIDI5CisiIExhc3QgQ2hhbmdlZDogMjAwNCBKdWwgMDgKICIgVVJMOgkJaHR0cDovL215d2VicGFnZS5uZXRzY2FwZS5jb20vc2hhcnBwZW9wbGUvdmltL2Z0cGx1Z2luCiAKIGlmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKSB8IGZpbmlzaCB8IGVuZGlmCkBAIC0xNCw3ICsxNCw3IEBACiAiIERlZmluZSBzb21lIGRlZmF1bHRzIGluIGNhc2UgdGhlIGluY2x1ZGVkIGZ0cGx1Z2lucyBkb24ndCBzZXQgdGhlbS4KIGxldCBzOnVuZG9fZnRwbHVnaW4gPSAiIgogbGV0IHM6YnJvd3NlZmlsdGVyID0gIkphdmEgRmlsZXMgKCouamF2YSlcdCouamF2YVxuIiAuCi0JICAgIFwJICJIVE1MIEZpbGVzICgqLmh0bWwsICouaHRtKVx0Ki5odG0qXG4iIC4KKwkgICAgXAkgIkhUTUwgRmlsZXMgKCouaHRtbCwgKi5odG0pXHQqLmh0bWw7Ki5odG1cbiIgLgogCSAgICBcCSAiQWxsIEZpbGVzICgqLiopXHQqLipcbiIKIGxldCBzOm1hdGNoX3dvcmRzID0gIiIKIApkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9waHAudmltIGIvcnVudGltZS9mdHBsdWdpbi9waHAudmltCmluZGV4IGExYzczMjkuLjVkZjc4NzIgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZnRwbHVnaW4vcGhwLnZpbQorKysgYi9ydW50aW1lL2Z0cGx1Z2luL3BocC52aW0KQEAgLTEsNyArMSw3IEBACiAiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQogIiBMYW5ndWFnZToJcGhwCiAiIE1haW50YWluZXI6CURhbiBTaGFycCA8ZHdzaGFycCBhdCBob3RtYWlsIGRvdCBjb20+Ci0iIExhc3QgQ2hhbmdlZDogMjAwMyBTZXAgMjkKKyIgTGFzdCBDaGFuZ2VkOiAyMDA0IEp1bCAwOAogIiBVUkw6CQlodHRwOi8vbXl3ZWJwYWdlLm5ldHNjYXBlLmNvbS9zaGFycHBlb3BsZS92aW0vZnRwbHVnaW4KIAogaWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpIHwgZmluaXNoIHwgZW5kaWYKQEAgLTEzLDcgKzEzLDcgQEAKIAogIiBEZWZpbmUgc29tZSBkZWZhdWx0cyBpbiBjYXNlIHRoZSBpbmNsdWRlZCBmdHBsdWdpbnMgZG9uJ3Qgc2V0IHRoZW0uCiBsZXQgczp1bmRvX2Z0cGx1Z2luID0gIiIKLWxldCBzOmJyb3dzZWZpbHRlciA9ICJIVE1MIEZpbGVzICgqLmh0bWwsICouaHRtKVx0Ki5odG0qXG4iIC4KK2xldCBzOmJyb3dzZWZpbHRlciA9ICJIVE1MIEZpbGVzICgqLmh0bWwsICouaHRtKVx0Ki5odG1sOyouaHRtXG4iIC4KIAkgICAgXAkgICAgICJBbGwgRmlsZXMgKCouKilcdCouKlxuIgogbGV0IHM6bWF0Y2hfd29yZHMgPSAiIgogCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL3hodG1sLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4veGh0bWwudmltCmluZGV4IDgwMTE1MjkuLmUwMzQwN2IgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZnRwbHVnaW4veGh0bWwudmltCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4veGh0bWwudmltCkBAIC0xLDcgKzEsNyBAQAogIiBWaW0gZmlsZXR5cGUgcGx1Z2luIGZpbGUKICIgTGFuZ3VhZ2U6CXhodG1sCiAiIE1haW50YWluZXI6CURhbiBTaGFycCA8ZHdzaGFycCBhdCBob3RtYWlsIGRvdCBjb20+Ci0iIExhc3QgQ2hhbmdlZDogMjAwNCBNYXkgMTEKKyIgTGFzdCBDaGFuZ2VkOiAyMDA0IEp1bCAwOAogIiBVUkw6CQlodHRwOi8vbXl3ZWJwYWdlLm5ldHNjYXBlLmNvbS9zaGFycHBlb3BsZS92aW0vZnRwbHVnaW4KIAogaWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpIHwgZmluaXNoIHwgZW5kaWYKQEAgLTEzLDcgKzEzLDcgQEAKIAogIiBEZWZpbmUgc29tZSBkZWZhdWx0cyBpbiBjYXNlIHRoZSBpbmNsdWRlZCBmdHBsdWdpbnMgZG9uJ3Qgc2V0IHRoZW0uCiBsZXQgczp1bmRvX2Z0cGx1Z2luID0gIiIKLWxldCBzOmJyb3dzZWZpbHRlciA9ICJIVE1MIEZpbGVzICgqLmh0bWwsICouaHRtKVx0Ki5odG0qXG4iIC4KK2xldCBzOmJyb3dzZWZpbHRlciA9ICJIVE1MIEZpbGVzICgqLmh0bWwsICouaHRtKVx0Ki5odG1sOyouaHRtXG4iIC4KIAkgICAgXAkgICAgICJYTUwgRmlsZXMgKCoueG1sKVx0Ki54bWxcbiIgLgogCSAgICBcCSAgICAgIkFsbCBGaWxlcyAoKi4qKVx0Ki4qXG4iCiBsZXQgczptYXRjaF93b3JkcyA9ICIiCkBAIC01Niw3ICs1Niw3IEBACiAKICIgQ2hhbmdlIHRoZSA6YnJvd3NlIGUgZmlsdGVyIHRvIHByaW1hcmlseSBzaG93IHRjc2gtcmVsYXRlZCBmaWxlcy4KIGlmIGhhcygiZ3VpX3dpbjMyIikKLSAgICBsZXQgIGI6YnJvd3NlZmlsdGVyPXM6YnJvd3NlZmlsdGVyCisgICAgbGV0ICBiOmJyb3dzZWZpbHRlcj0iWEhUTUwgZmlsZXMgKCoueGh0bWwsICoueGh0bSlcdCoueGh0bWw7Ki54aHRtXG4iIC4gczpicm93c2VmaWx0ZXIKIGVuZGlmCiAKICIgVW5kbyB0aGUgc3R1ZmYgd2UgY2hhbmdlZC4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4veHNsdC52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL3hzbHQudmltCmluZGV4IGE0YjgwYTYuLjk1ODA0MzIgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZnRwbHVnaW4veHNsdC52aW0KKysrIGIvcnVudGltZS9mdHBsdWdpbi94c2x0LnZpbQpAQCAtMSw3ICsxLDcgQEAKICIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCiAiIExhbmd1YWdlOgl4c2x0CiAiIE1haW50YWluZXI6CURhbiBTaGFycCA8ZHdzaGFycCBhdCBob3RtYWlsIGRvdCBjb20+Ci0iIExhc3QgQ2hhbmdlZDogMjAwMiBOb3YgMjYKKyIgTGFzdCBDaGFuZ2VkOiAyMDA0IEp1bCAwOAogIiBVUkw6CQlodHRwOi8vbXl3ZWJwYWdlLm5ldHNjYXBlLmNvbS9zaGFycHBlb3BsZS92aW0vZnRwbHVnaW4KIAogaWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpIHwgZmluaXNoIHwgZW5kaWYKQEAgLTEyLDUgKzEyLDUgQEAKIAogIiBDaGFuZ2UgdGhlIDpicm93c2UgZSBmaWx0ZXIgdG8gcHJpbWFyaWx5IHNob3cgeHNkLXJlbGF0ZWQgZmlsZXMuCiBpZiBoYXMoImd1aV93aW4zMiIpICYmIGV4aXN0cygiYjpicm93c2VmaWx0ZXIiKQotICAgIGxldCAgYjpicm93c2VmaWx0ZXI9IlhTTFQgRmlsZXMgKCoueHNsLCoueHNsdClcdCoueHNsLCoueHNsdFxuIiAuIGI6YnJvd3NlZmlsdGVyCisgICAgbGV0ICBiOmJyb3dzZWZpbHRlcj0iWFNMVCBGaWxlcyAoKi54c2wsKi54c2x0KVx0Ki54c2w7Ki54c2x0XG4iIC4gYjpicm93c2VmaWx0ZXIKIGVuZGlmCmRpZmYgLS1naXQgYS9ydW50aW1lL29wdHdpbi52aW0gYi9ydW50aW1lL29wdHdpbi52aW0KaW5kZXggOThhYzAwZS4uODVlMjAxYyAxMDA2NDQKLS0tIGEvcnVudGltZS9vcHR3aW4udmltCisrKyBiL3J1bnRpbWUvb3B0d2luLnZpbQpAQCAtMSw3ICsxLDcgQEAKICIgVGhlc2UgY29tbWFuZHMgY3JlYXRlIHRoZSBvcHRpb24gd2luZG93LgogIgogIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgotIiBMYXN0IENoYW5nZToJMjAwNCBKdWwgMDMKKyIgTGFzdCBDaGFuZ2U6CTIwMDQgSnVsIDA1CiAKICIgSWYgdGhlcmUgYWxyZWFkeSBpcyBhbiBvcHRpb24gd2luZG93LCBqdW1wIHRvIHRoYXQgb25lLgogaWYgYnVmd2lubnIoIm9wdGlvbi13aW5kb3ciKSA+IDAKQEAgLTU2MywxOCArNTYzLDI4IEBACiAKIGlmIGhhcygicHJpbnRlciIpCiAgIGNhbGwgPFNJRD5IZWFkZXIoInByaW50aW5nIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAicHJpbnRvcHRpb25zXHRsaXN0IG9mIGl0ZW1zIHRoYXQgY29udHJvbCB0aGUgZm9ybWF0IG9mIDpoYXJkY29weSBvdXRwdXQiKQorICBjYWxsIDxTSUQ+T3B0aW9uRygicG9wdCIsICZwb3B0KQogICBjYWxsIGFwcGVuZCgiJCIsICJwcmludGRldmljZVx0bmFtZSBvZiB0aGUgcHJpbnRlciB0byBiZSB1c2VkIGZvciA6aGFyZGNvcHkiKQogICBjYWxsIDxTSUQ+T3B0aW9uRygicGRldiIsICZwZGV2KQotICBjYWxsIGFwcGVuZCgiJCIsICJwcmludGVuY29kaW5nXHRlbmNvZGluZyB1c2VkIHRvIHByaW50IHRoZSBQb3N0U2NyaXB0IGZpbGUgZm9yIDpoYXJkY29weSIpCi0gIGNhbGwgPFNJRD5PcHRpb25HKCJwZW5jIiwgJnBlbmMpCi0gIGNhbGwgYXBwZW5kKCIkIiwgInByaW50ZXhwclx0ZXhwcmVzc2lvbiB1c2VkIHRvIHByaW50IHRoZSBQb3N0U2NyaXB0IGZpbGUgZm9yIDpoYXJkY29weSIpCi0gIGNhbGwgPFNJRD5PcHRpb25HKCJwZXhwciIsICZwZXhwcikKKyAgaWYgaGFzKCJwb3N0c2NyaXB0IikKKyAgICBjYWxsIGFwcGVuZCgiJCIsICJwcmludGV4cHJcdGV4cHJlc3Npb24gdXNlZCB0byBwcmludCB0aGUgUG9zdFNjcmlwdCBmaWxlIGZvciA6aGFyZGNvcHkiKQorICAgIGNhbGwgPFNJRD5PcHRpb25HKCJwZXhwciIsICZwZXhwcikKKyAgZW5kaWYKICAgY2FsbCBhcHBlbmQoIiQiLCAicHJpbnRmb250XHRuYW1lIG9mIHRoZSBmb250IHRvIGJlIHVzZWQgZm9yIDpoYXJkY29weSIpCiAgIGNhbGwgPFNJRD5PcHRpb25HKCJwZm4iLCAmcGZuKQogICBjYWxsIGFwcGVuZCgiJCIsICJwcmludGhlYWRlclx0Zm9ybWF0IG9mIHRoZSBoZWFkZXIgdXNlZCBmb3IgOmhhcmRjb3B5IikKICAgY2FsbCA8U0lEPk9wdGlvbkcoInBoZWFkZXIiLCAmcGhlYWRlcikKLSAgY2FsbCBhcHBlbmQoIiQiLCAicHJpbnRvcHRpb25zXHRsaXN0IG9mIGl0ZW1zIHRoYXQgY29udHJvbCB0aGUgZm9ybWF0IG9mIDpoYXJkY29weSBvdXRwdXQiKQotICBjYWxsIDxTSUQ+T3B0aW9uRygicG9wdCIsICZwb3B0KQorICBpZiBoYXMoInBvc3RzY3JpcHQiKQorICAgIGNhbGwgYXBwZW5kKCIkIiwgInByaW50ZW5jb2RpbmdcdGVuY29kaW5nIHVzZWQgdG8gcHJpbnQgdGhlIFBvc3RTY3JpcHQgZmlsZSBmb3IgOmhhcmRjb3B5IikKKyAgICBjYWxsIDxTSUQ+T3B0aW9uRygicGVuYyIsICZwZW5jKQorICBlbmRpZgorICBpZiBoYXMoIm11bHRpX2J5dGUiKQorICAgIGNhbGwgYXBwZW5kKCIkIiwgInByaW50bWJjaGFyc2V0XHR0aGUgQ0pLIGNoYXJhY3RlciBzZXQgdG8gYmUgdXNlZCBmb3IgQ0pLIG91dHB1dCBmcm9tIDpoYXJkY29weSIpCisgICAgY2FsbCA8U0lEPk9wdGlvbkcoInBtYmNzIiwgJnBtYmNzKQorICAgIGNhbGwgYXBwZW5kKCIkIiwgInByaW50bWJmb250XHRsaXN0IG9mIGZvbnQgbmFtZXMgdG8gYmUgdXNlZCBmb3IgQ0pLIG91dHB1dCBmcm9tIDpoYXJkY29weSIpCisgICAgY2FsbCA8U0lEPk9wdGlvbkcoInBtYmZuIiwgJnBtYmZuKQorICBlbmRpZgogZW5kaWYKIAogY2FsbCA8U0lEPkhlYWRlcigibWVzc2FnZXMgYW5kIGluZm8iKQpkaWZmIC0tZ2l0IGEvcnVudGltZS9wbHVnaW4vTmV0cndGaWxlSGFuZGxlcnMudmltIGIvcnVudGltZS9wbHVnaW4vTmV0cndGaWxlSGFuZGxlcnMudmltCmluZGV4IDQwMWZjNTguLmFkZGJhNGUgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvcGx1Z2luL05ldHJ3RmlsZUhhbmRsZXJzLnZpbQorKysgYi9ydW50aW1lL3BsdWdpbi9OZXRyd0ZpbGVIYW5kbGVycy52aW0KQEAgLTEsMzMgKzEsMTI1IEBACiAiIE5ldHJ3RmlsZUhhbmRsZXJzOiBjb250YWlucyB2YXJpb3VzIGV4dGVuc2lvbi1iYXNlZCBmaWxlIGhhbmRsZXJzIGZvcgotIiAgICAgICAgICAgICAgIG5ldHJ3J3MgYnJvd3NlcgorIiAgICAgICAgICAgICAgICAgICAgbmV0cncncyBicm93c2VycycgeCBjb21tYW5kCiAiIEF1dGhvcjoJQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuCi0iIERhdGU6CQlKdWwgMDIsIDIwMDQKLSIgVmVyc2lvbjoJMgorIiBEYXRlOgkJSnVsIDA2LCAyMDA0CisiIFZlcnNpb246CTMKICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICIgTmV0cndGaWxlSGFuZGxlcl9odG1sOiBoYW5kbGVzIGh0bWwgd2hlbiB0aGUgdXNlciBoaXRzICJ4IiB3aGVuIHRoZQogIiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciBpcyBhdG9wIGEgKi5odG1sIGZpbGUKLWZ1biEgTmV0cndGaWxlSGFuZGxlcl9odG1sKHdlYnBhZ2UpCi0iICBjYWxsIERmdW5jKCJOZXRyd0ZpbGVIYW5kbGVyX2h0bWwoIi5hOndlYnBhZ2UuIikiKQorZnVuISBOZXRyd0ZpbGVIYW5kbGVyX2h0bWwocGFnZWZpbGUpCisiICBjYWxsIERmdW5jKCJOZXRyd0ZpbGVIYW5kbGVyX2h0bWwoIi5hOnBhZ2VmaWxlLiIpIikKIAotICBsZXQgaG9zdD0gc3Vic3RpdHV0ZShhOndlYnBhZ2UsJ15cd1wrOi8vXCUoXHcqQFwpXD1cKFx3XCtcKS8uKiQnLCdcMScsJ2UnKQotIiAgY2FsbCBEZWNobygiaG9zdDwiLmhvc3QuIj4iKQotCi0gIGlmIGhvc3QgPT0gaG9zdG5hbWUoKSB8fCBob3N0ID09IHN1YnN0aXR1dGUoaG9zdG5hbWUoKSwnXC4uKiQnLCcnLCdlJykKLSAgIGxldCBwYWdlPSBzdWJzdGl0dXRlKGE6d2VicGFnZSwnXlx3XCs6Ly9cJShcdypAXClcPVwoXHdcK1wpLycsJ2ZpbGU6Ly9cMS8nLmV4cGFuZCgiJEhPTUUiKS4nLycsJ2UnKQotICBlbHNlCi0gICBsZXQgcGFnZT0gc3Vic3RpdHV0ZShhOndlYnBhZ2UsJ15cd1wrOi8vXCUoXHcqQFwpXD1cKFx3XCtcKS8nLCdodHRwOi8vXDEvJywnZScpCi0gIGVuZGlmCisgIGxldCBwYWdlPSBzdWJzdGl0dXRlKGE6cGFnZWZpbGUsJ14nLCdmaWxlOi8vJywnJykKIAogICBpZiBleGVjdXRhYmxlKCJtb3ppbGxhIikKLSIgIGNhbGwgRGVjaG8oImV4ZWN1dGluZyAhbW96aWxsYSAiLnBhZ2UpCisiICAgY2FsbCBEZWNobygiZXhlY3V0aW5nICFtb3ppbGxhICIucGFnZSkKICAgIGV4ZSAiIW1vemlsbGEgIi5wYWdlCiAgIGVsc2VpZiBleGVjdXRhYmxlKCJuZXRzY2FwZSIpCi0iICBjYWxsIERlY2hvKCJleGVjdXRpbmcgIW5ldHNjYXBlICIucGFnZSkKKyIgICBjYWxsIERlY2hvKCJleGVjdXRpbmcgIW5ldHNjYXBlICIucGFnZSkKICAgIGV4ZSAiIW5ldHNjYXBlICIucGFnZQorICBlbHNlCisiICAgY2FsbCBEcmV0KCJOZXRyd0ZpbGVIYW5kbGVyX2h0bWwgMCIpCisgICByZXR1cm4gMAogICBlbmRpZgogCi0iICBjYWxsIERyZXQoIk5ldHJ3RmlsZUhhbmRsZXJfaHRtbCIpCisiICBjYWxsIERyZXQoIk5ldHJ3RmlsZUhhbmRsZXJfaHRtbCAxIikKKyAgcmV0dXJuIDEKK2VuZGZ1bgorCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBOZXRyd0ZpbGVIYW5kbGVyX2h0bTogaGFuZGxlcyBodG1sIHdoZW4gdGhlIHVzZXIgaGl0cyAieCIgd2hlbiB0aGUKKyIgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgaXMgYXRvcCBhICouaHRtIGZpbGUKK2Z1biEgTmV0cndGaWxlSGFuZGxlcl9odG0ocGFnZWZpbGUpCisiICBjYWxsIERmdW5jKCJOZXRyd0ZpbGVIYW5kbGVyX2h0bSgiLmE6cGFnZWZpbGUuIikiKQorCisgIGxldCBwYWdlPSBzdWJzdGl0dXRlKGE6cGFnZWZpbGUsJ14nLCdmaWxlOi8vJywnJykKKworICBpZiBleGVjdXRhYmxlKCJtb3ppbGxhIikKKyIgICBjYWxsIERlY2hvKCJleGVjdXRpbmcgIW1vemlsbGEgIi5wYWdlKQorICAgZXhlICIhbW96aWxsYSAiLnBhZ2UKKyAgZWxzZWlmIGV4ZWN1dGFibGUoIm5ldHNjYXBlIikKKyIgICBjYWxsIERlY2hvKCJleGVjdXRpbmcgIW5ldHNjYXBlICIucGFnZSkKKyAgIGV4ZSAiIW5ldHNjYXBlICIucGFnZQorICBlbHNlCisiICAgY2FsbCBEcmV0KCJOZXRyd0ZpbGVIYW5kbGVyX2h0bSAwIikKKyAgIHJldHVybiAwCisgIGVuZGlmCisKKyIgIGNhbGwgRHJldCgiTmV0cndGaWxlSGFuZGxlcl9odG0gMSIpCisgIHJldHVybiAxCitlbmRmdW4KKworIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgTmV0cndGaWxlSGFuZGxlcl9qcGc6CitmdW4hIE5ldHJ3RmlsZUhhbmRsZXJfanBnKGpwZ2ZpbGUpCisiICBjYWxsIERmdW5jKCJOZXRyd0ZpbGVIYW5kbGVyX2pwZyhqcGdmaWxlPCIuYTpqcGdmaWxlLiI+KSIpCisKKyAgaWYgZXhlY3V0YWJsZSgiZ2ltcCIpCisgICBleGUgInNpbGVudCEgIWdpbXAgLXMgIi5hOmpwZ2ZpbGUKKyAgZWxzZWlmIGV4ZWN1dGFibGUoZXhwYW5kKCIkU3lzdGVtUm9vdCIpLiIvU1lTVEVNMzIvTVNQQUlOVC5FWEUiKQorICAgZXhlICJzaWxlbnQhICEiLmV4cGFuZCgiJFN5c3RlbVJvb3QiKS4iL1NZU1RFTTMyL01TUEFJTlQgIi5hOmpwZ2ZpbGUKKyAgZWxzZQorIiAgIGNhbGwgRHJldCgiTmV0cndGaWxlSGFuZGxlcl9qcGcgMCIpCisgICByZXR1cm4gMAorICBlbmRpZgorCisiICBjYWxsIERyZXQoIk5ldHJ3RmlsZUhhbmRsZXJfanBnIDEiKQorICByZXR1cm4gMQorZW5kZnVuCisKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIE5ldHJ3RmlsZUhhbmRsZXJfZ2lmOgorZnVuISBOZXRyd0ZpbGVIYW5kbGVyX2dpZihnaWZmaWxlKQorIiAgY2FsbCBEZnVuYygiTmV0cndGaWxlSGFuZGxlcl9naWYoZ2lmZmlsZTwiLmE6Z2lmZmlsZS4iPikiKQorCisgIGlmIGV4ZWN1dGFibGUoImdpbXAiKQorICAgZXhlICJzaWxlbnQhICFnaW1wIC1zICIuYTpnaWZmaWxlCisgIGVsc2VpZiBleGVjdXRhYmxlKGV4cGFuZCgiJFN5c3RlbVJvb3QiKS4iL1NZU1RFTTMyL01TUEFJTlQuRVhFIikKKyAgIGV4ZSAic2lsZW50ISAhIi5leHBhbmQoIiRTeXN0ZW1Sb290IikuIi9TWVNURU0zMi9NU1BBSU5UICIuYTpnaWZmaWxlCisgIGVsc2UKKyIgICBjYWxsIERyZXQoIk5ldHJ3RmlsZUhhbmRsZXJfZ2lmIDAiKQorICAgcmV0dXJuIDAKKyAgZW5kaWYKKworIiAgY2FsbCBEcmV0KCJOZXRyd0ZpbGVIYW5kbGVyX2dpZiAxIikKKyAgcmV0dXJuIDEKK2VuZGZ1bgorCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBOZXRyd0ZpbGVIYW5kbGVyX3BubToKK2Z1biEgTmV0cndGaWxlSGFuZGxlcl9wbm0ocG5tZmlsZSkKKyIgIGNhbGwgRGZ1bmMoIk5ldHJ3RmlsZUhhbmRsZXJfcG5tKHBubWZpbGU8Ii5hOnBubWZpbGUuIj4pIikKKworICBpZiBleGVjdXRhYmxlKCJnaW1wIikKKyAgIGV4ZSAic2lsZW50ISAhZ2ltcCAtcyAiLmE6cG5tZmlsZQorICBlbHNlaWYgZXhlY3V0YWJsZShleHBhbmQoIiRTeXN0ZW1Sb290IikuIi9TWVNURU0zMi9NU1BBSU5ULkVYRSIpCisgICBleGUgInNpbGVudCEgISIuZXhwYW5kKCIkU3lzdGVtUm9vdCIpLiIvU1lTVEVNMzIvTVNQQUlOVCAiLmE6cG5tZmlsZQorICBlbHNlCisiICAgY2FsbCBEcmV0KCJOZXRyd0ZpbGVIYW5kbGVyX3BubSAwIikKKyAgIHJldHVybiAwCisgIGVuZGlmCisKKyIgIGNhbGwgRHJldCgiTmV0cndGaWxlSGFuZGxlcl9wbm0gMSIpCisgIHJldHVybiAxCitlbmRmdW4KKworIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgTmV0cndGaWxlSGFuZGxlcl9ibXA6CitmdW4hIE5ldHJ3RmlsZUhhbmRsZXJfYm1wKGJtcGZpbGUpCisiICBjYWxsIERmdW5jKCJOZXRyd0ZpbGVIYW5kbGVyX2JtcChibXBmaWxlPCIuYTpibXBmaWxlLiI+KSIpCisKKyAgaWYgZXhlY3V0YWJsZSgiZ2ltcCIpCisgICBleGUgInNpbGVudCEgIWdpbXAgLXMgIi5hOmJtcGZpbGUKKyAgZWxzZWlmIGV4ZWN1dGFibGUoZXhwYW5kKCIkU3lzdGVtUm9vdCIpLiIvU1lTVEVNMzIvTVNQQUlOVC5FWEUiKQorICAgZXhlICJzaWxlbnQhICEiLmV4cGFuZCgiJFN5c3RlbVJvb3QiKS4iL1NZU1RFTTMyL01TUEFJTlQgIi5hOmJtcGZpbGUKKyAgZWxzZQorIiAgIGNhbGwgRHJldCgiTmV0cndGaWxlSGFuZGxlcl9ibXAgMCIpCisgICByZXR1cm4gMAorICBlbmRpZgorCisiICBjYWxsIERyZXQoIk5ldHJ3RmlsZUhhbmRsZXJfYm1wIDEiKQorICByZXR1cm4gMQogZW5kZnVuCiAKICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9ydW50aW1lL3BsdWdpbi9leHBsb3Jlci52aW0gYi9ydW50aW1lL3BsdWdpbi9leHBsb3Jlci52aW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZmNiMzMuLjAwMDAwMDAKLS0tIGEvcnVudGltZS9wbHVnaW4vZXhwbG9yZXIudmltCisrKyAvZGV2L251bGwKQEAgLTEsMTMyNiArMCwwIEBACi0iPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSIgRmlsZTogZXhwbG9yZXIudmltCi0iIEF1dGhvcjogTSBBIEF6aXogQWhtZWQgKGF6aXpAYWNvcm4tbmV0d29ya3MuY29tIC0gZG9lc24ndCB3b3JrKQotIiBMYXN0IENoYW5nZToJMjAwNCBKdW4gMjIKLSIgVmVyc2lvbjogMi41ICsgY2hhbmdlcwotIiBBZGRpdGlvbnMgYnkgTWFyayBXYWdnb25lciAod2FnZ29uZXJAYXJhY25ldC5jb20pIGV0IGFsLgotIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0iIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgZmlsZSBleHBsb3Jlci4KLSItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIiBOb3JtYWxseSwgdGhpcyBmaWxlIHdpbGwgcmVzaWRlIGluIHRoZSBwbHVnaW5zIGRpcmVjdG9yeSBhbmQgYmUKLSIgYXV0b21hdGljYWxseSBzb3VyY2VkLiAgSWYgbm90LCB5b3UgbXVzdCBtYW51YWxseSBzb3VyY2UgdGhpcyBmaWxlCi0iIHVzaW5nIDpzb3VyY2UgZXhwbG9yZXIudmltCi0iCi0iIFRvIHVzZSBpdCwganVzdCBlZGl0IGEgZGlyZWN0b3J5ICh2aSBkaXJuYW1lKSBvciB0eXBlIDpFeHBsb3JlIHRvCi0iIGxhdW5jaCB0aGUgZmlsZSBleHBsb3JlciBpbiB0aGUgY3VycmVudCB3aW5kb3csIG9yIDpTZXhwbG9yZSB0byBzcGxpdAotIiB0aGUgY3VycmVudCB3aW5kb3cgYW5kIGxhdW5jaCBleHBsb3JlciB0aGVyZS4KLSIKLSIgSWYgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIG1vZGlmaWVkLCB0aGUgd2luZG93IGlzIGFsd2F5cyBzcGxpdC4KLSIKLSIgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkZWxldGUgZmlsZXMgYW5kIHJlbmFtZSBmaWxlcyB3aXRoaW4gZXhwbG9yZXIuCi0iIFNlZSA6aGVscCBmaWxlLWV4cGxvcmVyIGZvciBtb3JlIGRldGFpbHMKLSIKLSItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIiBVcGRhdGUgaGlzdG9yeSByZW1vdmVkLCBpdCdzIG5vdCB2ZXJ5IGludGVyZXN0aW5nLgotIiBDb250cmlidXRvcnMgd2VyZTogRG91ZyBQb3R0cywgQnJhbSBNb29sZW5hYXIsIFRob21hcyBL9mhsZXIKLSI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0iIEhhcyB0aGlzIGFscmVhZHkgYmVlbiBsb2FkZWQ/Ci1pZiBleGlzdHMoImxvYWRlZF9leHBsb3JlciIpCi0gIGZpbmlzaAotZW5kaWYKLWxldCBsb2FkZWRfZXhwbG9yZXI9MQotCi0iIExpbmUgY29udGludWF0aW9uIHVzZWQgaGVyZQotbGV0IHM6Y3BvX3NhdmUgPSAmY3BvCi1zZXQgY3BvJnZpbQotCi0iLS0tCi0iIERlZmF1bHQgc2V0dGluZ3MgZm9yIGdsb2JhbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcwotCi0iIFNwbGl0IHZlcnRpY2FsbHkgaW5zdGVhZCBvZiBob3Jpem9udGFsbHk/Ci1pZiAhZXhpc3RzKCJnOmV4cGxWZXJ0aWNhbCIpCi0gIGxldCBnOmV4cGxWZXJ0aWNhbD0wCi1lbmRpZgotCi0iIEhvdyBiaWcgdG8gbWFrZSB0aGUgd2luZG93PyBTZXQgdG8gIiIgdG8gYXZvaWQgcmVzaXppbmcKLWlmICFleGlzdHMoImc6ZXhwbFdpblNpemUiKQotICBsZXQgZzpleHBsV2luU2l6ZT0xNQotZW5kaWYKLQotIiBXaGVuIG9wZW5pbmcgYSBuZXcgZmlsZS9kaXJlY3RvcnksIHNwbGl0IGJlbG93IGN1cnJlbnQgd2luZG93IChvcgotIiBhYm92ZSk/ICAxID0gYmVsb3csIDAgPSB0byBhYm92ZQotaWYgIWV4aXN0cygiZzpleHBsU3BsaXRCZWxvdyIpCi0gIGxldCBnOmV4cGxTcGxpdEJlbG93ID0gJnNwbGl0YmVsb3cKLWVuZGlmCi0KLSIgU3BsaXQgdG8gcmlnaHQgb2YgY3VycmVudCB3aW5kb3cgKG9yIHRvIGxlZnQpPwotIiAxID0gdG8gcmlnaHQsIDAgPSB0byBsZWZ0Ci1pZiAhZXhpc3RzKCJnOmV4cGxTcGxpdFJpZ2h0IikKLSAgbGV0IGc6ZXhwbFNwbGl0UmlnaHQgPSAmc3BsaXRyaWdodAotZW5kaWYKLQotIiBTdGFydCB0aGUgZmlyc3QgZXhwbG9yZXIgd2luZG93Li4uCi0iIERlZmF1bHRzIHRvIGJlIHRoZSBzYW1lIGFzIGV4cGxTcGxpdEJlbG93Ci1pZiAhZXhpc3RzKCJnOmV4cGxTdGFydEJlbG93IikKLSAgbGV0IGc6ZXhwbFN0YXJ0QmVsb3cgPSBnOmV4cGxTcGxpdEJlbG93Ci1lbmRpZgotCi0iIFN0YXJ0IHRoZSBmaXJzdCBleHBsb3JlciB3aW5kb3cuLi4KLSIgRGVmYXVsdHMgdG8gYmUgdGhlIHNhbWUgYXMgZXhwbFNwbGl0UmlnaHQKLWlmICFleGlzdHMoImc6ZXhwbFN0YXJ0UmlnaHQiKQotICBsZXQgZzpleHBsU3RhcnRSaWdodCA9IGc6ZXhwbFNwbGl0UmlnaHQKLWVuZGlmCi0KLSIgU2hvdyBkZXRhaWxlZCBoZWxwPwotaWYgIWV4aXN0cygiZzpleHBsRGV0YWlsZWRIZWxwIikKLSAgbGV0IGc6ZXhwbERldGFpbGVkSGVscD0wCi1lbmRpZgotCi0iIFNob3cgZmlsZSBzaXplIGFuZCBkYXRlcz8KLWlmICFleGlzdHMoImc6ZXhwbERldGFpbGVkTGlzdCIpCi0gIGxldCBnOmV4cGxEZXRhaWxlZExpc3Q9MAotZW5kaWYKLQotIiBGb3JtYXQgZm9yIHRoZSBkYXRlCi1pZiAhZXhpc3RzKCJnOmV4cGxEYXRlRm9ybWF0IikKLSAgbGV0IGc6ZXhwbERhdGVGb3JtYXQ9IiVkICViICVZICVIOiVNIgotZW5kaWYKLQotIiBGaWxlcyB0byBoaWRlCi1pZiAhZXhpc3RzKCJnOmV4cGxIaWRlRmlsZXMiKQotICBsZXQgZzpleHBsSGlkZUZpbGVzPScnCi1lbmRpZgotCi0iIEZpZWxkIHRvIHNvcnQgYnkKLWlmICFleGlzdHMoImc6ZXhwbFNvcnRCeSIpCi0gIGxldCBnOmV4cGxTb3J0Qnk9J25hbWUnCi1lbmRpZgotCi0iIFNlZ3JlZ2F0ZSBkaXJlY3Rvcmllcz8gMSwgMCwgb3IgLTEKLWlmICFleGlzdHMoImc6ZXhwbERpcnNGaXJzdCIpCi0gIGxldCBnOmV4cGxEaXJzRmlyc3Q9MQotZW5kaWYKLQotIiBTZWdyZWdhdGUgaXRlbXMgaW4gc3VmZml4ZXMgb3B0aW9uPyAxLCAwLCBvciAtMQotaWYgIWV4aXN0cygiZzpleHBsU3VmZml4ZXNMYXN0IikKLSAgbGV0IGc6ZXhwbFN1ZmZpeGVzTGFzdD0xCi1lbmRpZgotCi0iIEluY2x1ZGUgc2VwYXJhdG9yIGxpbmVzIGJldHdlZW4gZGlyZWN0b3JpZXMsIGZpbGVzLCBhbmQgc3VmZml4ZXM/Ci1pZiAhZXhpc3RzKCJnOmV4cGxVc2VTZXBhcmF0b3JzIikKLSAgbGV0IGc6ZXhwbFVzZVNlcGFyYXRvcnM9MAotZW5kaWYKLQotIiBFeGVjdXRlIGZpbGUgaGFuZGxlcgotaWYgIWV4aXN0cygiZzpleHBsRmlsZUhhbmRsZXIiKQotICBpZiBoYXMoIndpbjMyIikKLSAgICAiIGZvciBXaW4zMiB1c2UgcnVuZGxsMzIKLSAgICBmdW5jdGlvbiEgczpleHBsRmlsZUhhbmRsZXJXaW4zMihmbikKLSAgICAgIGV4ZWMgJ3NpbGVudCAhc3RhcnQgcnVuZGxsMzIgdXJsLmRsbCxGaWxlUHJvdG9jb2xIYW5kbGVyICInCi0JCVwgLiBlc2NhcGUoYTpmbiwgJyUjJykgLiAnIicKLSAgICBlbmRmdW5jdGlvbgotICAgIGxldCBnOmV4cGxGaWxlSGFuZGxlciA9ICI8U0lEPmV4cGxGaWxlSGFuZGxlcldpbjMyIgotCi0gIGVsc2VpZiBoYXMoInVuaXgiKQotICAgICIgZm9yIEtERSB1c2Uga2ZtY2xpZW50LCBmb3IgR05VTUUgdXNlIGdub21lLW9wZW4KLSAgICBpZiBleGVjdXRhYmxlKCJrZm1jbGllbnQiKQotICAgICAgbGV0IGc6ZXhwbEZpbGVIYW5kbGVyQ21kID0gImtmbWNsaWVudCBleGVjIgotICAgIGVsc2VpZiBleGVjdXRhYmxlKCJnbm9tZS1vcGVuIikKLSAgICAgIGxldCBnOmV4cGxGaWxlSGFuZGxlckNtZCA9ICJnbm9tZS1vcGVuIgotICAgIGVsc2UKLSAgICAgIGxldCBnOmV4cGxGaWxlSGFuZGxlckNtZCA9ICIiCi0gICAgZW5kaWYKLSAgICBpZiBnOmV4cGxGaWxlSGFuZGxlckNtZCAhPSAiIgotICAgICAgZnVuY3Rpb24hIHM6ZXhwbEZpbGVIYW5kbGVyVW5peChmbikKLQlpZiAmc2hlbGxyZWRpciA9fiAiJXMiCi0JICBsZXQgcmVkaXIgPSBzdWJzdGl0dXRlKCZzaGVsbHJlZGlyLCAiJXMiLCAiL2Rldi9udWxsIiwgIiIpCi0JZWxzZQotCSAgbGV0IHJlZGlyID0gJnNoZWxscmVkaXIgLiAiL2Rldi9udWxsIgotCWVuZGlmCi0JIiBOZWVkIHRvIGVzY2FwZSAlIGFuZCAjIGJ1dCBub3Qgc3BhY2VzLgotCWV4ZWMgInNpbGVudCAhIiAuIGc6ZXhwbEZpbGVIYW5kbGVyQ21kIC4gIiAnIiAuIGVzY2FwZShhOmZuLCAnJSMnKSAuICInIiAuIHJlZGlyCi0gICAgICBlbmRmdW5jdGlvbgotICAgICAgbGV0IGc6ZXhwbEZpbGVIYW5kbGVyID0gIjxTSUQ+ZXhwbEZpbGVIYW5kbGVyVW5peCIKLSAgICBlbmRpZgotICBlbmRpZgotZW5kaWYKLQotIi0tLQotIiBzY3JpcHQgdmFyaWFibGVzIC0gdGhlc2UgYXJlIHRoZSBzYW1lIGFjcm9zcyBhbGwKLSIgZXhwbG9yZXIgd2luZG93cwotCi0iIGNoYXJhY3RlcnMgdGhhdCBtdXN0IGJlIGVzY2FwZWQgZm9yIGEgcmVndWxhciBleHByZXNzaW9uCi1sZXQgczplc2NyZWdleHAgPSAnLypeJC5+XCcKLQotIiBjaGFyYWN0ZXJzIHRoYXQgbXVzdCBiZSBlc2NhcGVkIGZvciBmaWxlbmFtZXMKLWlmIGhhcygiZG9zMTYiKSB8fCBoYXMoImRvczMyIikgfHwgaGFzKCJ3aW4xNiIpIHx8IGhhcygid2luMzIiKSB8fCBoYXMoIm9zMiIpCi0gIGxldCBzOmVzY2ZpbGVuYW1lID0gJyAlIycKLWVsc2UKLSAgbGV0IHM6ZXNjZmlsZW5hbWUgPSAnIFwlI1tdJwotZW5kaWYKLQotCi0iIEEgbGluZSB0byB1c2UgZm9yIHNlcGFyYXRpbmcgc2VjdGlvbnMKLWxldCBzOnNlcGFyYXRvcj0nIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKLQotIi0tLQotIiBDcmVhdGUgY29tbWFuZHMKLQotaWYgIWV4aXN0cygnOkV4cGxvcmUnKQotICBjb21tYW5kIC1uPT8gLWNvbXBsZXRlPWRpciBFeHBsb3JlIDpjYWxsIHM6U3RhcnRFeHBsb3JlcigwLCAnPGE+JykKLWVuZGlmCi1pZiAhZXhpc3RzKCc6U2V4cGxvcmUnKQotICBjb21tYW5kIC1uPT8gLWNvbXBsZXRlPWRpciBTZXhwbG9yZSA6Y2FsbCBzOlN0YXJ0RXhwbG9yZXIoMSwgJzxhPicpCi1lbmRpZgotCi0iLS0tCi0iIFN0YXJ0IHRoZSBleHBsb3JlciB1c2luZyB0aGUgcHJlZmVyZW5jZXMgZnJvbSB0aGUgZ2xvYmFsIHZhcmlhYmxlcwotIgotZnVuY3Rpb24hIHM6U3RhcnRFeHBsb3JlcihzcGxpdCwgc3RhcnRfZGlyKQotICBsZXQgc3RhcnRjbWQgPSAiZWRpdCIKLSAgaWYgYTpzdGFydF9kaXIgIT0gIiIKLSAgICBsZXQgZm5hbWU9YTpzdGFydF9kaXIKLSAgZWxzZQotICAgIGxldCBmbmFtZSA9IGV4cGFuZCgiJTpwOmgiKQotICBlbmRpZgotICBpZiBmbmFtZSA9PSAiIgotICAgIGxldCBmbmFtZSA9IGdldGN3ZCgpCi0gIGVuZGlmCi0KLSAgIiBDcmVhdGUgYSB2YXJpYWJsZSB0byB1c2UgaWYgc3BsaXR0aW5nIHZlcnRpY2FsbHkKLSAgbGV0IHNwbGl0TW9kZSA9ICIiCi0gIGlmIGc6ZXhwbFZlcnRpY2FsID09IDEKLSAgICBsZXQgc3BsaXRNb2RlID0gInZlcnRpY2FsIgotICBlbmRpZgotCi0gICIgU2F2ZSB0aGUgdXNlcidzIHNldHRpbmdzIGZvciBzcGxpdGJlbG93IGFuZCBzcGxpdHJpZ2h0Ci0gIGxldCBzYXZlc3BsaXRiZWxvdyA9ICZzcGxpdGJlbG93Ci0gIGxldCBzYXZlc3BsaXRyaWdodCA9ICZzcGxpdHJpZ2h0Ci0KLSAgaWYgYTpzcGxpdCB8fCAmbW9kaWZpZWQKLSAgICBsZXQgc3RhcnRjbWQgPSBzcGxpdE1vZGUgLiAiICIgLiBnOmV4cGxXaW5TaXplIC4gIm5ldyAiIC4gZm5hbWUKLSAgICBsZXQgJnNwbGl0YmVsb3cgPSBnOmV4cGxTdGFydEJlbG93Ci0gICAgbGV0ICZzcGxpdHJpZ2h0ID0gZzpleHBsU3RhcnRSaWdodAotICBlbHNlCi0gICAgbGV0IHN0YXJ0Y21kID0gImVkaXQgIiAuIGZuYW1lCi0gIGVuZGlmCi0gIHNpbGVudCBleGVjdXRlIHN0YXJ0Y21kCi0gIGxldCAmc3BsaXRiZWxvdyA9IHNhdmVzcGxpdGJlbG93Ci0gIGxldCAmc3BsaXRyaWdodCA9IHNhdmVzcGxpdHJpZ2h0Ci1lbmRmdW5jdGlvbgotCi0iLS0tCi0iIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgZm9yICdlZGl0aW5nJyBhIGRpcmVjdG9yeQotIgotZnVuY3Rpb24hIHM6RWRpdERpcigpCi0gICIgR2V0IG91dCBvZiBoZXJlIHJpZ2h0IGF3YXkgaWYgdGhpcyBpc24ndCBhIGRpcmVjdG9yeSEKLSAgbGV0IG5hbWUgPSBleHBhbmQoIiUiKQotICBpZiBuYW1lID09ICIiCi0gICAgbGV0IG5hbWUgPSBleHBhbmQoIiU6cCIpCi0gIGVuZGlmCi0gIGlmICFpc2RpcmVjdG9yeShuYW1lKQotICAgIHJldHVybgotICBlbmRpZgotCi0gICIgVHVybiBvZmYgdGhlIHN3YXBmaWxlLCBzZXQgdGhlIGJ1ZmZlciB0eXBlIHNvIHRoYXQgaXQgd29uJ3QgZ2V0Ci0gICIgd3JpdHRlbiwgYW5kIHNvIHRoYXQgaXQgd2lsbCBnZXQgZGVsZXRlZCB3aGVuIGl0IGdldHMgaGlkZGVuLgotICBzZXRsb2NhbCBub3JlYWRvbmx5IG1vZGlmaWFibGUKLSAgc2V0bG9jYWwgbm9zd2FwZmlsZQotICBzZXRsb2NhbCBidWZ0eXBlPW5vd3JpdGUKLSAgc2V0bG9jYWwgYnVmaGlkZGVuPWRlbGV0ZQotICAiIERvbid0IHdyYXAgYXJvdW5kIGxvbmcgbGluZXMKLSAgc2V0bG9jYWwgbm93cmFwCi0KLSAgIiBObyBuZWVkIGZvciBhbnkgaW5zZXJ0bW9kZSBhYmJyZXZpYXRpb25zLCBzaW5jZSB3ZSBkb24ndCBhbGxvdwotICAiIGluc2VydGlvbnMgYW55d2F5IQotICBpYWJjIDxidWZmZXI+Ci0KLSAgIiBMb25nIG9yIHNob3J0IGxpc3Rpbmc/ICBVc2UgdGhlIGdsb2JhbCB2YXJpYWJsZSB0aGUgZmlyc3QgdGltZQotICAiIGV4cGxvcmVyIGlzIGNhbGxlZCwgYWZ0ZXIgdGhhdCB1c2UgdGhlIHNjcmlwdCB2YXJpYWJsZSBhcyBzZXQgYnkKLSAgIiB0aGUgaW50ZXJhY3RpdmUgdXNlci4KLSAgaWYgZXhpc3RzKCJzOmxvbmdsaXN0IikKLSAgICBsZXQgdzpsb25nbGlzdCA9IHM6bG9uZ2xpc3QKLSAgZWxzZQotICAgIGxldCB3OmxvbmdsaXN0ID0gZzpleHBsRGV0YWlsZWRMaXN0Ci0gIGVuZGlmCi0KLSAgIiBTaG93IGtleWJvYXJkIHNob3J0Y3V0cz8KLSAgaWYgZXhpc3RzKCJzOmxvbmdoZWxwIikKLSAgICBsZXQgdzpsb25naGVscCA9IHM6bG9uZ2hlbHAKLSAgZWxzZQotICAgIGxldCB3OmxvbmdoZWxwID0gZzpleHBsRGV0YWlsZWRIZWxwCi0gIGVuZGlmCi0KLSAgIiBTZXQgdGhlIHNvcnQgYmFzZWQgb24gdGhlIGdsb2JhbCB2YXJpYWJsZXMgdGhlIGZpcnN0IHRpbWUuICBJZiB5b3UKLSAgIiBsYXRlciBjaGFuZ2UgdGhlIHNvcnQgb3JkZXIsIGl0IHdpbGwgYmUgcmV0YWluZWQgaW4gdGhlIHM6c29ydGJ5Ci0gICIgdmFyaWFibGUgZm9yIHRoZSBuZXh0IHRpbWUgeW91IG9wZW4gZXhwbG9yZXIKLSAgbGV0IHc6c29ydGRpcmVjdGlvbj0xCi0gIGxldCB3OnNvcnRkaXJsYWJlbCA9ICIiCi0gIGxldCB3OnNvcnR0eXBlID0gIiIKLSAgaWYgZXhpc3RzKCJzOnNvcnRieSIpCi0gICAgbGV0IHNvcnRieT1zOnNvcnRieQotICBlbHNlCi0gICAgbGV0IHNvcnRieT1nOmV4cGxTb3J0QnkKLSAgZW5kaWYKLSAgaWYgc29ydGJ5ID1+ICJyZXZlcnNlIgotICAgIGxldCB3OnNvcnRkaXJlY3Rpb249LTEKLSAgICBsZXQgdzpzb3J0ZGlybGFiZWwgPSAicmV2ZXJzZSAiCi0gIGVuZGlmCi0gIGlmIHNvcnRieSA9fiAiZGF0ZSIKLSAgICBsZXQgdzpzb3J0dHlwZSA9ICJkYXRlIgotICBlbHNlaWYgc29ydGJ5ID1+ICJzaXplIgotICAgIGxldCB3OnNvcnR0eXBlID0gInNpemUiCi0gIGVsc2UKLSAgICBsZXQgdzpzb3J0dHlwZSA9ICJuYW1lIgotICBlbmRpZgotICBjYWxsIHM6U2V0U3VmZml4ZXNMYXN0KCkKLQotICAiIElmIGRpcmVjdG9yeSBpcyBhbHJlYWR5IGxvYWRlZCwgZG9uJ3Qgb3BlbiBpdCBhZ2FpbiEKLSAgaWYgbGluZSgnJCcpID4gMQotICAgIHNldGxvY2FsIHJlYWRvbmx5IG5vbW9kaWZpYWJsZQotICAgIHJldHVybgotICBlbmRpZgotCi0gICIgR2V0IHRoZSBjb21wbGV0ZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgdG8gbG9vayBhdCB3aXRoIGEgc2xhc2ggYXQKLSAgIiB0aGUgZW5kLiAgVGhpcyBhbHNvIHJlbW92ZXMgIi8uLi8iIGFuZCAiLy4vIiB0aGluZ3MuCi0gIGxldCBiOmNvbXBsZXRlUGF0aCA9IHM6UGF0aChleHBhbmQoIiU6cCIpKQotCi0gICIgQWRkIGEgc2xhc2ggYXQgdGhlIGVuZAotICBpZiBiOmNvbXBsZXRlUGF0aCAhfiAnLyQnCi0gICAgbGV0IGI6Y29tcGxldGVQYXRoID0gYjpjb21wbGV0ZVBhdGggLiAnLycKLSAgZW5kaWYKLQotICAiIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgZm9yIGV4ZWMgY29tbWFuZHMKLSAgbGV0IGI6Y29tcGxldGVQYXRoRXNjID0gZXNjYXBlKGI6Y29tcGxldGVQYXRoLCBzOmVzY2ZpbGVuYW1lKQotICBsZXQgYjpwYXJlbnREaXJFc2MgPSBzdWJzdGl0dXRlKGI6Y29tcGxldGVQYXRoRXNjLCAnL1teL10qLyQnLCAnLycsICdnJykKLQotICAiIFNldCB1cCBzeW50YXggaGlnaGxpZ2h0aW5nCi0gICIgU29tZXRoaW5nIHdyb25nIHdpdGggdGhlIGV2YWx1YXRpb24gb2YgdGhlIGNvbmRpdGlvbmFsIHRob3VnaC4uLgotICBpZiBoYXMoInN5bnRheCIpICYmIGV4aXN0cygiZzpzeW50YXhfb24iKSAmJiAhaGFzKCJzeW50YXhfaXRlbXMiKQotICAgIHN5biBtYXRjaCBicm93c2VTeW5vcHNpcyAgICAiXlwiWyAtXS4qIgotICAgIHN5biBtYXRjaCBicm93c2VEaXJlY3RvcnkgICAiW15cIl0uKi8gIgotICAgIHN5biBtYXRjaCBicm93c2VEaXJlY3RvcnkgICAiW15cIl0uKi8kIgotICAgIHN5biBtYXRjaCBicm93c2VDdXJEaXIgICAgICAiXlwiPSAuKiQiCi0gICAgc3luIG1hdGNoIGJyb3dzZVNvcnRCeSAgICAgICJeXCIgU29ydGVkIGJ5IC4qJCIgIGNvbnRhaW5zPWJyb3dzZVN1ZmZpeEluZm8KLSAgICBzeW4gbWF0Y2ggYnJvd3NlU3VmZml4SW5mbyAgIiguKikkIiAgY29udGFpbmVkCi0gICAgc3luIG1hdGNoIGJyb3dzZUZpbHRlciAgICAgICJeXCIgTm90IFNob3dpbmc6LiokIgotICAgIHN5biBtYXRjaCBicm93c2VGaWxldGltZSAgICAiq6tcZFwrJCIKLSAgICBleGVjKCdzeW4gbWF0Y2ggYnJvd3NlU3VmZml4ZXMgICAgIicgLiBiOnN1ZmZpeGVzSGlnaGxpZ2h0IC4gJyInKQotCi0gICAgImhpIGRlZiBsaW5rIGJyb3dzZVN5bm9wc2lzICAgIFByZVByb2MKLSAgICBoaSBkZWYgbGluayBicm93c2VTeW5vcHNpcyAgICBTcGVjaWFsCi0gICAgaGkgZGVmIGxpbmsgYnJvd3NlRGlyZWN0b3J5ICAgRGlyZWN0b3J5Ci0gICAgaGkgZGVmIGxpbmsgYnJvd3NlQ3VyRGlyICAgICAgU3RhdGVtZW50Ci0gICAgaGkgZGVmIGxpbmsgYnJvd3NlU29ydEJ5ICAgICAgU3RyaW5nCi0gICAgaGkgZGVmIGxpbmsgYnJvd3NlU3VmZml4SW5mbyAgVHlwZQotICAgIGhpIGRlZiBsaW5rIGJyb3dzZUZpbHRlciAgICAgIFN0cmluZwotICAgIGhpIGRlZiBsaW5rIGJyb3dzZUZpbGV0aW1lICAgIElnbm9yZQotICAgIGhpIGRlZiBsaW5rIGJyb3dzZVN1ZmZpeGVzICAgIFR5cGUKLSAgZW5kaWYKLQotICAiIFNldCBmaWx0ZXIgZm9yIGhpZGluZyBmaWxlcwotICBsZXQgYjpmaWx0ZXJGb3JtdWxhPXN1YnN0aXR1dGUoZzpleHBsSGlkZUZpbGVzLCAnXChbXlxcXVwpLCcsICdcMVxcfCcsICdnJykKLSAgaWYgYjpmaWx0ZXJGb3JtdWxhICE9ICcnCi0gICAgbGV0IGI6ZmlsdGVyaW5nPSJcbk5vdCBzaG93aW5nOiAiIC4gYjpmaWx0ZXJGb3JtdWxhCi0gIGVsc2UKLSAgICBsZXQgYjpmaWx0ZXJpbmc9IiIKLSAgZW5kaWYKLQotICAiIFNob3cgdGhlIGZpbGVzCi0gIGNhbGwgczpTaG93RGlyZWN0b3J5KCkKLQotICAiIFNldCB1cCBtYXBwaW5ncyBmb3IgdGhpcyBidWZmZXIKLSAgbGV0IGNwb19zYXZlID0gJmNwbwotICBzZXQgY3BvJnZpbQotICBubm9yZW1hcCA8YnVmZmVyPiA8Y3I+IDpjYWxsIDxTSUQ+RWRpdEVudHJ5KCIiLCJlZGl0Iik8Y3I+Ci0gIG5ub3JlbWFwIDxidWZmZXI+IC0gICAgOmV4ZWMgKCJzaWxlbnQgZSAiICAuIGI6cGFyZW50RGlyRXNjKTxjcj4KLSAgaWYgZXhpc3RzKCJnOmV4cGxGaWxlSGFuZGxlciIpCi0gICAgbm5vcmVtYXAgPGJ1ZmZlcj4geCAgICA6Y2FsbCA8U0lEPkV4ZWN1dGVFbnRyeSgpPGNyPgotICBlbmRpZgotICBubm9yZW1hcCA8YnVmZmVyPiBvICAgIDpjYWxsIDxTSUQ+T3BlbkVudHJ5KCk8Y3I+Ci0gIG5ub3JlbWFwIDxidWZmZXI+IE8gICAgOmNhbGwgPFNJRD5PcGVuRW50cnlQcmV2V2luZG93KCk8Y3I+Ci0gIG5ub3JlbWFwIDxidWZmZXI+IHAgICAgOmNhbGwgPFNJRD5FZGl0RW50cnkoIiIsInBlZGl0Iik8Y3I+Ci0gIG5ub3JlbWFwIDxidWZmZXI+ID8gICAgOmNhbGwgPFNJRD5Ub2dnbGVIZWxwKCk8Y3I+Ci0gIG5ub3JlbWFwIDxidWZmZXI+IGEgICAgOmNhbGwgPFNJRD5TaG93QWxsRmlsZXMoKTxjcj4KLSAgbm5vcmVtYXAgPGJ1ZmZlcj4gUiAgICA6Y2FsbCA8U0lEPlJlbmFtZUZpbGUoKTxjcj4KLSAgbm5vcmVtYXAgPGJ1ZmZlcj4gRCAgICA6LiBjYWxsIDxTSUQ+RGVsZXRlRmlsZSgpPGNyPgotICB2bm9yZW1hcCA8YnVmZmVyPiBEICAgIDpjYWxsIDxTSUQ+RGVsZXRlRmlsZSgpPGNyPgotICBubm9yZW1hcCA8YnVmZmVyPiBpICAgIDpjYWxsIDxTSUQ+VG9nZ2xlTG9uZ0xpc3QoKTxjcj4KLSAgbm5vcmVtYXAgPGJ1ZmZlcj4gcyAgICA6Y2FsbCA8U0lEPlNvcnRTZWxlY3QoKTxjcj4KLSAgbm5vcmVtYXAgPGJ1ZmZlcj4gciAgICA6Y2FsbCA8U0lEPlNvcnRSZXZlcnNlKCk8Y3I+Ci0gIG5ub3JlbWFwIDxidWZmZXI+IGMgICAgOmV4ZWMgImNkICIuYjpjb21wbGV0ZVBhdGhFc2M8Y3I+Ci0gIG5ub3JlbWFwIDxidWZmZXI+IDwyLWxlZnRtb3VzZT4gOmNhbGwgPFNJRD5Eb3VibGVDbGljaygpPGNyPgotICBpZiBleGlzdHMoIipFeHBsb3JlckN1c3RvbU1hcCIpCi0gICAgY2FsbCBFeHBsb3JlckN1c3RvbU1hcCgpCi0gIGVuZGlmCi0gIGxldCAmY3BvID0gY3BvX3NhdmUKLQotICAiIHByZXZlbnQgdGhlIGJ1ZmZlciBmcm9tIGJlaW5nIG1vZGlmaWVkCi0gIHNldGxvY2FsIHJlYWRvbmx5IG5vbW9kaWZpYWJsZQotZW5kZnVuY3Rpb24KLQotIi0tLQotIiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiB3aW5kb3dzIG9wZW4gdG8gdGhpcyBidWZmZXIgbnVtYmVyLgotIiBDYXJlIG9mIFllZ2FwcGFuIExha3NobWFuLiAgVGhhbmtzIQotZnVuISBzOkJ1ZkluV2luZG93cyhibnVtKQotICBsZXQgY250ID0gMAotICBsZXQgd2lubnVtID0gMQotICB3aGlsZSAxCi0gICAgbGV0IGJ1Zm51bSA9IHdpbmJ1Zm5yKHdpbm51bSkKLSAgICBpZiBidWZudW0gPCAwCi0gICAgICBicmVhawotICAgIGVuZGlmCi0gICAgaWYgYnVmbnVtID09IGE6Ym51bQotICAgICAgbGV0IGNudCA9IGNudCArIDEKLSAgICBlbmRpZgotICAgIGxldCB3aW5udW0gPSB3aW5udW0gKyAxCi0gIGVuZHdoaWxlCi0KLSAgcmV0dXJuIGNudAotZW5kZnVuY3Rpb24KLQotIiBJZiB0aGlzIGlzIHRoZSBvbmx5IHdpbmRvdywgb3BlbiBmaWxlIGluIGEgbmV3IHdpbmRvdwotIiBPdGhlcndpc2UsIG9wZW4gZmlsZSBpbiB0aGUgbW9zdCByZWNlbnRseSB2aXNpdGVkIHdpbmRvdwotIgotZnVuY3Rpb24hIHM6T3BlbkVudHJ5UHJldldpbmRvdygpCi0gICIgRmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHdpbmRvd3MKLSAgbGV0IG4gPSB3aW5ucigpCi0gIHdpbmNtZCBwCi0gICIgTm8gb3RoZXIgd2luZG93PyAgVGhlbiBvcGVuIGEgbmV3IG9uZQotICBpZiBuID09IHdpbm5yKCkKLSAgICBjYWxsIHM6T3BlbkVudHJ5KCkKLSAgIiBPdGhlciB3aW5kb3dzIGV4aXN0Ci0gIGVsc2UKLSAgICAiIENoZWNrIGlmIHRoZSBwcmV2aW91cyBidWZmZXIgaXMgbW9kaWZpZWQgLSBhc2sgaWYgdGhleSB3YW50IHRvIHNhdmUhCi0gICAgIiBXYXMgaXQgbW9kaWZpZWQsIGFuZCBpcyBpdCB0aGUgb25seSB3aW5kb3cgb3BlbiB0byB0aGlzIGZpbGUKLSAgICBpZiAmbW9kaWZpZWQgJiYgczpCdWZJbldpbmRvd3Mod2luYnVmbnIod2lubnIoKSkpIDwgMgotICAgICAgbGV0IGJ1Zm5hbWUgPSBidWZuYW1lKHdpbmJ1Zm5yKHdpbm5yKCkpKQotCi0gICAgICBsZXQgYWN0aW9uPWNvbmZpcm0oIlNhdmUgQ2hhbmdlcyBpbiAiIC4gYnVmbmFtZSAuICI/IiwiJlllc1xuJk5vXG4mQ2FuY2VsIikKLSAgICAgICIgWWVzIC0gdHJ5IHRvIHNhdmUgLSBpZiB0aGVyZSBpcyBhbiBlcnJvciwgY2FuY2VsCi0gICAgICBpZiBhY3Rpb24gPT0gMQotCWxldCB2OmVycm1zZyA9ICIiCi0Jc2lsZW50IHcKLQlpZiB2OmVycm1zZyAhPSAiIgotCSAgZWNob2VyciAiVW5hYmxlIHRvIHdyaXRlIGJ1ZmZlciEiCi0JICB3aW5jbWQgcAotCSAgcmV0dXJuCi0JZW5kaWYKLSAgICAgICIgTm8sIGFiYW5kb24gY2hhbmdlcwotICAgICAgZWxzZWlmIGFjdGlvbiA9PSAyCi0Jc2V0IG5vbW9kaWZpZWQKLQllY2hvbXNnICJXYXJuaW5nLCBhYmFuZG9uaW5nIGNoYW5nZXMgaW4gIiAuIGJ1Zm5hbWUKLSAgICAgICIgQ2FuY2VsIChvciBhbnkgb3RoZXIgcmVzdWx0KSwgZG9uJ3QgZG8gdGhlIG9wZW4KLSAgICAgIGVsc2UKLQl3aW5jbWQgcAotCXJldHVybgotICAgICAgZW5kaWYKLSAgICBlbmRpZgotICAgIHdpbmNtZCBwCi0gICAgY2FsbCBzOkVkaXRFbnRyeSgid2luY21kIHAiLCJlZGl0IikKLSAgZW5kaWYKLWVuZGZ1bmN0aW9uCi0KLQotIi0tLQotIiBPcGVuIGEgZmlsZSBvciBkaXJlY3RvcnkgaW4gYSBuZXcgd2luZG93LgotIiBVc2UgZzpleHBsU3BsaXRCZWxvdyBhbmQgZzpleHBsU3BsaXRSaWdodCB0byBkZWNpZGUgd2hlcmUgdG8gcHV0IHRoZQotIiBzcGxpdCB3aW5kb3csIGFuZCByZXNpemUgdGhlIG9yaWdpbmFsIGV4cGxvcmVyIHdpbmRvdyBpZiBpdCBpcwotIiBsYXJnZXIgdGhhbiBnOmV4cGxXaW5TaXplCi0iCi1mdW5jdGlvbiEgczpPcGVuRW50cnkoKQotICAiIEFyZSB3ZSBvbiBhIGxpbmUgd2l0aCBhIGZpbGUgbmFtZT8KLSAgbGV0IGwgPSBnZXRsaW5lKCIuIikKLSAgaWYgbCA9fiAnXiInCi0gICAgcmV0dXJuCi0gIGVuZGlmCi0KLSAgIiBDb3B5IHdpbmRvdyBzZXR0aW5ncyB0byBzY3JpcHQgc2V0dGluZ3MKLSAgbGV0IHM6c29ydGJ5PXc6c29ydGRpcmxhYmVsIC4gdzpzb3J0dHlwZQotICBsZXQgczpsb25naGVscCA9IHc6bG9uZ2hlbHAKLSAgbGV0IHM6bG9uZ2xpc3QgPSB3OmxvbmdsaXN0Ci0KLSAgIiBHZXQgdGhlIHdpbmRvdyBudW1iZXIgb2YgdGhlIGV4cGxvcmVyIHdpbmRvdwotICBsZXQgbiA9IHdpbm5yKCkKLQotICAiIFNhdmUgdGhlIHVzZXIncyBzZXR0aW5ncyBmb3Igc3BsaXRiZWxvdyBhbmQgc3BsaXRyaWdodAotICBsZXQgc2F2ZXNwbGl0YmVsb3c9JnNwbGl0YmVsb3cKLSAgbGV0IHNhdmVzcGxpdHJpZ2h0PSZzcGxpdHJpZ2h0Ci0KLSAgIiBGaWd1cmUgb3V0IGhvdyB0byBkbyB0aGUgc3BsaXQgYmFzZWQgb24gdGhlIHVzZXIncyBwcmVmZXJlbmNlcy4KLSAgIiBXZSB3YW50IHRvIHNwbGl0IHRvIHRoZSAobGVmdCxyaWdodCx0b3AsYm90dG9tKSBvZiB0aGUgZXhwbG9yZXIKLSAgIiB3aW5kb3csIGJ1dCB3ZSB3YW50IHRvIGV4dHJhY3QgdGhlIHNjcmVlbiByZWFsLWVzdGF0ZSBmcm9tIHRoZQotICAiIHdpbmRvdyBuZXh0IHRvIHRoZSBleHBsb3JlciBpZiBwb3NzaWJsZS4KLSAgIgotICAiICd0aGVyZScgd2lsbCBiZSBzZXQgdG8gYSBjb21tYW5kIHRvIG1vdmUgZnJvbSB0aGUgc3BsaXQgd2luZG93Ci0gICIgYmFjayB0byB0aGUgZXhwbG9yZXIgd2luZG93Ci0gICIKLSAgIiAnYmFjaycgd2lsbCBiZSBzZXQgdG8gYSBjb21tYW5kIHRvIG1vdmUgZnJvbSB0aGUgZXhwbG9yZXIgd2luZG93Ci0gICIgYmFjayB0byB0aGUgbmV3bHkgc3BsaXQgd2luZG93Ci0gICIKLSAgIiAncmlnaHQnIGFuZCAnYmVsb3cnIHdpbGwgYmUgc2V0IHRvIHRoZSBzZXR0aW5ncyBuZWVkZWQgZm9yCi0gICIgc3BsaXRiZWxvdyBhbmQgc3BsaXRyaWdodCBJRiB0aGUgZXhwbG9yZXIgaXMgdGhlIG9ubHkgd2luZG93LgotICAiCi0gIGlmIGc6ZXhwbFZlcnRpY2FsCi0gICAgaWYgZzpleHBsU3BsaXRSaWdodAotICAgICAgbGV0IHRoZXJlPSJ3aW5jbWQgaCIKLSAgICAgIGxldCBiYWNrID0id2luY21kIGwiCi0gICAgICBsZXQgcmlnaHQ9MQotICAgICAgbGV0IGJlbG93PTAKLSAgICBlbHNlCi0gICAgICBsZXQgdGhlcmU9IndpbmNtZCBsIgotICAgICAgbGV0IGJhY2sgPSJ3aW5jbWQgaCIKLSAgICAgIGxldCByaWdodD0wCi0gICAgICBsZXQgYmVsb3c9MAotICAgIGVuZGlmCi0gIGVsc2UKLSAgICBpZiBnOmV4cGxTcGxpdEJlbG93Ci0gICAgICBsZXQgdGhlcmU9IndpbmNtZCBrIgotICAgICAgbGV0IGJhY2sgPSJ3aW5jbWQgaiIKLSAgICAgIGxldCByaWdodD0wCi0gICAgICBsZXQgYmVsb3c9MQotICAgIGVsc2UKLSAgICAgIGxldCB0aGVyZT0id2luY21kIGoiCi0gICAgICBsZXQgYmFjayA9IndpbmNtZCBrIgotICAgICAgbGV0IHJpZ2h0PTAKLSAgICAgIGxldCBiZWxvdz0wCi0gICAgZW5kaWYKLSAgZW5kaWYKLQotICAiIEdldCB0aGUgZmlsZSBuYW1lCi0gIGxldCBmbj1zOkdldEZ1bGxGaWxlTmFtZSgpCi0KLSAgIiBBdHRlbXB0IHRvIGdvIHRvIGFkamFjZW50IHdpbmRvdwotICBleGVjKGJhY2spCi0gICIgSWYgbm8gYWRqYWNlbnQgd2luZG93LCBzZXQgc3BsaXRyaWdodCBhbmQgc3BsaXRiZWxvdyBhcHByb3ByaWF0ZWx5Ci0gIGlmIG4gPT0gd2lubnIoKQotICAgIGxldCAmc3BsaXRyaWdodD1yaWdodAotICAgIGxldCAmc3BsaXRiZWxvdz1iZWxvdwotICBlbHNlCi0gICAgIiBmb3VuZCBhZGphY2VudCB3aW5kb3cgLSBpbnZlcnQgc3BsaXQgZGlyZWN0aW9uCi0gICAgbGV0ICZzcGxpdHJpZ2h0PSFyaWdodAotICAgIGxldCAmc3BsaXRiZWxvdz0hYmVsb3cKLSAgZW5kaWYKLQotICAiIENyZWF0ZSBhIHZhcmlhYmxlIHRvIHVzZSBpZiBzcGxpdHRpbmcgdmVydGljYWxseQotICBsZXQgc3BsaXRNb2RlID0gIiIKLSAgaWYgZzpleHBsVmVydGljYWwgPT0gMQotICAgIGxldCBzcGxpdE1vZGUgPSAidmVydGljYWwiCi0gIGVuZGlmCi0KLSAgIiBJcyBpdCBhIGRpcmVjdG9yeT8gIElmIHNvLCBnZXQgYSByZWFsIHBhdGggdG8gaXQgaW5zdGVhZCBvZgotICAiIHJlbGF0aXZlIHBhdGguICBUaGlzIGFsc28gcmVtb3ZlcyAiLy4uLyIgYW5kICIvLi8iIHRoaW5ncy4KLSAgaWYgaXNkaXJlY3RvcnkoZm4pCi0gICAgbGV0IGZuID0gZm5hbWVtb2RpZnkoZm4sICI6cCIpCi0gIGVuZGlmCi0KLSAgIiBPcGVuIHRoZSBuZXcgd2luZG93Ci0gIGV4ZWMoInNpbGVudCAiIC4gc3BsaXRNb2RlLiIgc3AgIiAuIGVzY2FwZShmbixzOmVzY2ZpbGVuYW1lKSkKLQotICAiIHJlc2l6ZSB0aGUgZXhwbG9yZXIgd2luZG93IGlmIGl0IGlzIGxhcmdlciB0aGFuIHRoZSByZXF1ZXN0ZWQgc2l6ZQotICBleGVjKHRoZXJlKQotICBpZiBnOmV4cGxXaW5TaXplID1+ICdbMC05XVwrJyAmJiB3aW5oZWlnaHQoIiIpID4gZzpleHBsV2luU2l6ZQotICAgIGV4ZWMoInNpbGVudCAiLnNwbGl0TW9kZS4iIHJlc2l6ZSAiLmc6ZXhwbFdpblNpemUpCi0gIGVuZGlmCi0gIGV4ZWMoYmFjaykKLQotICAiIFJlc3RvcmUgc3BsaXRtb2RlIHNldHRpbmdzCi0gIGxldCAmc3BsaXRiZWxvdz1zYXZlc3BsaXRiZWxvdwotICBsZXQgJnNwbGl0cmlnaHQ9c2F2ZXNwbGl0cmlnaHQKLQotZW5kZnVuY3Rpb24KLQotZnVuY3Rpb24hIHM6RXhlY3V0ZUVudHJ5KCkKLSAgIiBBcmUgd2Ugb24gYSBsaW5lIHdpdGggYSBmaWxlIG5hbWU/Ci0gIGxldCBsID0gZ2V0bGluZSgiLiIpCi0gIGlmIGwgPX4gJ14iJwotICAgIHJldHVybgotICBlbmRpZgotCi0gICIgR2V0IHRoZSBmaWxlIG5hbWUKLSAgbGV0IGZuID0gczpHZXRGdWxsRmlsZU5hbWUoKQotICBpZiBoYXMoIndpbjMyIikgJiYgZm4gPX4gJ14vLycKLSAgICBsZXQgZm4gPSBzdWJzdGl0dXRlKGZuLCAnLycsICdcXCcsICdnJykKLSAgZW5kaWYKLSAgZXhlYyAiY2FsbCAiIC4gZzpleHBsRmlsZUhhbmRsZXIgLiAiKGZuKSIKLWVuZGZ1bmN0aW9uCi0KLSItLS0KLSIgRG91YmxlIGNsaWNrIHdpdGggdGhlIG1vdXNlCi0iCi1mdW5jdGlvbiBzOkRvdWJsZUNsaWNrKCkKLSAgaWYgZXhwYW5kKCI8Y2ZpbGU+IikgPX4gJ1tcXC9dJCcKLSAgICBjYWxsIHM6RWRpdEVudHJ5KCIiLCJlZGl0IikJCSIgZGlyZWN0b3J5OiBvcGVuIGluIHRoaXMgd2luZG93Ci0gIGVsc2UKLSAgICBjYWxsIHM6T3BlbkVudHJ5UHJldldpbmRvdygpCSIgZmlsZTogb3BlbiBpbiBhbm90aGVyIHdpbmRvdwotICBlbmRpZgotZW5kZnVuCi0KLSItLS0KLSIgT3BlbiBmaWxlIG9yIGRpcmVjdG9yeSBpbiB0aGUgc2FtZSB3aW5kb3cgYXMgdGhlIGV4cGxvcmVyIGlzCi0iIGN1cnJlbnRseSBpbgotIgotZnVuY3Rpb24hIHM6RWRpdEVudHJ5KG1vdmVmaXJzdCxlZGl0Y21kKQotICAiIEFyZSB3ZSBvbiBhIGxpbmUgd2l0aCBhIGZpbGUgbmFtZT8KLSAgbGV0IGwgPSBnZXRsaW5lKCIuIikKLSAgaWYgbCA9fiAnXiInCi0gICAgcmV0dXJuCi0gIGVuZGlmCi0KLSAgIiBDb3B5IHdpbmRvdyBzZXR0aW5ncyB0byBzY3JpcHQgc2V0dGluZ3MKLSAgbGV0IHM6c29ydGJ5PXc6c29ydGRpcmxhYmVsIC4gdzpzb3J0dHlwZQotICBsZXQgczpsb25naGVscCA9IHc6bG9uZ2hlbHAKLSAgbGV0IHM6bG9uZ2xpc3QgPSB3OmxvbmdsaXN0Ci0KLSAgIiBHZXQgdGhlIGZpbGUgbmFtZQotICBsZXQgZm4gPSBzOkdldEZ1bGxGaWxlTmFtZSgpCi0gIGlmIGlzZGlyZWN0b3J5KGZuKQotICAgICIgVGhpcyByZW1vdmVzICIvLi4vIiBhbmQgIi8uLyIgdGhpbmdzLgotICAgIGxldCBmbiA9IGZuYW1lbW9kaWZ5KGZuLCAiOnAiKQotICBlbmRpZgotCi0gICIgTW92ZSB0byBkZXNpcmVkIHdpbmRvdyBpZiBuZWVkZWQKLSAgZXhlYyhhOm1vdmVmaXJzdCkKLSAgIiBFZGl0IHRoZSBmaWxlL2RpcgotICBleGVjKGE6ZWRpdGNtZCAuICIgIiAuIGVzY2FwZShmbixzOmVzY2ZpbGVuYW1lKSkKLWVuZGZ1bmN0aW9uCi0KLQotIi0tLQotIiBDcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24gb3V0IG9mIHRoZSBzdWZmaXhlcyBvcHRpb24gZm9yIHNvcnRpbmcKLSIgYW5kIHNldCBhIHN0cmluZyB0byBpbmRpY2F0ZSB3aGV0aGVyIHdlIGFyZSBzb3J0aW5nIHdpdGggdGhlCi0iIHN1ZmZpeGVzIGF0IHRoZSBlbmQgKG9yIHRoZSBiZWdpbm5pbmcpCi0iCi1mdW5jdGlvbiEgczpTZXRTdWZmaXhlc0xhc3QoKQotICBsZXQgYjpzdWZmaXhlc1JlZ2V4cCA9ICdcKCcgLiBzdWJzdGl0dXRlKGVzY2FwZSgmc3VmZml4ZXMsczplc2NyZWdleHApLCcsJywnXFx8JywnZycpIC4gJ1wpJCcKLSAgbGV0IGI6c3VmZml4ZXNIaWdobGlnaHQgPSAnXlteIl0uKlwoJyAuIHN1YnN0aXR1dGUoZXNjYXBlKCZzdWZmaXhlcyxzOmVzY3JlZ2V4cCksJywnLCdcXHwnLCdnJykgLiAnXClcKCBcfCRcKScKLSAgaWYgaGFzKCJmbmFtZV9jYXNlIikKLSAgICBsZXQgYjpzdWZmaXhlc1JlZ2V4cCA9ICdcQycgLiBiOnN1ZmZpeGVzUmVnZXhwCi0gICAgbGV0IGI6c3VmZml4ZXNIaWdobGlnaHQgPSAnXEMnIC4gYjpzdWZmaXhlc0hpZ2hsaWdodAotICBlbHNlCi0gICAgbGV0IGI6c3VmZml4ZXNSZWdleHAgPSAnXGMnIC4gYjpzdWZmaXhlc1JlZ2V4cAotICAgIGxldCBiOnN1ZmZpeGVzSGlnaGxpZ2h0ID0gJ1xjJyAuIGI6c3VmZml4ZXNIaWdobGlnaHQKLSAgZW5kaWYKLSAgaWYgZzpleHBsU3VmZml4ZXNMYXN0ID4gMCAmJiAmc3VmZml4ZXMgIT0gIiIKLSAgICBsZXQgYjpzdWZmaXhlc2xhc3Q9IiAoIiAuICZzdWZmaXhlcyAuICIgYXQgZW5kIG9mIGxpc3QpIgotICBlbHNlaWYgZzpleHBsU3VmZml4ZXNMYXN0IDwgMCAmJiAmc3VmZml4ZXMgIT0gIiIKLSAgICBsZXQgYjpzdWZmaXhlc2xhc3Q9IiAoIiAuICZzdWZmaXhlcyAuICIgYXQgc3RhcnQgb2YgbGlzdCkiCi0gIGVsc2UKLSAgICBsZXQgYjpzdWZmaXhlc2xhc3Q9IiAoJ3N1ZmZpeGVzJyBtaXhlZCB3aXRoIGZpbGVzKSIKLSAgZW5kaWYKLWVuZGZ1bmN0aW9uCi0KLSItLS0KLSIgU2hvdyB0aGUgaGVhZGVyIGFuZCBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5Ci0iCi1mdW5jdGlvbiEgczpTaG93RGlyZWN0b3J5KCkKLSAgIkRlbGV0ZSBhbGwgbGluZXMKLSAgMSwkZCBfCi0gICIgUHJldmVudCBhIHJlcG9ydCBvZiBvdXIgYWN0aW9ucyBmcm9tIHNob3dpbmcgdXAKLSAgbGV0IG9sZFJlcD0mcmVwb3J0Ci0gIGxldCBzYXZlX3NjID0gJnNjCi0gIHNldCByZXBvcnQ9MTAwMDAgbm9zYwotCi0gICIgQWRkIHRoZSBoZWFkZXIKLSAgY2FsbCBzOkFkZEhlYWRlcigpCi0gICRkIF8KLQotICAiIERpc3BsYXkgdGhlIGZpbGVzCi0KLSAgIiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgZmlsZXMKLSAgbGV0IGZpbGVzID0gczpQYXRoKGdsb2IoYjpjb21wbGV0ZVBhdGhFc2MgLiAiKiIpKQotICBpZiBmaWxlcyAhPSAiIiAmJiBmaWxlcyAhfiAiXG4kIgotICAgIGxldCBmaWxlcyA9IGZpbGVzIC4gIlxuIgotICBlbmRpZgotCi0gICIgQWRkIHRoZSBkb3QgZmlsZXMgbm93LCBtYWtpbmcgc3VyZSAiLiIgaXMgbm90IGluY2x1ZGVkIQotICBsZXQgZmlsZXMgPSBmaWxlcyAuIHN1YnN0aXR1dGUoczpQYXRoKGdsb2IoYjpjb21wbGV0ZVBhdGhFc2MgLiAiLioiKSksICJbXlxuXSovLi9cXD1cbiIsICcnICwgJycpCi0gIGlmIGZpbGVzICE9ICIiICYmIGZpbGVzICF+ICJcbiQiCi0gICAgbGV0IGZpbGVzID0gZmlsZXMgLiAiXG4iCi0gIGVuZGlmCi0KLSAgIiBBcmUgdGhlcmUgYW55IGZpbGVzIGxlZnQgYWZ0ZXIgZmlsdGVyaW5nPwotICBpZiBmaWxlcyAhPSAiIgotICAgIG5vcm1hbCEgbXQKLSAgICBwdXQgPWZpbGVzCi0gICAgbGV0IGI6bWF4RmlsZUxlbiA9IDAKLSAgICAwCi0gICAgL14iPS8rMSwkZy9eL2NhbGwgczpNYXJrRGlycygpCi0gICAga2VlcGp1bXBzIG5vcm1hbCEgYHQKLSAgICBjYWxsIHM6QWRkRmlsZUluZm8oKQotICBlbmRpZgotCi0gIG5vcm1hbCEgenoKLQotICAiIE1vdmUgdG8gZmlyc3QgZGlyZWN0b3J5IGluIHRoZSBsaXN0aW5nCi0gIDAKLSAgL14iPS8rMQotCi0gICIgRG8gdGhlIHNvcnQKLSAgY2FsbCBzOlNvcnRMaXN0aW5nKCJMb2FkZWQgY29udGVudHMgb2YgIi5iOmNvbXBsZXRlUGF0aC4iLiAiKQotCi0gICIgTW92ZSB0byBmaXJzdCBkaXJlY3RvcnkgaW4gdGhlIGxpc3RpbmcKLSAgMAotICAvXiI9LysxCi0KLSAgbGV0ICZyZXBvcnQ9b2xkUmVwCi0gIGxldCAmc2MgPSBzYXZlX3NjCi0KLWVuZGZ1bmN0aW9uCi0KLSItLS0KLSIgTWFyayB3aGljaCBpdGVtcyBhcmUgZGlyZWN0b3JpZXMgLSBjYWxsZWQgb25jZSBmb3IgZWFjaCBmaWxlIG5hbWUKLSIgbXVzdCBiZSB1c2VkIG9ubHkgd2hlbiBzaXplL2RhdGUgaXMgbm90IGRpc3BsYXllZAotIgotZnVuY3Rpb24hIHM6TWFya0RpcnMoKQotICBsZXQgb2xkUmVwPSZyZXBvcnQKLSAgc2V0IHJlcG9ydD0xMDAwCi0gICJSZW1vdmUgc2xhc2hlcyBpZiBhZGRlZAotICBzOy8kOztlCi0gICJSZW1vdmVzIGFsbCB0aGUgbGVhZGluZyBzbGFzaGVzIGFuZCBhZGRzIHNsYXNoZXMgYXQgdGhlIGVuZCBvZiBkaXJlY3RvcmllcwotICBzO14uKlxcXChbXlxcXSpcKSQ7XDE7ZQotICBzO14uKi9cKFteL10qXCkkO1wxO2UKLSAgIm5vcm1hbCEgXgotICBsZXQgY3VyckxpbmU9Z2V0bGluZSgiLiIpCi0gIGlmIGlzZGlyZWN0b3J5KGI6Y29tcGxldGVQYXRoIC4gY3VyckxpbmUpCi0gICAgczskOy87Ci0gICAgbGV0IGZpbGVMZW49c3RybGVuKGN1cnJMaW5lKSsxCi0gIGVsc2UKLSAgICBsZXQgZmlsZUxlbj1zdHJsZW4oY3VyckxpbmUpCi0gICAgaWYgKGI6ZmlsdGVyRm9ybXVsYSE9IiIpICYmIChjdXJyTGluZSA9fiBiOmZpbHRlckZvcm11bGEpCi0gICAgICAiIERvbid0IHNob3cgdGhlIGZpbGUgaWYgaXQgaXMgdG8gYmUgZmlsdGVyZWQuCi0gICAgICBkIF8KLSAgICBlbmRpZgotICBlbmRpZgotICBpZiBmaWxlTGVuID4gYjptYXhGaWxlTGVuCi0gICAgbGV0IGI6bWF4RmlsZUxlbj1maWxlTGVuCi0gIGVuZGlmCi0gIGxldCAmcmVwb3J0PW9sZFJlcAotZW5kZnVuY3Rpb24KLQotIi0tLQotIiBNYWtlIHN1cmUgYSBwYXRoIGhhcyBwcm9wZXIgZm9ybQotIgotZnVuY3Rpb24hIHM6UGF0aChwKQotICBpZiBoYXMoImRvczE2IikgfHwgaGFzKCJkb3MzMiIpIHx8IGhhcygid2luMTYiKSB8fCBoYXMoIndpbjMyIikgfHwgaGFzKCJvczIiKQotICAgIHJldHVybiBzdWJzdGl0dXRlKGE6cCwnXFwnLCcvJywnZycpCi0gIGVsc2UKLSAgICByZXR1cm4gYTpwCi0gIGVuZGlmCi1lbmRmdW5jdGlvbgotCi0iLS0tCi0iIEV4dHJhY3QgdGhlIGZpbGUgbmFtZSBmcm9tIGEgbGluZSBpbiBzZXZlcmFsIGRpZmZlcmVudCBmb3JtcwotIgotZnVuY3Rpb24hIHM6R2V0RnVsbEZpbGVOYW1lRXNjKCkKLSAgICByZXR1cm4gczpFc2NhcGVGaWxlbmFtZShzOkdldEZ1bGxGaWxlTmFtZSgpKQotZW5kZnVuY3Rpb24KLQotZnVuY3Rpb24hIHM6R2V0RmlsZU5hbWVFc2MoKQotICAgIHJldHVybiBzOkVzY2FwZUZpbGVuYW1lKHM6R2V0RmlsZU5hbWUoKSkKLWVuZGZ1bmN0aW9uCi0KLWZ1bmN0aW9uISBzOkVzY2FwZUZpbGVuYW1lKG5hbWUpCi0gICAgcmV0dXJuIGVzY2FwZShhOm5hbWUsczplc2NmaWxlbmFtZSkKLWVuZGZ1bmN0aW9uCi0KLQotZnVuY3Rpb24hIHM6R2V0RnVsbEZpbGVOYW1lKCkKLSAgcmV0dXJuIHM6RXh0cmFjdEZ1bGxGaWxlTmFtZShnZXRsaW5lKCIuIikpCi1lbmRmdW5jdGlvbgotCi1mdW5jdGlvbiEgczpHZXRGaWxlTmFtZSgpCi0gIHJldHVybiBzOkV4dHJhY3RGaWxlTmFtZShnZXRsaW5lKCIuIikpCi1lbmRmdW5jdGlvbgotCi1mdW5jdGlvbiEgczpFeHRyYWN0RnVsbEZpbGVOYW1lKGxpbmUpCi0gICAgICBsZXQgZm49czpFeHRyYWN0RmlsZU5hbWUoYTpsaW5lKQotICAgICAgaWYgZm4gPT0gJy8nCi0JcmV0dXJuIGI6Y29tcGxldGVQYXRoCi0gICAgICBlbHNlCi0JcmV0dXJuIGI6Y29tcGxldGVQYXRoIC4gczpFeHRyYWN0RmlsZU5hbWUoYTpsaW5lKQotICAgICAgZW5kaWYKLWVuZGZ1bmN0aW9uCi0KLWZ1bmN0aW9uISBzOkV4dHJhY3RGaWxlTmFtZShsaW5lKQotICByZXR1cm4gc3Vic3RpdHV0ZShzdHJwYXJ0KGE6bGluZSwwLGI6bWF4RmlsZUxlbiksJ1xzXCskJywnJywnJykKLWVuZGZ1bmN0aW9uCi0KLSItLS0KLSIgR2V0IHRoZSBzaXplIG9mIHRoZSBmaWxlCi1mdW5jdGlvbiEgczpFeHRyYWN0RmlsZVNpemUobGluZSkKLSAgaWYgKHc6bG9uZ2xpc3Q9PTApCi0gICAgcmV0dXJuIGdldGZzaXplKHM6RXh0cmFjdEZpbGVOYW1lKGE6bGluZSkpCi0gIGVsc2UKLSAgICByZXR1cm4gc3RycGFydChhOmxpbmUsYjptYXhGaWxlTGVuKzIsYjptYXhGaWxlU2l6ZUxlbikKLSAgZW5kaWYKLWVuZGZ1bmN0aW9uCi0KLSItLS0KLSIgR2V0IHRoZSBkYXRlIG9mIHRoZSBmaWxlIGFzIGEgbnVtYmVyCi1mdW5jdGlvbiEgczpFeHRyYWN0RmlsZURhdGUobGluZSkKLSAgaWYgdzpsb25nbGlzdD09MAotICAgIHJldHVybiBnZXRmdGltZShzOkV4dHJhY3RGaWxlTmFtZShhOmxpbmUpKQotICBlbHNlCi0gICAgcmV0dXJuIHN0cnBhcnQobWF0Y2hzdHIoc3RycGFydChhOmxpbmUsYjptYXhGaWxlTGVuK2I6bWF4RmlsZVNpemVMZW4rNCksIqurLioiKSwyKSArIDAKLSAgZW5kaWYKLWVuZGZ1bmN0aW9uCi0KLQotIi0tLQotIiBBZGQgdGhlIGhlYWRlciB3aXRoIGhlbHAgaW5mb3JtYXRpb24KLSIKLWZ1bmN0aW9uISBzOkFkZEhlYWRlcigpCi0gICAgbGV0IHNhdmVfZj1AZgotICAgIDEKLSAgICBpZiB3OmxvbmdoZWxwPT0xCi0gICAgICBsZXQgQGY9IlwiIDxlbnRlcj4gOiBvcGVuIGZpbGUgb3IgZGlyZWN0b3J5XG4iCi0JICAgXC4iXCIgbyA6IG9wZW4gbmV3IHdpbmRvdyBmb3IgZmlsZS9kaXJlY3RvcnlcbiIKLQkgICBcLiJcIiBPIDogb3BlbiBmaWxlIGluIHByZXZpb3VzbHkgdmlzaXRlZCB3aW5kb3dcbiIKLQkgICBcLiJcIiBwIDogcHJldmlldyB0aGUgZmlsZVxuIgotICAgICAgaWYgZXhpc3RzKCJnOmV4cGxGaWxlSGFuZGxlciIpCi0JbGV0IEBmPUBmLiJcIiB4IDogZXhlY3V0ZSBmaWxlIG9yIGRpcmVjdG9yeVxuIgotICAgICAgZW5kaWYKLSAgICAgIGxldCBAZj1AZgotCSAgIFwuIlwiIGkgOiB0b2dnbGUgc2l6ZS9kYXRlIGxpc3RpbmdcbiIKLQkgICBcLiJcIiBzIDogc2VsZWN0IHNvcnQgZmllbGQgICAgciA6IHJldmVyc2Ugc29ydFxuIgotCSAgIFwuIlwiIC0gOiBnbyB1cCBvbmUgbGV2ZWwgICAgICBjIDogY2QgdG8gdGhpcyBkaXJcbiIKLQkgICBcLiJcIiBSIDogcmVuYW1lIGZpbGUgICAgICAgICAgRCA6IGRlbGV0ZSBmaWxlXG4iCi0JICAgXC4iXCIgOmhlbHAgZmlsZS1leHBsb3JlciBmb3IgZGV0YWlsZWQgaGVscFxuIgotICAgIGVsc2UKLSAgICAgIGxldCBAZj0iXCIgUHJlc3MgPyBmb3Iga2V5Ym9hcmQgc2hvcnRjdXRzXG4iCi0gICAgZW5kaWYKLSAgICBsZXQgQGY9QGYuIlwiIFNvcnRlZCBieSAiLnc6c29ydGRpcmxhYmVsLnc6c29ydHR5cGUuYjpzdWZmaXhlc2xhc3QuYjpmaWx0ZXJpbmcuIlxuIgotICAgIGxldCBAZj1AZi4iXCI9ICIuYjpjb21wbGV0ZVBhdGguIlxuIgotICAgIHB1dCEgZgotICAgIGxldCBAZj1zYXZlX2YKLWVuZGZ1bmN0aW9uCi0KLQotIi0tLQotIiBTaG93IHRoZSBzaXplIGFuZCBkYXRlIGZvciBlYWNoIGZpbGUKLSIKLWZ1bmN0aW9uISBzOkFkZEZpbGVJbmZvKCkKLSAgbGV0IHNhdmVfc2MgPSAmc2MKLSAgc2V0IG5vc2MKLQotICAiIE1hcmsgb3VyIHN0YXJ0aW5nIHBvaW50Ci0gIG5vcm1hbCEgbXQKLQotICBjYWxsIHM6UmVtb3ZlU2VwYXJhdG9ycygpCi0KLSAgIiBSZW1vdmUgYWxsIGluZm8KLSAgMAotICAvXiI9LysxLCRnL14vY2FsbCBzZXRsaW5lKGxpbmUoIi4iKSxzOkdldEZpbGVOYW1lKCkpCi0KLSAgIiBBZGQgaW5mbyBpZiByZXF1ZXN0ZWQKLSAgaWYgdzpsb25nbGlzdD09MQotICAgICIgQWRkIGZpbGUgc2l6ZSBhbmQgY2FsY3VsYXRlIG1heGltdW0gbGVuZ3RoIG9mIGZpbGUgc2l6ZSBmaWVsZAotICAgIGxldCBiOm1heEZpbGVTaXplTGVuID0gMAotICAgIDAKLSAgICAvXiI9LysxLCRnL14vbGV0IGZuPXM6R2V0RnVsbEZpbGVOYW1lKCkgfAotCQkgICBcbGV0IGZpbGVTaXplPWdldGZzaXplKGZuKSB8Ci0JCSAgIFxsZXQgZmlsZVNpemVMZW49c3RybGVuKGZpbGVTaXplKSB8Ci0JCSAgIFxpZiBmaWxlU2l6ZUxlbiA+IGI6bWF4RmlsZVNpemVMZW4gfAotCQkgICBcICBsZXQgYjptYXhGaWxlU2l6ZUxlbiA9IGZpbGVTaXplTGVuIHwKLQkJICAgXGVuZGlmIHwKLQkJICAgXGV4ZWMgIm5vcm1hbCEgIi4oYjptYXhGaWxlTGVuLXN0cmxlbihnZXRsaW5lKCIuIikpKzIpLiJBIFw8ZXNjPiIgfAotCQkgICBcZXhlYyAncy8kLycuZmlsZVNpemUuJy8nCi0KLSAgICAiIFJpZ2h0IGp1c3RpZnkgdGhlIGZpbGUgc2l6ZXMgYW5kCi0gICAgIiBhZGQgZmlsZSBtb2RpZmljYXRpb24gZGF0ZQotICAgIDAKLSAgICAvXiI9LysxLCRnL14vbGV0IGZuPXM6R2V0RnVsbEZpbGVOYW1lKCkgfAotCQkgICBcZXhlYyAibm9ybWFsISBBIFw8ZXNjPiRiIi4oYjptYXhGaWxlTGVuK2I6bWF4RmlsZVNpemVMZW4tc3RybGVuKGdldGxpbmUoIi4iKSkrMykuImkgXDxlc2M+XCJfeCIgfAotCQkgICBcZXhlYyAncy8kLyAnLmVzY2FwZShzOkZpbGVNb2REYXRlKGZuKSwgJy8nKS4nLycKLSAgICBzZXRsb2NhbCBub21vZGlmaWVkCi0gIGVuZGlmCi0KLSAgY2FsbCBzOkFkZFNlcGFyYXRvcnMoKQotCi0gICIgcmV0dXJuIHRvIHN0YXJ0Ci0gIGtlZXBqdW1wcyBub3JtYWwhIGB0Ci0KLSAgbGV0ICZzYyA9IHNhdmVfc2MKLWVuZGZ1bmN0aW9uCi0KLQotIi0tLS0KLSIgR2V0IHRoZSBtb2RpZmljYXRpb24gdGltZSBmb3IgYSBmaWxlCi0iCi1mdW5jdGlvbiEgczpGaWxlTW9kRGF0ZShuYW1lKQotICBsZXQgZmlsZXRpbWU9Z2V0ZnRpbWUoYTpuYW1lKQotICBpZiBmaWxldGltZSA+IDAKLSAgICByZXR1cm4gc3RyZnRpbWUoZzpleHBsRGF0ZUZvcm1hdCxmaWxldGltZSkgLiAiIKurIiAuIGZpbGV0aW1lCi0gIGVsc2UKLSAgICByZXR1cm4gIiIKLSAgZW5kaWYKLWVuZGZ1bmN0aW9uCi0KLSItLS0KLSIgRGVsZXRlIGEgZmlsZSBvciBmaWxlcwotIgotZnVuY3Rpb24hIHM6RGVsZXRlRmlsZSgpIHJhbmdlCi0gIGxldCBvbGRSZXAgPSAmcmVwb3J0Ci0gIGxldCAmcmVwb3J0ID0gMTAwMAotCi0gIGxldCBmaWxlc0RlbGV0ZWQgPSAwCi0gIGxldCBzdG9wRGVsID0gMAotICBsZXQgZGVsQWxsID0gMAotICBsZXQgY3VyckxpbmUgPSBhOmZpcnN0bGluZQotICBsZXQgbGFzdExpbmUgPSBhOmxhc3RsaW5lCi0gIHNldGxvY2FsIG5vcmVhZG9ubHkgbW9kaWZpYWJsZQotCi0gIHdoaWxlICgoY3VyckxpbmUgPD0gbGFzdExpbmUpICYmIChzdG9wRGVsPT0wKSkKLSAgICBleGVjKGN1cnJMaW5lKQotICAgIGxldCBmaWxlTmFtZT1zOkdldEZ1bGxGaWxlTmFtZSgpCi0gICAgaWYgaXNkaXJlY3RvcnkoZmlsZU5hbWUpCi0gICAgICBlY2hvIGZpbGVOYW1lLiIgOiBEaXJlY3RvcnkgZGVsZXRpb24gbm90IHN1cHBvcnRlZCB5ZXQiCi0gICAgICBsZXQgY3VyckxpbmUgPSBjdXJyTGluZSArIDEKLSAgICBlbHNlCi0gICAgICBpZiBkZWxBbGwgPT0gMAotCWxldCBzdXJlPWlucHV0KCJEZWxldGUgIi5maWxlTmFtZS4iICh5L24vYS9xKT8gIikKLQlpZiBzdXJlPT0iYSIKLQkgIGxldCBkZWxBbGwgPSAxCi0JZW5kaWYKLSAgICAgIGVuZGlmCi0gICAgICBpZiAoc3VyZT09InkiKSB8fCAoc3VyZT09ImEiKQotCWxldCBzdWNjZXNzPWRlbGV0ZShmaWxlTmFtZSkKLQlpZiBzdWNjZXNzIT0wCi0JICBleGVjICgiICIpCi0JICBlY2hvICJcbkNhbm5vdCBkZWxldGUgIi5maWxlTmFtZQotCSAgbGV0IGN1cnJMaW5lID0gY3VyckxpbmUgKyAxCi0JZWxzZQotCSAgZCBfCi0JICBsZXQgZmlsZXNEZWxldGVkID0gZmlsZXNEZWxldGVkICsgMQotCSAgbGV0IGxhc3RMaW5lID0gbGFzdExpbmUgLSAxCi0JZW5kaWYKLSAgICAgIGVsc2VpZiBzdXJlPT0icSIKLQlsZXQgc3RvcERlbCA9IDEKLSAgICAgIGVsc2VpZiBzdXJlPT0ibiIKLQlsZXQgY3VyckxpbmUgPSBjdXJyTGluZSArIDEKLSAgICAgIGVuZGlmCi0gICAgZW5kaWYKLSAgZW5kd2hpbGUKLSAgZWNobyAiXG4iLmZpbGVzRGVsZXRlZC4iIGZpbGVzIGRlbGV0ZWQiCi0gIGxldCAmcmVwb3J0ID0gb2xkUmVwCi0gIHNldGxvY2FsIG5vbW9kaWZpZWQKLSAgc2V0bG9jYWwgcmVhZG9ubHkgbm9tb2RpZmlhYmxlCi1lbmRmdW5jdGlvbgotCi0iLS0tCi0iIFJlbmFtZSBhIGZpbGUKLSIKLWZ1bmN0aW9uISBzOlJlbmFtZUZpbGUoKQotICBsZXQgZmlsZU5hbWU9czpHZXRGdWxsRmlsZU5hbWUoKQotICBzZXRsb2NhbCBub3JlYWRvbmx5IG1vZGlmaWFibGUKLSAgaWYgaXNkaXJlY3RvcnkoZmlsZU5hbWUpCi0gICAgZWNobyAiRGlyZWN0b3J5IHJlbmFtaW5nIG5vdCBzdXBwb3J0ZWQgeWV0IgotICBlbHNlaWYgZmlsZXJlYWRhYmxlKGZpbGVOYW1lKQotICAgIGxldCBhbHROYW1lPWlucHV0KCJSZW5hbWUgIi5maWxlTmFtZS4iIHRvIDogIikKLSAgICBlY2hvICIgIgotICAgIGlmIGFsdE5hbWU9PSIiCi0gICAgICBzZXRsb2NhbCByZWFkb25seSBub21vZGlmaWFibGUKLSAgICAgIHJldHVybgotICAgIGVuZGlmCi0gICAgbGV0IHN1Y2Nlc3M9cmVuYW1lKGZpbGVOYW1lLCBiOmNvbXBsZXRlUGF0aC5hbHROYW1lKQotICAgIGlmIHN1Y2Nlc3MhPTAKLSAgICAgIGVjaG8gIkNhbm5vdCByZW5hbWUgIi5maWxlTmFtZS4gIiB0byAiLmFsdE5hbWUKLSAgICBlbHNlCi0gICAgICBlY2hvICJSZW5hbWVkICIuZmlsZU5hbWUuIiB0byAiLmFsdE5hbWUKLSAgICAgIGxldCBvbGRSZXA9JnJlcG9ydAotICAgICAgc2V0IHJlcG9ydD0xMDAwCi0gICAgICBlIQotICAgICAgbGV0ICZyZXBvcnQ9b2xkUmVwCi0gICAgZW5kaWYKLSAgZW5kaWYKLSAgc2V0bG9jYWwgbm9tb2RpZmllZAotICBzZXRsb2NhbCByZWFkb25seSBub21vZGlmaWFibGUKLWVuZGZ1bmN0aW9uCi0KLSItLS0KLSIgVG9nZ2xlIGJldHdlZW4gc2hvcnQgYW5kIGxvbmcgaGVscAotIgotZnVuY3Rpb24hIHM6VG9nZ2xlSGVscCgpCi0gIGlmIGV4aXN0cygidzpsb25naGVscCIpICYmIHc6bG9uZ2hlbHA9PTAKLSAgICBsZXQgdzpsb25naGVscD0xCi0gICAgbGV0IHM6bG9uZ2hlbHA9MQotICBlbHNlCi0gICAgbGV0IHc6bG9uZ2hlbHA9MAotICAgIGxldCBzOmxvbmdoZWxwPTAKLSAgZW5kaWYKLSAgIiBBbGxvdyBtb2RpZmljYXRpb24KLSAgc2V0bG9jYWwgbm9yZWFkb25seSBtb2RpZmlhYmxlCi0gIGNhbGwgczpVcGRhdGVIZWFkZXIoKQotICAiIERpc2FsbG93IG1vZGlmaWNhdGlvbgotICBzZXRsb2NhbCByZWFkb25seSBub21vZGlmaWFibGUKLWVuZGZ1bmN0aW9uCi0KLSItLS0KLSIgVXBkYXRlIHRoZSBoZWFkZXIKLSIKLWZ1bmN0aW9uISBzOlVwZGF0ZUhlYWRlcigpCi0gIGxldCBvbGRSZXA9JnJlcG9ydAotICBzZXQgcmVwb3J0PTEwMDAwCi0gICIgU2F2ZSBwb3NpdGlvbgotICBub3JtYWwhIG10Ci0gICIgUmVtb3ZlIG9sZCBoZWFkZXIKLSAgMAotICAxLC9eIj0vIGQgXwotICAiIEFkZCBuZXcgaGVhZGVyCi0gIGNhbGwgczpBZGRIZWFkZXIoKQotICAiIEdvIGJhY2sgd2hlcmUgd2UgY2FtZSBmcm9tIGlmIHBvc3NpYmxlCi0gIDAKLSAgaWYgbGluZSgiJ3QiKSAhPSAwCi0gICAga2VlcGp1bXBzIG5vcm1hbCEgYHQKLSAgZW5kaWYKLQotICBsZXQgJnJlcG9ydD1vbGRSZXAKLSAgc2V0bG9jYWwgbm9tb2RpZmllZAotZW5kZnVuY3Rpb24KLQotIi0tLQotIiBUb2dnbGUgbG9uZyB2cy4gc2hvcnQgbGlzdGluZwotIgotZnVuY3Rpb24hIHM6VG9nZ2xlTG9uZ0xpc3QoKQotICBzZXRsb2NhbCBub3JlYWRvbmx5IG1vZGlmaWFibGUKLSAgaWYgZXhpc3RzKCJ3OmxvbmdsaXN0IikgJiYgdzpsb25nbGlzdD09MQotICAgIGxldCB3OmxvbmdsaXN0PTAKLSAgICBsZXQgczpsb25nbGlzdD0wCi0gIGVsc2UKLSAgICBsZXQgdzpsb25nbGlzdD0xCi0gICAgbGV0IHM6bG9uZ2xpc3Q9MQotICBlbmRpZgotICBjYWxsIHM6QWRkRmlsZUluZm8oKQotICBzZXRsb2NhbCByZWFkb25seSBub21vZGlmaWFibGUKLWVuZGZ1bmN0aW9uCi0KLSItLS0KLSIgU2hvdyBhbGwgZmlsZXMgLSByZW1vdmUgZmlsdGVyaW5nCi0iCi1mdW5jdGlvbiEgczpTaG93QWxsRmlsZXMoKQotICBzZXRsb2NhbCBub3JlYWRvbmx5IG1vZGlmaWFibGUKLSAgbGV0IGI6ZmlsdGVyRm9ybXVsYT0iIgotICBsZXQgYjpmaWx0ZXJpbmc9IiIKLSAgY2FsbCBzOlNob3dEaXJlY3RvcnkoKQotICBzZXRsb2NhbCByZWFkb25seSBub21vZGlmaWFibGUKLWVuZGZ1bmN0aW9uCi0KLSItLS0KLSIgRmlndXJlIG91dCB3aGF0IHNlY3Rpb24gd2UgYXJlIGluCi0iCi1mdW5jdGlvbiEgczpHZXRTZWN0aW9uKCkKLSAgbGV0IGZuPXM6R2V0RmlsZU5hbWUoKQotICBsZXQgc2VjdGlvbj0iZmlsZSIKLSAgaWYgZm4gPX4gJy8kJwotICAgIGxldCBzZWN0aW9uPSJkaXJlY3RvcnkiCi0gIGVsc2VpZiBmbiA9fiBiOnN1ZmZpeGVzUmVnZXhwCi0gICAgbGV0IHNlY3Rpb249InN1ZmZpeGVzIgotICBlbmRpZgotICByZXR1cm4gc2VjdGlvbgotZW5kZnVuY3Rpb24KLQotIi0tLQotIiBSZW1vdmUgc2VjdGlvbiBzZXBhcmF0b3JzCi0iCi1mdW5jdGlvbiEgczpSZW1vdmVTZXBhcmF0b3JzKCkKLSAgaWYgIWc6ZXhwbFVzZVNlcGFyYXRvcnMKLSAgICByZXR1cm4KLSAgZW5kaWYKLSAgMAotICBzaWxlbnQhIGV4ZWMgJy9eIj0vKzEsJGcvXicgLiBzOnNlcGFyYXRvciAuICIvZCBfIgotZW5kZnVuY3Rpb24KLQotIi0tLQotIiBBZGQgc2VjdGlvbiBzZXBhcmF0b3JzCi0iICAgYmV0d2VlbiBkaXJlY3RvcmllcyBhbmQgZmlsZXMgaWYgdGhleSBhcmUgc2VwYXJhdGVkCi0iICAgYmV0d2VlbiBmaWxlcyBhbmQgJ3N1ZmZpeGVzJyBmaWxlcyBpZiB0aGV5IGFyZSBzZXBhcmF0ZWQKLWZ1bmN0aW9uISBzOkFkZFNlcGFyYXRvcnMoKQotICBpZiAhZzpleHBsVXNlU2VwYXJhdG9ycwotICAgIHJldHVybgotICBlbmRpZgotICAwCi0gIC9eIj0vKzEKLSAgbGV0IGxhc3RzZWM9czpHZXRTZWN0aW9uKCkKLSAgKzEKLSAgLiwkZy9eL2xldCBzZWM9czpHZXRTZWN0aW9uKCkgfAotCSAgICAgICBcaWYgZzpleHBsRGlyc0ZpcnN0ICE9IDAgJiYgc2VjICE9IGxhc3RzZWMgJiYKLQkgICAgICAgXCAgIChsYXN0c2VjID09ICJkaXJlY3RvcnkiIHx8IHNlYyA9PSAiZGlyZWN0b3J5IikgfAotCSAgICAgICBcICBleGVjICJub3JtYWwhIEkiIC4gczpzZXBhcmF0b3IgLiAiXG5cPGVzYz4iIHwKLQkgICAgICAgXGVsc2VpZiBnOmV4cGxTdWZmaXhlc0xhc3QgIT0gMCAmJiBzZWMgIT0gbGFzdHNlYyAmJgotCSAgICAgICBcICAgKGxhc3RzZWMgPT0gInN1ZmZpeGVzIiB8fCBzZWMgPT0gInN1ZmZpeGVzIikgfAotCSAgICAgICBcICBleGVjICJub3JtYWwhIEkiIC4gczpzZXBhcmF0b3IgLiAiXG5cPGVzYz4iIHwKLQkgICAgICAgXGVuZGlmIHwKLQkgICAgICAgXGxldCBsYXN0c2VjPXNlYwotZW5kZnVuY3Rpb24KLQotIi0tLQotIiBHZW5lcmFsIHN0cmluZyBjb21wYXJpc29uIGZ1bmN0aW9uCi0iCi1mdW5jdGlvbiEgczpTdHJDbXAobGluZTEsIGxpbmUyLCBkaXJlY3Rpb24pCi0gIGlmIGE6bGluZTEgPCBhOmxpbmUyCi0gICAgcmV0dXJuIC1hOmRpcmVjdGlvbgotICBlbHNlaWYgYTpsaW5lMSA+IGE6bGluZTIKLSAgICByZXR1cm4gYTpkaXJlY3Rpb24KLSAgZWxzZQotICAgIHJldHVybiAwCi0gIGVuZGlmCi1lbmRmdW5jdGlvbgotCi0iLS0tCi0iIEZ1bmN0aW9uIGZvciB1c2Ugd2l0aCBTb3J0KCksIHRvIGNvbXBhcmUgdGhlIGZpbGUgbmFtZXMKLSIgRGVmYXVsdCBzb3J0IGlzIHRvIHB1dCBpbiBhbHBoYWJldGljYWwgb3JkZXIsIGJ1dCB3aXRoIGFsbCBkaXJlY3RvcnkKLSIgbmFtZXMgYmVmb3JlIGFsbCBmaWxlIG5hbWVzCi0iCi1mdW5jdGlvbiEgczpGaWxlTmFtZUNtcChsaW5lMSwgbGluZTIsIGRpcmVjdGlvbikKLSAgbGV0IGYxPXM6RXh0cmFjdEZpbGVOYW1lKGE6bGluZTEpCi0gIGxldCBmMj1zOkV4dHJhY3RGaWxlTmFtZShhOmxpbmUyKQotCi0gICIgUHV0IGRpcmVjdG9yeSBuYW1lcyBiZWZvcmUgZmlsZSBuYW1lcwotICBpZiAoZzpleHBsRGlyc0ZpcnN0ICE9IDApICYmIChmMSA9fiAnXC8kJykgJiYgKGYyICF+ICdcLyQnKQotICAgIHJldHVybiAtZzpleHBsRGlyc0ZpcnN0Ci0gIGVsc2VpZiAoZzpleHBsRGlyc0ZpcnN0ICE9IDApICYmIChmMSAhfiAnXC8kJykgJiYgKGYyID1+ICdcLyQnKQotICAgIHJldHVybiBnOmV4cGxEaXJzRmlyc3QKLSAgZWxzZWlmIChnOmV4cGxTdWZmaXhlc0xhc3QgIT0gMCkgJiYgKGYxID1+IGI6c3VmZml4ZXNSZWdleHApICYmIChmMiAhfiBiOnN1ZmZpeGVzUmVnZXhwKQotICAgIHJldHVybiBnOmV4cGxTdWZmaXhlc0xhc3QKLSAgZWxzZWlmIChnOmV4cGxTdWZmaXhlc0xhc3QgIT0gMCkgJiYgKGYxICF+IGI6c3VmZml4ZXNSZWdleHApICYmIChmMiA9fiBiOnN1ZmZpeGVzUmVnZXhwKQotICAgIHJldHVybiAtZzpleHBsU3VmZml4ZXNMYXN0Ci0gIGVsc2UKLSAgICByZXR1cm4gczpTdHJDbXAoc3Vic3RpdHV0ZShmMSwgIi8kIiwgIiIsICIiKSwgc3Vic3RpdHV0ZShmMiwgIi8kIiwgIiIsICIiKSwgYTpkaXJlY3Rpb24pCi0gIGVuZGlmCi0KLWVuZGZ1bmN0aW9uCi0KLSItLS0KLSIgRnVuY3Rpb24gZm9yIHVzZSB3aXRoIFNvcnQoKSwgdG8gY29tcGFyZSB0aGUgZmlsZSBtb2RpZmljYXRpb24gZGF0ZXMKLSIgRGVmYXVsdCBzb3J0IGlzIHRvIHB1dCBORVdFU1QgZmlsZXMgZmlyc3QuICBSZXZlcnNlIHdpbGwgcHV0IG9sZGVzdAotIiBmaWxlcyBmaXJzdAotIgotZnVuY3Rpb24hIHM6RmlsZURhdGVDbXAobGluZTEsIGxpbmUyLCBkaXJlY3Rpb24pCi0gIGxldCBmMT1zOkV4dHJhY3RGaWxlTmFtZShhOmxpbmUxKQotICBsZXQgZjI9czpFeHRyYWN0RmlsZU5hbWUoYTpsaW5lMikKLSAgbGV0IHQxPXM6RXh0cmFjdEZpbGVEYXRlKGE6bGluZTEpCi0gIGxldCB0Mj1zOkV4dHJhY3RGaWxlRGF0ZShhOmxpbmUyKQotCi0gICIgUHV0IGRpcmVjdG9yeSBuYW1lcyBiZWZvcmUgZmlsZSBuYW1lcwotICBpZiAoZzpleHBsRGlyc0ZpcnN0ICE9IDApICYmIChmMSA9fiAnXC8kJykgJiYgKGYyICF+ICdcLyQnKQotICAgIHJldHVybiAtZzpleHBsRGlyc0ZpcnN0Ci0gIGVsc2VpZiAoZzpleHBsRGlyc0ZpcnN0ICE9IDApICYmIChmMSAhfiAnXC8kJykgJiYgKGYyID1+ICdcLyQnKQotICAgIHJldHVybiBnOmV4cGxEaXJzRmlyc3QKLSAgZWxzZWlmIChnOmV4cGxTdWZmaXhlc0xhc3QgIT0gMCkgJiYgKGYxID1+IGI6c3VmZml4ZXNSZWdleHApICYmIChmMiAhfiBiOnN1ZmZpeGVzUmVnZXhwKQotICAgIHJldHVybiBnOmV4cGxTdWZmaXhlc0xhc3QKLSAgZWxzZWlmIChnOmV4cGxTdWZmaXhlc0xhc3QgIT0gMCkgJiYgKGYxICF+IGI6c3VmZml4ZXNSZWdleHApICYmIChmMiA9fiBiOnN1ZmZpeGVzUmVnZXhwKQotICAgIHJldHVybiAtZzpleHBsU3VmZml4ZXNMYXN0Ci0gIGVsc2VpZiB0MSA+IHQyCi0gICAgcmV0dXJuIC1hOmRpcmVjdGlvbgotICBlbHNlaWYgdDEgPCB0MgotICAgIHJldHVybiBhOmRpcmVjdGlvbgotICBlbHNlCi0gICAgcmV0dXJuIHM6U3RyQ21wKHN1YnN0aXR1dGUoZjEsICIvJCIsICIiLCAiIiksIHN1YnN0aXR1dGUoZjIsICIvJCIsICIiLCAiIiksIDEpCi0gIGVuZGlmCi1lbmRmdW5jdGlvbgotCi0iLS0tCi0iIEZ1bmN0aW9uIGZvciB1c2Ugd2l0aCBTb3J0KCksIHRvIGNvbXBhcmUgdGhlIGZpbGUgc2l6ZXMKLSIgRGVmYXVsdCBzb3J0IGlzIHRvIHB1dCBsYXJnZXN0IGZpbGVzIGZpcnN0LiAgUmV2ZXJzZSB3aWxsIHB1dAotIiBzbWFsbGVzdCBmaWxlcyBmaXJzdAotIgotZnVuY3Rpb24hIHM6RmlsZVNpemVDbXAobGluZTEsIGxpbmUyLCBkaXJlY3Rpb24pCi0gIGxldCBmMT1zOkV4dHJhY3RGaWxlTmFtZShhOmxpbmUxKQotICBsZXQgZjI9czpFeHRyYWN0RmlsZU5hbWUoYTpsaW5lMikKLSAgbGV0IHMxPXM6RXh0cmFjdEZpbGVTaXplKGE6bGluZTEpCi0gIGxldCBzMj1zOkV4dHJhY3RGaWxlU2l6ZShhOmxpbmUyKQotCi0gIGlmIChnOmV4cGxEaXJzRmlyc3QgIT0gMCkgJiYgKGYxID1+ICdcLyQnKSAmJiAoZjIgIX4gJ1wvJCcpCi0gICAgcmV0dXJuIC1nOmV4cGxEaXJzRmlyc3QKLSAgZWxzZWlmIChnOmV4cGxEaXJzRmlyc3QgIT0gMCkgJiYgKGYxICF+ICdcLyQnKSAmJiAoZjIgPX4gJ1wvJCcpCi0gICAgcmV0dXJuIGc6ZXhwbERpcnNGaXJzdAotICBlbHNlaWYgKGc6ZXhwbFN1ZmZpeGVzTGFzdCAhPSAwKSAmJiAoZjEgPX4gYjpzdWZmaXhlc1JlZ2V4cCkgJiYgKGYyICF+IGI6c3VmZml4ZXNSZWdleHApCi0gICAgcmV0dXJuIGc6ZXhwbFN1ZmZpeGVzTGFzdAotICBlbHNlaWYgKGc6ZXhwbFN1ZmZpeGVzTGFzdCAhPSAwKSAmJiAoZjEgIX4gYjpzdWZmaXhlc1JlZ2V4cCkgJiYgKGYyID1+IGI6c3VmZml4ZXNSZWdleHApCi0gICAgcmV0dXJuIC1nOmV4cGxTdWZmaXhlc0xhc3QKLSAgZWxzZWlmIHMxID4gczIKLSAgICByZXR1cm4gLWE6ZGlyZWN0aW9uCi0gIGVsc2VpZiBzMSA8IHMyCi0gICAgcmV0dXJuIGE6ZGlyZWN0aW9uCi0gIGVsc2UKLSAgICByZXR1cm4gczpTdHJDbXAoc3Vic3RpdHV0ZShmMSwgIi8kIiwgIiIsICIiKSwgc3Vic3RpdHV0ZShmMiwgIi8kIiwgIiIsICIiKSwgMSkKLSAgZW5kaWYKLWVuZGZ1bmN0aW9uCi0KLSItLS0KLSIgU29ydCBsaW5lcy4gIFNvcnRSKCkgaXMgY2FsbGVkIHJlY3Vyc2l2ZWx5LgotIgotZnVuY3Rpb24hIHM6U29ydFIoc3RhcnQsIGVuZCwgY21wLCBkaXJlY3Rpb24pCi0KLSAgIiBCb3R0b20gb2YgdGhlIHJlY3Vyc2lvbiBpZiBzdGFydCByZWFjaGVzIGVuZAotICBpZiBhOnN0YXJ0ID49IGE6ZW5kCi0gICAgcmV0dXJuCi0gIGVuZGlmCi0gICIKLSAgbGV0IHBhcnRpdGlvbiA9IGE6c3RhcnQgLSAxCi0gIGxldCBtaWRkbGUgPSBwYXJ0aXRpb24KLSAgbGV0IHBhcnRTdHIgPSBnZXRsaW5lKChhOnN0YXJ0ICsgYTplbmQpIC8gMikKLSAgbGV0IGkgPSBhOnN0YXJ0Ci0gIHdoaWxlIChpIDw9IGE6ZW5kKQotICAgIGxldCBzdHIgPSBnZXRsaW5lKGkpCi0gICAgZXhlYyAibGV0IHJlc3VsdCA9ICIgLiBhOmNtcCAuICIoc3RyLCBwYXJ0U3RyLCAiIC4gYTpkaXJlY3Rpb24gLiAiKSIKLSAgICBpZiByZXN1bHQgPD0gMAotICAgICAgIiBOZWVkIHRvIHB1dCBpdCBiZWZvcmUgdGhlIHBhcnRpdGlvbi4gIFN3YXAgbGluZXMgaSBhbmQgcGFydGl0aW9uLgotICAgICAgbGV0IHBhcnRpdGlvbiA9IHBhcnRpdGlvbiArIDEKLSAgICAgIGlmIHJlc3VsdCA9PSAwCi0JbGV0IG1pZGRsZSA9IHBhcnRpdGlvbgotICAgICAgZW5kaWYKLSAgICAgIGlmIGkgIT0gcGFydGl0aW9uCi0JbGV0IHN0cjIgPSBnZXRsaW5lKHBhcnRpdGlvbikKLQljYWxsIHNldGxpbmUoaSwgc3RyMikKLQljYWxsIHNldGxpbmUocGFydGl0aW9uLCBzdHIpCi0gICAgICBlbmRpZgotICAgIGVuZGlmCi0gICAgbGV0IGkgPSBpICsgMQotICBlbmR3aGlsZQotCi0gICIgTm93IHdlIGhhdmUgYSBwb2ludGVyIHRvIHRoZSAibWlkZGxlIiBlbGVtZW50LCBhcyBmYXIgYXMgcGFydGl0aW9uaW5nCi0gICIgZ29lcywgd2hpY2ggY291bGQgYmUgYW55d2hlcmUgYmVmb3JlIHRoZSBwYXJ0aXRpb24uICBNYWtlIHN1cmUgaXQgaXMgYXQKLSAgIiB0aGUgZW5kIG9mIHRoZSBwYXJ0aXRpb24uCi0gIGlmIG1pZGRsZSAhPSBwYXJ0aXRpb24KLSAgICBsZXQgc3RyID0gZ2V0bGluZShtaWRkbGUpCi0gICAgbGV0IHN0cjIgPSBnZXRsaW5lKHBhcnRpdGlvbikKLSAgICBjYWxsIHNldGxpbmUobWlkZGxlLCBzdHIyKQotICAgIGNhbGwgc2V0bGluZShwYXJ0aXRpb24sIHN0cikKLSAgZW5kaWYKLSAgY2FsbCBzOlNvcnRSKGE6c3RhcnQsIHBhcnRpdGlvbiAtIDEsIGE6Y21wLGE6ZGlyZWN0aW9uKQotICBjYWxsIHM6U29ydFIocGFydGl0aW9uICsgMSwgYTplbmQsIGE6Y21wLGE6ZGlyZWN0aW9uKQotZW5kZnVuY3Rpb24KLQotIi0tLQotIiBUbyBTb3J0IGEgcmFuZ2Ugb2YgbGluZXMsIHBhc3MgdGhlIHJhbmdlIHRvIFNvcnQoKSBhbG9uZyB3aXRoIHRoZSBuYW1lIG9mIGEKLSIgZnVuY3Rpb24gdGhhdCB3aWxsIGNvbXBhcmUgdHdvIGxpbmVzLgotIgotZnVuY3Rpb24hIHM6U29ydChjbXAsZGlyZWN0aW9uKSByYW5nZQotICBjYWxsIHM6U29ydFIoYTpmaXJzdGxpbmUsIGE6bGFzdGxpbmUsIGE6Y21wLCBhOmRpcmVjdGlvbikKLWVuZGZ1bmN0aW9uCi0KLSItLS0KLSIgUmV2ZXJzZSB0aGUgY3VycmVudCBzb3J0IG9yZGVyCi0iCi1mdW5jdGlvbiEgczpTb3J0UmV2ZXJzZSgpCi0gIGlmIGV4aXN0cygidzpzb3J0ZGlyZWN0aW9uIikgJiYgdzpzb3J0ZGlyZWN0aW9uID09IC0xCi0gICAgbGV0IHc6c29ydGRpcmVjdGlvbiA9IDEKLSAgICBsZXQgdzpzb3J0ZGlybGFiZWwgID0gIiIKLSAgZWxzZQotICAgIGxldCB3OnNvcnRkaXJlY3Rpb24gPSAtMQotICAgIGxldCB3OnNvcnRkaXJsYWJlbCAgPSAicmV2ZXJzZSAiCi0gIGVuZGlmCi0gIGxldCBzOnNvcnRieT13OnNvcnRkaXJsYWJlbCAuIHc6c29ydHR5cGUKLSAgY2FsbCBzOlNvcnRMaXN0aW5nKCIiKQotZW5kZnVuY3Rpb24KLQotIi0tLQotIiBUb2dnbGUgdGhyb3VnaCB0aGUgZGlmZmVyZW50IHNvcnQgb3JkZXJzCi0iCi1mdW5jdGlvbiEgczpTb3J0U2VsZWN0KCkKLSAgIiBTZWxlY3QgdGhlIG5leHQgc29ydCBvcHRpb24KLSAgaWYgIWV4aXN0cygidzpzb3J0dHlwZSIpCi0gICAgbGV0IHc6c29ydHR5cGU9Im5hbWUiCi0gIGVsc2VpZiB3OnNvcnR0eXBlID09ICJuYW1lIgotICAgIGxldCB3OnNvcnR0eXBlPSJzaXplIgotICBlbHNlaWYgdzpzb3J0dHlwZSA9PSAic2l6ZSIKLSAgICBsZXQgdzpzb3J0dHlwZT0iZGF0ZSIKLSAgZWxzZQotICAgIGxldCB3OnNvcnR0eXBlPSJuYW1lIgotICBlbmRpZgotICBsZXQgczpzb3J0Ynk9dzpzb3J0ZGlybGFiZWwgLiB3OnNvcnR0eXBlCi0gIGNhbGwgczpTb3J0TGlzdGluZygiIikKLWVuZGZ1bmN0aW9uCi0KLSItLS0KLSIgU29ydCB0aGUgZmlsZSBsaXN0aW5nCi0iCi1mdW5jdGlvbiEgczpTb3J0TGlzdGluZyhtc2cpCi0gICAgIiBTYXZlIHRoZSBsaW5lIHdlIHN0YXJ0IG9uIHNvIHdlIGNhbiBnbyBiYWNrIHRoZXJlIHdoZW4gZG9uZQotICAgICIgc29ydGluZwotICAgIGxldCBzdGFydGxpbmUgPSBnZXRsaW5lKCIuIikKLSAgICBsZXQgY29sPWNvbCgiLiIpCi0gICAgbGV0IGxpbj1saW5lKCIuIikKLQotICAgICIgQWxsb3cgbW9kaWZpY2F0aW9uCi0gICAgc2V0bG9jYWwgbm9yZWFkb25seSBtb2RpZmlhYmxlCi0KLSAgICAiIFNlbmQgYSBtZXNzYWdlIGFib3V0IHdoYXQgd2UncmUgZG9pbmcKLSAgICAiIERvbid0IHJlYWxseSBuZWVkIHRoaXMgLSBpdCBjYW4gY2F1c2UgaGl0IHJldHVybiBwcm9tcHRzCi0iICAgZWNobyBhOm1zZyAuICJTb3J0aW5nIGJ5IiAuIHc6c29ydGRpcmxhYmVsIC4gdzpzb3J0dHlwZQotCi0gICAgIiBDcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24gb3V0IG9mIHRoZSBzdWZmaXhlcyBvcHRpb24gaW4gY2FzZQotICAgICIgd2UgbmVlZCBpdC4KLSAgICBjYWxsIHM6U2V0U3VmZml4ZXNMYXN0KCkKLQotICAgICIgUmVtb3ZlIHNlY3Rpb24gc2VwYXJhdG9ycwotICAgIGNhbGwgczpSZW1vdmVTZXBhcmF0b3JzKCkKLQotICAgICIgRG8gdGhlIHNvcnQKLSAgICAwCi0gICAgaWYgdzpzb3J0dHlwZSA9PSAic2l6ZSIKLSAgICAgIC9eIj0vKzEsJGNhbGwgczpTb3J0KCJzOkZpbGVTaXplQ21wIix3OnNvcnRkaXJlY3Rpb24pCi0gICAgZWxzZWlmIHc6c29ydHR5cGUgPT0gImRhdGUiCi0gICAgICAvXiI9LysxLCRjYWxsIHM6U29ydCgiczpGaWxlRGF0ZUNtcCIsdzpzb3J0ZGlyZWN0aW9uKQotICAgIGVsc2UKLSAgICAgIC9eIj0vKzEsJGNhbGwgczpTb3J0KCJzOkZpbGVOYW1lQ21wIix3OnNvcnRkaXJlY3Rpb24pCi0gICAgZW5kaWYKLQotICAgICIgUmVwbGFjZSB0aGUgaGVhZGVyIHdpdGggdXBkYXRlZCBpbmZvcm1hdGlvbgotICAgIGNhbGwgczpVcGRhdGVIZWFkZXIoKQotCi0gICAgIiBSZXN0b3JlIHNlY3Rpb24gc2VwYXJhdG9ycwotICAgIGNhbGwgczpBZGRTZXBhcmF0b3JzKCkKLQotICAgICIgUmV0dXJuIHRvIHRoZSBwb3NpdGlvbiB3ZSBzdGFydGVkIG9uCi0gICAgMAotICAgIGlmIHNlYXJjaCgnXG1eJy5lc2NhcGUoc3RhcnRsaW5lLHM6ZXNjcmVnZXhwKSwnVycpIDw9IDAKLSAgICAgIGV4ZWN1dGUgbGluCi0gICAgZW5kaWYKLSAgICBleGVjdXRlICJub3JtYWwhIiBjb2wgLiAifCIKLQotICAgICIgRGlzYWxsb3cgbW9kaWZpY2F0aW9uCi0gICAgc2V0bG9jYWwgbm9tb2RpZmllZAotICAgIHNldGxvY2FsIHJlYWRvbmx5IG5vbW9kaWZpYWJsZQotCi1lbmRmdW5jdGlvbgotCi0iLS0tCi0iIFNldHVwIGZvciBlZGl0aW5nIGRpcmVjdG9yaWVzIGFmdGVyIHN0YXJ0aW5nIHVwIGJ5IGdvaW5nIHRvIGVhY2ggd2luZG93LgotIiBSZXF1aXJlZCBmb3IgInZpbSAtbyBmaWxlbmFtZSBkaXJuYW1lIgotIgotZnVuY3Rpb24hIHM6RWRpdEFsbCgpCi0gIGlmIHdpbmJ1Zm5yKDIpID09IC0xCi0gICAgcmV0dXJuCi0gIGVuZGlmCi0gIGxldCBjbWQgPSB3aW5yZXN0Y21kKCkKLSAgbGV0IGN1cndpbiA9IHdpbm5yKCkKLSAgd2hpbGUgMQotICAgIHdpbmNtZCB3Ci0gICAgaWYgd2lubnIoKSA9PSBjdXJ3aW4KLSAgICAgIGJyZWFrCi0gICAgZW5kaWYKLSAgICBjYWxsIHM6RWRpdERpcigpCi0gIGVuZHdoaWxlCi0gIGV4ZSBjbWQKLWVuZGZ1bmN0aW9uCi0KLSItLS0KLSIgU2V0IHVwIHRoZSBhdXRvY29tbWFuZCB0byBhbGxvdyBkaXJlY3RvcmllcyB0byBiZSBlZGl0ZWQKLSIKLWF1Z3JvdXAgZmlsZUV4cGxvcmVyCi0gIGF1IQotICAiIEZpbGwgdGhlIHdpbmRvdyB3aGVuIGVudGVyaW5nIHRoZSBidWZmZXI7ICI6ZWRpdCBkaXIiLgotICBhdSBCdWZFbnRlciAqIGNhbGwgczpFZGl0RGlyKCkKLSAgIiBTZXQgdGhlIHdpbmRvdyB2YXJpYWJsZXMgYWZ0ZXIgYSBzcGxpdDsgIjpzcGxpdCIuCi0gIGF1IFdpbkVudGVyICogaWYgIWV4aXN0cygidzpzb3J0ZGlyZWN0aW9uIikgfCBjYWxsIHM6RWRpdERpcigpIHwgZW5kaWYKLSAgIiBGaWxsIHRoZSB3aW5kb3dzIGFmdGVyIFZpbSBoYXMgc3RhcnRlZCB1cC4KLSAgYXUgVmltRW50ZXIgKiBjYWxsIHM6RWRpdEFsbCgpCi1hdWdyb3VwIGVuZAotCi0iIHJlc3RvcmUgJ2NwbycKLWxldCAmY3BvID0gczpjcG9fc2F2ZQotdW5sZXQgczpjcG9fc2F2ZQpkaWZmIC0tZ2l0IGEvcnVudGltZS9wbHVnaW4vbmV0cncudmltIGIvcnVudGltZS9wbHVnaW4vbmV0cncudmltCmluZGV4IDlmNGY5MWIuLmU2YWY0MWIgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvcGx1Z2luL25ldHJ3LnZpbQorKysgYi9ydW50aW1lL3BsdWdpbi9uZXRydy52aW0KQEAgLTEsNyArMSw3IEBACiAiIG5ldHJ3LnZpbTogSGFuZGxlcyBmaWxlIHRyYW5zZmVyIGFuZCByZW1vdGUgZGlyZWN0b3J5IGxpc3RpbmcgYWNyb3NzIGEgbmV0d29yawotIiBMYXN0IENoYW5nZToJSnVuIDMwLCAyMDA0CisiIExhc3QgQ2hhbmdlOglKdWwgMDgsIDIwMDQKICIgTWFpbnRhaW5lcjoJQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIFBoRCAgIDxkcmNoaXBOT1NQQU0gYXQgY2FtcGJlbGxmYW1pbHkuYml6PgotIiBWZXJzaW9uOgk0N2cJQVNUUk8tT05MWQorIiBWZXJzaW9uOgk0N2wJIEFTVFJPLU9OTFkKICIgTGljZW5zZToJVmltIExpY2Vuc2UgIChzZWUgdmltJ3MgOmhlbHAgbGljZW5zZSkKICIKICIgIEJ1dCBiZSBkb2VycyBvZiB0aGUgd29yZCwgYW5kIG5vdCBvbmx5IGhlYXJlcnMsIGRlbHVkaW5nIHlvdXIgb3duIHNlbHZlcwpAQCAtMTIsOCArMTIsOSBAQAogaWYgZXhpc3RzKCJsb2FkZWRfbmV0cnciKSB8fCAmY3AKICAgZmluaXNoCiBlbmRpZgotbGV0IGxvYWRlZF9uZXRydyA9ICJ2NDdnCUFTVFJPLU9OTFkiCi1sZXQgczpzYXZlX2NwbyAgID0gJmNwbworbGV0IGxvYWRlZF9uZXRydyAgICA9ICJ2NDdsCSBBU1RSTy1PTkxZIgorbGV0IHM6c2F2ZV9jcG8gICAgICA9ICZjcG8KK2xldCBsb2FkZWRfZXhwbG9yZXIgPSAxCiBzZXQgY3BvJnZpbQogCiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzQsNiArNzUsMzYgQEAKICAiIGFsdGVybmF0aXZlOiByZXZlcnNlICAoeiB5IHggLi4uKQogIGxldCBnOm5ldHJ3X3NvcnRfZGlyZWN0aW9uPSAibm9ybWFsIgogZW5kaWYKK2lmICFleGlzdHMoImc6bmV0cndfbG9uZ2xpc3QiKSB8fCBnOm5ldHJ3X2xvbmdsaXN0ID09IDAKKyBsZXQgZzpuZXRyd19sb25nbGlzdD0gMAorZWxzZQorIGxldCBnOm5ldHJ3X2xvbmdsaXN0PSAxCisgbGV0IGc6bmV0cndfbGlzdF9jbWQ9ICJzc2ggSE9TVE5BTUUgbHMgLUZMYSAtbCIKK2VuZGlmCitpZiAhZXhpc3RzKCJnOm5ldHJ3X3RpbWVmbXQiKQorIGxldCBnOm5ldHJ3X3RpbWVmbXQ9ICIlYyIKK2VuZGlmCitpZiAhZXhpc3RzKCJnOm5ldHJ3X2xvY2FsX3JtZGlyIikKKyBsZXQgZzpuZXRyd19sb2NhbF9ybWRpcj0gInJtZGlyIgorZW5kaWYKK2lmICFleGlzdHMoImc6bmV0cndfbG9jYWxfcmVuYW1lIikKKyBpZiBoYXMoIndpbjMyIikKKyAgbGV0IGc6bmV0cndfbG9jYWxfcmVuYW1lPSAicmVuIgorIGVsc2VpZiBoYXMoInVuaXgiKQorICBsZXQgZzpuZXRyd19sb2NhbF9yZW5hbWU9ICJtdiIKKyBlbmRpZgorZW5kaWYKK2lmICFleGlzdHMoImc6bmV0cndfbG9jYWxfbWtkaXIiKQorIGxldCBnOm5ldHJ3X2xvY2FsX21rZGlyPSAibWtkaXIiCitlbmRpZgoraWYgIWV4aXN0cygiZzpuZXRyd19ta2Rpcl9jbWQiKQorIGxldCBnOm5ldHJ3X21rZGlyX2NtZD0gInNzaCBIT1NUTkFNRSBta2RpciIKK2VuZGlmCisKKyIgQnVmRW50ZXIgZXZlbnQgaWdub3JlZCBieSBkZWNobyB3aGVuIGZvbGxvd2luZyB2YXJpYWJsZSBpcyB0cnVlCisiICBIYXMgYSBzaWRlIGVmZmVjdCB0aGF0IGRvYXUgQnVmUmVhZFBvc3QgZG9lc24ndCB3b3JrLCBzbworIiAgZmlsZXMgcmVhZCBieSBuZXR3b3JrIHRyYW5zZmVyIGFyZW4ndCBhcHByb3ByaWF0ZWx5IGhpZ2hsaWdodGVkLgorImxldCBnOmRlY2hvX2J1ZmVudGVyID0gMQkiRGVjaG8KIAogIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICIgRGVmYXVsdCB2YWx1ZXMgZm9yIGdsb2JhbCBwcm90b2NvbCB2YXJpYWJsZXMge3t7MQpAQCAtMTI1LDExICsxNTYsMTMgQEAKIAogIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICIgVHJhbnNwYXJlbmN5IFN1cHBvcnQ6IHt7ezEKLSIgQXV0by1kZXRlY3Rpb24gZm9yIGZ0cDovLyosIHJjcDovLyosIHNjcDovLyosIHNmdHA6Ly8qLCBodHRwOi8vKiwgZGF2Oi8vKiwKLSIgYW5kIHJzeW5jOi8vKgotIiBTaG91bGQgbWFrZSBmaWxlIHRyYW5zZmVycyBhY3Jvc3MgbmV0d29ya3MgdHJhbnNwYXJlbnQuICBDdXJyZW50bHkgSSBoYXZlbid0Ci0iIHN1cHBvcnRlZCBhcHBlbmRzLiAgSGV5LCBnb3R0YSBsZWF2ZSBzb21ldGhpbmcgZm9yIGEgZnV0dXJlIDxuZXRydy52aW0+IQorICIgRmlsZSBFeHBsb3Jlcjoge3t7MgogaWYgdmVyc2lvbiA+PSA2MDAKKyBhdWdyb3VwIEZpbGVFeHBsb3JlcgorICBhdSEKKyAgYXUgQnVmRW50ZXIgKiBjYWxsIDxTSUQ+TG9jYWxCcm93c2UoZXhwYW5kKCI8YWZpbGU+IikpCisgYXVncm91cCBFTkQKKyAiIE5ldHdvcmsgSGFuZGxlcjoge3t7MgogIGF1Z3JvdXAgTmV0d29yawogICBhdSEKICAgaWYgaGFzKCJ3aW4zMiIpCkBAIC0zMjgsNyArMzYxLDcgQEAKICIgICAgY2FsbCBEZWNobygicmVhZCB2aWEgZnRwKy5uZXRyYyAobWV0aG9kICMyKSIpCiAgICAgIGxldCBuZXRyd19mbmFtZT0gYjpuZXRyd19mbmFtZQogICAgICBuZXcKLSAgICAgc2V0IGZmPXVuaXgKKyAgICAgc2V0bG9jYWwgZmY9dW5peAogICAgICBleGUgInB1dCA9JyIuZzpuZXRyd19mdHBtb2RlLiInIgogICAgICBleGUgInB1dCA9J2dldCAiLm5ldHJ3X2ZuYW1lLiIgIi50bXBmaWxlLiInIgogICAgICBpZiBleGlzdHMoImc6bmV0cndfcG9ydCIpICYmIGc6bmV0cndfcG9ydCAhPSAiIgpAQCAtMzUzLDcgKzM4Niw3IEBACiAiICAgIGNhbGwgRGVjaG8oInJlYWQgdmlhIGZ0cCttaXBmIChtZXRob2QgIzMpIikKICAgICBsZXQgbmV0cndfZm5hbWU9IGI6bmV0cndfZm5hbWUKICAgICBuZXcKLSAgICBzZXQgZmY9dW5peAorICAgIHNldGxvY2FsIGZmPXVuaXgKICAgICBpZiBleGlzdHMoImc6bmV0cndfcG9ydCIpICYmIGc6bmV0cndfcG9ydCAhPSAiIgogICAgICBwdXQgPSdvcGVuICcuZzpuZXRyd19tYWNoaW5lLicgJy5nOm5ldHJ3X3BvcnQKICAgICBlbHNlCkBAIC00NDQsNyArNDc3LDcgQEAKICAgICAiIENvbnN0cnVjdCBleGVjdXRpb24gc3RyaW5nIChmb3VyIGxpbmVzKSB3aGljaCB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIGZpbHRlcgogICAgIGxldCBuZXRyd19mbmFtZT0gYjpuZXRyd19mbmFtZQogICAgIG5ldwotICAgIHNldCBmZj11bml4CisgICAgc2V0bG9jYWwgZmY9dW5peAogICAgIGlmIGV4aXN0cygiZzpuZXRyd19wb3J0IikgJiYgZzpuZXRyd19wb3J0ICE9ICIiCiAgICAgIHB1dCA9J29wZW4gJy5nOm5ldHJ3X21hY2hpbmUuJyAnLmc6bmV0cndfcG9ydAogICAgIGVsc2UKQEAgLTUzOCw3ICs1NzEsNyBAQAogICAgdW5sZXQgYjpuZXRyd19mbmFtZQogICBlbmRpZgogICBjYWxsIHM6TmV0T3B0aW9uUmVzdG9yZSgpCi0gCisKICIgIGNhbGwgRHJldCgiTmV0UmVhZCIpCiBlbmRmdW4KICIgZW5kIG9mIE5ldFJlYWQKQEAgLTYxNCw3ICs2NDcsNyBAQAogICAgIGV4ZSBidWZucigiIyIpLiJid2lwZSEiCiAgICBlbHNlCiAgICAgbGV0IG9sZHVsPSAmdWwKLSAgICBzZXQgdWw9LTEKKyAgICBzZXRsb2NhbCB1bD0tMQogICAgIGV4ZSBhOnJlYWRjbWQuIiAiLnY6Y21kYXJnLiIgIi5mbmFtZQogICAgIGlmIGRlbGxpbmUgPiAwCiAgICAgICIgd2lwZSBvdXQgbGFzdCBsaW5lLCB3aGljaCBzaG91bGQgYmUgYSBibGFuayBsaW5lIGFueXdheQpAQCAtNjQxLDYgKzY3NCwxMSBAQAogIiAgIGNhbGwgRGVjaG8oImNhbGxpbmcgTmV0UmVhZEZpeHVwKG1ldGhvZDwiLmE6bWV0aG9kLiI+IGxpbmUxPSIubGluZTEuIiBsaW5lMj0iLmxpbmUyLiIpIikKICAgIGNhbGwgTmV0UmVhZEZpeHVwKGE6bWV0aG9kLCBsaW5lMSwgbGluZTIpCiAgIGVuZGlmCisKKyAgIiB1cGRhdGUgdGhlIEJ1ZmZlcnMgbWVudQorICBpZiBoYXMoImd1aSIpICYmIGhhcygiZ3VpX3J1bm5pbmciKQorICAgc2lsZW50ISBlbWVudSBCdWZmZXJzLlJlZnJlc2hcIG1lbnUKKyAgZW5kaWYKICAKICIgIGNhbGwgRGVjaG8oInJlYWRjbWQ8Ii5hOnJlYWRjbWQuIj4gY21kYXJnPCIudjpjbWRhcmcuIj4gZm5hbWU8Ii5hOmZuYW1lLiI+IHJlYWRhYmxlPSIuZmlsZXJlYWRhYmxlKGE6Zm5hbWUpKQogIApAQCAtNzYzLDcgKzgwMSw3IEBACiAgICBlbHNlaWYgYjpuZXRyd19tZXRob2QgPT0gMgkiIHdyaXRlIHdpdGggZnRwICsgPC5uZXRyYz4KICAgICBsZXQgbmV0cndfZm5hbWUgPSBiOm5ldHJ3X2ZuYW1lCiAgICAgbmV3Ci0gICAgc2V0IGZmPXVuaXgKKyAgICBzZXRsb2NhbCBmZj11bml4CiAgICAgZXhlICJwdXQgPSciLmc6bmV0cndfZnRwbW9kZS4iJyIKICIgICAgY2FsbCBEZWNobygiIE5ldFdyaXRlOiBwdXQgPSciLmc6bmV0cndfZnRwbW9kZS4iJyIpCiAgICAgZXhlICJwdXQgPSdwdXQgIi50bXBmaWxlLiIgIi5uZXRyd19mbmFtZS4iJyIKQEAgLTc4OCw3ICs4MjYsNyBAQAogICAgZWxzZWlmIGI6bmV0cndfbWV0aG9kID09IDMJIiB3cml0ZSB3aXRoIGZ0cCArIG1hY2hpbmUsIGlkLCBwYXNzd2QsIGFuZCBmbmFtZQogICAgIGxldCBuZXRyd19mbmFtZT0gYjpuZXRyd19mbmFtZQogICAgIG5ldwotICAgIHNldCBmZj11bml4CisgICAgc2V0bG9jYWwgZmY9dW5peAogICAgIGlmIGV4aXN0cygiZzpuZXRyd19wb3J0IikgJiYgZzpuZXRyd19wb3J0ICE9ICIiCiAgICAgIHB1dCA9J29wZW4gJy5nOm5ldHJ3X21hY2hpbmUuJyAnLmc6bmV0cndfcG9ydAogICAgIGVsc2UKQEAgLTg1MCw3ICs4ODgsNyBAQAogICAgICIgQ29uc3RydWN0IGV4ZWN1dGlvbiBzdHJpbmcgKGZvdXIgbGluZXMpIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggZmlsdGVyCiAgICAgbGV0IG5ldHJ3X2ZuYW1lPSBiOm5ldHJ3X2ZuYW1lCiAgICAgbmV3Ci0gICAgc2V0IGZmPXVuaXgKKyAgICBzZXRsb2NhbCBmZj11bml4CiAgICAgaWYgZXhpc3RzKCJnOm5ldHJ3X3BvcnQiKSAmJiBnOm5ldHJ3X3BvcnQgIT0gIiIKICAgICAgcHV0ID0nb3BlbiAnLmc6bmV0cndfbWFjaGluZS4nICcuZzpuZXRyd19wb3J0CiAgICAgZWxzZQpAQCAtODk1LDcgKzkzMyw3IEBACiAgICAgIGxldCB1aWRfbWFjaGluZSA9IGc6bmV0cndfbWFjaGluZQogICAgIGVuZGlmCiAgICAgbmV3Ci0gICAgc2V0IGZmPXVuaXgKKyAgICBzZXRsb2NhbCBmZj11bml4CiAgICAgcHV0ID0ncHV0ICcudG1wZmlsZS4nICcubmV0cndfZm5hbWUKICAgICBub3JtIDFHZGQKICIgICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAlISIuZzpuZXRyd19zZnRwX2NtZC4nICcudWlkX21hY2hpbmUpCkBAIC05NTksMTggKzk5NywxOCBAQAogIiAgY2FsbCBEZWNobygic2V0IHVwIHBhdGggICA8Ii5wYXRoICAgLiI+IikKICIgIGNhbGwgRGVjaG8oInNldCB1cCBmbmFtZSAgPCIuZm5hbWUgIC4iPiIpCiAKLSAgIGxldCBsaXN0Y21kID0gc3Vic3RpdHV0ZShnOm5ldHJ3X2xpc3RfY21kLCdcPEhPU1ROQU1FXD4nLHVzZXIubWFjaGluZSwnJykKKyAgbGV0IGxpc3RjbWQgPSBzdWJzdGl0dXRlKGc6bmV0cndfbGlzdF9jbWQsJ1w8SE9TVE5BTUVcPicsdXNlci5tYWNoaW5lLCcnKQogCi0gICAiIG9wdGlvbmFsbHkgc29ydCBieSB0aW1lICgtdCkgb3IgYnkgc2l6ZSAoLVMpCi0gICBpZiBnOm5ldHJ3X3NvcnRfYnkgPX4gIl50IgotICAgIGxldCBsaXN0Y21kPSBsaXN0Y21kLiJ0IgotICAgZWxzZWlmIGc6bmV0cndfc29ydF9ieSA9fiAiXnMiCi0gICAgbGV0IGxpc3RjbWQ9IGxpc3RjbWQuIlMiCi0gICBlbmRpZgotICAgIiBvcHRpb25hbGx5IHNvcnQgaW4gcmV2ZXJzZQotICAgaWYgZzpuZXRyd19zb3J0X2RpcmVjdGlvbiA9fiAiXnIiCi0gICAgbGV0IGxpc3RjbWQ9IGxpc3RjbWQuInIiCi0gICBlbmRpZgorICAiIG9wdGlvbmFsbHkgc29ydCBieSB0aW1lICgtdCkgb3IgYnkgc2l6ZSAoLVMpCisgIGlmIGc6bmV0cndfc29ydF9ieSA9fiAiXnQiCisgICBsZXQgbGlzdGNtZD0gbGlzdGNtZC4idCIKKyAgZWxzZWlmIGc6bmV0cndfc29ydF9ieSA9fiAiXnMiCisgICBsZXQgbGlzdGNtZD0gbGlzdGNtZC4iUyIKKyAgZW5kaWYKKyAgIiBvcHRpb25hbGx5IHNvcnQgaW4gcmV2ZXJzZQorICBpZiBnOm5ldHJ3X3NvcnRfZGlyZWN0aW9uID1+ICJeciIKKyAgIGxldCBsaXN0Y21kPSBsaXN0Y21kLiJyIgorICBlbmRpZgogCiAiICBjYWxsIERlY2hvKCJzZXQgdXAgbGlzdGNtZDwiLmxpc3RjbWQuIj4iKQogCkBAIC05OTMsMTIgKzEwMzEsMTIgQEAKIAogICAgIiByZW1vdGUtcmVhZCB0aGUgcmVxdWVzdGVkIGZpbGUgaW50byBjdXJyZW50IGJ1ZmZlcgogICAgZW5ldyEKLSAgIGV4ZSAiZmlsZSAiLm1ldGhvZC4iOi8vIi51c2VyLm1hY2hpbmUuIi8iLnBhdGgKKyAgIGV4ZSAiZmlsZSAiLm1ldGhvZC4iOi8vIi51c2VyLm1hY2hpbmUuIi8iLmVzY2FwZShwYXRoLCcgJykKICAgIGV4ZSAic2lsZW50IGRvYXUgQnVmUmVhZFByZSAiLmZuYW1lCiAgICBzaWxlbnQgY2FsbCBzOk5ldFJlYWQobWV0aG9kLiI6Ly8iLnVzZXIubWFjaGluZS4iLyIucGF0aCkKICAgIGV4ZSAic2lsZW50IGRvYXUgQnVmUmVhZFBvc3QgIi5mbmFtZQotICAgMWQKLSAgIHNldCBub21vZAorICAga2VlcGp1bXBzIDFkCisgICBzZXRsb2NhbCBub21vZAogCiAiICAgY2FsbCBEcmV0KCJOZXRCcm93c2UgMCA6IGZpbGU8Ii5mbmFtZS4iPiIpCiAgICByZXR1cm4gMApAQCAtMTAyMSwyNiArMTA1OSwyOCBAQAogICBlbHNlCiAgICBlbmV3IQogICBlbmRpZgotICBzZXRsb2NhbCBidD1ub2ZpbGUgYmg9d2lwZSBub2JsCi0gIGV4ZSAnZmlsZSAnLmJ1Zm5hbWUKLSAgc2V0IGJ0PW5vd3JpdGUgYmg9aGlkZSBub2JsCi0gIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IDxjcj4gICAgICAgOmV4ZSAibm9ybSEgMCI8YmFyPmNhbGwgPFNJRD5OZXRCcm93c2UoPFNJRD5OZXRCcm93c2VDaGdEaXIoZXhwYW5kKCIlIiksZXhwYW5kKCI8Y1dPUkQ+IikpKTxjcj4KKyAgc2V0bG9jYWwgdHM9MzIgYnQ9bm9maWxlIGJoPXdpcGUgbm9ibAorICBleGUgJ2ZpbGUgJy5lc2NhcGUoYnVmbmFtZSwnICcpCisgIHNldGxvY2FsIGJ0PW5vd3JpdGUgYmg9aGlkZSBub2JsCisgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IDxjcj4JOmV4ZSAibm9ybSEgMCI8YmFyPmNhbGwgPFNJRD5OZXRCcm93c2UoPFNJRD5OZXRCcm93c2VDaGdEaXIoZXhwYW5kKCIlIiksPFNJRD5OZXRHZXREaXIoKSkpPGNyPgogICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiA8Yy1sPgk6ZXhlICJub3JtISAwIjxiYXI+Y2FsbCA8U0lEPk5ldEJyb3dzZSg8U0lEPk5ldEJyb3dzZUNoZ0RpcihleHBhbmQoIiUiKSwnLi8nKSk8Y3I+CiAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IC0JCTpleGUgIm5vcm0hIDAiPGJhcj5jYWxsIDxTSUQ+TmV0QnJvd3NlKDxTSUQ+TmV0QnJvd3NlQ2hnRGlyKGV4cGFuZCgiJSIpLCcuLi8nKSk8Y3I+CiAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGEJCTpsZXQgZzpuZXRyd19saXN0X3Nob3dhbGw9MTxiYXI+ZXhlICJub3JtISAwIjxiYXI+Y2FsbCA8U0lEPk5ldEJyb3dzZSg8U0lEPk5ldEJyb3dzZUNoZ0RpcihleHBhbmQoIiUiKSwnLi8nKSk8Y3I+Ci0gIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGgJCTpjYWxsIDxTSUQ+TmV0SGlkZUVkaXQoKTxjcj4KLSAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbwkJOmV4ZSBnOm5ldHJ3X3dpbnNpemUuIndpbmNtZCBzIjxiYXI+ZXhlICJub3JtISAwIjxiYXI+Y2FsbCA8U0lEPk5ldEJyb3dzZSg8U0lEPk5ldEJyb3dzZUNoZ0RpcihleHBhbmQoIiUiKSxleHBhbmQoIjxjV09SRD4iKSkpPGNyPgotICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiByCQk6bGV0IGc6bmV0cndfc29ydF9kaXJlY3Rpb249IChnOm5ldHJ3X3NvcnRfZGlyZWN0aW9uID1+ICduJyk/ICdyJyA6ICduJzxiYXI+ZXhlICJub3JtISAwIjxiYXI+Y2FsbCA8U0lEPk5ldEJyb3dzZSg8U0lEPk5ldEJyb3dzZUNoZ0RpcihleHBhbmQoIiUiKSxleHBhbmQoIjxjV09SRD4iKSkpPGNyPgorICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiA8TGVhZGVyPkgJOmNhbGwgPFNJRD5OZXRIaWRlRWRpdCgwKTxjcj4KKyAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gaQkJOmNhbGwgPFNJRD5OZXRMb25nTGlzdCgwKTxjcj4KKyAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbwkJOmV4ZSBnOm5ldHJ3X3dpbnNpemUuIndpbmNtZCBzIjxiYXI+ZXhlICJub3JtISAwIjxiYXI+Y2FsbCA8U0lEPk5ldEJyb3dzZSg8U0lEPk5ldEJyb3dzZUNoZ0RpcihleHBhbmQoIiUiKSw8U0lEPk5ldEdldERpcigpKSk8Y3I+CisgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHIJCTpsZXQgZzpuZXRyd19zb3J0X2RpcmVjdGlvbj0gKGc6bmV0cndfc29ydF9kaXJlY3Rpb24gPX4gJ24nKT8gJ3InIDogJ24nPGJhcj5leGUgIm5vcm0hIDAiPGJhcj5jYWxsIDxTSUQ+TmV0QnJvd3NlKDxTSUQ+TmV0QnJvd3NlQ2hnRGlyKGV4cGFuZCgiJSIpLDxTSUQ+TmV0R2V0RGlyKCkpKTxjcj4KICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcwkJOmxldCBnOm5ldHJ3X3NvcnRfYnk9IChnOm5ldHJ3X3NvcnRfYnkgPX4gJ24nKT8gJ3RpbWUnIDogKGc6bmV0cndfc29ydF9ieSA9fiAndCcpPyAnc2l6ZScgOiAnbmFtZSc8YmFyPmV4ZSAibm9ybSEgMCI8YmFyPmNhbGwgPFNJRD5OZXRCcm93c2UoPFNJRD5OZXRCcm93c2VDaGdEaXIoZXhwYW5kKCIlIiksJy4vJykpPGNyPgotICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiB2CQk6ZXhlIGc6bmV0cndfd2luc2l6ZS4id2luY21kIHYiPGJhcj5leGUgIm5vcm0hIDAiPGJhcj5jYWxsIDxTSUQ+TmV0QnJvd3NlKDxTSUQ+TmV0QnJvd3NlQ2hnRGlyKGV4cGFuZCgiJSIpLGV4cGFuZCgiPGNXT1JEPiIpKSk8Y3I+Ci0gIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHgJCTpleGUgIm5vcm0hIDAiPGJhcj5jYWxsIDxTSUQ+TmV0QnJvd3NlWCg8U0lEPk5ldEJyb3dzZUNoZ0RpcihleHBhbmQoIiUiKSxleHBhbmQoIjxjV09SRD4iKSkpPGNyPgotICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiA8Mi1sZWZ0bW91c2U+IDpleGUgIm5vcm0hIDAiPGJhcj5jYWxsIDxTSUQ+TmV0QnJvd3NlKDxTSUQ+TmV0QnJvd3NlQ2hnRGlyKGV4cGFuZCgiJSIpLGV4cGFuZCgiPGNXT1JEPiIpKSk8Y3I+CisgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHYJCTpleGUgZzpuZXRyd193aW5zaXplLiJ3aW5jbWQgdiI8YmFyPmV4ZSAibm9ybSEgMCI8YmFyPmNhbGwgPFNJRD5OZXRCcm93c2UoPFNJRD5OZXRCcm93c2VDaGdEaXIoZXhwYW5kKCIlIiksPFNJRD5OZXRHZXREaXIoKSkpPGNyPgorICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiB4CQk6ZXhlICJub3JtISAwIjxiYXI+Y2FsbCA8U0lEPk5ldEJyb3dzZVgoPFNJRD5OZXRCcm93c2VDaGdEaXIoZXhwYW5kKCIlIiksPFNJRD5OZXRHZXREaXIoKSksMSk8Y3I+CisgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IDwyLWxlZnRtb3VzZT4gOmV4ZSAibm9ybSEgMCI8YmFyPmNhbGwgPFNJRD5OZXRCcm93c2UoPFNJRD5OZXRCcm93c2VDaGdEaXIoZXhwYW5kKCIlIiksPFNJRD5OZXRHZXREaXIoKSkpPGNyPgogICBleGUgJ25ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IDxkZWw+CTpleGUgIm5vcm0hIDAiPGJhcj5jYWxsIDxTSUQ+TmV0QnJvd3NlUm0oIicudXNlci5tYWNoaW5lLiciLCInLnBhdGguJyIpPGNyPicKICAgZXhlICd2bm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiA8ZGVsPgk6Y2FsbCA8U0lEPk5ldEJyb3dzZVJtKCInLnVzZXIubWFjaGluZS4nIiwiJy5wYXRoLiciKTxjcj4nCiAgIGV4ZSAnbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gRAk6ZXhlICJub3JtISAwIjxiYXI+Y2FsbCA8U0lEPk5ldEJyb3dzZVJtKCInLnVzZXIubWFjaGluZS4nIiwiJy5wYXRoLiciKTxjcj4nCiAgIGV4ZSAndm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gRAk6Y2FsbCA8U0lEPk5ldEJyb3dzZVJtKCInLnVzZXIubWFjaGluZS4nIiwiJy5wYXRoLiciKTxjcj4nCiAgIGV4ZSAnbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gUgk6ZXhlICJub3JtISAwIjxiYXI+Y2FsbCA8U0lEPk5ldEJyb3dzZVJlbmFtZSgiJy51c2VyLm1hY2hpbmUuJyIsIicucGF0aC4nIik8Y3I+JwotICBubm9yZW1hcCA8YnVmZmVyPiA/CQk6aGUgbmV0cnctZGlyPGNyPgorICBleGUgJ25ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IDxMZWFkZXI+TSA6Y2FsbCA8U0lEPk5ldE1ha2VEaXIoIicudXNlci5tYWNoaW5lLiciKTxjcj4nCisgIG5ub3JlbWFwIDxidWZmZXI+ID8JCQk6aGUgbmV0cnctYnJvd3NlLWNtZHM8Y3I+CiAgIHNldGxvY2FsIG1hCiAKICAgIiBTZXQgdXAgdGhlIGJhbm5lcgpAQCAtMTA2OSw3ICsxMTA5LDcgQEAKICAga2VlcGp1bXBzIDFkCiAKICAgIiBtYW5pcHVsYXRlIHRoZSBkaXJlY3RvcnkgbGlzdGluZyAoaGlkZSwgc29ydCkKLSAgc2V0IGZ0PW5ldHJ3bGlzdAorICBzZXRsb2NhbCBmdD1uZXRyd2xpc3QKICAgaWYgbGluZSgiJCIpID49IGc6bmV0cndfYmFubmVyY250CiAgICBpZiAhZXhpc3RzKCJnOm5ldHJ3X2xpc3Rfc2hvd2FsbCIpCiAgICAgaWYgZzpuZXRyd19saXN0X2hpZGUgIT0gIiIKQEAgLTEwNzgsNiArMTExOCwxMyBAQAogICAgZWxzZQogICAgIHVubGV0IGc6bmV0cndfbGlzdF9zaG93YWxsCiAgICBlbmRpZgorICAgaWYgZzpuZXRyd19sb25nbGlzdAorICAgICIgZG8gYSBsb25nIGxpc3Rpbmc7IHRoZXNlIHN1YnN0aXR1dGlvbnMgbmVlZCB0byBiZSBkb25lIHByaW9yIHRvIHNvcnRpbmcKKyAgICBrZWVwanVtcHMgc2lsZW50IC9edG90YWxccypcZFwrJC9kCisgICAgZXhlICdrZWVwanVtcHMgc2lsZW50ICcuZzpuZXRyd19iYW5uZXJjbnQuJywkcy8gLT4gLiokLy9lJworICAgIGV4ZSAna2VlcGp1bXBzIHNpbGVudCAnLmc6bmV0cndfYmFubmVyY250LicsJHMvXChcU1wrXHNcK1xTXCtcc1wrXFNcK1xzXCtcU1wrXHNcK1xTXCtcc1wrXFNcK1xzXCtcU1wrXHNcK1xTXCtcKVxzXCtcKFxTXCtcKSQvXDJcdFwxL2UnCisgICAgZXhlIGc6bmV0cndfYmFubmVyY250CisgICBlbmRpZgogICAgaWYgZzpuZXRyd19zb3J0X2J5ID1+ICJebiIKICAgICBjYWxsIHM6U2V0U29ydCgpCiAgICAgZXhlICdrZWVwanVtcHMgc2lsZW50ICcuZzpuZXRyd19iYW5uZXJjbnQuJywkY2FsbCBzOk5ldFNvcnQoKScKQEAgLTExMTEsNyArMTE1OCw3IEBACiAgIGVsc2VpZiBuZXdkaXIgPT0gJy4vJwogICAgIiByZWZyZXNoIHRoZSBkaXJlY3RvcnkgbGlzdAogIiAgIGNhbGwgRGVjaG8oInJlZnJlc2ggZGlyZWN0b3J5IGxpc3RpbmciKQotICAgc2V0IG1hCisgICBzZXRsb2NhbCBtYQogICAgJWQKIAogICBlbHNlaWYgbmV3ZGlyID09ICcuLi8nCkBAIC0xMTM5LDYgKzExODYsMTggQEAKIGVuZGZ1bgogCiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiAgTmV0R2V0RGlyOiBpdCBnZXRzIHRoZSBkaXJlY3RvcnkgbmFtZWQgdW5kZXIgdGhlIGN1cnNvcgorZnVuISA8U0lEPk5ldEdldERpcigpCisiICBjYWxsIERmdW5jKCJOZXRHZXREaXIoKSIpCisgIGxldCBkaXJuYW1lPSBnZXRsaW5lKCIuIikKKyAgaWYgZGlybmFtZSA9fiAnXHQnCisgICBsZXQgZGlybmFtZT0gc3Vic3RpdHV0ZShkaXJuYW1lLCdcdC4qJCcsJycsJ2UnKQorICBlbmRpZgorIiAgY2FsbCBEcmV0KCJOZXRHZXREaXIgPCIuZGlybmFtZS4iPiIpCisgIHJldHVybiBkaXJuYW1lCitlbmRmdW4KKworIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICIgTmV0QnJvd3NlUm06IHJlbW92ZSBhIHJlbW90ZSBmaWxlIG9yIGRpcmVjdG9yeSB7e3syCiBmdW4hIDxTSUQ+TmV0QnJvd3NlUm0odXNyaG9zdCxwYXRoKSByYW5nZQogIiAgY2FsbCBEZnVuYygiTmV0QnJvd3NlUm0odXNyaG9zdDwiLmE6dXNyaG9zdC4iPiBwYXRoPCIuYTpwYXRoLiI+KSIpCkBAIC0xMjE1LDcgKzEyNzQsNyBAQAogCiAgICIgYXR0ZW1wdCB0byByZW5hbWUgZmlsZXMvZGlyZWN0b3JpZXMKICAgd2hpbGUgY3RyIDw9IGE6bGFzdGxpbmUKLSAgIGV4ZSBjdHIKKyAgIGV4ZSAia2VlcGp1bXBzICIuY3RyCiAKICAgIG5vcm0hIDAKICAgIGxldCBvbGRuYW1lPSBhOnBhdGguZXhwYW5kKCI8Y1dPUkQ+IikKQEAgLTEyMzQsMjEgKzEyOTMsNTIgQEAKICAgIiByZWZyZXNoIHRoZSBkaXJlY3RvcnkKICAgbGV0IGN1cmxpbmU9IGxpbmUoIi4iKQogICBjYWxsIDxTSUQ+TmV0QnJvd3NlKDxTSUQ+TmV0QnJvd3NlQ2hnRGlyKGV4cGFuZCgiJSIpLCcuLycpKQotICBleGUgY3VybGluZQorICBleGUgImtlZXBqdW1wcyAiLmN1cmxpbmUKICIgIGNhbGwgRHJldCgiTmV0QnJvd3NlUmVuYW1lIikKIGVuZGZ1bgogCiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIiBOZXRCcm93c2VYOiAgYWxsb3dzIHVzZXJzIHRvIHdyaXRlIGN1c3RvbSBmdW5jdGlvbnMgdG8gb3BlcmF0ZSBvbiB7e3syCi0iICAgICAgICAgICAgICBmaWxlcyBnaXZlbiB0aGVpciBleHRlbnNpb24KLWZ1biEgPFNJRD5OZXRCcm93c2VYKGZuYW1lKQotIiAgY2FsbCBEZnVuYygiTmV0QnJvd3NlWCgiLmE6Zm5hbWUuIikiKQorIiAgICAgICAgICAgICAgZmlsZXMgZ2l2ZW4gdGhlaXIgZXh0ZW5zaW9uLiAgUGFzc2VzIDA9bG9jYWwsIDE9cmVtb3RlCitmdW4hIDxTSUQ+TmV0QnJvd3NlWChmbmFtZSxyZW1vdGUpCisiICBjYWxsIERmdW5jKCJOZXRCcm93c2VYKCIuYTpmbmFtZS4iIHJlbW90ZT0iLmE6cmVtb3RlLiIpIikKIAogICBsZXQgZXh0ZW49IHN1YnN0aXR1dGUoYTpmbmFtZSwnLipcLlwoLlx7LX1cKScsJ1wxJywnZScpCiAiICBjYWxsIERlY2hvKCJleHRlbjwiLmV4dGVuLiI+ICIuIk5ldHJ3RmlsZUhhbmRsZXJfIi5leHRlbi4iKCk6ZXhpc3RzPSIuZXhpc3RzKCIqTmV0cndGaWxlSGFuZGxlcl8iLmV4dGVuKSkKICAgaWYgZXh0ZW4gIT0gIiIgJiYgZXhpc3RzKCIqTmV0cndGaWxlSGFuZGxlcl8iLmV4dGVuKQotICAgZXhlICJjYWxsIE5ldHJ3RmlsZUhhbmRsZXJfIi5leHRlbi4nKCInLmE6Zm5hbWUuJyIpJworCisgICBsZXQgZm5hbWU9IGE6Zm5hbWUKKyAgIGlmIGE6cmVtb3RlID09IDEKKyAgICAiIGNyZWF0ZSBhIGxvY2FsIGNvcHkKKyAgICBsZXQgZm5hbWU9IHRlbXBuYW1lKCkuIi4iLmV4dGVuCisiICAgIGNhbGwgRGVjaG8oImNyZWF0ZSBhIGxvY2FsIGNvcHkgb2YgPCIuYTpmbmFtZS4iPiBhcyA8Ii5mbmFtZS4iPiIpCisgICAgZXhlICJrZWVwanVtcHMgc2lsZW50IGJvdCAxbmV3ICIuYTpmbmFtZQorICAgIGxldCBlaWtlZXA9ICZlaQorICAgIHNldCBlaT1hbGwgYmg9ZGVsZXRlCisgICAgZXhlICJ3ISAiLmZuYW1lCisgICAgbGV0ICZlaT0gZWlrZWVwCisgICAgcQorICAgZW5kaWYKKworICAgZXhlICJsZXQgcmV0PSBOZXRyd0ZpbGVIYW5kbGVyXyIuZXh0ZW4uJygiJy5mbmFtZS4nIiknCisgICAgcmVkcmF3IQorCisgICAiIGNsZWFudXA6IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZSwKKyAgICIgICAgICAgICAgZGVsZXRlIGN1cnJlbnQgYnVmZmVyIGlmIHN1Y2Nlc3Mgd2l0aCBoYW5kbGVyLAorICAgIiAgICAgICAgICByZXR1cm4gdG8gcHJpb3IgYnVmZmVyIChkaXJlY3RvcnkgbGlzdGluZykKKyAgIGlmIGE6cmVtb3RlID09IDEgJiYgZm5hbWUgIT0gYTpmbmFtZQorIiAgICBjYWxsIERlY2hvKCJkZWxldGluZyB0ZW1wb3JhcnkgZmlsZTwiLmZuYW1lLiI+IikKKyAgICBjYWxsIGRlbGV0ZShmbmFtZSkKKyAgIGVuZGlmCisgICBpZiByZXQgIT0gMAorICAgIGxldCBlaWtlZXA9ICZlaQorICAgIHNldCBlaT1hbGwgYmg9ZGVsZXRlIGJ0PW5vZmlsZQorICAgIGV4ZSAibm9ybSEgXDxjLW8+IgorICAgIGxldCAmZWk9IGVpa2VlcAorICAgIHJlZHJhdyEKKyAgIGVuZGlmCiAgIGVuZGlmCisKICIgIGNhbGwgRHJldCgiTmV0QnJvd3NlWCIpCiBlbmRmdW4KIApAQCAtMTI3Niw4ICsxMzY2LDggQEAKIAogIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICIgTmV0SGlkZUVkaXQ6IGFsbG93cyB1c2VyIHRvIGVkaXQgdGhlIGZpbGUvZGlyZWN0b3J5IGhpZGluZyBsaXN0Ci1mdW4hIDxTSUQ+TmV0SGlkZUVkaXQoKQotIiAgY2FsbCBEZnVuYygiTmV0SGlkZUVkaXQoKSIpCitmdW4hIDxTSUQ+TmV0SGlkZUVkaXQobW9kZSkKKyIgIGNhbGwgRGZ1bmMoIk5ldEhpZGVFZGl0KG1vZGU9Ii5hOm1vZGUuIikiKQogCiAgIGNhbGwgaW5wdXRzYXZlKCkKICAgbGV0IG5ld2hpZGU9IGlucHV0KCJFZGl0IEhpZGluZyBMaXN0OiAiLGc6bmV0cndfbGlzdF9oaWRlKQpAQCAtMTI4NSwxMiArMTM3NSw0MjcgQEAKIAogICAiIHJlZnJlc2ggdGhlIGxpc3RpbmcKICAgbGV0IGc6bmV0cndfbGlzdF9oaWRlPSBuZXdoaWRlCi0gIHNpbGVudCBjYWxsIHM6TmV0QnJvd3NlKHM6TmV0QnJvd3NlQ2hnRGlyKGV4cGFuZCgiJSIpLCcuLycpKQorICBpZiBhOm1vZGUgPT0gMAorICAgc2lsZW50IGNhbGwgczpOZXRCcm93c2UoczpOZXRCcm93c2VDaGdEaXIoZXhwYW5kKCIlIiksJy4vJykpCisgIGVsc2UKKyAgIHNpbGVudCBjYWxsIHM6TG9jYWxCcm93c2UoczpOZXRCcm93c2VDaGdEaXIoZXhwYW5kKCIlIiksJy4vJykpCisgIGVuZGlmCiAKICIgIGNhbGwgRHJldCgiTmV0SGlkZUVkaXQiKQogZW5kZnVuCiAKLSIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiAgTmV0TG9uZ0xpc3Q6IHt7ezIKK2Z1biEgPFNJRD5OZXRMb25nTGlzdChtb2RlKQorIiAgY2FsbCBEZnVuYygiTmV0TG9uZ0xpc3QobW9kZT0iLmE6bW9kZS4iKSBuZXRyd19sb25nbGlzdD0iLmc6bmV0cndfbG9uZ2xpc3QpCisKKyAgaWYgZzpuZXRyd19sb25nbGlzdCAhPSAwCisgICAiIHR1cm4gbG9uZyBsaXN0aW5nIG9mZgorICAgbGV0IGc6bmV0cndfbG9uZ2xpc3QgPSAwCisgICBsZXQgZzpuZXRyd19saXN0X2NtZCA9IHN1YnN0aXR1dGUoZzpuZXRyd19saXN0X2NtZCwnIC1sJywnJywnZ2UnKQorCisgIGVsc2UKKyAgICIgdHVybiBsb25nIGxpc3Rpbmcgb24KKyAgIGxldCBnOm5ldHJ3X2xvbmdsaXN0ID0gMQorICAgbGV0IGc6bmV0cndfbGlzdF9jbWQgPSBnOm5ldHJ3X2xpc3RfY21kLiIgLWwiCisgIGVuZGlmCisKKyAgIiByZWZyZXNoIHRoZSBsaXN0aW5nCisgIGlmIGE6bW9kZSA9PSAwCisgICBzaWxlbnQgY2FsbCA8U0lEPk5ldEJyb3dzZSg8U0lEPk5ldEJyb3dzZUNoZ0RpcihleHBhbmQoIiUiKSwiLi8iKSkKKyAgZWxzZQorICAgc2lsZW50IGNhbGwgPFNJRD5Mb2NhbEJyb3dzZSg8U0lEPkxvY2FsQnJvd3NlQ2hnRGlyKGV4cGFuZCgiJSIpLCIuLyIpKQorICBlbmRpZgorCisiICBjYWxsIERyZXQoIk5ldExvbmdMaXN0IDogZzpuZXRyd19sb25nbGlzdD0iLmc6bmV0cndfbG9uZ2xpc3QpCitlbmRmdW4KKworIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgTmV0TWFrZURpcjogdGhpcyBmdW5jdGlvbiBtYWtlcyBhIGRpcmVjdG9yeSAoYm90aCBsb2NhbCBhbmQgcmVtb3RlKQorZnVuISA8U0lEPk5ldE1ha2VEaXIodXNyaG9zdCkKKyIgIGNhbGwgRGZ1bmMoIk5ldE1ha2VEaXIodXNyaG9zdDwiLmE6dXNyaG9zdC4iPikiKQorCisgICIgZ2V0IG5hbWUgb2YgbmV3IGRpcmVjdG9yeSBmcm9tIHVzZXIuICBBIGJhcmUgPENSPiB3aWxsIHNraXAuCisgICIgaWYgaXRzIGN1cnJlbnRseSBhIGRpcmVjdG9yeSwgYWxzbyByZXF1ZXN0IHdpbGwgYmUgc2tpcHBlZCwgYnV0IHdpdGgKKyAgIiBhIG1lc3NhZ2UuCisgIGNhbGwgaW5wdXRzYXZlKCkKKyAgbGV0IG5ld2Rpcm5hbWU9IGlucHV0KCJQbGVhc2UgZ2l2ZSBkaXJlY3RvcnkgbmFtZTogIikKKyAgY2FsbCBpbnB1dHJlc3RvcmUoKQorCisgIGlmIG5ld2Rpcm5hbWUgPT0gIiIKKyIgICBjYWxsIERyZXQoIk5ldE1ha2VEaXIgOiB1c2VyIGFib3J0ZWQgd2l0aCBiYXJlIDxjcj4iKQorICAgcmV0dXJuCisgIGVuZGlmCisKKyAgaWYgYTp1c3Job3N0ID09ICIiCisKKyAgICIgTG9jYWwgbWtkaXI6CisgICAiIHNhbml0eSBjaGVja3MKKyAgIGlmIGlzZGlyZWN0b3J5KG5ld2Rpcm5hbWUpCisgICAgZWNob2VyciAiKioqd2FybmluZyoqKiA8Ii5uZXdkaXJuYW1lLiI+IGlzIGFscmVhZHkgYSBkaXJlY3RvcnkhIgorIiAgICBjYWxsIERyZXQoIk5ldE1ha2VEaXIgOiBkaXJlY3Rvcnk8Ii5uZXdkaXJuYW1lLiI+IGV4aXN0cyBwcmV2aW91c2x5IikKKyAgICByZXR1cm4KKyAgIGVuZGlmCisgICBpZiBmaWxlcmVhZGFibGUobmV3ZGlybmFtZSkKKyAgICBlY2hvZXJyICIqKip3YXJuaW5nKioqIDwiLm5ld2Rpcm5hbWUuIj4gaXMgYWxyZWFkeSBhIGZpbGUhIgorIiAgICBjYWxsIERyZXQoIk5ldE1ha2VEaXIgOiBmaWxlPCIubmV3ZGlybmFtZS4iPiBleGlzdHMgcHJldmlvdXNseSIpCisgICAgcmV0dXJuCisgICBlbmRpZgorICAgZXhlICJzaWxlbnQhICEiLmc6bmV0cndfbG9jYWxfbWtkaXIuIiAiLm5ld2Rpcm5hbWUKKyAgIGlmIHY6c2hlbGxfZXJyb3IgPT0gMAorICAgICIgcmVmcmVzaCBsaXN0aW5nCisgICAgY2FsbCBzOkxvY2FsQnJvd3NlKCIuIikKKyAgIGVsc2UKKyAgICBlY2hvZXJyICIqKip3YXJuaW5nKioqIHVuYWJsZSB0byBtYWtlIGRpcmVjdG9yeTwiLm5ld2Rpcm5hbWUuIj4iCisgICBlbmRpZgorICAgcmVkcmF3IQorCisgIGVsc2UKKyAgICIgUmVtb3RlIG1rZGlyOgorICAgbGV0IG1rZGlyY21kICA9IHN1YnN0aXR1dGUoZzpuZXRyd19ta2Rpcl9jbWQsJ1w8SE9TVE5BTUVcPicsYTp1c3Job3N0LCcnKQorICAgbGV0IG5ld2Rpcm5hbWU9IHN1YnN0aXR1dGUoZXhwYW5kKCIlIiksJ15cJSguXHstfS9cKVx7M31cKC4qXCkkJywnXDEnLCcnKS5uZXdkaXJuYW1lCisiICAgY2FsbCBEZWNobygiZXhlIHNpbGVudCEgISIubWtkaXJjbWQuIiAiLm5ld2Rpcm5hbWUpCisgICBleGUgInNpbGVudCEgISIubWtkaXJjbWQuIiAiLm5ld2Rpcm5hbWUKKyAgIGlmIHY6c2hlbGxfZXJyb3IgPT0gMAorICAgICIgcmVmcmVzaCBsaXN0aW5nCisgICAgY2FsbCBzOk5ldEJyb3dzZShzOk5ldEJyb3dzZUNoZ0RpcihleHBhbmQoIiUiKSwnLi8nKSkKKyAgIGVsc2UKKyAgICBlY2hvZXJyICIqKip3YXJuaW5nKioqIHVuYWJsZSB0byBtYWtlIGRpcmVjdG9yeTwiLm5ld2Rpcm5hbWUuIj4iCisgICBlbmRpZgorICAgcmVkcmF3IQorICBlbmRpZgorICAKKyIgIGNhbGwgRHJldCgiTmV0TWFrZURpciIpCitlbmRmdW4KKworIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgIEJyb3dzaW5nIFN1cHBvcnQgRm9yIExvY2FsIERpcmVjdG9yaWVzIEFuZCBGaWxlczogICAge3t7MQorCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBMb2NhbEJyb3dzZTogc3VwcG9ydHMgbG9jYWwgZmlsZS9kaXJlY3RvcnkgYnJvd3Npbmcge3t7MgorZnVuISA8U0lEPkxvY2FsQnJvd3NlKGRpcm5hbWUpCisKKyIgIGxldCBkaXJuYW1lPSAoYTpkaXJuYW1lID09ICIiKT8gZXhwYW5kKCIlOnAiKSA6IGE6ZGlybmFtZQorICBpZiAhaXNkaXJlY3RvcnkoYTpkaXJuYW1lKQorICAgIiBub3QgYSBkaXJlY3RvcnksIGlnbm9yZSBpdAorICAgcmV0dXJuCisgIGVuZGlmCisKKyIgICIgdW5mb3J0dW5hdGUgaW50ZXJhY3Rpb24gLS0gd2hlbiBwdXR0aW5nIERmdW5jL0RyZXQgYWJvdmUKKyAgIiBvbmUgY2FuIG5vIGxvbmdlciBlbnRlciB0aGUgREJHIGJ1ZmZlci4KKyIgIGNhbGwgRGZ1bmMoIkxvY2FsQnJvd3NlKGRpcm5hbWU8Ii5hOmRpcm5hbWUuIj4pIikKKworICBleGUgJ2NkICcuZXNjYXBlKGE6ZGlybmFtZSwnICcpCisgIGxldCBkaXJuYW1lPSBnZXRjd2QoKS4iLyIKKyIgIGNhbGwgRGVjaG8oImRpcm5hbWU8Ii5kaXJuYW1lLiI+IikKKworICAiIG1ha2UgdGhpcyBidWZmZXIgbW9kaWZpYWJsZQorICBzZXRsb2NhbCBtYQorCisgICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICIgIFBlcmZvcm0gRGlyZWN0b3J5IExpc3Rpbmc6CisiICBjYWxsIERlY2hvKCJQZXJmb3JtIGRpcmVjdG9yeSBsaXN0aW5nLi4uIikKKyAgIiBzZXQgdXAgbmV3IGJ1ZmZlciBhbmQgbWFwCisgIGxldCBkaXJuYW1lbnIgPSBidWZucihkaXJuYW1lKQorICBpZiBkaXJuYW1lbnIgIT0gLTEgJiYgYnVmbmFtZShkaXJuYW1lbnIpICE9IGRpcm5hbWUKKyAgICIgdHJ5IHJlbW92aW5nIHRoZSB0cmFpbGluZyAiLyIKKyAgIGxldCBkaXJuYW1lbnI9IGJ1Zm5yKHN1YnN0aXR1dGUoZGlybmFtZSwnLyQnLCcnLCdlJykpCisgIGVuZGlmCisiICBjYWxsIERlY2hvKCJidWZucihkaXJuYW1lPCIuZGlybmFtZS4iPik9Ii5kaXJuYW1lbnIpCisKKyAgaWYgZGlybmFtZW5yICE9IC0xICYmIGJ1ZmV4aXN0cyhkaXJuYW1lKQorICAgIiBidWZmZXIgYWxyZWFkeSBleGlzdHMgKGhpZGRlbiksIHNvIHN3aXRjaCB0byBpdCEKKyAgIGV4ZSAiYiAiLmRpcm5hbWVucgorICAgZXhlICdjZCAnLmVzY2FwZShkaXJuYW1lLCcgJykKKyIgICBjYWxsIERlY2hvKCJjaGFuZ2VkIGRpcmVjdG9yeSB0bzwiLmRpcm5hbWUuIj4iKQorICAgaWYgYTpkaXJuYW1lICE9ICIuIiAmJiBsaW5lKCIkIikgPj0gNQorIiAgICBjYWxsIERyZXQoIkxvY2FsQnJvd3NlIDogYnVmZmVyIGFscmVhZHkgZXhpc3RzIHdpdGggaW5mbyIpCisgICAgcmV0dXJuCisgICBlbmRpZgorIiAgIGNhbGwgRGVjaG8oImJ1ZmZlciBhbHJlYWR5IGV4aXN0cywgYnV0IG5lZWRzIGxpc3RpbmcgKGJ1ZiMiLmRpcm5hbWVuci4iKSIpCisgICBrZWVwanVtcHMgJWQKKyAgZWxzZQorIiAgIGNhbGwgRHJlZGlyKCJscyEiKQorIiAgIGNhbGwgRGVjaG8oImdlbmVyYXRlIG5ldyBidWZmZXIgbmFtZWQ8Ii5kaXJuYW1lLiI+IikKKyAgIHNpbGVudCEgZW5ldyEKKyAgIGV4ZSAnc2lsZW50ISBmaWxlICcuZXNjYXBlKGRpcm5hbWUsJyAnKQorICBlbmRpZgorICAiIHNldCBzdGFuZGFyZCBicm93c2VyIG9wdGlvbnMgb24gYnVmZmVyCisgIHNldGxvY2FsIHRzPTMyIGJ0PW5vd3JpdGUgYmg9aGlkZSBub2JsCisKKyAgIiBzZXQgdXAgYWxsIHRoZSBtYXBzCisgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IDxjcj4JOmV4ZSAibm9ybSEgMCI8YmFyPmNhbGwgPFNJRD5Mb2NhbEJyb3dzZSg8U0lEPkxvY2FsQnJvd3NlQ2hnRGlyKGV4cGFuZCgiJTpwIiksPFNJRD5OZXRHZXREaXIoKSkpPGNyPgorICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiA8Yy1sPgk6ZXhlICJub3JtISAwIjxiYXI+Y2FsbCA8U0lEPkxvY2FsQnJvd3NlKDxTSUQ+TG9jYWxCcm93c2VDaGdEaXIoZXhwYW5kKCIlOnAiKSwnLi8nKSk8Y3I+CisgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IC0JCTpleGUgIm5vcm0hIDAiPGJhcj5jYWxsIDxTSUQ+TG9jYWxCcm93c2UoPFNJRD5Mb2NhbEJyb3dzZUNoZ0RpcihleHBhbmQoIiU6cCIpLCcuLi8nKSk8Y3I+CisgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGEJCTpsZXQgZzpuZXRyd19saXN0X3Nob3dhbGw9MTxiYXI+ZXhlICJub3JtISAwIjxiYXI+Y2FsbCA8U0lEPkxvY2FsQnJvd3NlKDxTSUQ+TG9jYWxCcm93c2VDaGdEaXIoZXhwYW5kKCIlOnAiKSwnLi8nKSk8Y3I+CisgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IDxMZWFkZXI+SAk6Y2FsbCA8U0lEPk5ldEhpZGVFZGl0KDEpPGNyPgorICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiA8TGVhZGVyPk0JOmNhbGwgPFNJRD5OZXRNYWtlRGlyKCIiKTxjcj4KKyAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gaQkJOmNhbGwgPFNJRD5OZXRMb25nTGlzdCgxKTxjcj4KKyAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbwkJOmV4ZSBnOm5ldHJ3X3dpbnNpemUuIndpbmNtZCBzIjxiYXI+ZXhlICJub3JtISAwIjxiYXI+Y2FsbCA8U0lEPkxvY2FsQnJvd3NlKDxTSUQ+TG9jYWxCcm93c2VDaGdEaXIoZXhwYW5kKCIlOnAiKSw8U0lEPk5ldEdldERpcigpKSk8Y3I+CisgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHIJCTpsZXQgZzpuZXRyd19zb3J0X2RpcmVjdGlvbj0gKGc6bmV0cndfc29ydF9kaXJlY3Rpb24gPX4gJ24nKT8gJ3InIDogJ24nPGJhcj5leGUgIm5vcm0hIDAiPGJhcj5jYWxsIDxTSUQ+TG9jYWxCcm93c2UoPFNJRD5Mb2NhbEJyb3dzZUNoZ0RpcihleHBhbmQoIiU6cCIpLDxTSUQ+TmV0R2V0RGlyKCkpKTxjcj4KKyAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcwkJOmxldCBnOm5ldHJ3X3NvcnRfYnk9IChnOm5ldHJ3X3NvcnRfYnkgPX4gJ24nKT8gJ3RpbWUnIDogKGc6bmV0cndfc29ydF9ieSA9fiAndCcpPyAnc2l6ZScgOiAnbmFtZSc8YmFyPmV4ZSAibm9ybSEgMCI8YmFyPmNhbGwgPFNJRD5Mb2NhbEJyb3dzZSg8U0lEPkxvY2FsQnJvd3NlQ2hnRGlyKGV4cGFuZCgiJTpwIiksJy4vJykpPGNyPgorICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiB2CQk6ZXhlIGc6bmV0cndfd2luc2l6ZS4id2luY21kIHYiPGJhcj5leGUgIm5vcm0hIDAiPGJhcj5jYWxsIDxTSUQ+TG9jYWxCcm93c2UoPFNJRD5Mb2NhbEJyb3dzZUNoZ0RpcihleHBhbmQoIiU6cCIpLDxTSUQ+TmV0R2V0RGlyKCkpKTxjcj4KKyAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4geAkJOmV4ZSAibm9ybSEgMCI8YmFyPmNhbGwgPFNJRD5OZXRCcm93c2VYKDxTSUQ+TG9jYWxCcm93c2VDaGdEaXIoZXhwYW5kKCIlOnAiKSw8U0lEPk5ldEdldERpcigpKSwwKTxjcj4KKyAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gPDItbGVmdG1vdXNlPiA6ZXhlICJub3JtISAwIjxiYXI+Y2FsbCA8U0lEPkxvY2FsQnJvd3NlKDxTSUQ+TG9jYWxCcm93c2VDaGdEaXIoZXhwYW5kKCIlOnAiKSw8U0lEPk5ldEdldERpcigpKSk8Y3I+CisgIGV4ZSAnbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gPGRlbD4JOmV4ZSAibm9ybSEgMCI8YmFyPmNhbGwgPFNJRD5Mb2NhbEJyb3dzZVJtKCInLmV4cGFuZCgiJTpwIikuPFNJRD5OZXRHZXREaXIoKS4nIik8Y3I+JworICBleGUgJ3Zub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IDxkZWw+CTpjYWxsIDxTSUQ+TG9jYWxCcm93c2VSbSgiJy5leHBhbmQoIiU6cCIpLjxTSUQ+TmV0R2V0RGlyKCkuJyIpPGNyPicKKyAgZXhlICdubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBECTpleGUgIm5vcm0hIDAiPGJhcj5jYWxsIDxTSUQ+TG9jYWxCcm93c2VSbSgiJy5leHBhbmQoIiU6cCIpLjxTSUQ+TmV0R2V0RGlyKCkuJyIpPGNyPicKKyAgZXhlICd2bm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBECTpjYWxsIDxTSUQ+TG9jYWxCcm93c2VSbSgiJy5leHBhbmQoIiU6cCIpLjxTSUQ+TmV0R2V0RGlyKCkuJyIpPGNyPicKKyAgZXhlICdubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBSCTpleGUgIm5vcm0hIDAiPGJhcj5jYWxsIDxTSUQ+TG9jYWxCcm93c2VSZW5hbWUoIicuZXhwYW5kKCIlOnAiKS48U0lEPk5ldEdldERpcigpLiciKTxjcj4nCisgIG5ub3JlbWFwIDxidWZmZXI+ID8JCQk6aGUgbmV0cnctZGlyPGNyPgorCisgICIgU2V0IHVwIHRoZSBiYW5uZXIKKyAga2VlcGp1bXBzIHB1dCA9J1wiID09PT09PT09PT09PT09PT09JworICBrZWVwanVtcHMgMWQKKyAga2VlcGp1bXBzIHB1dCA9J1wiIERpcmVjdG9yeSBMaXN0aW5nJworICBrZWVwanVtcHMgcHV0ID0nXCIgICAnLmRpcm5hbWUKKyAgbGV0IGc6bmV0cndfYmFubmVyY250PSA2CisgIGlmIGc6bmV0cndfc29ydF9ieSA9fiAiXm4iCisgICAiIHNvcnRlZCBieSBuYW1lCisgICBsZXQgZzpuZXRyd19iYW5uZXJjbnQ9IGc6bmV0cndfYmFubmVyY250ICsgMQorICAga2VlcGp1bXBzIHB1dCA9J1wiICAgU29ydGVkIGJ5ICAgICAgJy5nOm5ldHJ3X3NvcnRfYnkKKyAgIGtlZXBqdW1wcyBwdXQgPSdcIiAgIFNvcnQgc2VxdWVuY2U6ICcuZzpuZXRyd19zb3J0X3NlcXVlbmNlCisgIGVsc2UKKyAgICIgc29ydGVkIGJ5IHNpemUgb3IgZGF0ZQorICAga2VlcGp1bXBzIHB1dCA9J1wiICAgU29ydGVkIGJ5ICcuZzpuZXRyd19zb3J0X2J5CisgIGVuZGlmCisgIGlmIGc6bmV0cndfbGlzdF9oaWRlICE9ICIiICYmICFleGlzdHMoImc6bmV0cndfbGlzdF9zaG93YWxsIikKKyAgIGtlZXBqdW1wcyBwdXQgPSdcIiAgIEhpZGluZzogJy5nOm5ldHJ3X2xpc3RfaGlkZQorICAgbGV0IGc6bmV0cndfYmFubmVyY250PSBnOm5ldHJ3X2Jhbm5lcmNudCArIDEKKyAgZW5kaWYKKyAga2VlcGp1bXBzIHB1dCA9J1wiID09PT09PT09PT09PT09PT09JworCisgICIgZ2VuZXJhdGUgdGhlIHJlcXVlc3RlZCBkaXJlY3RvcnkgbGlzdGluZworICBjYWxsIExvY2FsQnJvd3NlTGlzdChkaXJuYW1lKQorCisgICIgbWFuaXB1bGF0ZSB0aGUgZGlyZWN0b3J5IGxpc3RpbmcgKGhpZGUsIHNvcnQpCisgIHNldGxvY2FsIGZ0PW5ldHJ3bGlzdAorICBpZiBsaW5lKCIkIikgPj0gZzpuZXRyd19iYW5uZXJjbnQKKyAgIGlmICFleGlzdHMoImc6bmV0cndfbGlzdF9zaG93YWxsIikKKyAgICBpZiBnOm5ldHJ3X2xpc3RfaGlkZSAhPSAiIgorICAgICBjYWxsIHM6TmV0cndMaXN0SGlkZSgpCisgICAgZW5kaWYKKyAgIGVsc2UKKyAgICB1bmxldCBnOm5ldHJ3X2xpc3Rfc2hvd2FsbAorICAgZW5kaWYKKyAgIGlmIGc6bmV0cndfc29ydF9ieSA9fiAiXm4iCisgICAgY2FsbCBzOlNldFNvcnQoKQorICAgIGV4ZSAna2VlcGp1bXBzIHNpbGVudCAnLmc6bmV0cndfYmFubmVyY250LicsJGNhbGwgczpOZXRTb3J0KCknCisgICAgZXhlICdrZWVwanVtcHMgc2lsZW50ICcuZzpuZXRyd19iYW5uZXJjbnQuJywkcy9eXGRcezN9XC8vL2UnCisgICBlbHNlCisgICAgZXhlICdrZWVwanVtcHMgc2lsZW50ICcuZzpuZXRyd19iYW5uZXJjbnQuJywkY2FsbCBzOk5ldFNvcnQoKScKKyAgICBleGUgJ2tlZXBqdW1wcyBzaWxlbnQgJy5nOm5ldHJ3X2Jhbm5lcmNudC4nLCRzL15cZFx7LX1cLy8vZScKKyAgIGVuZGlmCisgIGVuZGlmCisgIGV4ZSBnOm5ldHJ3X2Jhbm5lcmNudAorICB0cnkKKyAgIGV4ZSAnY2QgJy5lc2NhcGUoc3Vic3RpdHV0ZShkaXJuYW1lLCcvJCcsJycsJ2UnKSwnICcpCisiICAgY2FsbCBEZWNobygiY2hhbmdlZCBkaXJlY3RvcnkgdG88Ii5kaXJuYW1lLiI+IikKKyAgY2F0Y2gKKyAgIGVjaG9lcnIgIk5vdCBhIGRpcmVjdG9yeTogPCIuZGlybmFtZS4iPiIKKyAgZW5kdHJ5CisKKyAgc2V0bG9jYWwgbm9tYSBub21vZAorCisiICBjYWxsIERyZXQoIkxvY2FsQnJvd3NlIikKK2VuZGZ1bgorCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiAgTG9jYWxCcm93c2VMaXN0OiBkb2VzIHRoZSBqb2Igb2YgImxzIiBmb3IgbG9jYWwgZGlyZWN0b3JpZXMge3t7MgorZnVuISBMb2NhbEJyb3dzZUxpc3QoZGlybmFtZSkKKyIgIGNhbGwgRGZ1bmMoIkxvY2FsQnJvd3NlTGlzdChkaXJuYW1lPCIuYTpkaXJuYW1lLiI+KSIpCisKKyAgbGV0IGRpcm5hbWVsZW4gPSBzdHJsZW4oYTpkaXJuYW1lKQorICBsZXQgZmlsZWxpc3QgICA9IGdsb2IoYTpkaXJuYW1lLiIqIikuIlxuIi5nbG9iKGE6ZGlybmFtZS4iLioiKQorIiAgY2FsbCBEZWNobygiZmlsZWxpc3Q8Ii5maWxlbGlzdC4iPiIpCisKKyAgd2hpbGUgZmlsZWxpc3QgIT0gIiIKKyAgIGlmIGZpbGVsaXN0ID1+ICdcbicKKyAgICBsZXQgZmlsZSAgICAgPSBzdWJzdGl0dXRlKGZpbGVsaXN0LCdcbi4qJCcsJycsJ2UnKQorICAgIGxldCBmaWxlbGlzdCA9IHN1YnN0aXR1dGUoZmlsZWxpc3QsJ14uXHstfVxuXCguKlwpJCcsJ1wxJywnZScpCisgICBlbHNlCisgICAgbGV0IGZpbGUgICAgID0gZmlsZWxpc3QKKyAgICBsZXQgZmlsZWxpc3Q9ICIiCisgICBlbmRpZgorICAgbGV0IHBmaWxlPSBmaWxlCisgICBpZiBpc2RpcmVjdG9yeShmaWxlKQorICAgIGxldCBwZmlsZT0gZmlsZS4iLyIKKyAgIGVuZGlmCisgICBsZXQgcGZpbGU9IHN0cnBhcnQocGZpbGUsZGlybmFtZWxlbikKKyAgIGlmIGc6bmV0cndfbG9uZ2xpc3QKKyAgICBsZXQgcGZpbGU9IHBmaWxlLiJcdCIuZ2V0ZnNpemUoZmlsZSkuIlx0Ii5zdHJmdGltZShnOm5ldHJ3X3RpbWVmbXQsZ2V0ZnRpbWUoZmlsZSkpCisgICBlbmRpZgorICAgaWYgICAgIGc6bmV0cndfc29ydF9ieSA9fiAiXnQiCisgICAgIiBzb3J0IGJ5IHRpbWUgKGhhbmRsZXMgdGltZSB1cCB0byAxIHF1aW50aWxsaW9uIHNlY29uZHMsIFVTKQorIiAgICBjYWxsIERlY2hvKCJnZXRmdGltZSgiLmZpbGUuIik9Ii5nZXRmdGltZShmaWxlKSkKKyAgICBsZXQgdCAgPSBnZXRmdGltZShmaWxlKQorICAgIGxldCBmdCA9IHN0cnBhcnQoIjAwMDAwMDAwMDAwMDAwMDAwMCIsMSwxOC1zdHJsZW4odCkpLnQKKyIgICAgY2FsbCBEZWNobygiZXhlIGtlZXBqdW1wcyBwdXQgPSciLmZ0LicvJy5maWxlLiInIikKKyAgICBleGUgImtlZXBqdW1wcyBwdXQgPSciLmZ0LicvJy5wZmlsZS4iJyIKKyAgIGVsc2VpZiBnOm5ldHJ3X3NvcnRfYnkgPX4gIl5zIgorICAgICIgc29ydCBieSBzaXplIChoYW5kbGVzIGZpbGUgc2l6ZXMgdXAgdG8gMSBxdWludGlsbGlvbiBieXRlcywgVVMpCisiICAgIGNhbGwgRGVjaG8oImdldGZzaXplKCIuZmlsZS4iKT0iLmdldGZzaXplKGZpbGUpKQorICAgIGxldCBzeiAgID0gZ2V0ZnNpemUoZmlsZSkKKyAgICBsZXQgZnN6ICA9IHN0cnBhcnQoIjAwMDAwMDAwMDAwMDAwMDAwMCIsMSwxOC1zdHJsZW4oc3opKS5zegorIiAgICBjYWxsIERlY2hvKCJleGUga2VlcGp1bXBzIHB1dCA9JyIuZnN6LicvJy5maWxlLiInIikKKyAgICBleGUgImtlZXBqdW1wcyBwdXQgPSciLmZzei4nLycucGZpbGUuIiciCisgICBlbHNlIAorICAgICIgc29ydCBieSBuYW1lCisiICAgIGNhbGwgRGVjaG8oImV4ZSBrZWVwanVtcHMgcHV0ID0nIi5maWxlLiInIikKKyAgICBleGUgImtlZXBqdW1wcyBwdXQgPSciLnBmaWxlLiInIgorICAgZW5kaWYKKyAgZW5kd2hpbGUKKworIiAgY2FsbCBEcmV0KCJMb2NhbEJyb3dzZUxpc3QiKQorZW5kZnVuCisKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiICBMb2NhbEJyb3dzZUNoZ0RpcjogY29uc3RydWN0cyBhIG5ldyBkaXJlY3RvcnkgYmFzZWQgb24gdGhlIGN1cnJlbnQge3t7MgorIiAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhbmQgYSBuZXcgZGlyZWN0b3J5IG5hbWUKK2Z1biEgPFNJRD5Mb2NhbEJyb3dzZUNoZ0RpcihkaXJuYW1lLG5ld2RpcikKKyIgIGNhbGwgRGZ1bmMoIkxvY2FsQnJvd3NlQ2hnRGlyKGRpcm5hbWU8Ii5hOmRpcm5hbWUuIj4gbmV3ZGlyPCIuYTpuZXdkaXIuIj4pIikKKworICBsZXQgZGlybmFtZT0gYTpkaXJuYW1lCisgIGxldCBuZXdkaXIgPSBhOm5ld2RpcgorCisgIGlmIGRpcm5hbWUgIX4gJy8kJworICAgIiBhcHBhcmVudGx5IHZpbSBpcyAicmVjb2duaXppbmciIHRoYXQgaXQgaXMgaW4gdGhlIGhvbWUgZGlyZWN0b3J5IGFuZAorICAgIiBpcyByZW1vdmluZyB0aGUgIi8iLiAgQmFkIGlkZWEsIHNvIEkgaGF2ZSB0byBwdXQgaXQgYmFjay4KKyAgIGxldCBkaXJuYW1lPSBkaXJuYW1lLicvJworIiAgIGNhbGwgRGVjaG8oImFkanVzdGluZyBkaXJuYW1lPCIuZGlybmFtZS4iPiIpCisgIGVuZGlmCisKKyAgaWYgbmV3ZGlyICF+ICcvJCcKKyAgICIgaGFuZGxpbmcgYSBmaWxlCisgICBsZXQgZGlybmFtZT0gZGlybmFtZS5uZXdkaXIKKyIgICBjYWxsIERlY2hvKCJoYW5kbGluZyBhIGZpbGU6IGRpcm5hbWU8Ii5kaXJuYW1lLiI+IikKKyAgIGV4ZSAiZSAiLmRpcm5hbWUKKworICBlbHNlaWYgbmV3ZGlyID09ICcuLycKKyAgICIgcmVmcmVzaCB0aGUgZGlyZWN0b3J5IGxpc3QKKyIgICBjYWxsIERlY2hvKCJyZWZyZXNoIGRpcmVjdG9yeSBsaXN0aW5nIikKKyAgIHNldGxvY2FsIG1hCisgICAlZAorCisgIGVsc2VpZiBuZXdkaXIgPT0gJy4uLycKKyAgICIgZ28gdXAgb25lIGRpcmVjdG9yeQorICAgbGV0IGRpcm5hbWU9IHN1YnN0aXR1dGUoZGlybmFtZSwnXlwoLiovXClcKFteL11cKy8kXCknLCdcMScsJ2UnKQorIiAgIGNhbGwgRGVjaG8oImdvIHVwIG9uZSBkaXI6IGRpcm5hbWU8Ii5kaXJuYW1lLiI+IikKKworICBlbHNlCisgICAiIGdvIGRvd24gb25lIGRpcmVjdG9yeQorICAgbGV0IGRpcm5hbWU9IGRpcm5hbWUubmV3ZGlyCisiICAgY2FsbCBEZWNobygiZ28gZG93biBvbmUgZGlyOiBkaXJuYW1lPCIuZGlybmFtZS4iPiBuZXdkaXI8Ii5uZXdkaXIuIj4iKQorICBlbmRpZgorCisiICBjYWxsIERyZXQoIkxvY2FsQnJvd3NlQ2hnRGlyIDwiLmRpcm5hbWUuIj4iKQorICByZXR1cm4gZGlybmFtZQorZW5kZnVuCisKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIExvY2FsQnJvd3NlUm06CitmdW4hIDxTSUQ+TG9jYWxCcm93c2VSbShwYXRoKSByYW5nZQorIiAgY2FsbCBEZnVuYygiTG9jYWxCcm93c2VSbShwYXRoPCIuYTpwYXRoLiI+KSIpCisiICBjYWxsIERlY2hvKCJmaXJzdGxpbmU9Ii5hOmZpcnN0bGluZS4iIGxhc3RsaW5lPSIuYTpsYXN0bGluZSkKKworICAiIHByZXBhcmF0aW9uIGZvciByZW1vdmluZyBtdWx0aXBsZSBmaWxlcy9kaXJlY3RvcmllcworICBsZXQgY3RyPSBhOmZpcnN0bGluZQorCisgICIgcmVtb3ZlIG11bHRpcGxlIGZpbGVzIGFuZCBkaXJlY3RvcmllcworICB3aGlsZSBjdHIgPD0gYTpsYXN0bGluZQorICAgZXhlIGN0cgorCisgICBub3JtISAwCisgICBsZXQgcm1maWxlPSBhOnBhdGguZXhwYW5kKCI8Y1dPUkQ+IikKKyIgICBjYWxsIERlY2hvKCJybWZpbGU8Ii5ybWZpbGUuIj4iKQorCisgICBpZiBybWZpbGUgIX4gJ14iJyAmJiAocm1maWxlID1+ICdAJCcgfHwgcm1maWxlICF+ICcvJCcpCisgICAgIiBhdHRlbXB0IHRvIHJlbW92ZSBmaWxlCisgICAgY2FsbCBpbnB1dHNhdmUoKQorICAgIGxldCBvaz0gaW5wdXQoIkNvbmZpcm0gZGVsZXRpb24gb2YgZmlsZTwiLnJtZmlsZS4iPiAiLCJ5IikKKyAgICBjYWxsIGlucHV0cmVzdG9yZSgpCisgICAgaWYgb2sgPT0gInkiCisgICAgIGNhbGwgZGVsZXRlKHJtZmlsZSkKKyIgICAgIGNhbGwgRGVjaG8oImVycmNvZGU9Ii52OnNoZWxsX2Vycm9yKQorICAgIGVuZGlmCisgIAorICAgZWxzZQorICAgICIgYXR0ZW1wdCB0byByZW1vdmUgZGlyZWN0b3J5CisgICAgY2FsbCBpbnB1dHNhdmUoKQorICAgIGxldCBvaz0gaW5wdXQoIkNvbmZpcm0gZGVsZXRpb24gb2YgZGlyZWN0b3J5PCIucm1maWxlLiI+ICIsInkiKQorICAgIGNhbGwgaW5wdXRyZXN0b3JlKCkKKyAgICBsZXQgcm1maWxlPSBzdWJzdGl0dXRlKHJtZmlsZSwnLyQnLCcnLCdlJykKKworICAgIGlmIG9rID09ICJ5IgorICAgICBjYWxsIHN5c3RlbShnOm5ldHJ3X2xvY2FsX3JtZGlyLiIgIi5ybWZpbGUpCisiICAgICBjYWxsIERlY2hvKCJ2OnNoZWxsX2Vycm9yPSIudjpzaGVsbF9lcnJvcikKKworICAgICBpZiB2OnNoZWxsX2Vycm9yICE9IDAKKyIgICAgICBjYWxsIERlY2hvKCIybmQgYXR0ZW1wdCB0byByZW1vdmUgZGlyZWN0b3J5PCIucm1maWxlLiI+IikKKyAgICAgIGxldCBlcnJjb2RlPSBkZWxldGUocm1maWxlKQorIiAgICAgIGNhbGwgRGVjaG8oImVycmNvZGU9Ii5lcnJjb2RlKQorCisgICAgICBpZiBlcnJjb2RlICE9IDAKKyAgICAgICBpZiBoYXMoInVuaXgiKQorIiAgICAgICAgY2FsbCBEZWNobygiM3JkIGF0dGVtcHQgdG8gcmVtb3ZlIGRpcmVjdG9yeTwiLnJtZmlsZS4iPiIpCisJY2FsbCBzeXN0ZW0oInJtICIucm1maWxlKQorICAgICAgICBpZiB2OnNoZWxsX2Vycm9yICE9IDAKKyAgICAgICAgIGVjaG9lcnIgInVuYWJsZSB0byByZW1vdmUgZGlyZWN0b3J5PCIucm1maWxlLiI+IC0tIGlzIGl0IGVtcHR5PyIKKwllbmRpZgorICAgICAgIGVsc2UKKyAgICAgICAgZWNob2VyciAidW5hYmxlIHRvIHJlbW92ZSBkaXJlY3Rvcnk8Ii5ybWZpbGUuIj4gLS0gaXMgaXQgZW1wdHk/IgorICAgICAgIGVuZGlmCisgICAgICBlbmRpZgorICAgICBlbmRpZgorICAgIGVuZGlmCisgICBlbmRpZgorCisgICBsZXQgY3RyPSBjdHIgKyAxCisgIGVuZHdoaWxlCisKKyAgIiByZWZyZXNoIHRoZSBkaXJlY3RvcnkKKyAgbGV0IGN1cmxpbmU9IGxpbmUoIi4iKS0xCisiICBjYWxsIERlY2hvKCJyZWZyZXNoIHRoZSBkaXJlY3RvcnkiKQorICBjYWxsIDxTSUQ+TG9jYWxCcm93c2UoPFNJRD5Mb2NhbEJyb3dzZUNoZ0RpcihleHBhbmQoIiUiKSwnLi8nKSkKKyAgZXhlIGN1cmxpbmUKKworIiAgY2FsbCBEcmV0KCJMb2NhbEJyb3dzZVJtIikKK2VuZGZ1bgorCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBMb2NhbEJyb3dzZVJlbmFtZTogcmVuYW1lIGEgcmVtb3RlIGZpbGUgb3IgZGlyZWN0b3J5IHt7ezIKK2Z1biEgPFNJRD5Mb2NhbEJyb3dzZVJlbmFtZShwYXRoKQorIiAgY2FsbCBEZnVuYygiTG9jYWxCcm93c2VSZW5hbWUocGF0aDwiLmE6cGF0aC4iPikiKQorCisgICIgcHJlcGFyYXRpb24gZm9yIHJlbW92aW5nIG11bHRpcGxlIGZpbGVzL2RpcmVjdG9yaWVzCisgIGxldCBjdHI9IGE6Zmlyc3RsaW5lCisKKyAgIiBhdHRlbXB0IHRvIHJlbmFtZSBmaWxlcy9kaXJlY3RvcmllcworICB3aGlsZSBjdHIgPD0gYTpsYXN0bGluZQorICAgZXhlICJrZWVwanVtcHMgIi5jdHIKKworICAgbm9ybSEgMAorICAgbGV0IG9sZG5hbWU9IGE6cGF0aC5leHBhbmQoIjxjV09SRD4iKQorIiAgIGNhbGwgRGVjaG8oIm9sZG5hbWU8Ii5vbGRuYW1lLiI+IikKKworICAgY2FsbCBpbnB1dHNhdmUoKQorICAgbGV0IG5ld25hbWU9IGlucHV0KCJNb3ZpbmcgIi5vbGRuYW1lLiIgdG8gOiAiLG9sZG5hbWUpCisgICBjYWxsIGlucHV0cmVzdG9yZSgpCisKKyAgIGxldCByZXQ9IHN5c3RlbShnOm5ldHJ3X2xvY2FsX3JlbmFtZS4iICIub2xkbmFtZS4iICIubmV3bmFtZSkKKyIgICBjYWxsIERlY2hvKCJleGVjdXRpbmcgc3lzdGVtKCIuZzpuZXRyd19sb2NhbF9yZW5hbWUuIiAiLm9sZG5hbWUuIiAiLm5ld25hbWUpCisKKyAgIGxldCBjdHI9IGN0ciArIDEKKyAgZW5kd2hpbGUKKworICAiIHJlZnJlc2ggdGhlIGRpcmVjdG9yeQorICBsZXQgY3VybGluZT0gbGluZSgiLiIpCisgIGNhbGwgPFNJRD5Mb2NhbEJyb3dzZSg8U0lEPkxvY2FsQnJvd3NlQ2hnRGlyKGV4cGFuZCgiJSIpLCcuLycpKQorICBleGUgImtlZXBqdW1wcyAiLmN1cmxpbmUKKyIgIGNhbGwgRHJldCgiTG9jYWxCcm93c2VSZW5hbWUiKQorZW5kZnVuCisKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAiIE5ldE1ldGhvZDogIGRldGVybWluZSBtZXRob2Qgb2YgdHJhbnNmZXIge3t7MQogIiAgbWV0aG9kID09IDE6IHJjcAogIgkgICAgIDI6IGZ0cCArIDwubmV0cmM+CkBAIC0xNTMxLDE0ICsyMDM2LDE0IEBACiAgIGxldCBzOmRpcmtlZXAJPSBnZXRjd2QoKQogICBsZXQgczpnZGtlZXAJPSAmZ2QKICAgbGV0IHM6dHdrZWVwCT0gJnR3Ci0gIHNldCBjaW5vID0KLSAgc2V0IGNvbSAgPQotICBzZXQgY3BvIC09YUEKLSAgc2V0IG5vY2luIG5vYWkKLSAgc2V0IHR3ICAgPTAKKyAgc2V0bG9jYWwgY2lubyA9CisgIHNldGxvY2FsIGNvbSAgPQorICBzZXRsb2NhbCBjcG8gLT1hQQorICBzZXRsb2NhbCBub2NpbiBub2FpCisgIHNldGxvY2FsIHR3ICAgPTAKICAgaWYgaGFzKCJ3aW4zMiIpICYmICFoYXMoIndpbjk1IikKICAgIGxldCBzOnN3ZmtlZXA9ICZzd2YKLSAgIHNldCBub3N3ZgorICAgc2V0bG9jYWwgbm9zd2YKICIgIGNhbGwgRGVjaG8oInNldHRpbmcgczpzd2ZrZWVwIHRvIDwiLiZzd2YuIj4iKQogICBlbmRpZgogCkBAIC0xNTk1LDYgKzIxMDAsOCBAQAogIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICIgTmV0U29ydDogUGlldCBEZWxwb3J0J3MgQklTb3J0MigpIGZ1bmN0aW9uLCBtb2RpZmllZCB0byB0YWtlIGEgcmFuZ2Uge3t7MQogZnVuISA8U0lEPk5ldFNvcnQoKSByYW5nZQorIiAgY2FsbCBEZnVuYygiTmV0U29ydCgpIikKKwogICBsZXQgaSA9IGE6Zmlyc3RsaW5lICsgMQogICB3aGlsZSBpIDw9IGE6bGFzdGxpbmUKICAgICAiIGZpbmQgaW5zZXJ0aW9uIHBvaW50IHZpYSBiaW5hcnkgc2VhcmNoCkBAIC0xNjI5LDEzICsyMTM2LDI5IEBACiAgICAgZW5kaWYKICAgICBsZXQgaSA9IGkgKyAxCiAgIGVuZHdoaWxlCisKKyIgIGNhbGwgRHJldCgiTmV0U29ydCIpCiBlbmRmdW4KIAogIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSIgU2V0U29ydDogc2V0cyB1cCB0aGUgc29ydCBiYXNlZCBvbiB0aGUgZzpuZXRyd19zb3J0X3NlcXVlbmNlCisiIFNldFNvcnQ6IHNldHMgdXAgdGhlIHNvcnQgYmFzZWQgb24gdGhlIGc6bmV0cndfc29ydF9zZXF1ZW5jZSB7e3sxCisiICAgICAgICAgIFdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGlzIHRvIGNvbXB1dGUgYSBwcmlvcml0eSBmb3IgdGhlIHBhdHRlcm5zCisiICAgICAgICAgIGluIHRoZSBnOm5ldHJ3X3NvcnRfc2VxdWVuY2UuICBJdCBhcHBsaWVzIGEgc3Vic3RpdHV0ZSB0byBhbnkKKyIgICAgICAgICAgImZpbGVzIiB0aGF0IHNhdGlzZnkgZWFjaCBwYXR0ZXJuLCBwdXR0aW5nIHRoZSBwcmlvcml0eSAvIGluCisiICAgICAgICAgIGZyb250LiAgQW4gIioiIHBhdHRlcm4gaGFuZGxlcyB0aGUgZGVmYXVsdCBwcmlvcml0eS4KIGZ1biEgPFNJRD5TZXRTb3J0KCkKICIgIGNhbGwgRGZ1bmMoIlNldFNvcnQoKSBiYW5uZXJjbnQ9Ii5nOm5ldHJ3X2Jhbm5lcmNudCkKLSAgbGV0IHNlcWxpc3QgID0gZzpuZXRyd19zb3J0X3NlcXVlbmNlCisgIGlmIGc6bmV0cndfbG9uZ2xpc3QKKyAgIGxldCBzZXFsaXN0ICA9IHN1YnN0aXR1dGUoZzpuZXRyd19zb3J0X3NlcXVlbmNlLCdcJCcsJ1xcJShcdFxcfFwkXFwpJywnZ2UnKQorICBlbHNlCisgICBsZXQgc2VxbGlzdCAgPSBnOm5ldHJ3X3NvcnRfc2VxdWVuY2UKKyAgZW5kaWYKKyAgIiBzYW5pdHkgY2hlY2sgLS0gaW5zdXJlIHRoYXQgKiBhcHBlYXJzIHNvbWV3aGVyZQorICBpZiBzZXFsaXN0ID09ICIiCisgICBsZXQgc2VxbGlzdD0gJyonCisgIGVsc2VpZiBzZXFsaXN0ICF+ICdcKicKKyAgIGxldCBzZXFsaXN0PSBzZXFsaXN0LicsKicKKyAgZW5kaWYKICAgbGV0IHByaW9yaXR5ID0gMQogICB3aGlsZSBzZXFsaXN0ICE9ICIiCiAgICBpZiBzZXFsaXN0ID1+ICcsJwpkaWZmIC0tZ2l0IGEvcnVudGltZS9wcmludC9hc2NpaS5wcyBiL3J1bnRpbWUvcHJpbnQvYXNjaWkucHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZjZmZiNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvcHJpbnQvYXNjaWkucHMKQEAgLTAsMCArMSwyMiBAQAorJSFQUy1BZG9iZS0zLjAgUmVzb3VyY2UtRW5jb2RpbmcKKyUlVGl0bGU6IFZJTS1hc2NpaQorJSVWZXJzaW9uOiAxLjAgMAorJSVFbmRDb21tZW50cworL1ZJTS1hc2NpaVsKKzMyey8ubm90ZGVmfXJlcGVhdAorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL2FzY2lpdGlsZGUgLy5ub3RkZWYKKzEyOHsvLm5vdGRlZn1yZXBlYXRdCisvRW5jb2RpbmcgZGVmaW5lcmVzb3VyY2UgcG9wCislIHZpbTpmZj11bml4OgorJSVFT0YKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcHJpbnQvY2lkZm9udC5wcyBiL3J1bnRpbWUvcHJpbnQvY2lkZm9udC5wcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDZlYmM4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9wcmludC9jaWRmb250LnBzCkBAIC0wLDAgKzEsMjYgQEAKKyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLVByb2NTZXQKKyUlVGl0bGU6IFZJTS1DSURGb250CislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCislIEVkaXRpbmcgb2YgdGhpcyBmaWxlIGlzIE5PVCBSRUNPTU1FTkRFRC4gIFlvdSBydW4gYSB2ZXJ5IGdvb2QgcmlzayBvZiBjYXVzaW5nCislIGFsbCBQb3N0U2NyaXB0IHByaW50aW5nIGZyb20gVklNIGZhaWxpbmcgaWYgeW91IGRvLiAgUG9zdFNjcmlwdCBpcyBub3QgY2FsbGVkCislIGEgd3JpdGUtb25seSBsYW5ndWFnZSBmb3Igbm90aGluZyEKKy9DUCBjdXJyZW50cGFja2luZyBkIFQgc2V0cGFja2luZworL1NCIDI1NiBzdHJpbmcgZAorL0NJRE4/IHN5c3RlbWRpY3QvY29tcG9zZWZvbnQga25vd24gZCAvR1M/IHN5c3RlbWRpY3QvLm1ha2VvcGVyYXRvciBrbm93biBkCitDSUROP3sKK0dTP3svdmltX2ZpbmRyZXNvdXJjZXsyIGNvcHkgcmVzb3VyY2VzdGF0dXMgbm90ezEgaW5kZXggU0IgY3ZzIHJ1bmxpYmZpbGV9eworcG9wIHBvcH1pZmVsc2UgZmluZHJlc291cmNlfWJkL3ZpbV9jb21wb3NlZm9udHswIGdldC9DSURGb250IHZpbV9maW5kcmVzb3VyY2UKK2V4Y2gvQ01hcCB2aW1fZmluZHJlc291cmNlIGV4Y2hbZXhjaF1jb21wb3NlZm9udCBwb3B9YmR9ey92aW1fZmluZHJlc291cmNlCisvZmluZHJlc291cmNlIGxkL3ZpbV9jb21wb3NlZm9udHtjb21wb3NlZm9udCBwb3B9YmR9aWZlbHNlCit9eworL3ZpbV9mb250bmFtZXswIGdldCBTQiBjdnMgbGVuZ3RoIGR1cCBTQiBleGNoKC0pcHV0aW50ZXJ2YWwgMSBhZGQgZHVwIFNCIGV4Y2gKK2R1cCAyNTYgZXhjaCBzdWIgZ2V0aW50ZXJ2YWwgMyAtMSByb2xsIGV4Y2ggY3ZzIGxlbmd0aCBhZGQgU0IgZXhjaCAwIGV4Y2gKK2dldGludGVydmFsIGN2bn1iZC92aW1fY29tcG9zZWZvbnR7dmltX2ZvbnRuYW1lIGZpbmRmb250IGR9YmQKK30gaWZlbHNlCisvY2Zze2V4Y2ggc2NhbGVmb250IGR9YmQKKy9zZmZze2ZpbmRmb250IDMgMSByb2xsIDEgaW5kZXggbXVsIGV4Y2ggMiBpbmRleC9Gb250TWF0cml4IGdldCBtYXRyaXggY29weQorc2NhbGUgbWFrZWZvbnQgZH1iZAorQ1Agc2V0cGFja2luZworJSB2aW06ZmY9dW5peDoKKyUlRU9GCmRpZmYgLS1naXQgYS9ydW50aW1lL3ByaW50L2Nuc19yb21hbi5wcyBiL3J1bnRpbWUvcHJpbnQvY25zX3JvbWFuLnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYTM4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2Nuc19yb21hbi5wcwpAQCAtMCwwICsxLDIzIEBACislIVBTLUFkb2JlLTMuMCBSZXNvdXJjZS1FbmNvZGluZworJSVUaXRsZTogVklNLWNuc19yb21hbgorJSVWZXJzaW9uOiAxLjAgMAorJSVFbmRDb21tZW50cworJSBEaWZmZXJlbnQgdG8gQVNDSUkgYXQgY29kZSBwb2ludCAxMjYKKy9WSU0tY25zX3JvbWFuWworMzJ7Ly5ub3RkZWZ9cmVwZWF0Cisvc3BhY2UgL2V4Y2xhbSAvcXVvdGVkYmwgL251bWJlcnNpZ24gL2RvbGxhciAvcGVyY2VudCAvYW1wZXJzYW5kIC9xdW90ZXNpbmdsZQorL3BhcmVubGVmdCAvcGFyZW5yaWdodCAvYXN0ZXJpc2sgL3BsdXMgL2NvbW1hIC9taW51cyAvcGVyaW9kIC9zbGFzaAorL3plcm8gL29uZSAvdHdvIC90aHJlZSAvZm91ciAvZml2ZSAvc2l4IC9zZXZlbgorL2VpZ2h0IC9uaW5lIC9jb2xvbiAvc2VtaWNvbG9uIC9sZXNzIC9lcXVhbCAvZ3JlYXRlciAvcXVlc3Rpb24KKy9hdCAvQSAvQiAvQyAvRCAvRSAvRiAvRworL0ggL0kgL0ogL0sgL0wgL00gL04gL08KKy9QIC9RIC9SIC9TIC9UIC9VIC9WIC9XCisvWCAvWSAvWiAvYnJhY2tldGxlZnQgL2JhY2tzbGFzaCAvYnJhY2tldHJpZ2h0IC9hc2NpaWNpcmN1bSAvdW5kZXJzY29yZQorL2dyYXZlIC9hIC9iIC9jIC9kIC9lIC9mIC9nCisvaCAvaSAvaiAvayAvbCAvbSAvbiAvbworL3AgL3EgL3IgL3MgL3QgL3UgL3YgL3cKKy94IC95IC96IC9icmFjZWxlZnQgL2JhciAvYnJhY2VyaWdodCAvb3ZlcmxpbmUgLy5ub3RkZWYKKzEyOHsvLm5vdGRlZn1yZXBlYXRdCisvRW5jb2RpbmcgZGVmaW5lcmVzb3VyY2UgcG9wCislIHZpbTpmZj11bml4OgorJSVFT0YKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcHJpbnQvZ2Jfcm9tYW4ucHMgYi9ydW50aW1lL3ByaW50L2diX3JvbWFuLnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNzhkYmYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2diX3JvbWFuLnBzCkBAIC0wLDAgKzEsMjMgQEAKKyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUVuY29kaW5nCislJVRpdGxlOiBWSU0tZ2Jfcm9tYW4KKyUlVmVyc2lvbjogMS4wIDAKKyUlRW5kQ29tbWVudHMKKyUgRGlmZmVyZW50IHRvIEFTQ0lJIGF0IGNvZGUgcG9pbnRzIDM2IGFuZCAxMjYKKy9WSU0tZ2Jfcm9tYW5bCiszMnsvLm5vdGRlZn1yZXBlYXQKKy9zcGFjZSAvZXhjbGFtIC9xdW90ZWRibCAvbnVtYmVyc2lnbiAveXVhbiAvcGVyY2VudCAvYW1wZXJzYW5kIC9xdW90ZXNpbmdsZQorL3BhcmVubGVmdCAvcGFyZW5yaWdodCAvYXN0ZXJpc2sgL3BsdXMgL2NvbW1hIC9taW51cyAvcGVyaW9kIC9zbGFzaAorL3plcm8gL29uZSAvdHdvIC90aHJlZSAvZm91ciAvZml2ZSAvc2l4IC9zZXZlbgorL2VpZ2h0IC9uaW5lIC9jb2xvbiAvc2VtaWNvbG9uIC9sZXNzIC9lcXVhbCAvZ3JlYXRlciAvcXVlc3Rpb24KKy9hdCAvQSAvQiAvQyAvRCAvRSAvRiAvRworL0ggL0kgL0ogL0sgL0wgL00gL04gL08KKy9QIC9RIC9SIC9TIC9UIC9VIC9WIC9XCisvWCAvWSAvWiAvYnJhY2tldGxlZnQgL2JhY2tzbGFzaCAvYnJhY2tldHJpZ2h0IC9hc2NpaWNpcmN1bSAvdW5kZXJzY29yZQorL2dyYXZlIC9hIC9iIC9jIC9kIC9lIC9mIC9nCisvaCAvaSAvaiAvayAvbCAvbSAvbiAvbworL3AgL3EgL3IgL3MgL3QgL3UgL3YgL3cKKy94IC95IC96IC9icmFjZWxlZnQgL2JhciAvYnJhY2VyaWdodCAvb3ZlcmxpbmUgLy5ub3RkZWYKKzEyOHsvLm5vdGRlZn1yZXBlYXRdCisvRW5jb2RpbmcgZGVmaW5lcmVzb3VyY2UgcG9wCislIHZpbTpmZj11bml4OgorJSVFT0YKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcHJpbnQvamlzX3JvbWFuLnBzIGIvcnVudGltZS9wcmludC9qaXNfcm9tYW4ucHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI0YTgwNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvcHJpbnQvamlzX3JvbWFuLnBzCkBAIC0wLDAgKzEsMjMgQEAKKyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUVuY29kaW5nCislJVRpdGxlOiBWSU0tamlzX3JvbWFuCislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCislIERpZmZlcmVudCB0byBBU0NJSSBhdCBjb2RlIHBvaW50cyA5MiBhbmQgMTI2CisvVklNLWppc19yb21hblsKKzMyey8ubm90ZGVmfXJlcGVhdAorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC95ZW4gL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL292ZXJsaW5lIC8ubm90ZGVmCisxMjh7Ly5ub3RkZWZ9cmVwZWF0XQorL0VuY29kaW5nIGRlZmluZXJlc291cmNlIHBvcAorJSB2aW06ZmY9dW5peDoKKyUlRU9GCmRpZmYgLS1naXQgYS9ydW50aW1lL3ByaW50L2tzX3JvbWFuLnBzIGIvcnVudGltZS9wcmludC9rc19yb21hbi5wcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjg4NTUwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9wcmludC9rc19yb21hbi5wcwpAQCAtMCwwICsxLDIzIEBACislIVBTLUFkb2JlLTMuMCBSZXNvdXJjZS1FbmNvZGluZworJSVUaXRsZTogVklNLWtzX3JvbWFuCislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCislIERpZmZlcmVudCB0byBBU0NJSSBhdCBjb2RlIHBvaW50cyA5NiBhbmQgMTI2CisvVklNLWtzX3JvbWFuWworMzJ7Ly5ub3RkZWZ9cmVwZWF0Cisvc3BhY2UgL2V4Y2xhbSAvcXVvdGVkYmwgL251bWJlcnNpZ24gL2RvbGxhciAvcGVyY2VudCAvYW1wZXJzYW5kIC9xdW90ZXNpbmdsZQorL3BhcmVubGVmdCAvcGFyZW5yaWdodCAvYXN0ZXJpc2sgL3BsdXMgL2NvbW1hIC9taW51cyAvcGVyaW9kIC9zbGFzaAorL3plcm8gL29uZSAvdHdvIC90aHJlZSAvZm91ciAvZml2ZSAvc2l4IC9zZXZlbgorL2VpZ2h0IC9uaW5lIC9jb2xvbiAvc2VtaWNvbG9uIC9sZXNzIC9lcXVhbCAvZ3JlYXRlciAvcXVlc3Rpb24KKy9hdCAvQSAvQiAvQyAvRCAvRSAvRiAvRworL0ggL0kgL0ogL0sgL0wgL00gL04gL08KKy9QIC9RIC9SIC9TIC9UIC9VIC9WIC9XCisvWCAvWSAvWiAvYnJhY2tldGxlZnQgL3dvbiAvYnJhY2tldHJpZ2h0IC9hc2NpaWNpcmN1bSAvdW5kZXJzY29yZQorL2dyYXZlIC9hIC9iIC9jIC9kIC9lIC9mIC9nCisvaCAvaSAvaiAvayAvbCAvbSAvbiAvbworL3AgL3EgL3IgL3MgL3QgL3UgL3YgL3cKKy94IC95IC96IC9icmFjZWxlZnQgL2JhciAvYnJhY2VyaWdodCAvb3ZlcmxpbmUgLy5ub3RkZWYKKzEyOHsvLm5vdGRlZn1yZXBlYXRdCisvRW5jb2RpbmcgZGVmaW5lcmVzb3VyY2UgcG9wCislIHZpbTpmZj11bml4OgorJSVFT0YKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcHJpbnQvcHJvbG9nLnBzIGIvcnVudGltZS9wcmludC9wcm9sb2cucHMKaW5kZXggODU4N2VmMi4uNjIwODU2OSAxMDA2NDQKLS0tIGEvcnVudGltZS9wcmludC9wcm9sb2cucHMKKysrIGIvcnVudGltZS9wcmludC9wcm9sb2cucHMKQEAgLTUsMTMgKzUsMTUgQEAKICUgRWRpdGluZyBvZiB0aGlzIGZpbGUgaXMgTk9UIFJFQ09NTUVOREVELiAgWW91IHJ1biBhIHZlcnkgZ29vZCByaXNrIG9mIGNhdXNpbmcKICUgYWxsIFBvc3RTY3JpcHQgcHJpbnRpbmcgZnJvbSBWSU0gZmFpbGluZyBpZiB5b3UgZG8uICBQb3N0U2NyaXB0IGlzIG5vdCBjYWxsZWQKICUgYSB3cml0ZS1vbmx5IGxhbmd1YWdlIGZvciBub3RoaW5nIQorL3BhY2tlZGFycmF5IHdoZXJlIG5vdHt1c2VyZGljdCBiZWdpbi9zZXRwYWNraW5nL3BvcCBsb2FkIGRlZi9jdXJyZW50cGFja2luZworZmFsc2UgZGVmIGVuZH17cG9wfWlmZWxzZS9DUCBjdXJyZW50cGFja2luZyBkZWYgdHJ1ZSBzZXRwYWNraW5nCiAvYmR7YmluZCBkZWZ9YmluZCBkZWYvbGR7bG9hZCBkZWZ9YmQvZWR7ZXhjaCBkZWZ9YmQvZC9kZWYgbGQKIC9kYntkaWN0IGJlZ2lufWJkL2NkZXtjdXJyZW50ZGljdCBlbmR9YmQKIC9UIHRydWUgZC9GIGZhbHNlIGQKIC9TTyBudWxsIGQvc3Z7L1NPIHNhdmUgZH1iZC9yZXtTTyByZXN0b3JlfWJkCiAvTDIgc3lzdGVtZGljdC9sYW5ndWFnZWxldmVsIDIgY29weSBrbm93bntnZXQgZXhlY317cG9wIHBvcCAxfWlmZWxzZSAyIGdlIGQKLS9te21vdmV0b31iZC9ze3Nob3d9YmQvbXN7bSBzfWJkL2d7c2V0Z3JheX1iZC9ye3NldHJnYmNvbG9yfWJkL3Nwe3Nob3dwYWdlfWJkCi0vZ3N7Z3NhdmV9YmQvZ3J7Z3Jlc3RvcmV9YmQvY3B7Y3VycmVudHBvaW50fWJkCisvbS9tb3ZldG8gbGQvcy9zaG93IGxkIC9tc3ttIHN9YmQgL2cvc2V0Z3JheSBsZC9yL3NldHJnYmNvbG9yIGxkL3Nwe3Nob3dwYWdlfWJkCisvZ3MvZ3NhdmUgbGQvZ3IvZ3Jlc3RvcmUgbGQvY3AvY3VycmVudHBvaW50IGxkCiAvdWx7Z3MgVVcgc2V0bGluZXdpZHRoIGNwIFVPIGFkZCAyIGNvcHkgbmV3cGF0aCBtIDMgMSByb2xsIGFkZCBleGNoIGxpbmV0bwogc3Ryb2tlIGdyfWJkCiAvYmd7Z3MgciBjcCBCTyBhZGQgNCAtMiByb2xsIHJlY3RmaWxsIGdyfWJkCkBAIC0zNiw2ICszOCw3IEBACiBpZmVsc2UgMiBjb3B5IGtub3duezIgY29weSBnZXQgZHVwIG1heGxlbmd0aCBkaWN0IGNvcHlbL3F1ZXN0aW9uZG93bi9zcGFjZV17MgogY29weSBrbm93bnsyIGNvcHkgZ2V0IDIgaW5kZXgvLm5vdGRlZiAzIC0xIHJvbGwgcHV0IHBvcCBleGl0fWlmIHBvcH1mb3JhbGwgcHV0CiB9e3BvcCBwb3B9aWZlbHNlIGR1cCBORkQvRm9udE5hbWUgMyAtMSByb2xsIHB1dCBORkQgZGVmaW5lZm9udCBwb3AgZW5kfWJkCitDUCBzZXRwYWNraW5nCiAoXDAwNCljdm57fWJkCiAlIHZpbTpmZj11bml4OgogJSVFT0YKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2ZvcnRoLnZpbSBiL3J1bnRpbWUvc3ludGF4L2ZvcnRoLnZpbQppbmRleCA2ZTczN2QzLi4yZDE0NDFjIDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC9mb3J0aC52aW0KKysrIGIvcnVudGltZS9zeW50YXgvZm9ydGgudmltCkBAIC0xLDkgKzEsOSBAQAogIiBWaW0gc3ludGF4IGZpbGUKICIgTGFuZ3VhZ2U6ICAgIEZPUlRICiAiIE1haW50YWluZXI6ICBDaHJpc3RpYW4gVi4gSi4gQnL8c3NvdyA8Y3ZqYkBjdmpiLmRlPgotIiBMYXN0IENoYW5nZTogU29uIDIyIEp1biAyMDAzIDIwOjQyOjU1IENFU1QKKyIgTGFzdCBDaGFuZ2U6IERpIDA2IEp1bCAyMDA0IDE4OjQwOjMzIENFU1QKICIgRmlsZW5hbWVzOiAgICouZnMsKi5mdAotIiBVUkw6CSAgICAgICBodHRwOi8vd3d3LmN2amIuZGUvY29tcC92aW0vZm9ydGgudmltCisiIFVSTDogICAgICAgICBodHRwOi8vd3d3LmN2amIuZGUvY29tcC92aW0vZm9ydGgudmltCiAKICIgJElkJAogCkBAIC0xMywxMiArMTMsMTYgQEAKIAogIiBNYW55IFRoYW5rcyB0by4uLgogIgorIiAyMDA0LTA3LTA2OgorIiBDaGFuZ2VkICJzeW4gc3luYyBjY29tbWVudCBtYXhsaW5lcz0yMDAiIGxpbmU6IHNwbGl0dGVkIGl0IGludG8gdHdvIHNlcGFyYXRlCisiIGxpbmVzLgorIgogIiAyMDAzLTA1LTEwOgogIiBBbmRyZXcgR2F1bCA8YW5kcmV3IGF0IGdhdWwub3JnPiBzZW5kIG1lIGEgcGF0Y2ggZm9yCiAiIGZvcnRoT3BlcmF0b3JzLgogIgogIiAyMDAzLTA0LTAzOgotIiBSb24gQWFyb24gPHJvbiBhdCByb253YXJlLm9yZz4gbWFkZSB1cGRhdGVzIGZvciBhbgorIiBSb24gQWFyb24gPHJvbmFoYXJvbiBhdCB5YWhvby5jb20+IG1hZGUgdXBkYXRlcyBmb3IgYW4KICIgaW1wcm92ZWQgV2luMzJGb3J0aCBzdXBwb3J0LgogIgogIiAyMDAyLTA0LTIyOgpAQCAtNDYsNyArNTAsOCBAQAogZW5kaWYKIAogIiBTeW5jaHJvbml6YXRpb24gbWV0aG9kCi1zeW4gc3luYyBjY29tbWVudCBtYXhsaW5lcz0yMDAKK3N5biBzeW5jIGNjb21tZW50CitzeW4gc3luYyBtYXhsaW5lcz0yMDAKIAogIiBJIHVzZSBnZm9ydGgsIHNvIEkgc2V0IHRoaXMgdG8gY2FzZSBpZ25vcmUKIHN5biBjYXNlIGlnbm9yZQpAQCAtMTg5LDEwICsxOTQsMTAgQEAKICIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKIGlmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9mb3J0aF9zeW5faW5pdHMiKQogICAgIGlmIHZlcnNpb24gPCA1MDgKLQlsZXQgZGlkX2ZvcnRoX3N5bl9pbml0cyA9IDEKLQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICAgICAgICBsZXQgZGlkX2ZvcnRoX3N5bl9pbml0cyA9IDEKKyAgICAgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KICAgICBlbHNlCi0JY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgICAgICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgogICAgIGVuZGlmCiAKICAgICAiIFRoZSBkZWZhdWx0IG1ldGhvZHMgZm9yIGhpZ2hsaWdodGluZy4gQ2FuIGJlIG92ZXJyaWRlbiBsYXRlci4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2lzcy52aW0gYi9ydW50aW1lL3N5bnRheC9pc3MudmltCmluZGV4IGJlODkwMWMuLjU1N2NkMGEgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvc3ludGF4L2lzcy52aW0KKysrIGIvcnVudGltZS9zeW50YXgvaXNzLnZpbQpAQCAtMSw3ICsxLDcgQEAKICIgVmltIHN5bnRheCBmaWxlCiAiIExhbmd1YWdlOglJbm5vIFNldHVwIEZpbGUgKGlzcyBmaWxlKSBhbmQgTXkgSW5ub1NldHVwIGV4dGVuc2lvbgogIiBNYWludGFpbmVyOglEb21pbmlxdWUgU3TpcGhhbiAoZG9taW5pcXVlQG1nZ2VuLmNvbSkKLSIgTGFzdCBjaGFuZ2U6CTIwMDMgTWF5IDExCisiIExhc3QgY2hhbmdlOgkyMDA0IEp1bHkgNQogCiAiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcwogIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZApAQCAtMjUsMTYgKzI1LDE4IEBACiAKICIgc3luIG1hdGNoICBpc3NOYW1lCQkiW146IF1cKzoiCiBzeW4gbWF0Y2ggIGlzc05hbWUJCSJOYW1lOiIKLXN5biBtYXRjaCAgaXNzTmFtZQkJIk1pblZlcnNpb246XHxPbmx5QmVsb3dWZXJzaW9uOiIKK3N5biBtYXRjaCAgaXNzTmFtZQkJIk1pblZlcnNpb246XHxPbmx5QmVsb3dWZXJzaW9uOlx8TGFuZ3VhZ2VzOiIKIHN5biBtYXRjaCAgaXNzTmFtZQkJIlNvdXJjZTpcfERlc3REaXI6XHxEZXN0TmFtZTpcfENvcHlNb2RlOiIKLXN5biBtYXRjaCAgaXNzTmFtZQkJIkF0dHJpYnM6XHxGb250SW5zdGFsbDpcfEZsYWdzOiIKLXN5biBtYXRjaCAgaXNzTmFtZQkJIkZpbGVOYW1lOlx8UGFyYW1ldGVyczpcfFdvcmtpbmdEaXI6XHxDb21tZW50OiIKK3N5biBtYXRjaCAgaXNzTmFtZQkJIkF0dHJpYnM6XHxQZXJtaXNzaW9uczpcfEZvbnRJbnN0YWxsOlx8RmxhZ3M6Igorc3luIG1hdGNoICBpc3NOYW1lCQkiRmlsZU5hbWU6XHxQYXJhbWV0ZXJzOlx8V29ya2luZ0RpcjpcfEhvdEtleTpcfENvbW1lbnQ6Igogc3luIG1hdGNoICBpc3NOYW1lCQkiSWNvbkZpbGVuYW1lOlx8SWNvbkluZGV4OiIKIHN5biBtYXRjaCAgaXNzTmFtZQkJIlNlY3Rpb246XHxLZXk6XHxTdHJpbmc6Igogc3luIG1hdGNoICBpc3NOYW1lCQkiUm9vdDpcfFN1YktleTpcfFZhbHVlVHlwZTpcfFZhbHVlTmFtZTpcfFZhbHVlRGF0YToiCiBzeW4gbWF0Y2ggIGlzc05hbWUJCSJSdW5PbmNlSWQ6Igogc3luIG1hdGNoICBpc3NOYW1lCQkiVHlwZToiCi1zeW4gbWF0Y2ggIGlzc05hbWUJCSJDb21wb25lbnRzOlx8RGVzY3JpcHRpb246XHxHcm91cERlc2NyaXB0aW9uXHxUeXBlczoiCitzeW4gbWF0Y2ggIGlzc05hbWUJCSJDb21wb25lbnRzOlx8RGVzY3JpcHRpb246XHxHcm91cERlc2NyaXB0aW9uOlx8VHlwZXM6XHxFeHRyYURpc2tTcGFjZVJlcXVpcmVkOiIKK3N5biBtYXRjaCAgaXNzTmFtZSAgICAgICAgICAgICAgIlN0YXR1c01zZzpcfFJ1bk9uY2VJZDpcfFRhc2tzOiIKK3N5biBtYXRjaCAgaXNzTmFtZSAgICAgICAgICAgICAgIk1lc3NhZ2VzRmlsZTpcfExpY2Vuc2VGaWxlOlx8SW5mb0JlZm9yZUZpbGU6XHxJbmZvQWZ0ZXJGaWxlOiIKIAogc3luIG1hdGNoICBpc3NDb21tZW50CQkiXjsuKiQiCiAKQEAgLTQ4LDE1ICs1MCwxOSBAQAogc3luIGtleXdvcmQgaXNzRGlyc0ZsYWdzIGRlbGV0ZWFmdGVyaW5zdGFsbCB1bmluc2Fsd2F5c3VuaW5zdGFsbCB1bmluc25ldmVydW5pbnN0YWxsCiAKICIgW0ZpbGVzXQotc3luIGtleXdvcmQgaXNzRmlsZXNDb3B5TW9kZSBub3JtYWwgb25seWlmZG9lc250ZXhpc3QgYWx3YXlzb3ZlcndyaXRlIGFsd2F5c3NraXBpZnNhbWVvcm9sZGVyCitzeW4ga2V5d29yZCBpc3NGaWxlc0NvcHlNb2RlIG5vcm1hbCBvbmx5aWZkb2VzbnRleGlzdCBhbHdheXNvdmVyd3JpdGUgYWx3YXlzc2tpcGlmc2FtZW9yb2xkZXIgZG9udGNvcHkKIHN5biBrZXl3b3JkIGlzc0ZpbGVzQXR0cmlicyByZWFkb25seSBoaWRkZW4gc3lzdGVtCi1zeW4ga2V5d29yZCBpc3NGaWxlc0ZsYWdzIGNvbXBhcmV0aW1lc3RhbXBhbHNvIGNvbmZpcm1vdmVyd3JpdGUgZGVsZXRlYWZ0ZXJpbnN0YWxsCi1zeW4ga2V5d29yZCBpc3NGaWxlc0ZsYWdzIGV4dGVybmFsIGZvbnRpc250dHJ1ZXR5cGUgaXNyZWFkbWUgb3ZlcndyaXRlcmVhZG9ubHkKLXN5biBrZXl3b3JkIGlzc0ZpbGVzRmxhZ3MgcmVnc2VydmVyIHJlZ3R5cGVsaWIgcmVzdGFydHJlcGxhY2UKLXN5biBrZXl3b3JkIGlzc0ZpbGVzRmxhZ3Mgc2hhcmVkZmlsZSBza2lwaWZzb3VyY2Vkb2VzbnRleGlzdCB1bmluc25ldmVydW5pbnN0YWxsCitzeW4ga2V5d29yZCBpc3NGaWxlc1Blcm1pc3Npb25zIGZ1bGwgbW9kaWZ5IHJlYWRleGVjCitzeW4ga2V5d29yZCBpc3NGaWxlc0ZsYWdzIGFsbG93dW5zYWZlZmlsZXMgY29tcGFyZXRpbWVzdGFtcGFsc28gY29uZmlybW92ZXJ3cml0ZSBkZWxldGVhZnRlcmluc3RhbGwKK3N5biBrZXl3b3JkIGlzc0ZpbGVzRmxhZ3MgZG9udGNvcHkgZG9udHZlcmlmeWNoZWNrc3VtIGV4dGVybmFsIGZvbnRpc250dHJ1ZXR5cGUgaWdub3JldmVyc2lvbiAKK3N5biBrZXl3b3JkIGlzc0ZpbGVzRmxhZ3MgaXNyZWFkbWUgb25seWlmZGVzdGZpbGVleGlzdHMgb25seWlmZG9lc250ZXhpc3Qgb3ZlcndyaXRlcmVhZG9ubHkgCitzeW4ga2V5d29yZCBpc3NGaWxlc0ZsYWdzIHByb21wdGlmb2xkZXIgcmVjdXJzZXN1YmRpcnMgcmVnc2VydmVyIHJlZ3R5cGVsaWIgcmVzdGFydHJlcGxhY2UKK3N5biBrZXl3b3JkIGlzc0ZpbGVzRmxhZ3Mgc2hhcmVkZmlsZSBza2lwaWZzb3VyY2Vkb2VzbnRleGlzdCBzb3J0ZmlsZXNieWV4dGVuc2lvbiB0b3VjaCAKK3N5biBrZXl3b3JkIGlzc0ZpbGVzRmxhZ3MgdW5pbnNyZW1vdmVyZWFkb25seSB1bmluc3Jlc3RhcnRkZWxldGUgdW5pbnNuZXZlcnVuaW5zdGFsbAogCiAiIFtJY29uc10KLXN5biBrZXl3b3JkIGlzc0ljb25zRmxhZ3MgY3JlYXRlb25seWlmZmlsZWV4aXN0cyBydW5taW5pbWl6ZWQgdW5pbnNuZXZlcnVuaW5zdGFsbCB1c2VhcHBwYXRocworc3luIGtleXdvcmQgaXNzSWNvbnNGbGFncyBjbG9zZW9uZXhpdCBjcmVhdGVvbmx5aWZmaWxlZXhpc3RzIGRvbnRjbG9zZW9uZXhpdCAKK3N5biBrZXl3b3JkIGlzc0ljb25zRmxhZ3MgcnVubWF4aW1pemVkIHJ1bm1pbmltaXplZCB1bmluc25ldmVydW5pbnN0YWxsIHVzZWFwcHBhdGhzCiAKICIgW0lOSV0KIHN5biBrZXl3b3JkIGlzc0lOSUZsYWdzIGNyZWF0ZWtleWlmZG9lc250ZXhpc3QgdW5pbnNkZWxldGVlbnRyeSB1bmluc2RlbGV0ZXNlY3Rpb24gdW5pbnNkZWxldGVzZWN0aW9uaWZlbXB0eQpAQCAtNjQsMjIgKzcwLDI3IEBACiAiIFtSZWdpc3RyeV0KIHN5biBrZXl3b3JkIGlzc1JlZ1Jvb3RLZXkgICBIS0NSIEhLQ1UgSEtMTSBIS1UgSEtDQwogc3luIGtleXdvcmQgaXNzUmVnVmFsdWVUeXBlIG5vbmUgc3RyaW5nIGV4cGFuZHN6IG11bHRpc3ogZHdvcmQgYmluYXJ5Ci1zeW4ga2V5d29yZCBpc3NSZWdGbGFncyBjcmVhdGV2YWx1ZWlmZG9lc250ZXhpc3QgZGVsZXRla2V5IGRlbGV0ZXZhbHVlIHByZXNlcnZlc3RyaW5ndHlwZQotc3luIGtleXdvcmQgaXNzUmVnRmxhZ3MgdW5pbnNjbGVhcnZhbHVlIHVuaW5zZGVsZXRla2V5IHVuaW5zZGVsZXRla2V5aWZlbXB0eSB1bmluc2RlbGV0ZXZhbHVlCitzeW4ga2V5d29yZCBpc3NSZWdGbGFncyBjcmVhdGV2YWx1ZWlmZG9lc250ZXhpc3QgZGVsZXRla2V5IGRlbGV0ZXZhbHVlIGRvbnRjcmVhdGVrZXkgCitzeW4ga2V5d29yZCBpc3NSZWdGbGFncyBwcmVzZXJ2ZXN0cmluZ3R5cGUgbm9lcnJvciB1bmluc2NsZWFydmFsdWUgCitzeW4ga2V5d29yZCBpc3NSZWdGbGFncyB1bmluc2RlbGV0ZWtleSB1bmluc2RlbGV0ZWtleWlmZW1wdHkgdW5pbnNkZWxldGV2YWx1ZQogCiAiIFtSdW5dIGFuZCBbVW5pbnN0YWxsUnVuXQotc3luIGtleXdvcmQgaXNzUnVuRmxhZ3Mgbm93YWl0IHNoZWxsZXhlYyBza2lwaWZkb2VzbnRleGlzdCBydW5taW5pbWl6ZWQgd2FpdHVudGlsaWRsZQotc3luIGtleXdvcmQgaXNzUnVuRmxhZ3MgcG9zdGluc3RhbGwgdW5jaGVja2VkIHNob3djaGVja2JveAorc3luIGtleXdvcmQgaXNzUnVuRmxhZ3MgaGlkZXdpemFyZCBub3dhaXQgcG9zdGluc3RhbGwgcnVuaGlkZGVuIHJ1bm1heGltaXplZAorc3luIGtleXdvcmQgaXNzUnVuRmxhZ3MgcnVubWluaW1pemVkIHNoZWxsZXhlYyBza2lwaWZkb2VzbnRleGlzdCBza2lwaWZub3RzaWxlbnQgCitzeW4ga2V5d29yZCBpc3NSdW5GbGFncyBza2lwaWZzaWxlbnQgdW5jaGVja2VkIHdhaXR1bnRpbGlkbGUKIAogIiBbVHlwZXNdCiBzeW4ga2V5d29yZCBpc3NUeXBlc0ZsYWdzIGlzY3VzdG9tCiAKICIgW0NvbXBvbmVudHNdCi1zeW4ga2V5d29yZCBpc3NDb21wb25lbnRzRmxhZ3MgZml4ZWQgcmVzdGFydCBkaXNhYmxlbm91bmluc3RhbGx3YXJuaW5nCitzeW4ga2V5d29yZCBpc3NDb21wb25lbnRzRmxhZ3MgZG9udGluaGVyaXRjaGVjayBleGNsdXNpdmUgZml4ZWQgcmVzdGFydCBkaXNhYmxlbm91bmluc3RhbGx3YXJuaW5nCiAKICIgW1VuaW5zdGFsbERlbGV0ZV0gYW5kIFtJbnN0YWxsRGVsZXRlXQogc3luIGtleXdvcmQgaXNzSW5zdGFsbERlbGV0ZVR5cGUgZmlsZXMgZmlsZXNhbmRvcmRpcnMgZGlyaWZlbXB0eQogCisiIFtUYXNrc10KK3N5biBrZXl3b3JkIGlzc1Rhc2tzRmxhZ3MgY2hlY2tlZG9uY2UgZG9udGluaGVyaXRjaGVjayBleGNsdXNpdmUgcmVzdGFydCB1bmNoZWNrZWQgCisKIAogIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgogIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CkBAIC0xMDUsNiArMTE2LDcgQEAKICAgIEhpTGluayBpc3NEaXJzRmxhZ3MJCUtleXdvcmQKICAgIEhpTGluayBpc3NGaWxlc0NvcHlNb2RlCUtleXdvcmQKICAgIEhpTGluayBpc3NGaWxlc0F0dHJpYnMJS2V5d29yZAorICAgSGlMaW5rIGlzc0ZpbGVzUGVybWlzc2lvbnMJS2V5d29yZAogICAgSGlMaW5rIGlzc0ZpbGVzRmxhZ3MJCUtleXdvcmQKICAgIEhpTGluayBpc3NJY29uc0ZsYWdzCQlLZXl3b3JkCiAgICBIaUxpbmsgaXNzSU5JRmxhZ3MJCUtleXdvcmQKQEAgLTExNSw2ICsxMjcsNyBAQAogICAgSGlMaW5rIGlzc1R5cGVzRmxhZ3MJCUtleXdvcmQKICAgIEhpTGluayBpc3NDb21wb25lbnRzRmxhZ3MJS2V5d29yZAogICAgSGlMaW5rIGlzc0luc3RhbGxEZWxldGVUeXBlCUtleXdvcmQKKyAgIEhpTGluayBpc3NUYXNrc0ZsYWdzIAlLZXl3b3JkCiAKIAogICBkZWxjb21tYW5kIEhpTGluawpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbmV0cndsaXN0LnZpbSBiL3J1bnRpbWUvc3ludGF4L25ldHJ3bGlzdC52aW0KaW5kZXggOTYyOGFkMy4uOGYzMDkxZCAxMDA2NDQKLS0tIGEvcnVudGltZS9zeW50YXgvbmV0cndsaXN0LnZpbQorKysgYi9ydW50aW1lL3N5bnRheC9uZXRyd2xpc3QudmltCkBAIC0xLDYgKzEsNiBAQAogIiBMYW5ndWFnZSAgIDogTmV0cncgUmVtb3RlLURpcmVjdG9yeSBMaXN0aW5nIFN5bnRheAogIiBNYWludGFpbmVyIDogQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuCi0iIExhc3QgY2hhbmdlOiBKdW4gMjUsIDIwMDQKKyIgTGFzdCBjaGFuZ2U6IEp1bCAwNiwgMjAwNAogIiBWZXJzaW9uICAgIDogMgogCiAiIFN5bnRheCBDbGVhcmluZzoge3t7MQpAQCAtMTEsMTggKzExLDE4IEBACiBlbmRpZgogCiAiIERpcmVjdG9yeSBMaXN0IFN5bnRheCBIaWdobGlnaHRpbmc6IHt7ezEKLXN5biBtYXRjaCBuZXRyd0RpcgkJCQkiXi4qLyQiCQkJY29udGFpbnM9bmV0cndDbGFzc2lmeQotc3luIG1hdGNoIG5ldHJ3Q2xhc3NpZnkgCQkJIlsqPXxAL10kIgotc3luIG1hdGNoIG5ldHJ3U2xhc2ggY29udGFpbmVkCQkJIi8iCi1zeW4gbWF0Y2ggbmV0cndTeW1MaW5rCQkJCSJeLipAJCIJCQljb250YWlucz1uZXRyd0NsYXNzaWZ5Ci1zeW4gbWF0Y2ggbmV0cndDb21tZW50CQkJCSciLiokJwkJCWNvbnRhaW5zPW5ldHJ3SGlkZSxuZXRyd1NvcnRCeSxuZXRyd1NvcnRTZXEKK3N5biBtYXRjaCBuZXRyd0RpcgkJCQkiXi4qL1wlKFx0XHwkXCkiCWNvbnRhaW5zPW5ldHJ3Q2xhc3NpZnkKK3N5biBtYXRjaCBuZXRyd0NsYXNzaWZ5CQkJCSJbKj18QC9dXCUoXHRcfCRcKSIKK3N5biBtYXRjaCBuZXRyd1N5bUxpbmsJCQkJIl4uKkBcJShcdFx8JFwpIgljb250YWlucz1uZXRyd0NsYXNzaWZ5CitzeW4gbWF0Y2ggbmV0cndDb21tZW50CQkJCSciLipcJShcdFx8JFwpJwkJY29udGFpbnM9bmV0cndIaWRlLG5ldHJ3U29ydEJ5LG5ldHJ3U29ydFNlcQogc3luIG1hdGNoIG5ldHJ3SGlkZQkJCQknXiJccypIaWRpbmc6JwkJc2tpcHdoaXRlIG5leHRncm91cD1uZXRyd0hpZGVQYXQKLXN5biBtYXRjaCBuZXRyd0hpZGVQYXQgY29udGFpbmVkCQkiW14sXVwrIgkJc2tpcHdoaXRlIG5leHRncm91cD1uZXRyd0hpZGVTZXAKLXN5biBtYXRjaCBuZXRyd0hpZGVTZXAgY29udGFpbmVkIHRyYW5zcGFyZW50CSIsIgkJCXNraXB3aGl0ZSBuZXh0Z3JvdXA9bmV0cndIaWRlUGF0Ci1zeW4gbWF0Y2ggbmV0cndTb3J0QnkgIGNvbnRhaW5lZCB0cmFuc3BhcmVudAkiU29ydGVkIGJ5IgkJc2tpcHdoaXRlIG5leHRncm91cD1uZXRyd0xpc3QKLXN5biBtYXRjaCBuZXRyd1NvcnRTZXEgY29udGFpbmVkIHRyYW5zcGFyZW50CSJTb3J0IHNlcXVlbmNlOiIJc2tpcHdoaXRlIG5leHRncm91cD1uZXRyd0xpc3QKLXN5biBtYXRjaCBuZXRyd0xpc3QgICAgY29udGFpbmVkCQkiLiokIgljb250YWlucz1uZXRyd0NvbW1hCi1zeW4gbWF0Y2ggbmV0cndDb21tYQljb250YWluZWQJIiwiCitzeW4gbWF0Y2ggbmV0cndTbGFzaAljb250YWluZWQJCQkiLyIKK3N5biBtYXRjaCBuZXRyd0hpZGVQYXQJY29udGFpbmVkCQkiW14sXVwrIgkJc2tpcHdoaXRlIG5leHRncm91cD1uZXRyd0hpZGVTZXAKK3N5biBtYXRjaCBuZXRyd0hpZGVTZXAJY29udGFpbmVkIHRyYW5zcGFyZW50CSIsIgkJCXNraXB3aGl0ZSBuZXh0Z3JvdXA9bmV0cndIaWRlUGF0CitzeW4gbWF0Y2ggbmV0cndTb3J0QnkJY29udGFpbmVkIHRyYW5zcGFyZW50CSJTb3J0ZWQgYnkiCQlza2lwd2hpdGUgbmV4dGdyb3VwPW5ldHJ3TGlzdAorc3luIG1hdGNoIG5ldHJ3U29ydFNlcQljb250YWluZWQgdHJhbnNwYXJlbnQJIlNvcnQgc2VxdWVuY2U6Iglza2lwd2hpdGUgbmV4dGdyb3VwPW5ldHJ3TGlzdAorc3luIG1hdGNoIG5ldHJ3TGlzdAljb250YWluZWQJCSIuKiQiCQkJY29udGFpbnM9bmV0cndDb21tYQorc3luIG1hdGNoIG5ldHJ3Q29tbWEJY29udGFpbmVkCQkiLCIKIAogIiBIaWdobGlnaHRpbmcgTGlua3M6IHt7ezEKIGlmICFleGlzdHMoImRpZF9kcmNoaXBfZGJnX3N5bnRheCIpCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC92aW0udmltIGIvcnVudGltZS9zeW50YXgvdmltLnZpbQppbmRleCAxNTdlYjU2Li5iMzA3Yzc1IDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC92aW0udmltCisrKyBiL3J1bnRpbWUvc3ludGF4L3ZpbS52aW0KQEAgLTEsOCArMSw4IEBACiAiIFZpbSBzeW50YXggZmlsZQogIiBMYW5ndWFnZToJVmltIDYuMyBzY3JpcHQKICIgTWFpbnRhaW5lcjoJRHIuIENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiA8TmRyT2NoaXBTQFBjYW1wYmVsbEFmYW1pbHkuTWJpej4KLSIgTGFzdCBDaGFuZ2U6CUp1bCAwMSwgMjAwNAotIiBWZXJzaW9uOgk2LjMtMDUKKyIgTGFzdCBDaGFuZ2U6CUp1bCAwOSwgMjAwNAorIiBWZXJzaW9uOgk2LjMtMDcKICIgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQga2V5d29yZCBsaXN0czoge3t7MQogCiAiIFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZCB7e3syCkBAIC0xMDYsNyArMTA2LDcgQEAKIAogIiBGdW5jdGlvbnMgOiBUYWcgaXMgcHJvdmlkZWQgZm9yIHRob3NlIHdobyB3aXNoIHRvIGhpZ2hsaWdodCB0YWdnZWQgZnVuY3Rpb25zIHt7ezIKICIgPT09PT09PT09Ci1zeW4gY2x1c3RlciB2aW1GdW5jTGlzdAljb250YWlucz12aW1GdW5jS2V5LFRhZyx2aW1GdW5jU0lECitzeW4gY2x1c3RlciB2aW1GdW5jTGlzdAljb250YWlucz12aW1Db21tYW5kLHZpbUZ1bmNLZXksVGFnLHZpbUZ1bmNTSUQKIHN5biBjbHVzdGVyIHZpbUZ1bmNCb2R5TGlzdAljb250YWlucz12aW1Jc0NvbW1hbmQsdmltRnVuY3Rpb24sdmltRnVuY3Rpb25FcnJvcix2aW1GdW5jQm9keSx2aW1MaW5lQ29tbWVudCx2aW1TcGVjRmlsZSx2aW1PcGVyLHZpbU51bWJlcix2aW1Db21tZW50LHZpbVN0cmluZyx2aW1TdWJzdCx2aW1NYXJrLHZpbVJlZ2lzdGVyLHZpbUFkZHJlc3MsdmltRmlsdGVyLHZpbUNtcGx4UmVwZWF0LHZpbUNvbW1lbnQsdmltTGV0LHZpbVNldCx2aW1BdXRvQ21kLHZpbVJlZ2lvbix2aW1TeW5MaW5lLHZpbU5vdGF0aW9uLHZpbUN0cmxDaGFyLHZpbUZ1bmNWYXIsdmltQ29udGludWUKIGlmICFleGlzdHMoImc6dmltc3ludGF4X25vZXJyb3IiKQogIHN5biBtYXRjaCAgIHZpbUZ1bmN0aW9uRXJyb3IJIlw8ZnVcJVtuY3Rpb25dIVw9XHNcK1x6c1xVXGlcey19XHplXHMqKCIgICAgICAgICAgICAgICAgCWNvbnRhaW5zPXZpbUZ1bmNLZXksdmltRnVuY0JsYW5rIG5leHRncm91cD12aW1GdW5jQm9keQpAQCAtMTgzLDExICsxODMsMTAgQEAKICIgSW4tU3RyaW5nIFNwZWNpYWxzOiB7e3syCiAiIFRyeSB0byBjYXRjaCBzdHJpbmdzLCBpZiBub3RoaW5nIGVsc2UgbWF0Y2hlcyAodGhlcmVmb3JlIGl0IG11c3QgcHJlY2VkZSB0aGUgb3RoZXJzISkKICIgIHZpbUVzY2FwZUJyYWNlIGhhbmRsZXMgWyJdICBbXSJdIChpZS4gInMgZG9uJ3QgdGVybWluYXRlIHN0cmluZyBpbnNpZGUgW10pCi1zeW4gcmVnaW9uIHZpbUVzY2FwZUJyYWNlCW9uZWxpbmUgY29udGFpbmVkIHRyYW5zcGFyZW50CXN0YXJ0PSJbXlxcXVwoXFxcXFwpKlxbXF5cPVxdXD0iIHNraXA9IlxcXFxcfFxcXF0iIGVuZD0iXF0ibWU9ZS0xCitzeW4gcmVnaW9uIHZpbUVzY2FwZUJyYWNlCW9uZWxpbmUgICBjb250YWluZWQgdHJhbnNwYXJlbnQgc3RhcnQ9IlteXFxdXChcXFxcXCkqXFtcXlw9XF1cPSIgc2tpcD0iXFxcXFx8XFxcXSIgZW5kPSJcXSJtZT1lLTEKIHN5biBtYXRjaCAgdmltUGF0U2VwRXJyCWNvbnRhaW5lZAkiXFwpIgogc3luIG1hdGNoICB2aW1QYXRTZXAJY29udGFpbmVkCSJcXHwiCi1zeW4gcmVnaW9uIHZpbVBhdFNlcFpvbmUJb25lbGluZSBjb250YWluZWQgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD12aW1QYXRTZXAgc3RhcnQ9IlxcJVw9KCIgc2tpcD0iXFxcXCIgZW5kPSJcXCkiCWNvbnRhaW5zPUB2aW1TdHJpbmdHcm91cAotc3luIHJlZ2lvbiB2aW1QYXRTZXBab25lCW9uZWxpbmUgY29udGFpbmVkIG1hdGNoZ3JvdXA9dmltUGF0U2VwIHN0YXJ0PSJcXCVcPSgiIHNraXA9IlxcXFwiIGVuZD0iXFwpIgljb250YWlucz1AdmltU3RyaW5nR3JvdXAKK3N5biByZWdpb24gdmltUGF0U2VwWm9uZQlvbmVsaW5lICAgY29udGFpbmVkICAgbWF0Y2hncm91cD12aW1QYXRTZXAgc3RhcnQ9IlxcJVw9KCIgc2tpcD0iXFxcXCIgZW5kPSJcXClcfFteXF1bJyJdIgljb250YWlucz1AdmltU3RyaW5nR3JvdXAKIHN5biByZWdpb24gdmltUGF0UmVnaW9uCWNvbnRhaW5lZCB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPXZpbVBhdFNlcCBzdGFydD0iXFxbeiVdXD0oIiBlbmQ9IlxcKSIJY29udGFpbnM9QHZpbVN1YnN0TGlzdCBvbmVsaW5lCiBzeW4gbWF0Y2ggIHZpbU5vdFBhdFNlcAljb250YWluZWQJIlxcXFwiCiBzeW4gY2x1c3RlciB2aW1TdHJpbmdHcm91cAljb250YWlucz12aW1Fc2NhcGVCcmFjZSx2aW1QYXRTZXAsdmltTm90UGF0U2VwLHZpbVBhdFNlcEVycix2aW1QYXRTZXBab25lCkBAIC0zMTAsNyArMzA5LDcgQEAKIAogIiBVc2VyIEZ1bmN0aW9uIEhpZ2hsaWdodGluZyAoZm9sbG93aW5nIEdhdXRhbSBJeWVyJ3Mgc3VnZ2VzdGlvbikge3t7MgogIiA9PT09PT09PT09PT09PT09PT09PT09PT09PQotc3luIG1hdGNoIHZpbUZ1bmMJCSJcJShbc1NdOlx8PFtzU11baUldW2REXT5cKVw9XElcaSpcemVccyooIgljb250YWlucz12aW1Vc2VyRnVuYyx2aW1GdW5jTmFtZSx2aW1Db21tYW5kLHZpbU5vdEZ1bmMKK3N5biBtYXRjaCB2aW1GdW5jCQkiXCUoW3NTXTpcfDxbc1NdW2lJXVtkRF0+XClcPVxJXGkqXHplXHMqKCIJY29udGFpbnM9dmltRnVuY05hbWUsdmltVXNlckZ1bmMsdmltQ29tbWFuZCx2aW1Ob3RGdW5jLHZpbUV4ZWN1dGUKIHN5biBtYXRjaCB2aW1Vc2VyRnVuYyBjb250YWluZWQJIlwlKFtzU106XHw8W3NTXVtpSV1bZERdPlwpXGlcK1x8XDxcdVxpKlw+XHxcPGlmXD4iCWNvbnRhaW5zPXZpbU5vdGF0aW9uLHZpbUNvbW1hbmQKIHN5biBtYXRjaCB2aW1Ob3RGdW5jICBjb250YWluZWQJIlw8W2FpQUlyUl0oIgogCkBAIC01MDQsNiArNTAzLDE2IEBACiAgc3luIHJlZ2lvbiB2aW1UY2xSZWdpb24gbWF0Y2hncm91cD12aW1TY3JpcHREZWxpbSBzdGFydD0rdGNbbF1cPVxzKjw8XHMqJCsgZW5kPStcLiQrIGNvbnRhaW5zPUB2aW1UY2xTY3JpcHQKIGVuZGlmCiAKKyIgWy0tIG16c2NoZW1lIC0tXSB7e3szCitpZiAoaGFzKCJtenNjaGVtZSIpIHx8IGc6dmltZW1iZWRzY3JpcHQpICYmIGZpbGVyZWFkYWJsZShleHBhbmQoIjxzZmlsZT46cDpoIikuIi9zY2hlbWUudmltIikKKyB1bmxldCEgYjpjdXJyZW50X3N5bnRheAorIGxldCBpc2tLZWVwPSAmaXNrCisgc3luIGluY2x1ZGUgQHZpbU16U2NoZW1lU2NyaXB0IDxzZmlsZT46cDpoL3NjaGVtZS52aW0KKyBsZXQgJmlzaz0gaXNrS2VlcAorIHN5biByZWdpb24gdmltTXpTY2hlbWVSZWdpb24gbWF0Y2hncm91cD12aW1TY3JpcHREZWxpbSBzdGFydD0rbXpcJVtzY2hlbWVdXHMqPDxccypceiguKlwpJCsgZW5kPSteXHoxJCsgY29udGFpbnM9QHZpbU16U2NoZW1lU2NyaXB0Cisgc3luIHJlZ2lvbiB2aW1NelNjaGVtZVJlZ2lvbiBtYXRjaGdyb3VwPXZpbVNjcmlwdERlbGltIHN0YXJ0PSttelwlW3NjaGVtZV1ccyo8PFxzKiQrIGVuZD0rXC4kKyBjb250YWlucz1AdmltTXpTY2hlbWVTY3JpcHQKK2VuZGlmCisKICIgU3luY2hyb25pemUgKHNwZWVkKSB7e3syCiAiPT09PT09PT09PT09CiBpZiBleGlzdHMoImc6dmltX21pbmxpbmVzIikKQEAgLTUzMSw3ICs1NDAsNyBAQAogIGhpIGRlZiBsaW5rIHZpbUVyclNldHRpbmcJdmltRXJyb3IKICBoaSBkZWYgbGluayB2aW1GVEVycm9yCXZpbUVycm9yCiAgaGkgZGVmIGxpbmsgdmltRnVuY3Rpb25FcnJvcgl2aW1FcnJvcgotIGhpIGRlZiBsaW5rIFZpbUZ1bmMgICAgICAgICAJdmltRXJyb3IKKyBoaSBkZWYgbGluayB2aW1GdW5jICAgICAgICAgCXZpbUVycm9yCiAgaGkgZGVmIGxpbmsgdmltSGlBdHRyaWJMaXN0CXZpbUVycm9yCiAgaGkgZGVmIGxpbmsgdmltSGlDdGVybUVycm9yCXZpbUVycm9yCiAgaGkgZGVmIGxpbmsgdmltSGlLZXlFcnJvcgl2aW1FcnJvcgpkaWZmIC0tZ2l0IGEvc3JjL2F1dG8vY29uZmlnLm1rIGIvc3JjL2F1dG8vY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhN2MxMDgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYXV0by9jb25maWcubWsKQEAgLTAsMCArMSw1IEBACit0aGUgZmlyc3QgdGFyZ2V0cyB0byBtYWtlIHZpbSBhcmU6IHNjcmF0Y2ggY29uZmlnIG15c2VsZgorc3JjZGlyID0gLgorVklNTkFNRSA9IHZpbQorRVhOQU1FID0gZXgKK1ZJRVdOQU1FID0gdmlldwpkaWZmIC0tZ2l0IGEvc3JjL2V2YWwuYyBiL3NyYy9ldmFsLmMKaW5kZXggZmFhMDk3Mi4uYTk1Y2JmNiAxMDA2NDQKLS0tIGEvc3JjL2V2YWwuYworKysgYi9zcmMvZXZhbC5jCkBAIC0zNzAsNiArMzcwLDcgQEAKIHN0YXRpYyB2b2lkIGZfdGVtcG5hbWUgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOwogc3RhdGljIHZvaWQgZl90b2xvd2VyIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKIHN0YXRpYyB2b2lkIGZfdG91cHBlciBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX3RyIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKIHN0YXRpYyB2b2lkIGZfdHlwZSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CiBzdGF0aWMgdm9pZCBmX3ZpcnRjb2wgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOwogc3RhdGljIHZvaWQgZl92aXN1YWxtb2RlIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKQEAgLTI5MjMsNiArMjkyNCw3IEBACiAgICAgeyJ0ZW1wbmFtZSIsCTAsIDAsIGZfdGVtcG5hbWV9LAogICAgIHsidG9sb3dlciIsCQkxLCAxLCBmX3RvbG93ZXJ9LAogICAgIHsidG91cHBlciIsCQkxLCAxLCBmX3RvdXBwZXJ9LAorICAgIHsidHIiLAkJMywgMywgZl90cn0sCiAgICAgeyJ0eXBlIiwJCTEsIDEsIGZfdHlwZX0sCiAgICAgeyJ2aXJ0Y29sIiwJCTEsIDEsIGZfdmlydGNvbH0sCiAgICAgeyJ2aXN1YWxtb2RlIiwJMCwgMSwgZl92aXN1YWxtb2RlfSwKQEAgLTc0MzgsNiArNzQ0MCwxMjIgQEAKIH0KIAogLyoKKyAqICJ0cihzdHJpbmcsIGZyb21zdHIsIHRvc3RyKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX3RyKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgY2hhcl91CSppbnN0cjsKKyAgICBjaGFyX3UJKmZyb21zdHI7CisgICAgY2hhcl91CSp0b3N0cjsKKyAgICBjaGFyX3UJKnA7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkgICAgICAgIGlubGVuOworICAgIGludAkgICAgICAgIGZyb21sZW47CisgICAgaW50CSAgICAgICAgdG9sZW47CisgICAgaW50CQlpZHg7CisgICAgY2hhcl91CSpjcHN0cjsKKyAgICBpbnQJCWNwbGVuOworICAgIGludAkJZmlyc3QgPSBUUlVFOworI2VuZGlmCisgICAgY2hhcl91CWJ1ZltOVU1CVUZMRU5dOworICAgIGNoYXJfdQlidWYyW05VTUJVRkxFTl07CisgICAgZ2FycmF5X1QJZ2E7CisKKyAgICBpbnN0ciA9IGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKTsKKyAgICBmcm9tc3RyID0gZ2V0X3Zhcl9zdHJpbmdfYnVmKCZhcmd2YXJzWzFdLCBidWYpOworICAgIHRvc3RyID0gZ2V0X3Zhcl9zdHJpbmdfYnVmKCZhcmd2YXJzWzJdLCBidWYyKTsKKworICAgIC8qIERlZmF1bHQgcmV0dXJuIHZhbHVlOiBlbXB0eSBzdHJpbmcuICovCisgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBOVUxMOworICAgIGdhX2luaXQyKCZnYSwgKGludClzaXplb2YoY2hhciksIDgwKTsKKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoIWhhc19tYnl0ZSkKKyNlbmRpZgorCS8qIG5vdCBtdWx0aS1ieXRlOiBmcm9tc3RyIGFuZCB0b3N0ciBtdXN0IGJlIHRoZSBzYW1lIGxlbmd0aCAqLworCWlmIChTVFJMRU4oZnJvbXN0cikgIT0gU1RSTEVOKHRvc3RyKSkKKwl7CitlcnJvcjoKKwkgICAgRU1TRzIoXyhlX2ludmFyZzIpLCBmcm9tc3RyKTsKKwkgICAgZ2FfY2xlYXIoJmdhKTsKKwkgICAgcmV0dXJuOworCX0KKworICAgIC8qIGZyb21zdHIgYW5kIHRvc3RyIGhhdmUgdG8gY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgY2hhcnMgKi8KKyAgICB3aGlsZSAoKmluc3RyICE9IE5VTCkKKyAgICB7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJeworCSAgICBpbmxlbiA9IG1iX3B0cjJsZW5fY2hlY2soaW5zdHIpOworCSAgICBjcHN0ciA9IGluc3RyOworCSAgICBjcGxlbiA9IGlubGVuOworCSAgICBpZHggPSAwOworCSAgICBmb3IgKHAgPSBmcm9tc3RyOyAqcCAhPSBOVUw7IHAgKz0gZnJvbWxlbikKKwkgICAgeworCQlmcm9tbGVuID0gbWJfcHRyMmxlbl9jaGVjayhwKTsKKwkJaWYgKGZyb21sZW4gPT0gaW5sZW4gJiYgU1RSTkNNUChpbnN0ciwgcCwgaW5sZW4pID09IDApCisJCXsKKwkJICAgIGZvciAocCA9IHRvc3RyOyAqcCAhPSBOVUw7IHAgKz0gdG9sZW4pCisJCSAgICB7CisJCQl0b2xlbiA9IG1iX3B0cjJsZW5fY2hlY2socCk7CisJCQlpZiAoaWR4LS0gPT0gMCkKKwkJCXsKKwkJCSAgICBjcGxlbiA9IHRvbGVuOworCQkJICAgIGNwc3RyID0gcDsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGlmICgqcCA9PSBOVUwpCS8qIHRvc3RyIGlzIHNob3J0ZXIgdGhhbiBmcm9tc3RyICovCisJCQlnb3RvIGVycm9yOworCQkgICAgYnJlYWs7CisJCX0KKwkJKytpZHg7CisJICAgIH0KKworCSAgICBpZiAoZmlyc3QgJiYgY3BzdHIgPT0gaW5zdHIpCisJICAgIHsKKwkJLyogQ2hlY2sgdGhhdCBmcm9tc3RyIGFuZCB0b3N0ciBoYXZlIHRoZSBzYW1lIG51bWJlciBvZgorCQkgKiAobXVsdGktYnl0ZSkgY2hhcmFjdGVycy4gIERvbmUgb25seSBvbmNlIHdoZW4gYSBjaGFyYWN0ZXIKKwkJICogb2YgaW5zdHIgZG9lc24ndCBhcHBlYXIgaW4gZnJvbXN0ci4gKi8KKwkJZmlyc3QgPSBGQUxTRTsKKwkJZm9yIChwID0gdG9zdHI7ICpwICE9IE5VTDsgcCArPSB0b2xlbikKKwkJeworCQkgICAgdG9sZW4gPSBtYl9wdHIybGVuX2NoZWNrKHApOworCQkgICAgLS1pZHg7CisJCX0KKwkJaWYgKGlkeCAhPSAwKQorCQkgICAgZ290byBlcnJvcjsKKwkgICAgfQorCisJICAgIGdhX2dyb3coJmdhLCBjcGxlbik7CisJICAgIG1jaF9tZW1tb3ZlKGdhLmdhX2RhdGEgKyBnYS5nYV9sZW4sIGNwc3RyLCAoc2l6ZV90KWNwbGVuKTsKKwkgICAgZ2EuZ2FfbGVuICs9IGNwbGVuOworCSAgICBnYS5nYV9yb29tIC09IGNwbGVuOworCisJICAgIGluc3RyICs9IGlubGVuOworCX0KKwllbHNlCisjZW5kaWYKKwl7CisJICAgIC8qIFdoZW4gbm90IHVzaW5nIG11bHRpLWJ5dGUgY2hhcnMgd2UgY2FuIGRvIGl0IGZhc3Rlci4gKi8KKwkgICAgcCA9IHZpbV9zdHJjaHIoZnJvbXN0ciwgKmluc3RyKTsKKwkgICAgaWYgKHAgIT0gTlVMTCkKKwkJZ2FfYXBwZW5kKCZnYSwgdG9zdHJbcCAtIGZyb21zdHJdKTsKKwkgICAgZWxzZQorCQlnYV9hcHBlbmQoJmdhLCAqaW5zdHIpOworCSAgICArK2luc3RyOworCX0KKyAgICB9CisKKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IGdhLmdhX2RhdGE7Cit9CisKKy8qCiAgKiAidHlwZShleHByKSIgZnVuY3Rpb24KICAqLwogICAgIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9zcmMvZXhfY21kcy5jIGIvc3JjL2V4X2NtZHMuYwppbmRleCA0ZjUzZjU5Li4zYTQ5YjlhIDEwMDY0NAotLS0gYS9zcmMvZXhfY21kcy5jCisrKyBiL3NyYy9leF9jbWRzLmMKQEAgLTM3MzgsNiArMzczOCw3IEBACiAJICAgIHVuc2lnbmVkCWxlbiwgbmVlZGVkX2xlbjsKIAkgICAgbG9uZwlubWF0Y2hfdGwgPSAwOwkvKiBuciBvZiBsaW5lcyBtYXRjaGVkIGJlbG93IGxudW0gKi8KIAkgICAgaW50CQlkb19hZ2FpbjsJLyogZG8gaXQgYWdhaW4gYWZ0ZXIgam9pbmluZyBsaW5lcyAqLworCSAgICBpbnQJCXNraXBfbWF0Y2ggPSBGQUxTRTsKIAogCSAgICAvKgogCSAgICAgKiBUaGUgbmV3IHRleHQgaXMgYnVpbGQgdXAgc3RlcCBieSBzdGVwLCB0byBhdm9pZCB0b28gbXVjaApAQCAtMzgyMiw3ICszODIzLDEyIEBACiAJCQkmJiByZWdtYXRjaC5lbmRwb3NbMF0ubG51bSA9PSAwCiAJCQkmJiBtYXRjaGNvbCA9PSByZWdtYXRjaC5lbmRwb3NbMF0uY29sKQogCQl7Ci0JCSAgICArK21hdGNoY29sOyAvKiBzZWFyY2ggZm9yIGEgbWF0Y2ggYXQgbmV4dCBjb2x1bW4gKi8KKwkJICAgIGlmIChzdWJfZmlyc3RsaW5lW21hdGNoY29sXSA9PSBOVUwpCisJCQkvKiBXZSBhbHJlYWR5IHdlcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4gIERvbid0IGxvb2sKKwkJCSAqIGZvciBhIG1hdGNoIGluIHRoaXMgbGluZSBhZ2Fpbi4gKi8KKwkJCXNraXBfbWF0Y2ggPSBUUlVFOworCQkgICAgZWxzZQorCQkJKyttYXRjaGNvbDsgLyogc2VhcmNoIGZvciBhIG1hdGNoIGF0IG5leHQgY29sdW1uICovCiAJCSAgICBnb3RvIHNraXA7CiAJCX0KIApAQCAtNDExNCw5ICs0MTIwLDEyIEBACiAJCS8qIFdlIGFscmVhZHkga25vdyB0aGF0IHdlIGRpZCB0aGUgbGFzdCBzdWJzdCB3aGVuIHdlIGFyZSBhdAogCQkgKiB0aGUgZW5kIG9mIHRoZSBsaW5lLCBleGNlcHQgdGhhdCBhIHBhdHRlcm4gbGlrZQogCQkgKiAiYmFyXHxcbmZvbyIgbWF5IG1hdGNoIGF0IHRoZSBOVUwuICovCi0JCWxhc3RvbmUgPSAoKHN1Yl9maXJzdGxpbmVbbWF0Y2hjb2xdID09IE5VTCAmJiBubWF0Y2ggPD0gMQotCQkJCQkgICAmJiAhcmVfbXVsdGlsaW5lKHJlZ21hdGNoLnJlZ3Byb2cpKQotCQkJICAgICB8fCBnb3RfaW50IHx8IGdvdF9xdWl0IHx8ICEoZG9fYWxsIHx8IGRvX2FnYWluKSk7CisJCWxhc3RvbmUgPSAoc2tpcF9tYXRjaAorCQkJfHwgZ290X2ludAorCQkJfHwgZ290X3F1aXQKKwkJCXx8ICEoZG9fYWxsIHx8IGRvX2FnYWluKQorCQkJfHwgKHN1Yl9maXJzdGxpbmVbbWF0Y2hjb2xdID09IE5VTCAmJiBubWF0Y2ggPD0gMQorCQkJCQkgJiYgIXJlX211bHRpbGluZShyZWdtYXRjaC5yZWdwcm9nKSkpOwogCQlubWF0Y2ggPSAtMTsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2V4X2NtZHMyLmMgYi9zcmMvZXhfY21kczIuYwppbmRleCBlZDdlMDhjLi45ZDc2MGVhIDEwMDY0NAotLS0gYS9zcmMvZXhfY21kczIuYworKysgYi9zcmMvZXhfY21kczIuYwpAQCAtMzczMSwxMSArMzczMSwxOSBAQAogICogICAgICBBZG9iZSB0ZWNobm90ZSA1MDAzLCA5dGggRmVicnVhcnkgMTk5NgogICogNi4gQWRvYmUgRm9udCBNZXRyaWNzIEZpbGUgRm9ybWF0IFNwZWNpZmljYXRpb24sIFZlcnNpb24gNC4xLAogICogICAgICBBZG9iZSBUZWNobm90ZSA1MDA3LCA3dGggT2N0b2JlciAxOTk4CisgKiA3LiBBZG9iZSBDTWFwIGFuZCBDSURGb250IEZpbGVzIFNwZWNpZmljYXRpb24sIFZlcnNpb24gMS4wLAorICogICAgICBBZG9iZSBUZWNobm90ZSA1MDE0LCA4dGggT2N0b2JlciAxOTk2CisgKiA4LiBBZG9iZSBDSktWIENoYXJhY3RlciBDb2xsZWN0aW9ucyBhbmQgQ01hcHMgZm9yIENJRC1LZXllZCBGb250cywKKyAqICAgICAgQWRvYm9lIFRlY2hub3RlIDUwOTQsIDh0aCBTZXB0ZW1iZXIsIDIwMDEKKyAqIDkuIENKS1YgSW5mb3JtYXRpb24gUHJvY2Vzc2luZywgMm5kIEVkaXRpb24sCisgKiAgICAgIE8nUmVpbGx5LCAyMDAyLCBJU0JOIDEtNTY1OTItMjI0LTcKICAqCiAgKiBTb21lIG9mIHRoZXNlIGRvY3VtZW50cyBjYW4gYmUgZm91bmQgaW4gUERGIGZvcm0gb24gQWRvYmUncyB3ZWIgc2l0ZSAtCiAgKiBodHRwOi8vd3d3LmFkb2JlLmNvbQogICovCiAKKyNkZWZpbmUgTlVNX0VMRU1FTlRTKGFycikgICAoc2l6ZW9mKGFycikvc2l6ZW9mKChhcnIpWzBdKSkKKwogI2RlZmluZSBQUlRfUFNfREVGQVVMVF9EUEkJICAgICg3MikgICAgLyogRGVmYXVsdCB1c2VyIHNwYWNlIHJlc29sdXRpb24gKi8KICNkZWZpbmUgUFJUX1BTX0RFRkFVTFRfRk9OVFNJWkUgICAgICgxMCkKICNkZWZpbmUgUFJUX1BTX0RFRkFVTFRfQlVGRkVSX1NJWkUgICg4MCkKQEAgLTM3ODMsNyArMzc5MSw4IEBACiAjZGVmaW5lIFBSVF9QU19GT05UX09CTElRVUUJKDIpCiAjZGVmaW5lIFBSVF9QU19GT05UX0JPTERPQkxJUVVFICgzKQogCi1zdGF0aWMgc3RydWN0IHBydF9wc19mb250X1MgcHJ0X3BzX2ZvbnQgPQorLyogU3RhbmRhcmQgZm9udCBtZXRyaWNzIGZvciBDb3VyaWVyIGZhbWlseSAqLworc3RhdGljIHN0cnVjdCBwcnRfcHNfZm9udF9TIHBydF9wc19jb3VyaWVyX2ZvbnQgPQogewogICAgIDYwMCwKICAgICAtMTAwLCA1MCwKQEAgLTM3OTEsNiArMzgwMCwyMTggQEAKICAgICB7IkNvdXJpZXIiLCAiQ291cmllci1Cb2xkIiwgIkNvdXJpZXItT2JsaXF1ZSIsICJDb3VyaWVyLUJvbGRPYmxpcXVlIn0KIH07CiAKKy8qIEdlbmVyaWMgZm9udCBtZXRyaWNzIGZvciBtdWx0aS1ieXRlIGZvbnRzICovCitzdGF0aWMgc3RydWN0IHBydF9wc19mb250X1MgcHJ0X3BzX21iX2ZvbnQgPQoreworICAgIDEwMDAsCisgICAgLTEwMCwgNTAsCisgICAgLTI1MCwgODA1LAorICAgIHtOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfQorfTsKKworLyogUG9pbnRlciB0byBjdXJyZW50IGZvbnQgc2V0IGJlaW5nIHVzZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgcHJ0X3BzX2ZvbnRfUyogcHJ0X3BzX2ZvbnQ7CisKKy8qIFN0cnVjdHVyZXMgdG8gbWFwIHVzZXIgbmFtZWQgZW5jb2RpbmcgYW5kIG1hcHBpbmcgdG8gUFMgZXF1aXZhbGVudHMgZm9yCisgKiBidWlsZGluZyBDSUQgZm9udCBuYW1lICovCitzdHJ1Y3QgcHJ0X3BzX2VuY29kaW5nX1MKK3sKKyAgICBjaGFyX3UJKmVuY29kaW5nOworICAgIGNoYXJfdQkqY21hcF9lbmNvZGluZzsKKyAgICBpbnQJCW5lZWRzX2NoYXJzZXQ7Cit9OworCitzdHJ1Y3QgcHJ0X3BzX2NoYXJzZXRfUworeworICAgIGNoYXIJKmNoYXJzZXQ7CisgICAgY2hhcgkqY21hcF9jaGFyc2V0OworICAgIGludAkJaGFzX2NoYXJzZXQ7Cit9OworCisjZGVmaW5lIENTX0pJU19DXzE5NzggICAoMHgwMSkKKyNkZWZpbmUgQ1NfSklTX1hfMTk4MyAgICgweDAyKQorI2RlZmluZSBDU19KSVNfWF8xOTkwICAgKDB4MDQpCisjZGVmaW5lIENTX05FQyAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgQ1NfTVNXSU5ET1dTICAgICgweDEwKQorI2RlZmluZSBDU19DUDkzMiAgICAgICAgKDB4MjApCisjZGVmaW5lIENTX0tBTkpJVEFMSzYgICAoMHg0MCkKKyNkZWZpbmUgQ1NfS0FOSklUQUxLNyAgICgweDgwKQorCisvKiBKYXBhbmVzZSBlbmNvZGluZ3MgYW5kIGNoYXJzZXRzICovCitzdGF0aWMgc3RydWN0IHBydF9wc19lbmNvZGluZ19TIGpfZW5jb2RpbmdzW10gPQoreworICAgIHsiaXNvLTIwMjItanAiLCBOVUxMLCAgICAgICAoQ1NfSklTX0NfMTk3OHxDU19KSVNfWF8xOTgzfENTX0pJU19YXzE5OTB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTX05FQyl9LAorICAgIHsiZXVjLWpwIiwgICAgICAiRVVDIiwgICAgICAoQ1NfSklTX0NfMTk3OHxDU19KSVNfWF8xOTgzfENTX0pJU19YXzE5OTApfSwKKyAgICB7InNqaXMiLCAgICAgICAgIlJLU0oiLCAgICAgKENTX0pJU19DXzE5Nzh8Q1NfSklTX1hfMTk4M3xDU19NU1dJTkRPV1N8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU19LQU5KSVRBTEs2fENTX0tBTkpJVEFMSzcpfSwKKyAgICB7ImNwOTMyIiwgICAgICAgIlJLU0oiLCAgICAgQ1NfSklTX1hfMTk4M30sCisgICAgeyJ1Y3MtMiIsICAgICAgICJVQ1MyIiwgICAgIENTX0pJU19YXzE5OTB9LAorICAgIHsidXRmLTgiLCAgICAgICAiVVRGOCIgLCAgICBDU19KSVNfWF8xOTkwfQorfTsKK3N0YXRpYyBzdHJ1Y3QgcHJ0X3BzX2NoYXJzZXRfUyBqX2NoYXJzZXRzW10gPQoreworICAgIHsiSklTX0NfMTk3OCIsICAiNzgiLCAgICAgICBDU19KSVNfQ18xOTc4fSwKKyAgICB7IkpJU19YXzE5ODMiLCAgTlVMTCwgICAgICAgQ1NfSklTX1hfMTk4M30sCisgICAgeyJKSVNfWF8xOTkwIiwgICJIb2pvIiwgICAgIENTX0pJU19YXzE5OTB9LAorICAgIHsiTkVDIiwgICAgICAgICAiRXh0IiwgICAgICBDU19ORUN9LAorICAgIHsiTVNXSU5ET1dTIiwgICAiOTBtcyIsICAgICBDU19NU1dJTkRPV1N9LAorICAgIHsiQ1A5MzIiLCAgICAgICAiOTBtcyIsICAgICBDU19KSVNfWF8xOTgzfSwKKyAgICB7IktBTkpJVEFMSzYiLCAgIjgzcHYiLCAgICAgQ1NfS0FOSklUQUxLNn0sCisgICAgeyJLQU5KSVRBTEs3IiwgICI5MHB2IiwgICAgIENTX0tBTkpJVEFMSzd9Cit9OworCisjZGVmaW5lIENTX0dCXzIzMTJfODAgICAgICAgKDB4MDEpCisjZGVmaW5lIENTX0dCVF8xMjM0NV85MCAgICAgKDB4MDIpCisjZGVmaW5lIENTX0dCSzJLICAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIENTX1NDX01BQyAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIENTX0dCVF85MF9NQUMgICAgICAgKDB4MTApCisjZGVmaW5lIENTX0dCSyAgICAgICAgICAgICAgKDB4MjApCisjZGVmaW5lIENTX1NDX0lTTzEwNjQ2ICAgICAgKDB4NDApCisKKy8qIFNpbXBsaWZpZWQgQ2hpbmVzZSBlbmNvZGluZ3MgYW5kIGNoYXJzZXRzICovCitzdGF0aWMgc3RydWN0IHBydF9wc19lbmNvZGluZ19TIHNjX2VuY29kaW5nc1tdID0KK3sKKyAgICB7Imlzby0yMDIyIiwgICAgTlVMTCwgICAgICAgKENTX0dCXzIzMTJfODB8Q1NfR0JUXzEyMzQ1XzkwKX0sCisgICAgeyJnYjE4MDMwIiwgICAgIE5VTEwsICAgICAgIENTX0dCSzJLfSwKKyAgICB7ImV1Yy1jbiIsICAgICAgIkVVQyIsICAgICAgKENTX0dCXzIzMTJfODB8Q1NfR0JUXzEyMzQ1XzkwfENTX1NDX01BQ3wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU19HQlRfOTBfTUFDKX0sCisgICAgeyJnYmsiLCAgICAgICAgICJFVUMiLCAgICAgIENTX0dCS30sCisgICAgeyJ1Y3MtMiIsICAgICAgICJVQ1MyIiwgICAgIENTX1NDX0lTTzEwNjQ2fSwKKyAgICB7InV0Zi04IiwgICAgICAgIlVURjgiLCAgICAgQ1NfU0NfSVNPMTA2NDZ9Cit9Oworc3RhdGljIHN0cnVjdCBwcnRfcHNfY2hhcnNldF9TIHNjX2NoYXJzZXRzW10gPQoreworICAgIHsiR0JfMjMxMi04MCIsICAiR0IiLCAgICAgICBDU19HQl8yMzEyXzgwfSwKKyAgICB7IkdCVF8xMjM0NS05MCIsIkdCVCIsICAgICAgQ1NfR0JUXzEyMzQ1XzkwfSwKKyAgICB7Ik1BQyIsICAgICAgICAgIkdCcGMiLCAgICAgQ1NfU0NfTUFDfSwKKyAgICB7IkdCVC05MF9NQUMiLCAgIkdCVHBjIiwgICAgQ1NfR0JUXzkwX01BQ30sCisgICAgeyJHQksiLCAgICAgICAgICJHQksiLCAgICAgIENTX0dCS30sCisgICAgeyJHQjE4MDMwIiwgICAgICJHQksySyIsICAgIENTX0dCSzJLfSwKKyAgICB7IklTTzEwNjQ2IiwgICAgIlVuaUdCIiwgICAgQ1NfU0NfSVNPMTA2NDZ9Cit9OworCisjZGVmaW5lIENTX0NOU19QTEFORV8xICAgICAgKDB4MDEpCisjZGVmaW5lIENTX0NOU19QTEFORV8yICAgICAgKDB4MDIpCisjZGVmaW5lIENTX0NOU19QTEFORV8xXzIgICAgKDB4MDQpCisjZGVmaW5lIENTX0I1ICAgICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIENTX0VURU4gICAgICAgICAgICAgKDB4MTApCisjZGVmaW5lIENTX0hLX0dDQ1MgICAgICAgICAgKDB4MjApCisjZGVmaW5lIENTX0hLX1NDUyAgICAgICAgICAgKDB4NDApCisjZGVmaW5lIENTX0hLX1NDU19FVEVOICAgICAgKDB4ODApCisjZGVmaW5lIENTX01USEtMICAgICAgICAgICAgKDB4MTAwKQorI2RlZmluZSBDU19NVEhLUyAgICAgICAgICAgICgweDIwMCkKKyNkZWZpbmUgQ1NfRExIS0wgICAgICAgICAgICAoMHg0MDApCisjZGVmaW5lIENTX0RMSEtTICAgICAgICAgICAgKDB4ODAwKQorI2RlZmluZSBDU19UQ19JU08xMDY0NiAgICAgICgweDEwMDApCisKKy8qIFRyYWRpdGlvbmFsIENoaW5lc2UgZW5jb2RpbmdzIGFuZCBjaGFyc2V0cyAqLworc3RhdGljIHN0cnVjdCBwcnRfcHNfZW5jb2RpbmdfUyB0Y19lbmNvZGluZ3NbXSA9Cit7CisgICAgeyJpc28tMjAyMiIsICAgIE5VTEwsICAgICAgIChDU19DTlNfUExBTkVfMXxDU19DTlNfUExBTkVfMil9LAorICAgIHsiZXVjLXR3IiwgICAgICAiRVVDIiwgICAgICBDU19DTlNfUExBTkVfMV8yfSwKKyAgICB7ImJpZzUiLCAgICAgICAgIkI1IiwgICAgICAgKENTX0I1fENTX0VURU58Q1NfSEtfR0NDU3xDU19IS19TQ1N8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU19IS19TQ1NfRVRFTnxDU19NVEhLTHxDU19NVEhLU3xDU19ETEhLTHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NfRExIS1MpfSwKKyAgICB7ImNwOTUwIiwgICAgICAgIkI1IiwgICAgICAgQ1NfQjV9LAorICAgIHsidWNzLTIiLCAgICAgICAiVUNTMiIsICAgICBDU19UQ19JU08xMDY0Nn0sCisgICAgeyJ1dGYtOCIsICAgICAgICJVVEY4IiwgICAgIENTX1RDX0lTTzEwNjQ2fSwKKyAgICB7InV0Zi0xNiIsICAgICAgIlVURjE2IiwgICAgQ1NfVENfSVNPMTA2NDZ9LAorICAgIHsidXRmLTMyIiwgICAgICAiVVRGMzIiLCAgICBDU19UQ19JU08xMDY0Nn0KK307CitzdGF0aWMgc3RydWN0IHBydF9wc19jaGFyc2V0X1MgdGNfY2hhcnNldHNbXSA9Cit7CisgICAgeyJDTlNfMTk5Ml8xIiwgICJDTlMxIiwgICAgIENTX0NOU19QTEFORV8xfSwKKyAgICB7IkNOU18xOTkyXzIiLCAgIkNOUzIiLCAgICAgQ1NfQ05TX1BMQU5FXzJ9LAorICAgIHsiQ05TXzE5OTMiLCAgICAiQ05TIiwgICAgICBDU19DTlNfUExBTkVfMV8yfSwKKyAgICB7IkJJRzUiLCAgICAgICAgTlVMTCwgICAgICAgQ1NfQjV9LAorICAgIHsiQ1A5NTAiLCAgICAgICBOVUxMLCAgICAgICBDU19CNX0sCisgICAgeyJFVEVOIiwgICAgICAgICJFVGVuIiwgICAgIENTX0VURU59LAorICAgIHsiSEtfR0NDUyIsICAgICAiSEtnY2NzIiwgICBDU19IS19HQ0NTfSwKKyAgICB7IlNDUyIsICAgICAgICAgIkhLc2NzIiwgICAgQ1NfSEtfU0NTfSwKKyAgICB7IlNDU19FVEVOIiwgICAgIkVUSEsiLCAgICAgQ1NfSEtfU0NTX0VURU59LAorICAgIHsiTVRIS0wiLCAgICAgICAiSEttNDcxIiwgICBDU19NVEhLTH0sCisgICAgeyJNVEhLUyIsICAgICAgICJIS20zMTQiLCAgIENTX01USEtTfSwKKyAgICB7IkRMSEtMIiwgICAgICAgIkhLZGxhIiwgICAgQ1NfRExIS0x9LAorICAgIHsiRExIS1MiLCAgICAgICAiSEtkbGIiLCAgICBDU19ETEhLU30sCisgICAgeyJJU08xMDY0NiIsICAgICJVbmlDTlMiLCAgIENTX1RDX0lTTzEwNjQ2fQorfTsKKworI2RlZmluZSBDU19LUl9YXzE5OTIgICAgICAgICgweDAxKQorI2RlZmluZSBDU19LUl9NQUMgICAgICAgICAgICgweDAyKQorI2RlZmluZSBDU19LUl9YXzE5OTJfTVMgICAgICgweDA0KQorI2RlZmluZSBDU19LUl9JU08xMDY0NiAgICAgICgweDA4KQorCisvKiBLb3JlYW4gZW5jb2RpbmdzIGFuZCBjaGFyc2V0cyAqLworc3RhdGljIHN0cnVjdCBwcnRfcHNfZW5jb2RpbmdfUyBrX2VuY29kaW5nc1tdID0KK3sKKyAgICB7Imlzby0yMDIyLWtyIiwgTlVMTCwgICAgICAgQ1NfS1JfWF8xOTkyfSwKKyAgICB7ImV1Yy1rciIsICAgICAgIkVVQyIsICAgICAgKENTX0tSX1hfMTk5MnxDU19LUl9NQUMpfSwKKyAgICB7ImpvaGFiIiwgICAgICAgIkpvaGFiIiwgICAgQ1NfS1JfWF8xOTkyfSwKKyAgICB7ImNwMTM2MSIsICAgICAgIkpvaGFiIiwgICAgQ1NfS1JfWF8xOTkyfSwKKyAgICB7InVoYyIsICAgICAgICAgIlVIQyIsICAgICAgQ1NfS1JfWF8xOTkyX01TfSwKKyAgICB7ImNwOTQ5IiwgICAgICAgIlVIQyIsICAgICAgQ1NfS1JfWF8xOTkyX01TfSwKKyAgICB7InVjcy0yIiwgICAgICAgIlVDUzIiLCAgICAgQ1NfS1JfSVNPMTA2NDZ9LAorICAgIHsidXRmLTgiLCAgICAgICAiVVRGOCIsICAgICBDU19LUl9JU08xMDY0Nn0KK307CitzdGF0aWMgc3RydWN0IHBydF9wc19jaGFyc2V0X1Mga19jaGFyc2V0c1tdID0KK3sKKyAgICB7IktTX1hfMTk5MiIsICAgIktTQyIsICAgICAgQ1NfS1JfWF8xOTkyfSwKKyAgICB7IkNQMTM2MSIsICAgICAgIktTQyIsICAgICAgQ1NfS1JfWF8xOTkyfSwKKyAgICB7Ik1BQyIsICAgICAgICAgIktTQ3BjIiwgICAgQ1NfS1JfTUFDfSwKKyAgICB7Ik1TV0lORE9XUyIsICAgIktTQ21zIiwgICAgQ1NfS1JfWF8xOTkyX01TfSwKKyAgICB7IkNQOTQ5IiwgICAgICAgIktTQ21zIiwgICAgQ1NfS1JfWF8xOTkyX01TfSwKKyAgICB7IldBTlNVTkciLCAgICAgIktTQ21zIiwgICAgQ1NfS1JfWF8xOTkyX01TfSwKKyAgICB7IklTTzEwNjQ2IiwgICAgIlVuaUtTIiwgICAgQ1NfS1JfSVNPMTA2NDZ9Cit9OworCisvKiBDb2xsZWN0aW9ucyBvZiBlbmNvZGluZ3MgYW5kIGNoYXJzZXRzIGZvciBtdWx0aS1ieXRlIHByaW50aW5nICovCitzdHJ1Y3QgcHJ0X3BzX21iZm9udF9TCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9lbmNvZGluZ3M7CisgICAgc3RydWN0IHBydF9wc19lbmNvZGluZ19TICAgICplbmNvZGluZ3M7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9jaGFyc2V0czsKKyAgICBzdHJ1Y3QgcHJ0X3BzX2NoYXJzZXRfUyAgICAgKmNoYXJzZXRzOworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAqYXNjaWlfZW5jOworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAqZGVmY3M7Cit9OworCitzdGF0aWMgc3RydWN0IHBydF9wc19tYmZvbnRfUyBwcnRfcHNfbWJmb250c1tdID0KK3sKKyAgICB7CisgICAgICAgIE5VTV9FTEVNRU5UUyhqX2VuY29kaW5ncyksCisgICAgICAgIGpfZW5jb2RpbmdzLAorICAgICAgICBOVU1fRUxFTUVOVFMoal9jaGFyc2V0cyksCisgICAgICAgIGpfY2hhcnNldHMsCisgICAgICAgICJqaXNfcm9tYW4iLAorICAgICAgICAiSklTX1hfMTk4MyIKKyAgICB9LAorICAgIHsKKyAgICAgICAgTlVNX0VMRU1FTlRTKHNjX2VuY29kaW5ncyksCisgICAgICAgIHNjX2VuY29kaW5ncywKKyAgICAgICAgTlVNX0VMRU1FTlRTKHNjX2NoYXJzZXRzKSwKKyAgICAgICAgc2NfY2hhcnNldHMsCisgICAgICAgICJnYl9yb21hbiIsCisgICAgICAgICJHQl8yMzEyLTgwIgorICAgIH0sCisgICAgeworICAgICAgICBOVU1fRUxFTUVOVFModGNfZW5jb2RpbmdzKSwKKyAgICAgICAgdGNfZW5jb2RpbmdzLAorICAgICAgICBOVU1fRUxFTUVOVFModGNfY2hhcnNldHMpLAorICAgICAgICB0Y19jaGFyc2V0cywKKyAgICAgICAgImNuc19yb21hbiIsCisgICAgICAgICJCSUc1IgorICAgIH0sCisgICAgeworICAgICAgICBOVU1fRUxFTUVOVFMoa19lbmNvZGluZ3MpLAorICAgICAgICBrX2VuY29kaW5ncywKKyAgICAgICAgTlVNX0VMRU1FTlRTKGtfY2hhcnNldHMpLAorICAgICAgICBrX2NoYXJzZXRzLAorICAgICAgICAia3Nfcm9tYW4iLAorICAgICAgICAiS1NfWF8xOTkyIgorICAgIH0KK307CisKIHN0cnVjdCBwcnRfcHNfcmVzb3VyY2VfUwogewogICAgIGNoYXJfdSAgbmFtZVs2NF07CkBAIC0zODAzLDI1ICs0MDI0LDI5IEBACiAvKiBUeXBlcyBvZiBQUyByZXNvdXJjZSBmaWxlIGN1cnJlbnRseSB1c2VkICovCiAjZGVmaW5lIFBSVF9SRVNPVVJDRV9UWVBFX1BST0NTRVQgICAoMCkKICNkZWZpbmUgUFJUX1JFU09VUkNFX1RZUEVfRU5DT0RJTkcgICgxKQorI2RlZmluZSBQUlRfUkVTT1VSQ0VfVFlQRV9DTUFQICAgICAgKDIpCiAKIC8qIFRoZSBQUyBwcm9sb2cgZmlsZSB2ZXJzaW9uIG51bWJlciBoYXMgdG8gbWF0Y2ggLSBpZiB0aGUgcHJvbG9nIGZpbGUgaXMKICAqIHVwZGF0ZWQsIGluY3JlbWVudCB0aGUgbnVtYmVyIGluIHRoZSBmaWxlIGFuZCBoZXJlLiAgVmVyc2lvbiBjaGVja2luZyB3YXMKICAqIGFkZGVkIGFzIG9mIFZJTSA2LjIuCisgKiBUaGUgQ0lEIHByb2xvZyBmaWxlIHZlcnNpb24gbnVtYmVyIGJlaGF2ZXMgYXMgcGVyIFBTIHByb2xvZy4KICAqIFRhYmxlIG9mIFZJTSBhbmQgcHJvbG9nIHZlcnNpb25zOgogICoKLSAqIFZJTSAgICAgIFByb2xvZworICogVklNICAgICAgUHJvbG9nICBDSURQcm9sb2cKICAqIDYuMiAgICAgIDEuMwotICogNy4wICAgICAgMS40CisgKiA3LjAgICAgICAxLjQJICAgIDEuMAogICovCiAjZGVmaW5lIFBSVF9QUk9MT0dfVkVSU0lPTiAgKChjaGFyX3UgKikiMS40IikKKyNkZWZpbmUgUFJUX0NJRF9QUk9MT0dfVkVSU0lPTiAgKChjaGFyX3UgKikiMS4wIikKIAogLyogU3RyaW5nIHZlcnNpb25zIG9mIFBTIHJlc291cmNlIHR5cGVzIC0gaW5kZXhlZCBieSBjb25zdGFudHMgYWJvdmUgc28gZG9uJ3QKICAqIHJlLW9yZGVyIQogICovCi1zdGF0aWMgY2hhciAqcmVzb3VyY2VfdHlwZXNbXSA9CitzdGF0aWMgY2hhciAqcHJ0X3Jlc291cmNlX3R5cGVzW10gPQogewogICAgICJwcm9jc2V0IiwKLSAgICAiZW5jb2RpbmciCisgICAgImVuY29kaW5nIiwKKyAgICAiY21hcCIKIH07CiAKIC8qIFN0cmluZ3MgdG8gbG9vayBmb3IgaW4gYSBQUyByZXNvdXJjZSBmaWxlICovCkBAIC0zODI5LDggKzQwNTQsNDQgQEAKICNkZWZpbmUgUFJUX1JFU09VUkNFX1JFU09VUkNFCSAgICAiUmVzb3VyY2UtIgogI2RlZmluZSBQUlRfUkVTT1VSQ0VfUFJPQ1NFVAkgICAgIlByb2NTZXQiCiAjZGVmaW5lIFBSVF9SRVNPVVJDRV9FTkNPRElORwkgICAgIkVuY29kaW5nIgotI2RlZmluZSBQUlRfUkVTT1VSQ0VfVElUTEUJICAgICIlJVRpdGxlOiIKLSNkZWZpbmUgUFJUX1JFU09VUkNFX1ZFUlNJT04JICAgICIlJVZlcnNpb246IgorI2RlZmluZSBQUlRfUkVTT1VSQ0VfQ01BUCAgICAgICAgICAgIkNNYXAiCisKKworLyogRGF0YSBmb3IgdGFibGUgYmFzZWQgRFNDIGNvbW1lbnQgcmVjb2duaXRpb24sIGVhc3kgdG8gZXh0ZW5kIGlmIFZJTSBuZWVkcyB0bworICogcmVhZCBtb3JlIGNvbW1lbnRzLiAqLworI2RlZmluZSBQUlRfRFNDX01JU0NfVFlQRSAgICAgICAgICAgKC0xKQorI2RlZmluZSBQUlRfRFNDX1RJVExFX1RZUEUgICAgICAgICAgKDEpCisjZGVmaW5lIFBSVF9EU0NfVkVSU0lPTl9UWVBFICAgICAgICAoMikKKyNkZWZpbmUgUFJUX0RTQ19FTkRDT01NRU5UU19UWVBFICAgICgzKQorCisjZGVmaW5lIFBSVF9EU0NfVElUTEUJICAgICAgICAgICAgIiUlVGl0bGU6IgorI2RlZmluZSBQUlRfRFNDX1ZFUlNJT04JICAgICAgICAgICAgIiUlVmVyc2lvbjoiCisjZGVmaW5lIFBSVF9EU0NfRU5EQ09NTUVOVFMgICAgICAgICAiJSVFbmRDb21tZW50czoiCisKK3N0cnVjdCBwcnRfZHNjX2NvbW1lbnRfUworeworICAgIGNoYXJfdQkqc3RyaW5nOworICAgIGludAkJbGVuOworICAgIGludAkJdHlwZTsKK307CisKK3N0cnVjdCBwcnRfZHNjX2xpbmVfUworeworICAgIGludAkJdHlwZTsKKyAgICBjaGFyX3UJKnN0cmluZzsKKyAgICBpbnQJCWxlbjsKK307CisKKworI2RlZmluZSBTSVpFT0ZfQ1NUUihzKSAgICAgIChzaXplb2YocykgLSAxKQorc3RydWN0IHBydF9kc2NfY29tbWVudF9TIHBydF9kc2NfdGFibGVbXSA9Cit7CisgICAge1BSVF9EU0NfVElUTEUsICAgICAgIFNJWkVPRl9DU1RSKFBSVF9EU0NfVElUTEUpLCAgICAgICBQUlRfRFNDX1RJVExFX1RZUEV9LAorICAgIHtQUlRfRFNDX1ZFUlNJT04sICAgICBTSVpFT0ZfQ1NUUihQUlRfRFNDX1ZFUlNJT04pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlRfRFNDX1ZFUlNJT05fVFlQRX0sCisgICAge1BSVF9EU0NfRU5EQ09NTUVOVFMsIFNJWkVPRl9DU1RSKFBSVF9EU0NfRU5EQ09NTUVOVFMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVF9EU0NfRU5EQ09NTUVOVFNfVFlQRX0KK307CiAKIHN0YXRpYyB2b2lkIHBydF93cml0ZV9maWxlX3Jhd19sZW4gX19BUkdTKChjaGFyX3UgKmJ1ZmZlciwgaW50IGJ5dGVzKSk7CiBzdGF0aWMgdm9pZCBwcnRfd3JpdGVfZmlsZSBfX0FSR1MoKGNoYXJfdSAqYnVmZmVyKSk7CkBAIC0zODU0LDEzICs0MTE1LDI0IEBACiBzdGF0aWMgdm9pZCBwcnRfZHNjX2ludHMgX19BUkdTKChjaGFyICpjb21tZW50LCBpbnQgY291bnQsIGludCAqaW50cykpOwogc3RhdGljIHZvaWQgcHJ0X2RzY19yZXF1aXJlbWVudHMgX19BUkdTKChpbnQgZHVwbGV4LCBpbnQgdHVtYmxlLCBpbnQgY29sbGF0ZSwgaW50IGNvbG9yLCBpbnQgbnVtX2NvcGllcykpOwogc3RhdGljIHZvaWQgcHJ0X2RzY19kb2NtZWRpYSBfX0FSR1MoKGNoYXIgKnBhcGVyX25hbWUsIGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCwgZG91YmxlIHdlaWdodCwgY2hhciAqY29sb3VyLCBjaGFyICp0eXBlKSk7Ci1zdGF0aWMgdm9pZCBwcnRfZHNjX3Jlc291cmNlcyBfX0FSR1MoKGNoYXIgKmNvbW1lbnQsIGNoYXIgKnR5cGUsIGludCBjb3VudCwgY2hhciAqKnN0cmluZ3MpKTsKK3N0YXRpYyB2b2lkIHBydF9kc2NfcmVzb3VyY2VzIF9fQVJHUygoY2hhciAqY29tbWVudCwgY2hhciAqdHlwZSwgY2hhciAqc3RyaW5ncykpOworc3RhdGljIHZvaWQgcHJ0X2RzY19mb250X3Jlc291cmNlIF9fQVJHUygoY2hhciAqcmVzb3VyY2UsIHN0cnVjdCBwcnRfcHNfZm9udF9TICpwc19mb250KSk7CiBzdGF0aWMgZmxvYXQgdG9fZGV2aWNlX3VuaXRzIF9fQVJHUygoaW50IGlkeCwgZG91YmxlIHBoeXNzaXplLCBpbnQgZGVmX251bWJlcikpOwogc3RhdGljIHZvaWQgcHJ0X3BhZ2VfbWFyZ2lucyBfX0FSR1MoKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCwgZG91YmxlICpsZWZ0LCBkb3VibGUgKnJpZ2h0LCBkb3VibGUgKnRvcCwgZG91YmxlICpib3R0b20pKTsKIHN0YXRpYyB2b2lkIHBydF9mb250X21ldHJpY3MgX19BUkdTKChpbnQgZm9udF9zY2FsZSkpOwogc3RhdGljIGludCBwcnRfZ2V0X2NwbCBfX0FSR1MoKHZvaWQpKTsKIHN0YXRpYyBpbnQgcHJ0X2dldF9scHAgX19BUkdTKCh2b2lkKSk7CiBzdGF0aWMgaW50IHBydF9hZGRfcmVzb3VyY2UgX19BUkdTKChzdHJ1Y3QgcHJ0X3BzX3Jlc291cmNlX1MgKnJlc291cmNlKSk7CitzdGF0aWMgaW50IHBydF9yZXNmaWxlX25leHRfbGluZSBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBpbnQgcHJ0X3Jlc2ZpbGVfc3RybmNtcCBfX0FSR1MoKGludCBvZmZzZXQsIGNoYXIgKnN0cmluZywgaW50IGxlbikpOworc3RhdGljIGludCBwcnRfcmVzZmlsZV9za2lwX25vbndzIF9fQVJHUygoaW50IG9mZnNldCkpOworc3RhdGljIGludCBwcnRfcmVzZmlsZV9za2lwX3dzIF9fQVJHUygoaW50IG9mZnNldCkpOworc3RhdGljIGludCBwcnRfbmV4dF9kc2MgX19BUkdTKChzdHJ1Y3QgcHJ0X2RzY19saW5lX1MgKnBfZHNjX2xpbmUpKTsKKyNpZmRlZiBGRUFUX01CWVRFCitzdGF0aWMgdm9pZCBwcnRfZGVmX2NpZGZvbnQgX19BUkdTKChjaGFyICpuZXdfbmFtZSwgaW50IGhlaWdodCwgY2hhciAqY2lkZm9udCkpOworc3RhdGljIGludCBwcnRfbWF0Y2hfZW5jb2RpbmcgX19BUkdTKChjaGFyICpwX2VuY29kaW5nLCBzdHJ1Y3QgcHJ0X3BzX21iZm9udF9TICpwX2NtYXAsIHN0cnVjdCBwcnRfcHNfZW5jb2RpbmdfUyAqKnBwX21iZW5jKSk7CitzdGF0aWMgaW50IHBydF9tYXRjaF9jaGFyc2V0IF9fQVJHUygoY2hhciAqcF9jaGFyc2V0LCBzdHJ1Y3QgcHJ0X3BzX21iZm9udF9TICpwX2NtYXAsIHN0cnVjdCBwcnRfcHNfY2hhcnNldF9TICoqcHBfbWJjaGFyKSk7CisjZW5kaWYKIAogLyoKICAqIFZhcmlhYmxlcyBmb3IgdGhlIG91dHB1dCBQb3N0U2NyaXB0IGZpbGUuCkBAIC0zOTA1LDggKzQxNzcsOSBAQAogc3RhdGljIGludCBwcnRfYmdjb2w7CiBzdGF0aWMgaW50IHBydF9uZXdfYmdjb2w7CiBzdGF0aWMgaW50IHBydF9hdHRyaWJ1dGVfY2hhbmdlOwotc3RhdGljIGludCBwcnRfdGV4dF9jb3VudDsKK3N0YXRpYyBmbG9hdCBwcnRfdGV4dF9ydW47CiBzdGF0aWMgaW50IHBydF9wYWdlX251bTsKK3N0YXRpYyBpbnQgcHJ0X2J1ZnNpejsKIAogLyoKICAqIFZhcmlhYmxlcyBjb250cm9sbGluZyBwaHlzaWNhbCBwcmludGluZy4KQEAgLTM5MjcsNiArNDIwMCwxNSBAQAogIyBpZmRlZiBGRUFUX01CWVRFCiBzdGF0aWMgaW50IHBydF9kb19jb252Owogc3RhdGljIHZpbWNvbnZfVCBwcnRfY29udjsKKworc3RhdGljIGludCBwcnRfb3V0X21ieXRlOworc3RhdGljIGludCBwcnRfY3VzdG9tX2NtYXA7CitzdGF0aWMgY2hhciBwcnRfY21hcFs4MF07CitzdGF0aWMgaW50IHBydF91c2VfY291cmllcjsKK3N0YXRpYyBpbnQgcHJ0X2luX2FzY2lpOworc3RhdGljIGludCBwcnRfaGFsZl93aWR0aDsKK3N0YXRpYyBjaGFyICpwcnRfYXNjaWlfZW5jb2Rpbmc7CitzdGF0aWMgY2hhcl91IHBydF9oZXhjaGFyW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CiAjIGVuZGlmCiAKICAgICBzdGF0aWMgdm9pZApAQCAtMzk5NSw3ICs0Mjc3LDcgQEAKIH0KIAogLyoKLSAqIFdyaXRlIGEgbGluZSB0byBkZWZpbmUgdGhlIGZvbnQuCisgKiBXcml0ZSBQb3N0U2NyaXB0IHRvIHJlLWVuY29kZSBhbmQgZGVmaW5lIHRoZSBmb250LgogICovCiAgICAgc3RhdGljIHZvaWQKIHBydF9kZWZfZm9udChuZXdfbmFtZSwgZW5jb2RpbmcsIGhlaWdodCwgZm9udCkKQEAgLTQwMDQsMTMgKzQyODYsNTEgQEAKICAgICBpbnQJCWhlaWdodDsKICAgICBjaGFyCSpmb250OwogewotICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIvXyVzIC9WSU0tJXMgLyVzIHJlZlxuIiwgbmV3X25hbWUsIGVuY29kaW5nLCBmb250KTsKKyAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiL18lcyAvVklNLSVzIC8lcyByZWZcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19uYW1lLCBlbmNvZGluZywgZm9udCk7CiAgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKHBydF9vdXRfbWJ5dGUpCisgICAgICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIvJXMgJWQgJWYgL18lcyBzZmZzXG4iLAorCQkgICAgICAgbmV3X25hbWUsIGhlaWdodCwgNTAwLi9wcnRfcHNfY291cmllcl9mb250Lnd4LCBuZXdfbmFtZSk7CisgICAgZWxzZQorI2VuZGlmCiAgICAgc3ByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgIi8lcyAlZCAvXyVzIGZmc1xuIiwKIAkJCQkJCSAgICBuZXdfbmFtZSwgaGVpZ2h0LCBuZXdfbmFtZSk7CiAgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKIH0KIAorI2lmZGVmIEZFQVRfTUJZVEUKKy8qCisgKiBXcml0ZSBhIGxpbmUgdG8gZGVmaW5lIHRoZSBDSUQgZm9udC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitwcnRfZGVmX2NpZGZvbnQobmV3X25hbWUsIGhlaWdodCwgY2lkZm9udCkKKyAgICBjaGFyCSpuZXdfbmFtZTsKKyAgICBpbnQJCWhlaWdodDsKKyAgICBjaGFyCSpjaWRmb250OworeworICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIvXyVzIC8lc1svJXNdIHZpbV9jb21wb3NlZm9udFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19uYW1lLCBwcnRfY21hcCwgY2lkZm9udCk7CisgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKKyAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiLyVzICVkIC9fJXMgZmZzXG4iLCBuZXdfbmFtZSwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfbmFtZSk7CisgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKK30KKworLyoKKyAqIFdyaXRlIGEgbGluZSB0byBkZWZpbmUgYSBkdXBsaWNhdGUgb2YgYSBDSUQgZm9udAorICovCisgICAgc3RhdGljIHZvaWQKK3BydF9kdXBfY2lkZm9udChvcmlnaW5hbF9uYW1lLCBuZXdfbmFtZSkKKyAgICBjaGFyCSpvcmlnaW5hbF9uYW1lOworICAgIGNoYXIJKm5ld19uYW1lOworeworICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIvJXMgJXMgZFxuIiwgbmV3X25hbWUsIG9yaWdpbmFsX25hbWUpOworICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7Cit9CisjZW5kaWYKKwogLyoKICAqIENvbnZlcnQgYSByZWFsIHZhbHVlIGludG8gYW4gaW50ZWdlciBhbmQgZnJhY3Rpb25hbCBwYXJ0IGFzIGludGVnZXJzLCB3aXRoCiAgKiB0aGUgZnJhY3Rpb25hbCBwYXJ0IGJlaW5nIGluIHRoZSByYW5nZSBbMCwxMF5wcmVjaXNpb24pLiAgVGhlIGZyYWN0aW9uYWwgcGFydApAQCAtNDExMCw3ICs0NDMwLDcgQEAKIAkgICAgfQogCiAJICAgIC8qIFNpemUgb2YgcmVjdCBvZiBiYWNrZ3JvdW5kIGNvbG9yIG9uIHdoaWNoIHRleHQgaXMgcHJpbnRlZCAqLwotCSAgICBwcnRfd3JpdGVfcmVhbChwcnRfdGV4dF9jb3VudCAqIHBydF9jaGFyX3dpZHRoLCAyKTsKKwkgICAgcHJ0X3dyaXRlX3JlYWwocHJ0X3RleHRfcnVuLCAyKTsKIAkgICAgcHJ0X3dyaXRlX3JlYWwocHJ0X2xpbmVfaGVpZ2h0LCAyKTsKIAogCSAgICAvKiBMYXN0bHkgYWRkIHRoZSBjb2xvciBvZiB0aGUgYmFja2dyb3VuZCAqLwpAQCAtNDEzNSwxNyArNDQ1NSwyNiBAQAogCQlwcnRfZG9fbW92ZXRvID0gRkFMU0U7CiAJICAgIH0KIAotCSAgICAvKiBVbmRlcmxpbmluZyBpcyBlYXN5IC0ganVzdCBuZWVkIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0bwotCSAgICAgKiBwcmludC4gKi8KLQkgICAgcHJ0X3dyaXRlX3JlYWwocHJ0X3RleHRfY291bnQgKiBwcnRfY2hhcl93aWR0aCwgMik7CisgICAgICAgICAgICAvKiBVbmRlcmxpbmUgbGVuZ3RoIG9mIHRleHQgcnVuICovCisJICAgIHBydF93cml0ZV9yZWFsKHBydF90ZXh0X3J1biwgMik7CiAJICAgIHBydF93cml0ZV9zdHJpbmcoInVsXG4iKTsKIAl9CiAJLyogRHJhdyB0aGUgdGV4dAogCSAqIE5vdGU6IHdlIHdyaXRlIHRleHQgb3V0IHJhdyAtIEVCQ0RJQyBjb252ZXJzaW9uIGlzIGhhbmRsZWQgaW4gdGhlCiAJICogUG9zdFNjcmlwdCB3b3JsZCB2aWEgdGhlIGZvbnQgZW5jb2RpbmcgdmVjdG9yLiAqLwotCXBydF93cml0ZV9zdHJpbmcoIigiKTsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgICAgIGlmIChwcnRfb3V0X21ieXRlKQorICAgICAgICAgICAgcHJ0X3dyaXRlX3N0cmluZygiPCIpOworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHBydF93cml0ZV9zdHJpbmcoIigiKTsKIAlwcnRfd3JpdGVfZmlsZV9yYXdfbGVuKHBydF9wc19idWZmZXIuZ2FfZGF0YSwgcHJ0X3BzX2J1ZmZlci5nYV9sZW4pOwotCXBydF93cml0ZV9zdHJpbmcoIikiKTsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgICAgIGlmIChwcnRfb3V0X21ieXRlKQorICAgICAgICAgICAgcHJ0X3dyaXRlX3N0cmluZygiPiIpOworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHBydF93cml0ZV9zdHJpbmcoIikiKTsKIAkvKiBBZGQgYSBtb3ZldG8gaWYgbmVlZCBiZSBhbmQgdXNlIHRoZSBhcHByb3ByaWF0ZSBzaG93IHByb2NlZHVyZSAqLwogCWlmIChwcnRfZG9fbW92ZXRvKQogCXsKQEAgLTQxNTksNyArNDQ4OCw3IEBACiAJICAgIHBydF93cml0ZV9zdHJpbmcoInNcbiIpOwogCiAJZ2FfY2xlYXIoJnBydF9wc19idWZmZXIpOwotCWdhX2luaXQyKCZwcnRfcHNfYnVmZmVyLCAoaW50KXNpemVvZihjaGFyKSwgUFJUX1BTX0RFRkFVTFRfQlVGRkVSX1NJWkUpOworCWdhX2luaXQyKCZwcnRfcHNfYnVmZmVyLCAoaW50KXNpemVvZihjaGFyKSwgcHJ0X2J1ZnNpeik7CiAgICAgfQogfQogCkBAIC00MTk4LDE3ICs0NTI3LDE1NSBAQAogI2RlZmluZSBQU0xGICAoMHgwYSkKICNkZWZpbmUgUFNDUiAgKDB4MGQpCiAKLS8qIFZlcnkgc2ltcGxlIGhhbmQgY3JhZnRlZCBwYXJzZXIgdG8gZ2V0IHRoZSB0eXBlLCB0aXRsZSwgYW5kIHZlcnNpb24gbnVtYmVyIG9mCi0gKiBhIFBTIHJlc291cmNlIGZpbGUgc28gdGhlIGZpbGUgZGV0YWlscyBjYW4gYmUgYWRkZWQgdG8gdGhlIERTQyBoZWFkZXIKLSAqIGNvbW1lbnRzLiAqLworLyogU3RhdGljIGJ1ZmZlciB0byByZWFkIGluaXRpYWwgY29tbWVudHMgaW4gYSByZXNvdXJjZSBmaWxlLCBzb21lIGNhbiBoYXZlIGEKKyAqIGNvdXBsZSBvZiBLQiBvZiBjb21tZW50cyEgKi8KKyNkZWZpbmUgUFJUX0ZJTEVfQlVGRkVSX0xFTiAoMjA0OCkKK3N0cnVjdCBwcnRfcmVzZmlsZV9idWZmZXJfUworeworICAgIGNoYXJfdSAgYnVmZmVyW1BSVF9GSUxFX0JVRkZFUl9MRU5dOworICAgIGludCAgICAgbGVuOworICAgIGludCAgICAgbGluZV9zdGFydDsKKyAgICBpbnQgICAgIGxpbmVfZW5kOworfTsKKworc3RhdGljIHN0cnVjdCBwcnRfcmVzZmlsZV9idWZmZXJfUyBwcnRfcmVzZmlsZTsKKworICAgIHN0YXRpYyBpbnQKK3BydF9yZXNmaWxlX25leHRfbGluZSgpCit7CisgICAgaW50ICAgICBpbmRleDsKKworICAgIC8qIE1vdmUgdG8gc3RhcnQgb2YgbmV4dCBsaW5lIGFuZCB0aGVuIGZpbmQgZW5kIG9mIGxpbmUgKi8KKyAgICBpbmRleCA9IHBydF9yZXNmaWxlLmxpbmVfZW5kICsgMTsKKyAgICB3aGlsZSAoaW5kZXggPCBwcnRfcmVzZmlsZS5sZW4pCisgICAgeworICAgICAgICBpZiAocHJ0X3Jlc2ZpbGUuYnVmZmVyW2luZGV4XSAhPSBQU0xGICYmIHBydF9yZXNmaWxlLmJ1ZmZlcltpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IFBTQ1IpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaW5kZXgrKzsKKyAgICB9CisgICAgcHJ0X3Jlc2ZpbGUubGluZV9zdGFydCA9IGluZGV4OworCisgICAgd2hpbGUgKGluZGV4IDwgcHJ0X3Jlc2ZpbGUubGVuKQorICAgIHsKKyAgICAgICAgaWYgKHBydF9yZXNmaWxlLmJ1ZmZlcltpbmRleF0gPT0gUFNMRiB8fCBwcnRfcmVzZmlsZS5idWZmZXJbaW5kZXhdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBQU0NSKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGluZGV4Kys7CisgICAgfQorICAgIHBydF9yZXNmaWxlLmxpbmVfZW5kID0gaW5kZXg7CisKKyAgICByZXR1cm4gKGluZGV4IDwgcHJ0X3Jlc2ZpbGUubGVuKTsKK30KKworICAgIHN0YXRpYyBpbnQKK3BydF9yZXNmaWxlX3N0cm5jbXAob2Zmc2V0LCBzdHJpbmcsIGxlbikKKyAgICBpbnQgICAgIG9mZnNldDsKKyAgICBjaGFyICAgICpzdHJpbmc7CisgICAgaW50ICAgICBsZW47Cit7CisgICAgLyogRm9yY2Ugbm90IGVxdWFsIGlmIHN0cmluZyBpcyBsb25nZXIgdGhhbiByZW1haW5kZXIgb2YgbGluZSAqLworICAgIGlmIChsZW4gPiAocHJ0X3Jlc2ZpbGUubGluZV9lbmQgLSAocHJ0X3Jlc2ZpbGUubGluZV9zdGFydCArIG9mZnNldCkpKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiBTVFJOQ01QKCZwcnRfcmVzZmlsZS5idWZmZXJbcHJ0X3Jlc2ZpbGUubGluZV9zdGFydCArIG9mZnNldF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLCBsZW4pOworfQorCisgICAgc3RhdGljIGludAorcHJ0X3Jlc2ZpbGVfc2tpcF9ub253cyhvZmZzZXQpCisgICAgaW50ICAgICBvZmZzZXQ7Cit7CisgICAgaW50ICAgICBpbmRleDsKKworICAgIGluZGV4ID0gcHJ0X3Jlc2ZpbGUubGluZV9zdGFydCArIG9mZnNldDsKKyAgICB3aGlsZSAoaW5kZXggPCBwcnRfcmVzZmlsZS5saW5lX2VuZCkKKyAgICB7CisgICAgICAgIGlmIChpc3NwYWNlKHBydF9yZXNmaWxlLmJ1ZmZlcltpbmRleF0pKQorICAgICAgICAgICAgcmV0dXJuIGluZGV4IC0gcHJ0X3Jlc2ZpbGUubGluZV9zdGFydDsKKyAgICAgICAgaW5kZXgrKzsKKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorCisgICAgc3RhdGljIGludAorcHJ0X3Jlc2ZpbGVfc2tpcF93cyhvZmZzZXQpCisgICAgaW50ICAgICBvZmZzZXQ7Cit7CisgICAgaW50ICAgICBpbmRleDsKKworICAgIGluZGV4ID0gcHJ0X3Jlc2ZpbGUubGluZV9zdGFydCArIG9mZnNldDsKKyAgICB3aGlsZSAoaW5kZXggPCBwcnRfcmVzZmlsZS5saW5lX2VuZCkKKyAgICB7CisgICAgICAgIGlmICghaXNzcGFjZShwcnRfcmVzZmlsZS5idWZmZXJbaW5kZXhdKSkKKyAgICAgICAgICAgIHJldHVybiBpbmRleCAtIHBydF9yZXNmaWxlLmxpbmVfc3RhcnQ7CisgICAgICAgIGluZGV4Kys7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworLyogcHJ0X25leHRfZHNjKCkgLSByZXR1cm5zIGRldGFpbCBvbiBuZXh0IERTQyBjb21tZW50IGxpbmUgZm91bmQuICBSZXR1cm5zIHRydWUKKyAqIGlmIGEgRFNDIGNvbW1lbnQgaXMgZm91bmQsIGVsc2UgZmFsc2UgKi8KKyAgICBzdGF0aWMgaW50CitwcnRfbmV4dF9kc2MocF9kc2NfbGluZSkKKyAgICBzdHJ1Y3QgcHJ0X2RzY19saW5lX1MgKnBfZHNjX2xpbmU7Cit7CisgICAgaW50ICAgICBjb21tZW50OworICAgIGludCAgICAgb2Zmc2V0OworCisgICAgLyogTW92ZSB0byBzdGFydCBvZiBuZXh0IGxpbmUgKi8KKyAgICBpZiAoIXBydF9yZXNmaWxlX25leHRfbGluZSgpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAvKiBEU0MgY29tbWVudHMgYWx3YXlzIHN0YXJ0ICUlICovCisgICAgaWYgKHBydF9yZXNmaWxlX3N0cm5jbXAoMCwgIiUlIiwgMikgIT0gMCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgLyogRmluZCB0eXBlIG9mIERTQyBjb21tZW50ICovCisgICAgZm9yIChjb21tZW50ID0gMDsgY29tbWVudCA8IE5VTV9FTEVNRU5UUyhwcnRfZHNjX3RhYmxlKTsgY29tbWVudCsrKQorICAgICAgICBpZiAocHJ0X3Jlc2ZpbGVfc3RybmNtcCgwLCBwcnRfZHNjX3RhYmxlW2NvbW1lbnRdLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ0X2RzY190YWJsZVtjb21tZW50XS5sZW4pID09IDApCisgICAgICAgICAgICBicmVhazsKKworICAgIGlmIChjb21tZW50ICE9IE5VTV9FTEVNRU5UUyhwcnRfZHNjX3RhYmxlKSkKKyAgICB7CisgICAgICAgIC8qIFJldHVybiB0eXBlIG9mIGNvbW1lbnQgKi8KKyAgICAgICAgcF9kc2NfbGluZS0+dHlwZSA9IHBydF9kc2NfdGFibGVbY29tbWVudF0udHlwZTsKKyAgICAgICAgb2Zmc2V0ID0gcHJ0X2RzY190YWJsZVtjb21tZW50XS5sZW47CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIFVucmVjb2duaXNlZCBEU0MgY29tbWVudCwgc2tpcCB0byB3cyBhZnRlciBjb21tZW50IGxlYWRlciAqLworICAgICAgICBwX2RzY19saW5lLT50eXBlID0gUFJUX0RTQ19NSVNDX1RZUEU7CisgICAgICAgIG9mZnNldCA9IHBydF9yZXNmaWxlX3NraXBfbm9ud3MoMCk7CisgICAgICAgIGlmIChvZmZzZXQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgLyogU2tpcCB3cyB0byBjb21tZW50IHZhbHVlICovCisgICAgb2Zmc2V0ID0gcHJ0X3Jlc2ZpbGVfc2tpcF93cyhvZmZzZXQpOworICAgIGlmIChvZmZzZXQgPT0gLTEpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIHBfZHNjX2xpbmUtPnN0cmluZyA9ICZwcnRfcmVzZmlsZS5idWZmZXJbcHJ0X3Jlc2ZpbGUubGluZV9zdGFydCArIG9mZnNldF07CisgICAgcF9kc2NfbGluZS0+bGVuID0gcHJ0X3Jlc2ZpbGUubGluZV9lbmQgLSAocHJ0X3Jlc2ZpbGUubGluZV9zdGFydCArIG9mZnNldCk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyogSW1wcm92ZWQgaGFuZCBjcmFmdGVkIHBhcnNlciB0byBnZXQgdGhlIHR5cGUsIHRpdGxlLCBhbmQgdmVyc2lvbiBudW1iZXIgb2YgYQorICogUFMgcmVzb3VyY2UgZmlsZSBzbyB0aGUgZmlsZSBkZXRhaWxzIGNhbiBiZSBhZGRlZCB0byB0aGUgRFNDIGhlYWRlciBjb21tZW50cy4KKyAqLwogICAgIHN0YXRpYyBpbnQKIHBydF9vcGVuX3Jlc291cmNlKHJlc291cmNlKQogICAgIHN0cnVjdCBwcnRfcHNfcmVzb3VyY2VfUyAqcmVzb3VyY2U7CiB7CisgICAgaW50ICAgICAgICAgb2Zmc2V0OworICAgIGludCAgICAgICAgIHNlZW5fYWxsOworICAgIGludCAgICAgICAgIHNlZW5fdGl0bGU7CisgICAgaW50ICAgICAgICAgc2Vlbl92ZXJzaW9uOwogICAgIEZJTEUJKmZkX3Jlc291cmNlOwotICAgIGNoYXJfdQlidWZmZXJbMTI4XTsKLSAgICBjaGFyX3UJKmNoID0gYnVmZmVyOwotICAgIGNoYXJfdQkqY2gyOworICAgIHN0cnVjdCBwcnRfZHNjX2xpbmVfUyBkc2NfbGluZTsKIAogICAgIGZkX3Jlc291cmNlID0gbWNoX2ZvcGVuKChjaGFyICopcmVzb3VyY2UtPmZpbGVuYW1lLCBSRUFEQklOKTsKICAgICBpZiAoZmRfcmVzb3VyY2UgPT0gTlVMTCkKQEAgLTQyMTYsMTEgKzQ2ODMsMTEgQEAKIAlFTVNHMihfKCJFNjI0OiBDYW4ndCBvcGVuIGZpbGUgXCIlc1wiIiksIHJlc291cmNlLT5maWxlbmFtZSk7CiAJcmV0dXJuIEZBTFNFOwogICAgIH0KLSAgICB2aW1fbWVtc2V0KGJ1ZmZlciwgTlVMLCBzaXplb2YoYnVmZmVyKSk7CisgICAgdmltX21lbXNldChwcnRfcmVzZmlsZS5idWZmZXIsIE5VTCwgUFJUX0ZJTEVfQlVGRkVSX0xFTik7CiAKICAgICAvKiBQYXJzZSBmaXJzdCBsaW5lIHRvIGVuc3VyZSB2YWxpZCByZXNvdXJjZSBmaWxlICovCi0gICAgKHZvaWQpZnJlYWQoKGNoYXIgKilidWZmZXIsIHNpemVvZihjaGFyX3UpLCBzaXplb2YoYnVmZmVyKSwKLQkJCQkJCQkJIGZkX3Jlc291cmNlKTsKKyAgICBwcnRfcmVzZmlsZS5sZW4gPSBmcmVhZCgoY2hhciAqKXBydF9yZXNmaWxlLmJ1ZmZlciwgc2l6ZW9mKGNoYXJfdSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVF9GSUxFX0JVRkZFUl9MRU4sIGZkX3Jlc291cmNlKTsKICAgICBpZiAoZmVycm9yKGZkX3Jlc291cmNlKSkKICAgICB7CiAJRU1TRzIoXygiRTQ1NzogQ2FuJ3QgcmVhZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCIlc1wiIiksCkBAIC00MjI5LDcgKzQ2OTYsMTUgQEAKIAlyZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gICAgaWYgKFNUUk5DTVAoY2gsIFBSVF9SRVNPVVJDRV9IRUFERVIsIFNUUkxFTihQUlRfUkVTT1VSQ0VfSEVBREVSKSkgIT0gMCkKKyAgICBwcnRfcmVzZmlsZS5saW5lX2VuZCA9IC0xOworICAgIHBydF9yZXNmaWxlLmxpbmVfc3RhcnQgPSAwOworICAgIGlmICghcHJ0X3Jlc2ZpbGVfbmV4dF9saW5lKCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIG9mZnNldCA9IDA7CisKKyAgICBpZiAocHJ0X3Jlc2ZpbGVfc3RybmNtcChvZmZzZXQsIFBSVF9SRVNPVVJDRV9IRUFERVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUkxFTihQUlRfUkVTT1VSQ0VfSEVBREVSKSkgIT0gMCkKICAgICB7CiAJRU1TRzIoXygiRTYxODogZmlsZSBcIiVzXCIgaXMgbm90IGEgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIiksCiAJCXJlc291cmNlLT5maWxlbmFtZSk7CkBAIC00MjM4LDMyICs0NzEzLDM0IEBACiAgICAgfQogCiAgICAgLyogU2tpcCBvdmVyIGFueSB2ZXJzaW9uIG51bWJlcnMgYW5kIGZvbGxvd2luZyB3cyAqLwotICAgIGNoICs9IFNUUkxFTihQUlRfUkVTT1VSQ0VfSEVBREVSKTsKLSAgICB3aGlsZSAoIWlzc3BhY2UoKmNoKSkKLQljaCsrOwotICAgIHdoaWxlIChpc3NwYWNlKCpjaCkpCi0JY2grKzsKKyAgICBvZmZzZXQgKz0gU1RSTEVOKFBSVF9SRVNPVVJDRV9IRUFERVIpOworICAgIG9mZnNldCA9IHBydF9yZXNmaWxlX3NraXBfbm9ud3Mob2Zmc2V0KTsKKyAgICBpZiAob2Zmc2V0ID09IC0xKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgb2Zmc2V0ID0gcHJ0X3Jlc2ZpbGVfc2tpcF93cyhvZmZzZXQpOworICAgIGlmIChvZmZzZXQgPT0gLTEpCisgICAgICAgIHJldHVybiBGQUxTRTsKIAotICAgIGlmIChTVFJOQ01QKGNoLCBQUlRfUkVTT1VSQ0VfUkVTT1VSQ0UsIFNUUkxFTihQUlRfUkVTT1VSQ0VfUkVTT1VSQ0UpKSAhPSAwKQorICAgIGlmIChwcnRfcmVzZmlsZV9zdHJuY21wKG9mZnNldCwgUFJUX1JFU09VUkNFX1JFU09VUkNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJMRU4oUFJUX1JFU09VUkNFX1JFU09VUkNFKSkgIT0gMCkKICAgICB7CiAJRU1TRzIoXygiRTYxOTogZmlsZSBcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSIpLAogCQlyZXNvdXJjZS0+ZmlsZW5hbWUpOwogCWZjbG9zZShmZF9yZXNvdXJjZSk7CiAJcmV0dXJuIEZBTFNFOwogICAgIH0KLSAgICBjaCArPSBTVFJMRU4oUFJUX1JFU09VUkNFX1JFU09VUkNFKTsKKyAgICBvZmZzZXQgKz0gU1RSTEVOKFBSVF9SRVNPVVJDRV9SRVNPVVJDRSk7CiAKICAgICAvKiBEZWNpZGUgdHlwZSBvZiByZXNvdXJjZSBpbiB0aGUgZmlsZSAqLwotICAgIGlmIChTVFJOQ01QKGNoLCBQUlRfUkVTT1VSQ0VfUFJPQ1NFVCwgU1RSTEVOKFBSVF9SRVNPVVJDRV9QUk9DU0VUKSkgPT0gMCkKLSAgICB7CisgICAgaWYgKHBydF9yZXNmaWxlX3N0cm5jbXAob2Zmc2V0LCBQUlRfUkVTT1VSQ0VfUFJPQ1NFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSTEVOKFBSVF9SRVNPVVJDRV9QUk9DU0VUKSkgPT0gMCkKIAlyZXNvdXJjZS0+dHlwZSA9IFBSVF9SRVNPVVJDRV9UWVBFX1BST0NTRVQ7Ci0JY2ggKz0gU1RSTEVOKFBSVF9SRVNPVVJDRV9QUk9DU0VUKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoU1RSTkNNUChjaCwgUFJUX1JFU09VUkNFX0VOQ09ESU5HLCBTVFJMRU4oUFJUX1JFU09VUkNFX0VOQ09ESU5HKSkgPT0gMCkKLSAgICB7CisgICAgZWxzZSBpZiAocHJ0X3Jlc2ZpbGVfc3RybmNtcChvZmZzZXQsIFBSVF9SRVNPVVJDRV9FTkNPRElORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSTEVOKFBSVF9SRVNPVVJDRV9FTkNPRElORykpID09IDApCiAJcmVzb3VyY2UtPnR5cGUgPSBQUlRfUkVTT1VSQ0VfVFlQRV9FTkNPRElORzsKLQljaCArPSBTVFJMRU4oUFJUX1JFU09VUkNFX0VOQ09ESU5HKTsKLSAgICB9CisgICAgZWxzZSBpZiAocHJ0X3Jlc2ZpbGVfc3RybmNtcChvZmZzZXQsIFBSVF9SRVNPVVJDRV9DTUFQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJMRU4oUFJUX1JFU09VUkNFX0NNQVApKSA9PSAwKQorCXJlc291cmNlLT50eXBlID0gUFJUX1JFU09VUkNFX1RZUEVfQ01BUDsKICAgICBlbHNlCiAgICAgewogCUVNU0cyKF8oIkU2MTk6IGZpbGUgXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUiKSwKQEAgLTQyNzIsNTMgKzQ3NDksNTAgQEAKIAlyZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gICAgLyogQ29uc3VtZSB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBDUi9MRi9DUl9MRiAqLwotICAgIHdoaWxlICgqY2ggIT0gUFNDUiAmJiAqY2ggIT0gUFNMRikKLQljaCsrOwotICAgIHdoaWxlICgqY2ggPT0gUFNDUiB8fCAqY2ggPT0gUFNMRikKLQljaCsrOworICAgIC8qIExvb2sgZm9yIHRpdGxlIGFuZCB2ZXJzaW9uIG9mIHJlc291cmNlICovCisgICAgcmVzb3VyY2UtPnRpdGxlWzBdID0gJ1wwJzsKKyAgICByZXNvdXJjZS0+dmVyc2lvblswXSA9ICdcMCc7CisgICAgc2Vlbl90aXRsZSA9IEZBTFNFOworICAgIHNlZW5fdmVyc2lvbiA9IEZBTFNFOworICAgIHNlZW5fYWxsID0gRkFMU0U7CisgICAgd2hpbGUgKCFzZWVuX2FsbCAmJiBwcnRfbmV4dF9kc2MoJmRzY19saW5lKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZHNjX2xpbmUudHlwZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIFBSVF9EU0NfVElUTEVfVFlQRToKKyAgICAgICAgICAgIFNUUk5DUFkocmVzb3VyY2UtPnRpdGxlLCBkc2NfbGluZS5zdHJpbmcsIGRzY19saW5lLmxlbik7CisgICAgICAgICAgICByZXNvdXJjZS0+dGl0bGVbZHNjX2xpbmUubGVuXSA9ICdcMCc7CisgICAgICAgICAgICBzZWVuX3RpdGxlID0gVFJVRTsKKyAgICAgICAgICAgIGlmIChzZWVuX3ZlcnNpb24pCisgICAgICAgICAgICAgICAgc2Vlbl9hbGwgPSBUUlVFOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAvKiBNYXRjaCAlJVRpdGxlOiAqLwotICAgIGlmIChTVFJOQ01QKGNoLCBQUlRfUkVTT1VSQ0VfVElUTEUsIFNUUkxFTihQUlRfUkVTT1VSQ0VfVElUTEUpKSAhPSAwKQorICAgICAgICBjYXNlIFBSVF9EU0NfVkVSU0lPTl9UWVBFOgorICAgICAgICAgICAgU1RSTkNQWShyZXNvdXJjZS0+dmVyc2lvbiwgZHNjX2xpbmUuc3RyaW5nLCBkc2NfbGluZS5sZW4pOworICAgICAgICAgICAgcmVzb3VyY2UtPnZlcnNpb25bZHNjX2xpbmUubGVuXSA9ICdcMCc7CisgICAgICAgICAgICBzZWVuX3ZlcnNpb24gPSBUUlVFOworICAgICAgICAgICAgaWYgKHNlZW5fdGl0bGUpCisgICAgICAgICAgICAgICAgc2Vlbl9hbGwgPSBUUlVFOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBQUlRfRFNDX0VORENPTU1FTlRTX1RZUEU6CisgICAgICAgICAgICAvKiBXb250IGZpbmQgdGl0bGUgb3IgcmVzb3VyY2UgYWZ0ZXIgdGhpcyBjb21tZW50LCBzdG9wIHNlYXJjaGluZyAqLworICAgICAgICAgICAgc2Vlbl9hbGwgPSBUUlVFOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBQUlRfRFNDX01JU0NfVFlQRToKKyAgICAgICAgICAgIC8qIE5vdCBpbnRlcmVzdGVkIGluIHdoYXRldmVyIGNvbW1lbnQgdGhpcyBsaW5lIGhhZCAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXNlZW5fdGl0bGUgfHwgIXNlZW5fdmVyc2lvbikKICAgICB7CiAJRU1TRzIoXygiRTYxOTogZmlsZSBcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSIpLAogCQlyZXNvdXJjZS0+ZmlsZW5hbWUpOwogCWZjbG9zZShmZF9yZXNvdXJjZSk7CiAJcmV0dXJuIEZBTFNFOwogICAgIH0KLSAgICBjaCArPSBTVFJMRU4oUFJUX1JFU09VUkNFX1RJVExFKTsKLQotICAgIC8qIFNraXAgd3MgYWZ0ZXIgJSVUaXRsZTogKi8KLSAgICB3aGlsZSAoaXNzcGFjZSgqY2gpKQotCWNoKys7Ci0KLSAgICAvKiBDb3B5IHVwIHRvIHRoZSBDUi9MRi9DUl9MRiAqLwotICAgIGNoMiA9IHJlc291cmNlLT50aXRsZTsKLSAgICB3aGlsZSAoKmNoICE9IFBTQ1IgJiYgKmNoICE9IFBTTEYpCi0JKmNoMisrID0gKmNoKys7Ci0gICAgKmNoMiA9ICdcMCc7Ci0gICAgd2hpbGUgKCpjaCA9PSBQU0NSIHx8ICpjaCA9PSBQU0xGKQotCWNoKys7Ci0KLSAgICAvKiBNYXRjaCAlJVZlcnNpb246ICovCi0gICAgaWYgKFNUUk5DTVAoY2gsIFBSVF9SRVNPVVJDRV9WRVJTSU9OLCBTVFJMRU4oUFJUX1JFU09VUkNFX1ZFUlNJT04pKSAhPSAwKQotICAgIHsKLQlFTVNHMihfKCJFNjE5OiBmaWxlIFwiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIiksCi0JCXJlc291cmNlLT5maWxlbmFtZSk7Ci0JZmNsb3NlKGZkX3Jlc291cmNlKTsKLQlyZXR1cm4gRkFMU0U7Ci0gICAgfQotICAgIGNoICs9IFNUUkxFTihQUlRfUkVTT1VSQ0VfVkVSU0lPTik7Ci0KLSAgICAvKiBTa2lwIHdzIGFmdGVyICUlVmVyc2lvbjogKi8KLSAgICB3aGlsZSAoaXNzcGFjZSgqY2gpKQotCWNoKys7Ci0KLSAgICAvKiBDb3B5IHVwIHRvIHRoZSBDUi9MRi9DUl9MRiAqLwotICAgIGNoMiA9IHJlc291cmNlLT52ZXJzaW9uOwotICAgIHdoaWxlICgqY2ggIT0gUFNDUiAmJiAqY2ggIT0gUFNMRikKLQkqY2gyKysgPSAqY2grKzsKLSAgICAqY2gyID0gJ1wwJzsKIAogICAgIGZjbG9zZShmZF9yZXNvdXJjZSk7CiAKQEAgLTQzOTgsMjcgKzQ4NzIsMzMgQEAKIH0KIAogICAgIHN0YXRpYyB2b2lkCi1wcnRfZHNjX3Jlc291cmNlcyhjb21tZW50LCB0eXBlLCBjb3VudCwgc3RyaW5ncykKK3BydF9kc2NfcmVzb3VyY2VzKGNvbW1lbnQsIHR5cGUsIHN0cmluZykKICAgICBjaGFyCSpjb21tZW50OwkvKiBpZiBOVUxMIGFkZCB0byBwcmV2aW91cyAqLwogICAgIGNoYXIJKnR5cGU7Ci0gICAgaW50CQljb3VudDsKLSAgICBjaGFyCSoqc3RyaW5nczsKKyAgICBjaGFyCSpzdHJpbmc7CiB7Ci0gICAgaW50CQlpOwotCiAgICAgaWYgKGNvbW1lbnQgIT0gTlVMTCkKIAlzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiJSUlJSVzOiAlcyIsIGNvbW1lbnQsIHR5cGUpOwogICAgIGVsc2UKIAlzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiJSUlJSsgJXMiLCB0eXBlKTsKICAgICBwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOwogCi0gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotCXNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIgJXMiLCBzdHJpbmdzW2ldKTsKLQlwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOwotICAgIH0KKyAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiICVzXG4iLCBzdHJpbmcpOworICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7Cit9CiAKLSAgICBwcnRfd3JpdGVfc3RyaW5nKCJcbiIpOworICAgIHN0YXRpYyB2b2lkCitwcnRfZHNjX2ZvbnRfcmVzb3VyY2UocmVzb3VyY2UsIHBzX2ZvbnQpCisgICAgY2hhcgkqcmVzb3VyY2U7CisgICAgc3RydWN0IHBydF9wc19mb250X1MgKnBzX2ZvbnQ7Cit7CisgICAgaW50ICAgICBpOworCisgICAgcHJ0X2RzY19yZXNvdXJjZXMocmVzb3VyY2UsICJmb250IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzX2ZvbnQtPnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX1JPTUFOXSk7CisgICAgZm9yIChpID0gUFJUX1BTX0ZPTlRfQk9MRCA7IGkgPD0gUFJUX1BTX0ZPTlRfQk9MRE9CTElRVUUgOyBpKyspCisgICAgICAgIGlmIChwc19mb250LT5wc19mb250bmFtZVtpXSAhPSBOVUxMKQorICAgICAgICAgICAgcHJ0X2RzY19yZXNvdXJjZXMoTlVMTCwgImZvbnQiLCBwc19mb250LT5wc19mb250bmFtZVtpXSk7CiB9CiAKICAgICBzdGF0aWMgdm9pZApAQCAtNDQ4OSw2ICs0OTY5LDIyIEBACiBtY2hfcHJpbnRfY2xlYW51cCgpCiB7CiAjaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChwcnRfb3V0X21ieXRlKQorICAgIHsKKyAgICAgICAgaW50ICAgICBpOworCisgICAgICAgIC8qIEZyZWUgb2ZmIGFsbCBDSUQgZm9udCBuYW1lcyBjcmVhdGVkLCBidXQgZmlyc3QgY2xlYXIgZHVwbGljYXRlCisgICAgICAgICAqIHBvaW50ZXJzIHRvIHRoZSBzYW1lIHN0cmluZyAod2hlbiB0aGUgc2FtZSBmb250IGlzIHVzZWQgZm9yIG1vcmUgdGhhbgorICAgICAgICAgKiBvbmUgc3R5bGUpLgorICAgICAgICAgKi8KKyAgICAgICAgZm9yIChpID0gUFJUX1BTX0ZPTlRfUk9NQU47IGkgPD0gUFJUX1BTX0ZPTlRfQk9MRE9CTElRVUU7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHBydF9wc19tYl9mb250LnBzX2ZvbnRuYW1lW2ldICE9IE5VTEwpCisgICAgICAgICAgICAgICAgdmltX2ZyZWUocHJ0X3BzX21iX2ZvbnQucHNfZm9udG5hbWVbaV0pOworICAgICAgICAgICAgcHJ0X3BzX21iX2ZvbnQucHNfZm9udG5hbWVbaV0gPSBOVUxMOworICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKHBydF9kb19jb252KQogICAgIHsKIAljb252ZXJ0X3NldHVwKCZwcnRfY29udiwgTlVMTCwgTlVMTCk7CkBAIC00NTcwLDcgKzUwNjYsNyBAQAogICAgIGludAkJZm9udF9zY2FsZTsKIHsKICAgICBwcnRfbGluZV9oZWlnaHQgPSAoZmxvYXQpZm9udF9zY2FsZTsKLSAgICBwcnRfY2hhcl93aWR0aCA9IChmbG9hdClQUlRfUFNfRk9OVF9UT19VU0VSKGZvbnRfc2NhbGUsIHBydF9wc19mb250Lnd4KTsKKyAgICBwcnRfY2hhcl93aWR0aCA9IChmbG9hdClQUlRfUFNfRk9OVF9UT19VU0VSKGZvbnRfc2NhbGUsIHBydF9wc19mb250LT53eCk7CiB9CiAKIApAQCAtNDU4MCw2ICs1MDc2LDEzIEBACiAgICAgaWYgKHBydF91c2VfbnVtYmVyKCkpCiAgICAgewogCXBydF9udW1iZXJfd2lkdGggPSBQUklOVF9OVU1CRVJfV0lEVEggKiBwcnRfY2hhcl93aWR0aDsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgICAgIC8qIElmIHdlIGFyZSBvdXRwdXR0aW5nIG11bHRpLWJ5dGUgY2hhcmFjdGVycyB0aGVuIGxpbmUgbnVtYmVycyB3aWxsIGJlCisgICAgICAgICAqIHByaW50ZWQgd2l0aCBoYWxmIHdpZHRoIGNoYXJhY3RlcnMKKyAgICAgICAgICovCisgICAgICAgIGlmIChwcnRfb3V0X21ieXRlKQorICAgICAgICAgICAgcHJ0X251bWJlcl93aWR0aCAvPSAyOworI2VuZGlmCiAJcHJ0X2xlZnRfbWFyZ2luICs9IHBydF9udW1iZXJfd2lkdGg7CiAgICAgfQogICAgIGVsc2UKQEAgLTQ1ODgsNiArNTA5MSwyNCBAQAogICAgIHJldHVybiAoaW50KSgocHJ0X3JpZ2h0X21hcmdpbiAtIHBydF9sZWZ0X21hcmdpbikgLyBwcnRfY2hhcl93aWR0aCk7CiB9CiAKKyAgICBzdGF0aWMgaW50CitwcnRfYnVpbGRfY2lkX2ZvbnRuYW1lKGZvbnQsIG5hbWUsIG5hbWVfbGVuKQorICAgIGludCAgICAgZm9udDsKKyAgICBjaGFyICAgICpuYW1lOworICAgIGludCAgICAgbmFtZV9sZW47Cit7CisgICAgY2hhciAgICAqZm9udG5hbWU7CisKKyAgICBmb250bmFtZSA9IGFsbG9jKG5hbWVfbGVuICsgMSk7CisgICAgaWYgKGZvbnRuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICBTVFJOQ1BZKGZvbnRuYW1lLCBuYW1lLCBuYW1lX2xlbik7CisgICAgZm9udG5hbWVbbmFtZV9sZW5dID0gJ1wwJzsKKyAgICBwcnRfcHNfbWJfZm9udC5wc19mb250bmFtZVtmb250XSA9IGZvbnRuYW1lOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKIC8qCiAgKiBHZXQgbnVtYmVyIG9mIGxpbmVzIG9mIHRleHQgdGhhdCBmaXQgb24gYSBwYWdlIChleGNsdWRpbmcgdGhlIGhlYWRlcikuCiAgKi8KQEAgLTQ2MDIsMTIgKzUxMjMsMTIgQEAKICAgICAgKiBjYXNlIHdoZXJlIHRoZSBmb250IGhlaWdodCBjYW4gZXhjZWVkIHRoZSBsaW5lIGhlaWdodC4KICAgICAgKi8KICAgICBwcnRfYmdjb2xfb2Zmc2V0ID0gKGZsb2F0KVBSVF9QU19GT05UX1RPX1VTRVIocHJ0X2xpbmVfaGVpZ2h0LAotCQkJCQkgICBwcnRfcHNfZm9udC5iYm94X21pbl95KTsKLSAgICBpZiAoKHBydF9wc19mb250LmJib3hfbWF4X3kgLSBwcnRfcHNfZm9udC5iYm94X21pbl95KSA8IDEwMDAuMCkKKwkJCQkJICAgcHJ0X3BzX2ZvbnQtPmJib3hfbWluX3kpOworICAgIGlmICgocHJ0X3BzX2ZvbnQtPmJib3hfbWF4X3kgLSBwcnRfcHNfZm9udC0+YmJveF9taW5feSkgPCAxMDAwLjApCiAgICAgewogCXBydF9iZ2NvbF9vZmZzZXQgLT0gKGZsb2F0KVBSVF9QU19GT05UX1RPX1VTRVIocHJ0X2xpbmVfaGVpZ2h0LAotCQkJCSgxMDAwLjAgLSAocHJ0X3BzX2ZvbnQuYmJveF9tYXhfeSAtCi0JCQkJCSAgICBwcnRfcHNfZm9udC5iYm94X21pbl95KSkgLyAyKTsKKwkJCQkoMTAwMC4wIC0gKHBydF9wc19mb250LT5iYm94X21heF95IC0KKwkJCQkJICAgIHBydF9wc19mb250LT5iYm94X21pbl95KSkgLyAyKTsKICAgICB9CiAKICAgICAvKiBHZXQgaGVpZ2h0IGZvciB0b3Btb3N0IGxpbmUgYmFzZWQgb24gYmFja2dyb3VuZCByZWN0IG9mZnNldC4gKi8KQEAgLTQ2MjIsNiArNTE0Myw2MSBAQAogICAgIHJldHVybiBscHAgLSBwcnRfaGVhZGVyX2hlaWdodCgpOwogfQogCisjaWZkZWYgRkVBVF9NQllURQorICAgIHN0YXRpYyBpbnQKK3BydF9tYXRjaF9lbmNvZGluZyhwX2VuY29kaW5nLCBwX2NtYXAsIHBwX21iZW5jKQorICAgIGNoYXIgICAgKnBfZW5jb2Rpbmc7CisgICAgc3RydWN0IHBydF9wc19tYmZvbnRfUyAqcF9jbWFwOworICAgIHN0cnVjdCBwcnRfcHNfZW5jb2RpbmdfUyAqKnBwX21iZW5jOworeworICAgIGludCAgICAgbWJlbmM7CisgICAgaW50ICAgICBlbmNfbGVuOworICAgIHN0cnVjdCBwcnRfcHNfZW5jb2RpbmdfUyAqcF9tYmVuYzsKKworICAgICpwcF9tYmVuYyA9IE5VTEw7CisgICAgLyogTG9vayBmb3IgcmVjb2duaXNlZCBlbmNvZGluZyAqLworICAgIGVuY19sZW4gPSBTVFJMRU4ocF9lbmNvZGluZyk7CisgICAgcF9tYmVuYyA9IHBfY21hcC0+ZW5jb2RpbmdzOworICAgIGZvciAobWJlbmMgPSAwOyBtYmVuYyA8IHBfY21hcC0+bnVtX2VuY29kaW5nczsgbWJlbmMrKykKKyAgICB7CisgICAgICAgIGlmIChTVFJOSUNNUChwX21iZW5jLT5lbmNvZGluZywgcF9lbmNvZGluZywgZW5jX2xlbikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgKnBwX21iZW5jID0gcF9tYmVuYzsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIHBfbWJlbmMrKzsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisgICAgc3RhdGljIGludAorcHJ0X21hdGNoX2NoYXJzZXQocF9jaGFyc2V0LCBwX2NtYXAsIHBwX21iY2hhcikKKyAgICBjaGFyICAgICpwX2NoYXJzZXQ7CisgICAgc3RydWN0IHBydF9wc19tYmZvbnRfUyAqcF9jbWFwOworICAgIHN0cnVjdCBwcnRfcHNfY2hhcnNldF9TICoqcHBfbWJjaGFyOworeworICAgIGludCAgICAgbWJjaGFyOworICAgIGludCAgICAgY2hhcl9sZW47CisgICAgc3RydWN0IHBydF9wc19jaGFyc2V0X1MgKnBfbWJjaGFyOworCisgICAgLyogTG9vayBmb3IgcmVjb2duaXNlZCBjaGFyYWN0ZXIgc2V0LCB1c2luZyBkZWZhdWx0IGlmIG9uZSBpcyBub3QgZ2l2ZW4gKi8KKyAgICBpZiAoKnBfY2hhcnNldCA9PSBOVUwpCisgICAgICAgIHBfY2hhcnNldCA9IHBfY21hcC0+ZGVmY3M7CisgICAgY2hhcl9sZW4gPSBTVFJMRU4ocF9jaGFyc2V0KTsKKyAgICBwX21iY2hhciA9IHBfY21hcC0+Y2hhcnNldHM7CisgICAgZm9yIChtYmNoYXIgPSAwOyBtYmNoYXIgPCBwX2NtYXAtPm51bV9jaGFyc2V0czsgbWJjaGFyKyspCisgICAgeworICAgICAgICBpZiAoU1RSTklDTVAocF9tYmNoYXItPmNoYXJzZXQsIHBfY2hhcnNldCwgY2hhcl9sZW4pID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgICpwcF9tYmNoYXIgPSBwX21iY2hhcjsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIHBfbWJjaGFyKys7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKyNlbmRpZgorCiAvKkFSR1NVU0VEKi8KICAgICBpbnQKIG1jaF9wcmludF9pbml0KHBzZXR0aW5ncywgam9ibmFtZSwgZm9yY2VpdCkKQEAgLTQ2MzgsNiArNTIxNCwxNCBAQAogICAgIGRvdWJsZSAgICAgIHJpZ2h0OwogICAgIGRvdWJsZSAgICAgIHRvcDsKICAgICBkb3VibGUgICAgICBib3R0b207CisjaWZkZWYgRkVBVF9NQllURQorICAgIGludCAgICAgICAgIGNtYXA7CisgICAgaW50ICAgICAgICAgcG1jc19sZW47CisgICAgY2hhcl91CSpwX2VuY29kaW5nOworICAgIHN0cnVjdCBwcnRfcHNfZW5jb2RpbmdfUyAqcF9tYmVuYzsKKyAgICBzdHJ1Y3QgcHJ0X3BzX2VuY29kaW5nX1MgKnBfbWJlbmNfZmlyc3Q7CisgICAgc3RydWN0IHBydF9wc19jaGFyc2V0X1MgKnBfbWJjaGFyOworI2VuZGlmCiAKICNpZiAwCiAgICAgLyoKQEAgLTQ2NTgsNiArNTI0MiwxMzEgQEAKICNlbmRpZgogCiAgICAgLyoKKyAgICAgKiBTZXQgdXAgZm9udCBhbmQgZW5jb2RpbmcuCisgICAgICovCisjaWZkZWYgRkVBVF9NQllURQorICAgIHBfZW5jb2RpbmcgPSBlbmNfc2tpcChwX3BlbmMpOworICAgIGlmICgqcF9lbmNvZGluZyA9PSBOVUwpCisgICAgICAgIHBfZW5jb2RpbmcgPSBlbmNfc2tpcChwX2VuYyk7CisKKyAgICAvKiBMb29rIGZvciByZWNvZ25pc2VkIG11bHRpLWJ5dGUgY29kaW5nLCBhbmQgaWYgdGhlIGNoYXJzZXQgaXMgcmVjb2duaXNlZC4KKyAgICAgKiBUaGlzIGlzIHRvIGNvcGUgd2l0aCB0aGUgZmFjdCB0aGF0IHZhcmlvdXMgdW5pY29kZSBlbmNvZGluZ3MgYXJlCisgICAgICogc3VwcG9ydGVkIGluIG1vcmUgdGhhbiBvbmUgb2YgQ0pLLiAqLworICAgIHBfbWJlbmMgPSBOVUxMOworICAgIHBfbWJlbmNfZmlyc3QgPSBOVUxMOworICAgIHBfbWJjaGFyID0gTlVMTDsKKyAgICBmb3IgKGNtYXAgPSAwOyBjbWFwIDwgTlVNX0VMRU1FTlRTKHBydF9wc19tYmZvbnRzKTsgY21hcCsrKQorICAgICAgICBpZiAocHJ0X21hdGNoX2VuY29kaW5nKHBfZW5jb2RpbmcsICZwcnRfcHNfbWJmb250c1tjbWFwXSwgJnBfbWJlbmMpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocF9tYmVuY19maXJzdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBfbWJlbmNfZmlyc3QgPSBwX21iZW5jOworICAgICAgICAgICAgaWYgKHBydF9tYXRjaF9jaGFyc2V0KHBfcG1jcywgJnBydF9wc19tYmZvbnRzW2NtYXBdLCAmcF9tYmNoYXIpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAvKiBVc2UgZmlyc3QgZW5jb2RpbmcgbWF0Y2hlZCBpZiBubyBjaGFyc2V0IG1hdGNoZWQgKi8KKyAgICBpZiAocF9tYmNoYXIgPT0gTlVMTCAmJiBwX21iZW5jX2ZpcnN0ICE9IE5VTEwpCisgICAgICAgIHBfbWJlbmMgPSBwX21iZW5jX2ZpcnN0OworCisgICAgcHJ0X291dF9tYnl0ZSA9IChwX21iZW5jICE9IE5VTEwpOworICAgIGlmIChwcnRfb3V0X21ieXRlKQorICAgIHsKKyAgICAgICAgLyogQnVpbGQgQ01hcCBuYW1lIC0gd2lsbCBiZSBzYW1lIGZvciBhbGwgbXVsdGktYnl0ZSBmb250cyB1c2VkICovCisgICAgICAgIHBydF9jbWFwWzBdID0gJ1wwJzsKKworICAgICAgICBwcnRfY3VzdG9tX2NtYXAgPSBwcnRfb3V0X21ieXRlICYmIHBfbWJjaGFyID09IE5VTEw7CisKKyAgICAgICAgaWYgKCFwcnRfY3VzdG9tX2NtYXApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENoZWNrIGVuY29kaW5nIGFuZCBjaGFyYWN0ZXIgc2V0IGFyZSBjb21wYXRpYmxlICovCisgICAgICAgICAgICBpZiAoKHBfbWJlbmMtPm5lZWRzX2NoYXJzZXQmcF9tYmNoYXItPmhhc19jaGFyc2V0KSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVNU0coXygiRTY3MzogSW5jb21wYXRpYmxlIG11bHRpLWJ5dGUgZW5jb2RpbmcgYW5kIGNoYXJhY3RlciBzZXQuIikpOworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogQWRkIGNoYXJzZXQgbmFtZSBpZiBub3QgZW1wdHkgKi8KKyAgICAgICAgICAgIGlmIChwX21iY2hhci0+Y21hcF9jaGFyc2V0ICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU1RSQ0FUKHBydF9jbWFwLCBwX21iY2hhci0+Y21hcF9jaGFyc2V0KTsKKyAgICAgICAgICAgICAgICBTVFJDQVQocHJ0X2NtYXAsICItIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBBZGQgY3VzdG9tIENNYXAgY2hhcmFjdGVyIHNldCBuYW1lICovCisgICAgICAgICAgICBwbWNzX2xlbiA9IFNUUkxFTihwX3BtY3MpOworICAgICAgICAgICAgaWYgKHBtY3NfbGVuID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRU1TRyhfKCJFNjc0OiBwcmludG1iY2hhcnNldCBjYW5ub3QgYmUgZW1wdHkgd2l0aCBtdWx0aS1ieXRlIGVuY29kaW5nLiIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTVFJOQ1BZKHBydF9jbWFwLCBwX3BtY3MsIFNUUkxFTihwX3BtY3MpKTsKKyAgICAgICAgICAgIHBydF9jbWFwW3BtY3NfbGVuXSA9ICdcMCc7CisgICAgICAgICAgICBTVFJDQVQocHJ0X2NtYXAsICItIik7CisgICAgICAgIH0KKworICAgICAgICAvKiBDTWFwIG5hbWUgZW5kcyB3aXRoIChvcHRpb25hbCkgZW5jb2RpbmcgbmFtZSBhbmQgLUggZm9yIGhvcml6b250YWwgKi8KKyAgICAgICAgaWYgKHBfbWJlbmMtPmNtYXBfZW5jb2RpbmcgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgU1RSQ0FUKHBydF9jbWFwLCBwX21iZW5jLT5jbWFwX2VuY29kaW5nKTsKKyAgICAgICAgICAgIFNUUkNBVChwcnRfY21hcCwgIi0iKTsKKyAgICAgICAgfQorICAgICAgICBTVFJDQVQocHJ0X2NtYXAsICJIIik7CisKKyAgICAgICAgaWYgKCFtYmZvbnRfb3B0c1tPUFRfTUJGT05UX1JFR1VMQVJdLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVNU0coXygiRTY3NTogTm8gZGVmYXVsdCBmb250IHNwZWNmaWZlZCBmb3IgbXVsdGktYnl0ZSBwcmludGluZy4iKSk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICAvKiBEZXJpdmUgQ0lEIGZvbnQgbmFtZXMgd2l0aCBmYWxsYmFja3MgaWYgbm90IGRlZmluZWQgKi8KKyAgICAgICAgaWYgKCFwcnRfYnVpbGRfY2lkX2ZvbnRuYW1lKFBSVF9QU19GT05UX1JPTUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJmb250X29wdHNbT1BUX01CRk9OVF9SRUdVTEFSXS5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmZvbnRfb3B0c1tPUFRfTUJGT05UX1JFR1VMQVJdLnN0cmxlbikpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIGlmIChtYmZvbnRfb3B0c1tPUFRfTUJGT05UX0JPTERdLnByZXNlbnQpCisgICAgICAgICAgICBpZiAoIXBydF9idWlsZF9jaWRfZm9udG5hbWUoUFJUX1BTX0ZPTlRfQk9MRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmZvbnRfb3B0c1tPUFRfTUJGT05UX0JPTERdLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmZvbnRfb3B0c1tPUFRfTUJGT05UX0JPTERdLnN0cmxlbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICBpZiAobWJmb250X29wdHNbT1BUX01CRk9OVF9PQkxJUVVFXS5wcmVzZW50KQorICAgICAgICAgICAgaWYgKCFwcnRfYnVpbGRfY2lkX2ZvbnRuYW1lKFBSVF9QU19GT05UX09CTElRVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJmb250X29wdHNbT1BUX01CRk9OVF9PQkxJUVVFXS5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJmb250X29wdHNbT1BUX01CRk9OVF9PQkxJUVVFXS5zdHJsZW4pKQorICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgaWYgKG1iZm9udF9vcHRzW09QVF9NQkZPTlRfQk9MRE9CTElRVUVdLnByZXNlbnQpCisgICAgICAgICAgICBpZiAoIXBydF9idWlsZF9jaWRfZm9udG5hbWUoUFJUX1BTX0ZPTlRfQk9MRE9CTElRVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJmb250X29wdHNbT1BUX01CRk9OVF9CT0xET0JMSVFVRV0uc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZm9udF9vcHRzW09QVF9NQkZPTlRfQk9MRE9CTElRVUVdLnN0cmxlbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgICAgIC8qIENoZWNrIGlmIG5lZWQgdG8gdXNlIENvdXJpZXIgZm9yIEFTQ0lJIGNvZGUgcmFuZ2UsIGFuZCBpZiBzbyBwaWNrIHVwCisgICAgICAgICAqIHRoZSBlbmNvZGluZyB0byB1c2UgKi8KKyAgICAgICAgcHJ0X3VzZV9jb3VyaWVyID0gbWJmb250X29wdHNbT1BUX01CRk9OVF9VU0VDT1VSSUVSXS5wcmVzZW50ICYmCisgICAgICAgICAgICAoVE9MT1dFUl9BU0MobWJmb250X29wdHNbT1BUX01CRk9OVF9VU0VDT1VSSUVSXS5zdHJpbmdbMF0pID09ICd5Jyk7CisgICAgICAgIGlmIChwcnRfdXNlX2NvdXJpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFVzZSBuYXRpb25hbCBBU0NJSSB2YXJpYW50IHVubGVzcyBBU0NJSSB3YW50ZWQgKi8KKyAgICAgICAgICAgIGlmIChtYmZvbnRfb3B0c1tPUFRfTUJGT05UX0FTQ0lJXS5wcmVzZW50ICYmCisgICAgICAgICAgICAgICAgKFRPTE9XRVJfQVNDKG1iZm9udF9vcHRzW09QVF9NQkZPTlRfQVNDSUldLnN0cmluZ1swXSkgPT0gJ3knKSkKKyAgICAgICAgICAgICAgICBwcnRfYXNjaWlfZW5jb2RpbmcgPSAiYXNjaWkiOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBydF9hc2NpaV9lbmNvZGluZyA9IHBydF9wc19tYmZvbnRzW2NtYXBdLmFzY2lpX2VuYzsKKyAgICAgICAgfQorCisgICAgICAgIHBydF9wc19mb250ID0gJnBydF9wc19tYl9mb250OworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisjaWZkZWYgRkVBVF9NQllURQorICAgICAgICBwcnRfdXNlX2NvdXJpZXIgPSBGQUxTRTsKKyNlbmRpZgorICAgICAgICBwcnRfcHNfZm9udCA9ICZwcnRfcHNfY291cmllcl9mb250OworICAgIH0KKworICAgIC8qCiAgICAgICogRmluZCB0aGUgc2l6ZSBvZiB0aGUgcGFwZXIgYW5kIHNldCB0aGUgbWFyZ2lucy4KICAgICAgKi8KICAgICBwcnRfcG9ydHJhaXQgPSAoIXByaW50ZXJfb3B0c1tPUFRfUFJJTlRfUE9SVFJBSVRdLnByZXNlbnQKQEAgLTQ4MDUsNyArNTUxNCwxMiBAQAogCXJldHVybiBGQUlMOwogICAgIH0KIAotICAgIGdhX2luaXQyKCZwcnRfcHNfYnVmZmVyLCAoaW50KXNpemVvZihjaGFyKSwgUFJUX1BTX0RFRkFVTFRfQlVGRkVSX1NJWkUpOworICAgIHBydF9idWZzaXogPSBwc2V0dGluZ3MtPmNoYXJzX3Blcl9saW5lOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAocHJ0X291dF9tYnl0ZSkKKyAgICAgICAgcHJ0X2J1ZnNpeiAqPSAyOworI2VuZGlmCisgICAgZ2FfaW5pdDIoJnBydF9wc19idWZmZXIsIChpbnQpc2l6ZW9mKGNoYXIpLCBwcnRfYnVmc2l6KTsKIAogICAgIHBydF9wYWdlX251bSA9IDA7CiAKQEAgLTQ4MjcsNyArNTU0MSw2IEBACiB7CiAgICAgRklMRSoJZmRfcmVzb3VyY2U7CiAgICAgY2hhcl91CXJlc291cmNlX2J1ZmZlcls1MTJdOwotICAgIGNoYXIJKnJlc291cmNlX25hbWVbMV07CiAgICAgc2l6ZV90CWJ5dGVzX3JlYWQ7CiAKICAgICBmZF9yZXNvdXJjZSA9IG1jaF9mb3BlbigoY2hhciAqKXJlc291cmNlLT5maWxlbmFtZSwgUkVBREJJTik7CkBAIC00ODM2LDkgKzU1NDksOCBAQAogCUVNU0cyKF8oIkU0NTY6IENhbid0IG9wZW4gZmlsZSBcIiVzXCIiKSwgcmVzb3VyY2UtPmZpbGVuYW1lKTsKIAlyZXR1cm4gRkFMU0U7CiAgICAgfQotICAgIHJlc291cmNlX25hbWVbMF0gPSAoY2hhciAqKXJlc291cmNlLT50aXRsZTsKICAgICBwcnRfZHNjX3Jlc291cmNlcygiQmVnaW5SZXNvdXJjZSIsCi0JCQkgICAgcmVzb3VyY2VfdHlwZXNbcmVzb3VyY2UtPnR5cGVdLCAxLCByZXNvdXJjZV9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBydF9yZXNvdXJjZV90eXBlc1tyZXNvdXJjZS0+dHlwZV0sIHJlc291cmNlLT50aXRsZSk7CiAKICAgICBwcnRfZHNjX3RleHRsaW5lKCJCZWdpbkRvY3VtZW50IiwgKGNoYXIgKilyZXNvdXJjZS0+ZmlsZW5hbWUpOwogCkBAIC00ODc4LDcgKzU1OTAsNiBAQAogICAgIHRpbWVfdAlub3c7CiAgICAgaW50CQliYm94WzRdOwogICAgIGNoYXIJKnBfdGltZTsKLSAgICBjaGFyCSpyZXNvdXJjZVsxXTsKICAgICBkb3VibGUgICAgICBsZWZ0OwogICAgIGRvdWJsZSAgICAgIHJpZ2h0OwogICAgIGRvdWJsZSAgICAgIHRvcDsKQEAgLTQ4ODgsNyArNTU5OSw4IEBACiAgICAgY2hhcl91ICAgICAgYnVmZmVyWzI1Nl07CiAgICAgY2hhcl91ICAgICAgKnBfZW5jb2Rpbmc7CiAjaWZkZWYgRkVBVF9NQllURQotICAgIGludAkJcHJvcHM7CisgICAgc3RydWN0IHBydF9wc19yZXNvdXJjZV9TIHJlc19jaWRmb250OworICAgIHN0cnVjdCBwcnRfcHNfcmVzb3VyY2VfUyByZXNfY21hcDsKICNlbmRpZgogCiAgICAgLyoKQEAgLTQ4OTYsOCArNTYwOCw5IEBACiAgICAgICovCiAgICAgcHJ0X2RzY19zdGFydCgpOwogICAgIHBydF9kc2NfdGV4dGxpbmUoIlRpdGxlIiwgKGNoYXIgKilwc2V0dGluZ3MtPmpvYm5hbWUpOwotICAgIC8qIFRPRE8gLSBwbGF0Zm9ybSBkZXBlbmRlbnQgdXNlciBuYW1lIHJldHJpZXZhbCAqLwotICAgIHBydF9kc2NfdGV4dGxpbmUoIkZvciIsICJVbmtub3duIik7CisgICAgaWYgKCFnZXRfdXNlcl9uYW1lKGJ1ZmZlciwgMjU2KSkKKyAgICAgICAgU1RSQ1BZKGJ1ZmZlciwgIlVua25vd24iKTsKKyAgICBwcnRfZHNjX3RleHRsaW5lKCJGb3IiLCBidWZmZXIpOwogICAgIHBydF9kc2NfdGV4dGxpbmUoIkNyZWF0b3IiLCBWSU1fVkVSU0lPTl9MT05HKTsKICAgICAvKiBOb3RlOiB0byBlbnN1cmUgQ2xlYW44Yml0IEkgZG9uJ3QgdGhpbmsgd2UgY2FuIHVzZSBMQ19USU1FICovCiAgICAgbm93ID0gdGltZShOVUxMKTsKQEAgLTQ5NDYsMTAgKzU2NTksMjIgQEAKIAkJCQlwcnRfbWVkaWFzaXplW3BydF9tZWRpYV0ud2lkdGgsCiAJCQkJcHJ0X21lZGlhc2l6ZVtwcnRfbWVkaWFdLmhlaWdodCwKIAkJCQkoZG91YmxlKTAsIE5VTEwsIE5VTEwpOwotICAgIHBydF9kc2NfcmVzb3VyY2VzKCJEb2N1bWVudE5lZWRlZFJlc291cmNlcyIsICJmb250IiwgNCwKLQkJCQkJCSAgICAgcHJ0X3BzX2ZvbnQucHNfZm9udG5hbWUpOworICAgIC8qIERlZmluZSBmb250cyBuZWVkZWQgKi8KKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKCFwcnRfb3V0X21ieXRlIHx8IHBydF91c2VfY291cmllcikKKyNlbmRpZgorICAgICAgICBwcnRfZHNjX2ZvbnRfcmVzb3VyY2UoIkRvY3VtZW50TmVlZGVkUmVzb3VyY2VzIiwgJnBydF9wc19jb3VyaWVyX2ZvbnQpOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAocHJ0X291dF9tYnl0ZSkKKyAgICB7CisgICAgICAgIHBydF9kc2NfZm9udF9yZXNvdXJjZSgocHJ0X3VzZV9jb3VyaWVyID8gTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiRG9jdW1lbnROZWVkZWRSZXNvdXJjZXMiKSwgJnBydF9wc19tYl9mb250KTsKKyAgICAgICAgaWYgKCFwcnRfY3VzdG9tX2NtYXApCisgICAgICAgICAgICBwcnRfZHNjX3Jlc291cmNlcyhOVUxMLCAiY21hcCIsIHBydF9jbWFwKTsKKyAgICB9CisjZW5kaWYKIAotICAgIC8qIFNlYXJjaCBmb3IgZXh0ZXJuYWwgcmVzb3VyY2VzIHdlIHN1cHBseSAqLworICAgIC8qIFNlYXJjaCBmb3IgZXh0ZXJuYWwgcmVzb3VyY2VzIFZJTSBzdXBwbGllcyAqLwogICAgIGlmICghcHJ0X2ZpbmRfcmVzb3VyY2UoInByb2xvZyIsICZyZXNfcHJvbG9nKSkKICAgICB7CiAJRU1TRyhfKCJFNDU2OiBDYW4ndCBmaW5kIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcInByb2xvZy5wc1wiIikpOwpAQCAtNDk1OSw2NiArNTY4NCwxMzkgQEAKIAlyZXR1cm4gRkFMU0U7CiAgICAgaWYgKCFwcnRfY2hlY2tfcmVzb3VyY2UoJnJlc19wcm9sb2csIFBSVF9QUk9MT0dfVkVSU0lPTikpCiAJcmV0dXJuIEZBTFNFOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAocHJ0X291dF9tYnl0ZSkKKyAgICB7CisgICAgICAgIC8qIExvb2sgZm9yIHJlcXVpcmVkIHZlcnNpb24gb2YgbXVsdGktYnl0ZSBwcmludGluZyBwcm9jc2V0ICovCisgICAgICAgIGlmICghcHJ0X2ZpbmRfcmVzb3VyY2UoImNpZGZvbnQiLCAmcmVzX2NpZGZvbnQpKQorICAgICAgICB7CisgICAgICAgICAgICBFTVNHKF8oIkU0NTY6IENhbid0IGZpbmQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwiY2lkZm9udC5wc1wiIikpOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmICghcHJ0X29wZW5fcmVzb3VyY2UoJnJlc19jaWRmb250KSkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgaWYgKCFwcnRfY2hlY2tfcmVzb3VyY2UoJnJlc19jaWRmb250LCBQUlRfQ0lEX1BST0xPR19WRVJTSU9OKSkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisjZW5kaWYKKwogICAgIC8qIEZpbmQgYW4gZW5jb2RpbmcgdG8gdXNlIGZvciBwcmludGluZy4KICAgICAgKiBDaGVjayAncHJpbnRlbmNvZGluZycuIElmIG5vdCBzZXQgb3Igbm90IGZvdW5kLCB0aGVuIHVzZSAnZW5jb2RpbmcnLiBJZgogICAgICAqIHRoYXQgY2Fubm90IGJlIGZvdW5kIHRoZW4gZGVmYXVsdCB0byAibGF0aW4xIi4KICAgICAgKiBOb3RlOiBWSU0gc3BlY2lmaWMgZW5jb2RpbmcgaGVhZGVyIGlzIGFsd2F5cyBza2lwcGVkLgogICAgICAqLwogI2lmZGVmIEZFQVRfTUJZVEUKLSAgICBwcm9wcyA9IGVuY19jYW5vbl9wcm9wcyhwX2VuYyk7Ci0jZW5kaWYKLSAgICBwX2VuY29kaW5nID0gZW5jX3NraXAocF9wZW5jKTsKLSAgICBpZiAoKnBfZW5jb2RpbmcgPT0gTlVMCi0JICAgIHx8ICFwcnRfZmluZF9yZXNvdXJjZSgoY2hhciAqKXBfZW5jb2RpbmcsICZyZXNfZW5jb2RpbmcpKQorICAgIGlmICghcHJ0X291dF9tYnl0ZSkKICAgICB7Ci0JLyogJ3ByaW50ZW5jb2RpbmcnIG5vdCBzZXQgb3Igbm90IHN1cHBvcnRlZCAtIGZpbmQgYWx0ZXJuYXRlICovCi0jaWZkZWYgRkVBVF9NQllURQotCXBfZW5jb2RpbmcgPSBlbmNfc2tpcChwX2VuYyk7Ci0JaWYgKCEocHJvcHMgJiBFTkNfOEJJVCkKLQkJfHwgIXBydF9maW5kX3Jlc291cmNlKChjaGFyICopcF9lbmNvZGluZywgJnJlc19lbmNvZGluZykpCi0JewotCSAgICAvKiA4LWJpdCAnZW5jb2RpbmcnIGlzIG5vdCBzdXBwb3J0ZWQgKi8KICNlbmRpZgotCSAgICAvKiBVc2UgbGF0aW4xIGFzIGRlZmF1bHQgcHJpbnRpbmcgZW5jb2RpbmcgKi8KLQkgICAgcF9lbmNvZGluZyA9IChjaGFyX3UgKikibGF0aW4xIjsKLQkgICAgaWYgKCFwcnRfZmluZF9yZXNvdXJjZSgoY2hhciAqKXBfZW5jb2RpbmcsICZyZXNfZW5jb2RpbmcpKQotCSAgICB7Ci0JCUVNU0cyKF8oIkU0NTY6IENhbid0IGZpbmQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwiJXMucHNcIiIpLAotCQkJcF9lbmNvZGluZyk7Ci0JCXJldHVybiBGQUxTRTsKLQkgICAgfQorICAgICAgICBwX2VuY29kaW5nID0gZW5jX3NraXAocF9wZW5jKTsKKyAgICAgICAgaWYgKCpwX2VuY29kaW5nID09IE5VTAorICAgICAgICAgICAgICAgIHx8ICFwcnRfZmluZF9yZXNvdXJjZSgoY2hhciAqKXBfZW5jb2RpbmcsICZyZXNfZW5jb2RpbmcpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiAncHJpbnRlbmNvZGluZycgbm90IHNldCBvciBub3Qgc3VwcG9ydGVkIC0gZmluZCBhbHRlcm5hdGUgKi8KICNpZmRlZiBGRUFUX01CWVRFCi0JfQorICAgICAgICAgICAgaW50CQlwcm9wczsKKworICAgICAgICAgICAgcF9lbmNvZGluZyA9IGVuY19za2lwKHBfZW5jKTsKKyAgICAgICAgICAgIHByb3BzID0gZW5jX2Nhbm9uX3Byb3BzKHBfZW5jb2RpbmcpOworICAgICAgICAgICAgaWYgKCEocHJvcHMgJiBFTkNfOEJJVCkKKyAgICAgICAgICAgICAgICAgICAgfHwgIXBydF9maW5kX3Jlc291cmNlKChjaGFyICopcF9lbmNvZGluZywgJnJlc19lbmNvZGluZykpCisgICAgICAgICAgICAgICAgLyogOC1iaXQgJ2VuY29kaW5nJyBpcyBub3Qgc3VwcG9ydGVkICovCiAjZW5kaWYKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogVXNlIGxhdGluMSBhcyBkZWZhdWx0IHByaW50aW5nIGVuY29kaW5nICovCisgICAgICAgICAgICAgICAgcF9lbmNvZGluZyA9IChjaGFyX3UgKikibGF0aW4xIjsKKyAgICAgICAgICAgICAgICBpZiAoIXBydF9maW5kX3Jlc291cmNlKChjaGFyICopcF9lbmNvZGluZywgJnJlc19lbmNvZGluZykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBFTVNHMihfKCJFNDU2OiBDYW4ndCBmaW5kIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzLnBzXCIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX2VuY29kaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXBydF9vcGVuX3Jlc291cmNlKCZyZXNfZW5jb2RpbmcpKQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAvKiBGb3IgdGhlIG1vbWVudCB0aGVyZSBhcmUgbm8gY2hlY2tzIG9uIGVuY29kaW5nIHJlc291cmNlIGZpbGVzIHRvCisgICAgICAgICAqIHBlcmZvcm0gKi8KKyNpZmRlZiBGRUFUX01CWVRFCiAgICAgfQotICAgIGlmICghcHJ0X29wZW5fcmVzb3VyY2UoJnJlc19lbmNvZGluZykpCi0JcmV0dXJuIEZBTFNFOwotICAgIC8qIEZvciB0aGUgbW9tZW50IHRoZXJlIGFyZSBubyBjaGVja3Mgb24gZW5jb2RpbmcgcmVzb3VyY2UgZmlsZXMgdG8gcGVyZm9ybSAqLwotI2lmZGVmIEZFQVRfTUJZVEUKLSAgICAvKiBTZXQgdXAgZW5jb2RpbmcgY29udmVyc2lvbiBpZiBzdGFydGluZyBmcm9tIG11bHRpLWJ5dGUgKi8KLSAgICBwcm9wcyA9IGVuY19jYW5vbl9wcm9wcyhwX2VuYyk7Ci0gICAgaWYgKCEocHJvcHMgJiBFTkNfOEJJVCkpCisgICAgZWxzZQogICAgIHsKKyAgICAgICAgcF9lbmNvZGluZyA9IGVuY19za2lwKHBfcGVuYyk7CisgICAgICAgIGlmICgqcF9lbmNvZGluZyA9PSBOVUwpCisgICAgICAgICAgICBwX2VuY29kaW5nID0gZW5jX3NraXAocF9lbmMpOworICAgICAgICBpZiAocHJ0X3VzZV9jb3VyaWVyKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBJbmNsdWRlIEFTQ0lJIHJhbmdlIGVuY29kaW5nIHZlY3RvciAqLworICAgICAgICAgICAgaWYgKCFwcnRfZmluZF9yZXNvdXJjZShwcnRfYXNjaWlfZW5jb2RpbmcsICZyZXNfZW5jb2RpbmcpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVNU0cyKF8oIkU0NTY6IENhbid0IGZpbmQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwiJXMucHNcIiIpLAorICAgICAgICAgICAgICAgICAgICAgIHBydF9hc2NpaV9lbmNvZGluZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFwcnRfb3Blbl9yZXNvdXJjZSgmcmVzX2VuY29kaW5nKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAvKiBGb3IgdGhlIG1vbWVudCB0aGVyZSBhcmUgbm8gY2hlY2tzIG9uIGVuY29kaW5nIHJlc291cmNlIGZpbGVzIHRvCisgICAgICAgICAgICAgKiBwZXJmb3JtICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcnRfY29udi52Y190eXBlID0gQ09OVl9OT05FOworICAgIGlmICghKGVuY19jYW5vbl9wcm9wcyhwX2VuYykgJiBlbmNfY2Fub25fcHJvcHMocF9lbmNvZGluZykgJiBFTkNfOEJJVCkpIHsKKyAgICAgICAgLyogU2V0IHVwIGVuY29kaW5nIGNvbnZlcnNpb24gaWYgcmVxdWlyZWQgKi8KIAlpZiAoRkFJTCA9PSBjb252ZXJ0X3NldHVwKCZwcnRfY29udiwgcF9lbmMsIHBfZW5jb2RpbmcpKQogCXsKLQkgICAgRU1TRzIoXygiRTYyMDogVW5hYmxlIHRvIGNvbnZlcnQgZnJvbSBtdWx0aS1ieXRlIHRvIFwiJXNcIiBlbmNvZGluZyIpLAorICAgICAgICAgICAgRU1TRzIoXygiRTYyMDogVW5hYmxlIHRvIGNvbnZlcnQgdG8gcHJpbnQgZW5jb2RpbmcgXCIlc1wiIiksCiAJCSAgICBwX2VuY29kaW5nKTsKIAkgICAgcmV0dXJuIEZBTFNFOwogCX0KIAlwcnRfZG9fY29udiA9IFRSVUU7CiAgICAgfQorICAgIHBydF9kb19jb252ID0gcHJ0X2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkU7CisKKyAgICBpZiAocHJ0X291dF9tYnl0ZSAmJiBwcnRfY3VzdG9tX2NtYXApCisgICAgeworICAgICAgICAvKiBGaW5kIHVzZXIgc3VwcGxpZWQgQ01hcCAqLworICAgICAgICBpZiAoIXBydF9maW5kX3Jlc291cmNlKHBydF9jbWFwLCAmcmVzX2NtYXApKQorICAgICAgICB7CisgICAgICAgICAgICBFTVNHMihfKCJFNDU2OiBDYW4ndCBmaW5kIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzLnBzXCIiKSwKKyAgICAgICAgICAgICAgICAgIHBydF9jbWFwKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXBydF9vcGVuX3Jlc291cmNlKCZyZXNfY21hcCkpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQogI2VuZGlmCiAKICAgICAvKiBMaXN0IHJlc291cmNlcyBzdXBwbGllZCAqLwotICAgIHJlc291cmNlWzBdID0gKGNoYXIgKilidWZmZXI7CiAgICAgU1RSQ1BZKGJ1ZmZlciwgcmVzX3Byb2xvZy50aXRsZSk7CiAgICAgU1RSQ0FUKGJ1ZmZlciwgIiAiKTsKICAgICBTVFJDQVQoYnVmZmVyLCByZXNfcHJvbG9nLnZlcnNpb24pOwotICAgIHBydF9kc2NfcmVzb3VyY2VzKCJEb2N1bWVudFN1cHBsaWVkUmVzb3VyY2VzIiwgInByb2NzZXQiLCAxLCByZXNvdXJjZSk7Ci0gICAgU1RSQ1BZKGJ1ZmZlciwgcmVzX2VuY29kaW5nLnRpdGxlKTsKLSAgICBTVFJDQVQoYnVmZmVyLCAiICIpOwotICAgIFNUUkNBVChidWZmZXIsIHJlc19lbmNvZGluZy52ZXJzaW9uKTsKLSAgICBwcnRfZHNjX3Jlc291cmNlcyhOVUxMLCAiZW5jb2RpbmciLCAxLCByZXNvdXJjZSk7CisgICAgcHJ0X2RzY19yZXNvdXJjZXMoIkRvY3VtZW50U3VwcGxpZWRSZXNvdXJjZXMiLCAicHJvY3NldCIsIGJ1ZmZlcik7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChwcnRfb3V0X21ieXRlKQorICAgIHsKKyAgICAgICAgU1RSQ1BZKGJ1ZmZlciwgcmVzX2NpZGZvbnQudGl0bGUpOworICAgICAgICBTVFJDQVQoYnVmZmVyLCAiICIpOworICAgICAgICBTVFJDQVQoYnVmZmVyLCByZXNfY2lkZm9udC52ZXJzaW9uKTsKKyAgICAgICAgcHJ0X2RzY19yZXNvdXJjZXMoTlVMTCwgInByb2NzZXQiLCBidWZmZXIpOworCisgICAgICAgIGlmIChwcnRfY3VzdG9tX2NtYXApCisgICAgICAgIHsKKyAgICAgICAgICAgIFNUUkNQWShidWZmZXIsIHJlc19jbWFwLnRpdGxlKTsKKyAgICAgICAgICAgIFNUUkNBVChidWZmZXIsICIgIik7CisgICAgICAgICAgICBTVFJDQVQoYnVmZmVyLCByZXNfY21hcC52ZXJzaW9uKTsKKyAgICAgICAgICAgIHBydF9kc2NfcmVzb3VyY2VzKE5VTEwsICJjbWFwIiwgYnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIXBydF9vdXRfbWJ5dGUgfHwgcHJ0X3VzZV9jb3VyaWVyKQorI2VuZGlmCisgICAgeworICAgICAgICBTVFJDUFkoYnVmZmVyLCByZXNfZW5jb2RpbmcudGl0bGUpOworICAgICAgICBTVFJDQVQoYnVmZmVyLCAiICIpOworICAgICAgICBTVFJDQVQoYnVmZmVyLCByZXNfZW5jb2RpbmcudmVyc2lvbik7CisgICAgICAgIHBydF9kc2NfcmVzb3VyY2VzKE5VTEwsICJlbmNvZGluZyIsIGJ1ZmZlcik7CisgICAgfQogICAgIHBydF9kc2NfcmVxdWlyZW1lbnRzKHBydF9kdXBsZXgsIHBydF90dW1ibGUsIHBydF9jb2xsYXRlLAogI2lmZGVmIEZFQVRfU1lOX0hMCiAJCQkJCXBzZXR0aW5ncy0+ZG9fc3ludGF4CkBAIC01MDM0LDcgKzU4MzIsMjAgQEAKICAgICBwcnRfZHNjX25vYXJnKCJCZWdpbkRlZmF1bHRzIik7CiAKICAgICAvKiBMaXN0IGZvbnQgcmVzb3VyY2VzIG1vc3QgbGlrZWx5IGNvbW1vbiB0byBhbGwgcGFnZXMgKi8KLSAgICBwcnRfZHNjX3Jlc291cmNlcygiUGFnZVJlc291cmNlcyIsICJmb250IiwgNCwgcHJ0X3BzX2ZvbnQucHNfZm9udG5hbWUpOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoIXBydF9vdXRfbWJ5dGUgfHwgcHJ0X3VzZV9jb3VyaWVyKQorI2VuZGlmCisgICAgICAgIHBydF9kc2NfZm9udF9yZXNvdXJjZSgiUGFnZVJlc291cmNlcyIsICZwcnRfcHNfY291cmllcl9mb250KTsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKHBydF9vdXRfbWJ5dGUpCisgICAgeworICAgICAgICBwcnRfZHNjX2ZvbnRfcmVzb3VyY2UoKHBydF91c2VfY291cmllciA/IE5VTEwgOiAiUGFnZVJlc291cmNlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBydF9wc19tYl9mb250KTsKKyAgICAgICAgaWYgKCFwcnRfY3VzdG9tX2NtYXApCisgICAgICAgICAgICBwcnRfZHNjX3Jlc291cmNlcyhOVUxMLCAiY21hcCIsIHBydF9jbWFwKTsKKyAgICB9CisjZW5kaWYKKwogICAgIC8qIFBhcGVyIHdpbGwgYmUgdXNlZCBmb3IgYWxsIHBhZ2VzICovCiAgICAgcHJ0X2RzY190ZXh0bGluZSgiUGFnZU1lZGlhIiwgcHJ0X21lZGlhc2l6ZVtwcnRfbWVkaWFdLm5hbWUpOwogCkBAIC01MDQ1LDEzICs1ODU2LDI3IEBACiAgICAgICovCiAgICAgcHJ0X2RzY19ub2FyZygiQmVnaW5Qcm9sb2ciKTsKIAotICAgIC8qIEZvciBub3cgdGhlcmUgaXMganVzdCB0aGUgb25lIHByb2NzZXQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIFBTIGZpbGUuICovCisgICAgLyogQWRkIHJlcXVpcmVkIHByb2NzZXRzIC0gTk9URTogb3JkZXIgaXMgaW1wb3J0YW50ISAqLwogICAgIGlmICghcHJ0X2FkZF9yZXNvdXJjZSgmcmVzX3Byb2xvZykpCiAJcmV0dXJuIEZBTFNFOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAocHJ0X291dF9tYnl0ZSkKKyAgICB7CisgICAgICAgIC8qIEFkZCBDSUQgZm9udCBwcm9jc2V0LCBhbmQgYW55IHVzZXIgc3VwcGxpZWQgQ01hcCAqLworICAgICAgICBpZiAoIXBydF9hZGRfcmVzb3VyY2UoJnJlc19jaWRmb250KSkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgaWYgKHBydF9jdXN0b21fY21hcCAmJiAhcHJ0X2FkZF9yZXNvdXJjZSgmcmVzX2NtYXApKQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyNlbmRpZgogCi0gICAgLyogVGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBmb250IGVuY29kaW5nIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBQUyBmaWxlLiAqLwotICAgIGlmICghcHJ0X2FkZF9yZXNvdXJjZSgmcmVzX2VuY29kaW5nKSkKLQlyZXR1cm4gRkFMU0U7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGlmICghcHJ0X291dF9tYnl0ZSB8fCBwcnRfdXNlX2NvdXJpZXIpCisjZW5kaWYKKyAgICAgICAgLyogVGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBSb21hbiBmb250IGVuY29kaW5nIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBQUworICAgICAgICAgKiBmaWxlLiAqLworICAgICAgICBpZiAoIXBydF9hZGRfcmVzb3VyY2UoJnJlc19lbmNvZGluZykpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAKICAgICBwcnRfZHNjX25vYXJnKCJFbmRQcm9sb2ciKTsKIApAQCAtNTA3NCwyOCArNTg5OSw5MyBAQAogICAgIHBydF93cml0ZV9zdHJpbmcoImNcbiIpOwogCiAgICAgLyogRm9udCByZXNvdXJjZSBpbmNsdXNpb24gYW5kIGRlZmluaXRpb24gKi8KLSAgICBwcnRfZHNjX3Jlc291cmNlcygiSW5jbHVkZVJlc291cmNlIiwgImZvbnQiLCAxLAotCQkJCSAmcHJ0X3BzX2ZvbnQucHNfZm9udG5hbWVbUFJUX1BTX0ZPTlRfUk9NQU5dKTsKLSAgICBwcnRfZGVmX2ZvbnQoIkYwIiwgKGNoYXIgKilwX2VuY29kaW5nLCAoaW50KXBydF9saW5lX2hlaWdodCwKLQkJCQkgIHBydF9wc19mb250LnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX1JPTUFOXSk7Ci0gICAgcHJ0X2RzY19yZXNvdXJjZXMoIkluY2x1ZGVSZXNvdXJjZSIsICJmb250IiwgMSwKLQkJCQkgICZwcnRfcHNfZm9udC5wc19mb250bmFtZVtQUlRfUFNfRk9OVF9CT0xEXSk7Ci0gICAgcHJ0X2RlZl9mb250KCJGMSIsIChjaGFyICopcF9lbmNvZGluZywgKGludClwcnRfbGluZV9oZWlnaHQsCi0JCQkJICAgcHJ0X3BzX2ZvbnQucHNfZm9udG5hbWVbUFJUX1BTX0ZPTlRfQk9MRF0pOwotICAgIHBydF9kc2NfcmVzb3VyY2VzKCJJbmNsdWRlUmVzb3VyY2UiLCAiZm9udCIsIDEsCi0JCQkgICAgICAgJnBydF9wc19mb250LnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX09CTElRVUVdKTsKLSAgICBwcnRfZGVmX2ZvbnQoIkYyIiwgKGNoYXIgKilwX2VuY29kaW5nLCAoaW50KXBydF9saW5lX2hlaWdodCwKLQkJCQlwcnRfcHNfZm9udC5wc19mb250bmFtZVtQUlRfUFNfRk9OVF9PQkxJUVVFXSk7Ci0gICAgcHJ0X2RzY19yZXNvdXJjZXMoIkluY2x1ZGVSZXNvdXJjZSIsICJmb250IiwgMSwKLQkJCSAgICZwcnRfcHNfZm9udC5wc19mb250bmFtZVtQUlRfUFNfRk9OVF9CT0xET0JMSVFVRV0pOwotICAgIHBydF9kZWZfZm9udCgiRjMiLCAoY2hhciAqKXBfZW5jb2RpbmcsIChpbnQpcHJ0X2xpbmVfaGVpZ2h0LAotCQkJICAgIHBydF9wc19mb250LnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX0JPTERPQkxJUVVFXSk7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGlmICghcHJ0X291dF9tYnl0ZSB8fCBwcnRfdXNlX2NvdXJpZXIpCisgICAgeworICAgICAgICAvKiBXaGVuIHVzaW5nIENvdXJpZXIgZm9yIEFTQ0lJIHJhbmdlIHdoZW4gcHJpbnRpbmcgbXVsdGktYnl0ZSwgbmVlZCB0bworICAgICAgICAgKiBwaWNrIHVwIEFTQ0lJIGVuY29kaW5nIHRvIHVzZSB3aXRoIGl0LiAqLworICAgICAgICBpZiAocHJ0X3VzZV9jb3VyaWVyKQorICAgICAgICAgICAgcF9lbmNvZGluZyA9IHBydF9hc2NpaV9lbmNvZGluZzsKKyNlbmRpZgorICAgICAgICBwcnRfZHNjX3Jlc291cmNlcygiSW5jbHVkZVJlc291cmNlIiwgImZvbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwcnRfcHNfY291cmllcl9mb250LnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX1JPTUFOXSk7CisgICAgICAgIHBydF9kZWZfZm9udCgiRjAiLCAoY2hhciAqKXBfZW5jb2RpbmcsIChpbnQpcHJ0X2xpbmVfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgcHJ0X3BzX2NvdXJpZXJfZm9udC5wc19mb250bmFtZVtQUlRfUFNfRk9OVF9ST01BTl0pOworICAgICAgICBwcnRfZHNjX3Jlc291cmNlcygiSW5jbHVkZVJlc291cmNlIiwgImZvbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwcnRfcHNfY291cmllcl9mb250LnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX0JPTERdKTsKKyAgICAgICAgcHJ0X2RlZl9mb250KCJGMSIsIChjaGFyICopcF9lbmNvZGluZywgKGludClwcnRfbGluZV9oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICBwcnRfcHNfY291cmllcl9mb250LnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX0JPTERdKTsKKyAgICAgICAgcHJ0X2RzY19yZXNvdXJjZXMoIkluY2x1ZGVSZXNvdXJjZSIsICJmb250IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ0X3BzX2NvdXJpZXJfZm9udC5wc19mb250bmFtZVtQUlRfUFNfRk9OVF9PQkxJUVVFXSk7CisgICAgICAgIHBydF9kZWZfZm9udCgiRjIiLCAoY2hhciAqKXBfZW5jb2RpbmcsIChpbnQpcHJ0X2xpbmVfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgcHJ0X3BzX2NvdXJpZXJfZm9udC5wc19mb250bmFtZVtQUlRfUFNfRk9OVF9PQkxJUVVFXSk7CisgICAgICAgIHBydF9kc2NfcmVzb3VyY2VzKCJJbmNsdWRlUmVzb3VyY2UiLCAiZm9udCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBydF9wc19jb3VyaWVyX2ZvbnQucHNfZm9udG5hbWVbUFJUX1BTX0ZPTlRfQk9MRE9CTElRVUVdKTsKKyAgICAgICAgcHJ0X2RlZl9mb250KCJGMyIsIChjaGFyICopcF9lbmNvZGluZywgKGludClwcnRfbGluZV9oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICBwcnRfcHNfY291cmllcl9mb250LnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX0JPTERPQkxJUVVFXSk7CisjaWZkZWYgRkVBVF9NQllURQorICAgIH0KKyAgICBpZiAocHJ0X291dF9tYnl0ZSkKKyAgICB7CisgICAgICAgIC8qIERlZmluZSB0aGUgQ0lEIGZvbnRzIHRvIGJlIHVzZWQgaW4gdGhlIGpvYi4gIFR5cGljYWxseSBDSktWIGZvbnRzIGRvCisgICAgICAgICAqIG5vdCBoYXZlIGFuIGl0YWxpYyBmb3JtIGJlaW5nIGEgd2VzdGVybiBzdHlsZSwgc28gd2hlcmUgbm8gZm9udCBpcworICAgICAgICAgKiBkZWZpbmVkIGZvciB0aGVzZSBmYWNlcyBWSU0gZmFsbHMgYmFjayB0byBhbiBleGlzdGluZyBmYWNlLgorICAgICAgICAgKiBOb3RlOiBpZiB1c2luZyBDb3VyaWVyIGZvciB0aGUgQVNDSUkgcmFuZ2UgdGhlbiB0aGUgcHJpbnRvdXQgd2lsbAorICAgICAgICAgKiBoYXZlIGJvbGQvaXRhbGljL2JvbGRpdGFsaWMgcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZyBvZiBwcmludG1iZm9udC4KKyAgICAgICAgICovCisgICAgICAgIHBydF9kc2NfcmVzb3VyY2VzKCJJbmNsdWRlUmVzb3VyY2UiLCAiZm9udCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBydF9wc19tYl9mb250LnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX1JPTUFOXSk7CisgICAgICAgIGlmICghcHJ0X2N1c3RvbV9jbWFwKQorICAgICAgICAgICAgcHJ0X2RzY19yZXNvdXJjZXMoIkluY2x1ZGVSZXNvdXJjZSIsICJjbWFwIiwgcHJ0X2NtYXApOworICAgICAgICBwcnRfZGVmX2NpZGZvbnQoIkNGMCIsIChpbnQpcHJ0X2xpbmVfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgcHJ0X3BzX21iX2ZvbnQucHNfZm9udG5hbWVbUFJUX1BTX0ZPTlRfUk9NQU5dKTsKKworICAgICAgICBpZiAocHJ0X3BzX21iX2ZvbnQucHNfZm9udG5hbWVbUFJUX1BTX0ZPTlRfQk9MRF0gIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcHJ0X2RzY19yZXNvdXJjZXMoIkluY2x1ZGVSZXNvdXJjZSIsICJmb250IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydF9wc19tYl9mb250LnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX0JPTERdKTsKKyAgICAgICAgICAgIGlmICghcHJ0X2N1c3RvbV9jbWFwKQorICAgICAgICAgICAgICAgIHBydF9kc2NfcmVzb3VyY2VzKCJJbmNsdWRlUmVzb3VyY2UiLCAiY21hcCIsIHBydF9jbWFwKTsKKyAgICAgICAgICAgIHBydF9kZWZfY2lkZm9udCgiQ0YxIiwgKGludClwcnRfbGluZV9oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ0X3BzX21iX2ZvbnQucHNfZm9udG5hbWVbUFJUX1BTX0ZPTlRfQk9MRF0pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8qIFVzZSBST01BTiBmb3IgQk9MRCAqLworICAgICAgICAgICAgcHJ0X2R1cF9jaWRmb250KCJDRjAiLCAiQ0YxIik7CisKKyAgICAgICAgaWYgKHBydF9wc19tYl9mb250LnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX09CTElRVUVdICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBydF9kc2NfcmVzb3VyY2VzKCJJbmNsdWRlUmVzb3VyY2UiLCAiZm9udCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnRfcHNfbWJfZm9udC5wc19mb250bmFtZVtQUlRfUFNfRk9OVF9PQkxJUVVFXSk7CisgICAgICAgICAgICBpZiAoIXBydF9jdXN0b21fY21hcCkKKyAgICAgICAgICAgICAgICBwcnRfZHNjX3Jlc291cmNlcygiSW5jbHVkZVJlc291cmNlIiwgImNtYXAiLCBwcnRfY21hcCk7CisgICAgICAgICAgICBwcnRfZGVmX2NpZGZvbnQoIkNGMiIsIChpbnQpcHJ0X2xpbmVfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydF9wc19tYl9mb250LnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX09CTElRVUVdKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICAvKiBVc2UgUk9NQU4gZm9yIE9CTElRVUUgKi8KKyAgICAgICAgICAgIHBydF9kdXBfY2lkZm9udCgiQ0YwIiwgIkNGMiIpOworCisgICAgICAgIGlmIChwcnRfcHNfbWJfZm9udC5wc19mb250bmFtZVtQUlRfUFNfRk9OVF9CT0xET0JMSVFVRV0gIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcHJ0X2RzY19yZXNvdXJjZXMoIkluY2x1ZGVSZXNvdXJjZSIsICJmb250IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydF9wc19tYl9mb250LnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX0JPTERPQkxJUVVFXSk7CisgICAgICAgICAgICBpZiAoIXBydF9jdXN0b21fY21hcCkKKyAgICAgICAgICAgICAgICBwcnRfZHNjX3Jlc291cmNlcygiSW5jbHVkZVJlc291cmNlIiwgImNtYXAiLCBwcnRfY21hcCk7CisgICAgICAgICAgICBwcnRfZGVmX2NpZGZvbnQoIkNGMyIsIChpbnQpcHJ0X2xpbmVfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydF9wc19tYl9mb250LnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX0JPTERPQkxJUVVFXSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLyogVXNlIEJPTEQgZm9yIEJPTERPQkxJUVVFICovCisgICAgICAgICAgICBwcnRfZHVwX2NpZGZvbnQoIkNGMSIsICJDRjMiKTsKKyAgICB9CisjZW5kaWYKIAogICAgIC8qIE1pc2MgY29uc3RhbnQgdmFycyB1c2VkIGZvciB1bmRlcmxpbmluZyBhbmQgYmFja2dyb3VuZCByZWN0cyAqLwogICAgIHBydF9kZWZfdmFyKCJVTyIsIFBSVF9QU19GT05UX1RPX1VTRVIocHJ0X2xpbmVfaGVpZ2h0LAotCQkJCQkJcHJ0X3BzX2ZvbnQudWxpbmVfb2Zmc2V0KSwgMik7CisJCQkJCQlwcnRfcHNfZm9udC0+dWxpbmVfb2Zmc2V0KSwgMik7CiAgICAgcHJ0X2RlZl92YXIoIlVXIiwgUFJUX1BTX0ZPTlRfVE9fVVNFUihwcnRfbGluZV9oZWlnaHQsCi0JCQkJCQkgcHJ0X3BzX2ZvbnQudWxpbmVfd2lkdGgpLCAyKTsKKwkJCQkJCSBwcnRfcHNfZm9udC0+dWxpbmVfd2lkdGgpLCAyKTsKICAgICBwcnRfZGVmX3ZhcigiQk8iLCBwcnRfYmdjb2xfb2Zmc2V0LCAyKTsKIAogICAgIHBydF9kc2Nfbm9hcmcoIkVuZFNldHVwIik7CkBAIC01MTY4LDcgKzYwNTgsMTQgQEAKIAogICAgIHBydF9kc2Nfbm9hcmcoIkJlZ2luUGFnZVNldHVwIik7CiAKLSAgICBwcnRfd3JpdGVfc3RyaW5nKCJzdlxuMCBnXG5GMCBzZlxuIik7CisgICAgcHJ0X3dyaXRlX3N0cmluZygic3ZcbjAgZ1xuIik7CisjaWZkZWYgRkVBVF9NQllURQorICAgIHBydF9pbl9hc2NpaSA9ICFwcnRfb3V0X21ieXRlOworICAgIGlmIChwcnRfb3V0X21ieXRlKQorICAgICAgICBwcnRfd3JpdGVfc3RyaW5nKCJDRjAgc2ZcbiIpOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBwcnRfd3JpdGVfc3RyaW5nKCJGMCBzZlxuIik7CiAgICAgcHJ0X2ZnY29sID0gUFJDT0xPUl9CTEFDSzsKICAgICBwcnRfYmdjb2wgPSBQUkNPTE9SX1dISVRFOwogICAgIHBydF9mb250ID0gUFJUX1BTX0ZPTlRfUk9NQU47CkBAIC01MjEzLDYgKzYxMTAsOSBAQAogCiAgICAgcHJ0X2F0dHJpYnV0ZV9jaGFuZ2UgPSBUUlVFOwogICAgIHBydF9uZWVkX21vdmV0byA9IFRSVUU7CisjaWZkZWYgRkVBVF9NQllURQorICAgIHBydF9oYWxmX3dpZHRoID0gRkFMU0U7CisjZW5kaWYKIH0KIAogLypBUkdTVVNFRCovCkBAIC01MjI0LDYgKzYxMjQsNjggQEAKICAgICBpbnQJCW5lZWRfYnJlYWs7CiAgICAgY2hhcl91CWNoOwogICAgIGNoYXJfdSAgICAgIGNoX2J1ZmZbOF07CisgICAgZmxvYXQgICAgICAgY2hhcl93aWR0aDsKKyAgICBmbG9hdCAgICAgICBuZXh0X3BvczsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaW50ICAgICAgICAgaW5fYXNjaWk7CisgICAgaW50ICAgICAgICAgaGFsZl93aWR0aDsKKyNlbmRpZgorCisgICAgY2hhcl93aWR0aCA9IHBydF9jaGFyX3dpZHRoOworCisjaWZkZWYgRkVBVF9NQllURQorICAgIC8qIElkZWFsbHkgVklNIHdvdWxkIGNyZWF0ZSBhIHJlYXJyYW5nZWQgQ0lEIGZvbnQgdG8gY29tYmluZSBhIFJvbWFuIGFuZAorICAgICAqIENKS1YgZm9udCB0byBkbyB3aGF0IFZJTSBpcyBkb2luZyBoZXJlIC0gdXNlIGEgUm9tYW4gZm9udCBmb3IgY2hhcmFjdGVycworICAgICAqIGluIHRoZSBBU0NJSSByYW5nZSwgYW5kIHRoZSBvcmlnaW5nYWwgQ0lEIGZvbnQgZm9yIGV2ZXJ5dGhpbmcgZWxzZS4KKyAgICAgKiBUaGUgcHJvYmxlbSBpcyB0aGF0IEdob3N0U2NyaXB0IHN0aWxsIChhcyBvZiA4LjEzKSBkb2VzIG5vdCBzdXBwb3J0CisgICAgICogcmVhcnJhbmdlZCBmb250cyBldmVuIHRob3VnaCB0aGV5IGhhdmUgYmVlbiBkb2N1bWVudGVkIGJ5IEFkb2JlIGZvciA3CisgICAgICogeWVhcnMhICBJZiB0aGV5IGV2ZXIgZG8sIGEgbG90IG9mIHRoaXMgY29kZSB3aWxsIGRpc2FwcGVhci4KKyAgICAgKi8KKyAgICBpZiAocHJ0X3VzZV9jb3VyaWVyKQorICAgIHsKKyAgICAgICAgaW5fYXNjaWkgPSAobGVuID09IDEgJiYgKnAgPCAweDgwKTsKKyAgICAgICAgaWYgKHBydF9pbl9hc2NpaSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFpbl9hc2NpaSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBObyBsb25nZXIgaW4gQVNDSUkgcmFuZ2UgLSBuZWVkIHRvIHN3aXRjaCBmb250ICovCisgICAgICAgICAgICAgICAgcHJ0X2luX2FzY2lpID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcHJ0X25lZWRfZm9udCA9IFRSVUU7CisgICAgICAgICAgICAgICAgcHJ0X2F0dHJpYnV0ZV9jaGFuZ2UgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGluX2FzY2lpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBOb3cgaW4gQVNDSUkgcmFuZ2UgLSBuZWVkIHRvIHN3aXRjaCBmb250ICovCisgICAgICAgICAgICBwcnRfaW5fYXNjaWkgPSBUUlVFOworICAgICAgICAgICAgcHJ0X25lZWRfZm9udCA9IFRSVUU7CisgICAgICAgICAgICBwcnRfYXR0cmlidXRlX2NoYW5nZSA9IFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHBydF9vdXRfbWJ5dGUpCisgICAgeworICAgICAgICBoYWxmX3dpZHRoID0gKCgqbWJfcHRyMmNlbGxzKShwKSA9PSAxKTsKKyAgICAgICAgaWYgKGhhbGZfd2lkdGgpCisgICAgICAgICAgICBjaGFyX3dpZHRoIC89IDI7CisgICAgICAgIGlmIChwcnRfaGFsZl93aWR0aCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFoYWxmX3dpZHRoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBydF9oYWxmX3dpZHRoID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcHJ0X3Bvc194ICs9IHBydF9jaGFyX3dpZHRoLzQ7CisgICAgICAgICAgICAgICAgcHJ0X25lZWRfbW92ZXRvID0gVFJVRTsKKyAgICAgICAgICAgICAgICBwcnRfYXR0cmlidXRlX2NoYW5nZSA9IFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaGFsZl93aWR0aCkKKyAgICAgICAgeworICAgICAgICAgICAgcHJ0X2hhbGZfd2lkdGggPSBUUlVFOworICAgICAgICAgICAgcHJ0X3Bvc194ICs9IHBydF9jaGFyX3dpZHRoLzQ7CisgICAgICAgICAgICBwcnRfbmVlZF9tb3ZldG8gPSBUUlVFOworICAgICAgICAgICAgcHJ0X2F0dHJpYnV0ZV9jaGFuZ2UgPSBUUlVFOworICAgICAgICB9CisgICAgfQorI2VuZGlmCiAKICAgICAvKiBPdXRwdXQgYW55IHJlcXVpcmVkIGNoYW5nZXMgdG8gdGhlIGdyYXBoaWNzIHN0YXRlLCBhZnRlciBmbHVzaGluZyBhbnkKICAgICAgKiB0ZXh0IGJ1ZmZlcmVkIHNvIGZhci4KQEAgLTUyMzIsNyArNjE5NCw3IEBACiAgICAgewogCXBydF9mbHVzaF9idWZmZXIoKTsKIAkvKiBSZXNldCBjb3VudCBvZiBudW1iZXIgb2YgY2hhcnMgdGhhdCB3aWxsIGJlIHByaW50ZWQgKi8KLQlwcnRfdGV4dF9jb3VudCA9IDA7CisJcHJ0X3RleHRfcnVuID0gMDsKIAogCWlmIChwcnRfbmVlZF9tb3ZldG8pCiAJewpAQCAtNTI0NCwxMCArNjIwNiwxNSBAQAogCX0KIAlpZiAocHJ0X25lZWRfZm9udCkKIAl7Ci0JICAgIHBydF93cml0ZV9zdHJpbmcoIkYiKTsKLQkgICAgcHJ0X3dyaXRlX2ludChwcnRfZm9udCk7Ci0JICAgIHBydF93cml0ZV9zdHJpbmcoInNmXG4iKTsKLQkgICAgcHJ0X25lZWRfZm9udCA9IEZBTFNFOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICAgICAgICAgIGlmICghcHJ0X2luX2FzY2lpKQorICAgICAgICAgICAgICAgIHBydF93cml0ZV9zdHJpbmcoIkNGIik7CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgICAgICBwcnRfd3JpdGVfc3RyaW5nKCJGIik7CisgICAgICAgICAgICBwcnRfd3JpdGVfaW50KHBydF9mb250KTsKKyAgICAgICAgICAgIHBydF93cml0ZV9zdHJpbmcoInNmXG4iKTsKKyAgICAgICAgICAgIHBydF9uZWVkX2ZvbnQgPSBGQUxTRTsKIAl9CiAJaWYgKHBydF9uZWVkX2ZnY29sKQogCXsKQEAgLTUyNTgsOSArNjIyNSw3IEBACiAKIAkgICAgcHJ0X3dyaXRlX3JlYWwociAvIDI1NS4wLCAzKTsKIAkgICAgaWYgKHIgPT0gZyAmJiBnID09IGIpCi0JICAgIHsKIAkJcHJ0X3dyaXRlX3N0cmluZygiZ1xuIik7Ci0JICAgIH0KIAkgICAgZWxzZQogCSAgICB7CiAJCXBydF93cml0ZV9yZWFsKGcgLyAyNTUuMCwgMyk7CkBAIC01Mjk1LDQ2ICs2MjYwLDY0IEBACiAJaWYgKHAgPT0gTlVMTCkKIAkgICAgcCA9IChjaGFyX3UgKikiIjsKICAgICB9Ci0jZW5kaWYKLSAgICAvKiBBZGQgbmV4dCBjaGFyYWN0ZXIgdG8gYnVmZmVyIG9mIGNoYXJhY3RlcnMgdG8gb3V0cHV0LgotICAgICAqIE5vdGU6IE9uZSBwcmludGVkIGNoYXJhY3RlciBtYXkgcmVxdWlyZSBzZXZlcmFsIFBTIGNoYXJhY3RlcnMgdG8KLSAgICAgKiByZXByZXNlbnQgaXQsIGJ1dCB3ZSBvbmx5IGNvdW50IHRoZW0gYXMgb25lIHByaW50ZWQgY2hhcmFjdGVyLgotICAgICAqLwotICAgIGNoID0gKnA7Ci0gICAgaWYgKGNoIDwgMzIgfHwgY2ggPT0gJygnIHx8IGNoID09ICcpJyB8fCBjaCA9PSAnXFwnKQotICAgIHsKLQkvKiBDb252ZXJ0IG5vbi1wcmludGluZyBjaGFyYWN0ZXJzIHRvIGVpdGhlciB0aGVpciBlc2NhcGUgb3Igb2N0YWwKLQkgKiBzZXF1ZW5jZSwgZW5zdXJlcyBQUyBzZW50IG92ZXIgYSBzZXJpYWwgbGluZSBkb2VzIG5vdCBpbnRlcmZlcmUgd2l0aAotCSAqIHRoZSBjb21tcyBwcm90b2NvbC4KLQkgKiBOb3RlOiBGb3IgRUJDRElDIHdlIG5lZWQgdG8gd3JpdGUgb3V0IHRoZSBlc2NhcGUgc2VxdWVuY2VzIGFzIEFTQ0lJCi0JICogY29kZXMhCi0JICogTm90ZSAyOiBDaGFyIGNvZGVzIDwgMzIgYXJlIGlkZW50aWNhbCBpbiBFQkNESUMgYW5kIEFTQ0lJIEFGQUlLIQotCSAqLwotCWdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgSUZfRUIoJ1xcJywgMDEzNCkpOwotCXN3aXRjaCAoY2gpCi0JewotCSAgICBjYXNlIEJTOiAgIGdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgSUZfRUIoJ2InLCAwMTQyKSk7IGJyZWFrOwotCSAgICBjYXNlIFRBQjogIGdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgSUZfRUIoJ3QnLCAwMTY0KSk7IGJyZWFrOwotCSAgICBjYXNlIE5MOiAgIGdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgSUZfRUIoJ24nLCAwMTU2KSk7IGJyZWFrOwotCSAgICBjYXNlIEZGOiAgIGdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgSUZfRUIoJ2YnLCAwMTQ2KSk7IGJyZWFrOwotCSAgICBjYXNlIENBUjogIGdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgSUZfRUIoJ3InLCAwMTYyKSk7IGJyZWFrOwotCSAgICBjYXNlICcoJzogIGdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgSUZfRUIoJygnLCAwMDUwKSk7IGJyZWFrOwotCSAgICBjYXNlICcpJzogIGdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgSUZfRUIoJyknLCAwMDUxKSk7IGJyZWFrOwotCSAgICBjYXNlICdcXCc6IGdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgSUZfRUIoJ1xcJywgMDEzNCkpOyBicmVhazsKIAotCSAgICBkZWZhdWx0OgotCQkgICAgICAgc3ByaW50ZigoY2hhciAqKWNoX2J1ZmYsICIlMDNvIiwgKHVuc2lnbmVkIGludCljaCk7Ci0jaWZkZWYgRUJDRElDCi0JCSAgICAgICBlYmNkaWMyYXNjaWkoY2hfYnVmZiwgMyk7Ci0jZW5kaWYKLQkJICAgICAgIGdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgY2hfYnVmZlswXSk7Ci0JCSAgICAgICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIGNoX2J1ZmZbMV0pOwotCQkgICAgICAgZ2FfYXBwZW5kKCZwcnRfcHNfYnVmZmVyLCBjaF9idWZmWzJdKTsKLQkJICAgICAgIGJyZWFrOwotCX0KKyAgICBpZiAocHJ0X291dF9tYnl0ZSkKKyAgICB7CisgICAgICAgIC8qIE11bHRpLWJ5dGUgY2hhcmFjdGVyIHN0cmluZ3MgYXJlIHJlcHJlc2VudGVkIG1vcmUgZWZmaWNpZW50bHkgYXMgaGV4CisgICAgICAgICAqIHN0cmluZ3Mgd2hlbiBvdXRwdXR0aW5nIGNsZWFuIDggYml0IFBTLgorICAgICAgICAgKi8KKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICBjaCA9IHBydF9oZXhjaGFyWygqcCkgPj4gNF07CisgICAgICAgICAgIGdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgY2gpOworICAgICAgICAgICBjaCA9IHBydF9oZXhjaGFyWygqcCkgJiAweGZdOworICAgICAgICAgICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIGNoKTsKKyAgICAgICAgICAgcCsrOworICAgICAgICB9CisgICAgICAgIHdoaWxlICgtLWxlbik7CiAgICAgfQogICAgIGVsc2UKLSAgICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIGNoKTsKKyNlbmRpZgorICAgIHsKKyAgICAgICAgLyogQWRkIG5leHQgY2hhcmFjdGVyIHRvIGJ1ZmZlciBvZiBjaGFyYWN0ZXJzIHRvIG91dHB1dC4KKyAgICAgICAgICogTm90ZTogT25lIHByaW50ZWQgY2hhcmFjdGVyIG1heSByZXF1aXJlIHNldmVyYWwgUFMgY2hhcmFjdGVycyB0bworICAgICAgICAgKiByZXByZXNlbnQgaXQsIGJ1dCB3ZSBvbmx5IGNvdW50IHRoZW0gYXMgb25lIHByaW50ZWQgY2hhcmFjdGVyLgorICAgICAgICAgKi8KKyAgICAgICAgY2ggPSAqcDsKKyAgICAgICAgaWYgKGNoIDwgMzIgfHwgY2ggPT0gJygnIHx8IGNoID09ICcpJyB8fCBjaCA9PSAnXFwnKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBDb252ZXJ0IG5vbi1wcmludGluZyBjaGFyYWN0ZXJzIHRvIGVpdGhlciB0aGVpciBlc2NhcGUgb3Igb2N0YWwKKyAgICAgICAgICAgICAqIHNlcXVlbmNlLCBlbnN1cmVzIFBTIHNlbnQgb3ZlciBhIHNlcmlhbCBsaW5lIGRvZXMgbm90IGludGVyZmVyZQorICAgICAgICAgICAgICogd2l0aCB0aGUgY29tbXMgcHJvdG9jb2wuICBOb3RlOiBGb3IgRUJDRElDIHdlIG5lZWQgdG8gd3JpdGUgb3V0CisgICAgICAgICAgICAgKiB0aGUgZXNjYXBlIHNlcXVlbmNlcyBhcyBBU0NJSSBjb2RlcyEKKwkgICAgICogTm90ZSAyOiBDaGFyIGNvZGVzIDwgMzIgYXJlIGlkZW50aWNhbCBpbiBFQkNESUMgYW5kIEFTQ0lJIEFGQUlLIQorCSAgICAgKi8KKyAgICAgICAgICAgIGdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgSUZfRUIoJ1xcJywgMDEzNCkpOworICAgICAgICAgICAgc3dpdGNoIChjaCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIEJTOiAgIGdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgSUZfRUIoJ2InLCAwMTQyKSk7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVEFCOiAgZ2FfYXBwZW5kKCZwcnRfcHNfYnVmZmVyLCBJRl9FQigndCcsIDAxNjQpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBOTDogICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIElGX0VCKCduJywgMDE1NikpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZGOiAgIGdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgSUZfRUIoJ2YnLCAwMTQ2KSk7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ0FSOiAgZ2FfYXBwZW5kKCZwcnRfcHNfYnVmZmVyLCBJRl9FQigncicsIDAxNjIpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnKCc6ICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIElGX0VCKCcoJywgMDA1MCkpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICcpJzogIGdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgSUZfRUIoJyknLCAwMDUxKSk7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ1xcJzogZ2FfYXBwZW5kKCZwcnRfcHNfYnVmZmVyLCBJRl9FQignXFwnLCAwMTM0KSk7IGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoKGNoYXIgKiljaF9idWZmLCAiJTAzbyIsICh1bnNpZ25lZCBpbnQpY2gpOworI2lmZGVmIEVCQ0RJQworICAgICAgICAgICAgICAgICAgICAgICAgICAgZWJjZGljMmFzY2lpKGNoX2J1ZmYsIDMpOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIGNoX2J1ZmZbMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FfYXBwZW5kKCZwcnRfcHNfYnVmZmVyLCBjaF9idWZmWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgY2hfYnVmZlsyXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIGNoKTsKKyAgICB9CiAKICNpZmRlZiBGRUFUX01CWVRFCiAgICAgLyogTmVlZCB0byBmcmVlIGFueSB0cmFuc2xhdGVkIGNoYXJhY3RlcnMgKi8KQEAgLTUzNDIsMTEgKzYzMjUsMTMgQEAKIAl2aW1fZnJlZShwKTsKICNlbmRpZgogCi0gICAgcHJ0X3RleHRfY291bnQrKzsKLSAgICBwcnRfcG9zX3ggKz0gcHJ0X2NoYXJfd2lkdGg7CisgICAgcHJ0X3RleHRfcnVuICs9IGNoYXJfd2lkdGg7CisgICAgcHJ0X3Bvc194ICs9IGNoYXJfd2lkdGg7CiAKLSAgICAvKiBUaGUgZG93bnNpZGUgb2YgZnAgLSBuZWVkIGEgbGl0dGxlIHRvbGVyYW5jZSBpbiB0aGUgcmlnaHQgbWFyZ2luIGNoZWNrICovCi0gICAgbmVlZF9icmVhayA9IChwcnRfcG9zX3ggKyBwcnRfY2hhcl93aWR0aCA+IChwcnRfcmlnaHRfbWFyZ2luICsgMC4wMSkpOworICAgIC8qIFRoZSBkb3duc2lkZSBvZiBmcCAtIHVzZSByZWxhdGl2ZSBlcnJvciBvbiByaWdodCBtYXJnaW4gY2hlY2sgKi8KKyAgICBuZXh0X3BvcyA9IHBydF9wb3NfeCArIHBydF9jaGFyX3dpZHRoOworICAgIG5lZWRfYnJlYWsgPSAobmV4dF9wb3MgPiBwcnRfcmlnaHRfbWFyZ2luKSAmJgorICAgICAgICAgICAgICAgICAgICAoKG5leHRfcG9zIC0gcHJ0X3JpZ2h0X21hcmdpbikgPiAocHJ0X3JpZ2h0X21hcmdpbioxZS01KSk7CiAKICAgICBpZiAobmVlZF9icmVhaykKIAlwcnRfZmx1c2hfYnVmZmVyKCk7CmRpZmYgLS1naXQgYS9zcmMvZXhfZ2V0bG4uYyBiL3NyYy9leF9nZXRsbi5jCmluZGV4IDE0MDUzNWUuLjdkMWUyODI1IDEwMDY0NAotLS0gYS9zcmMvZXhfZ2V0bG4uYworKysgYi9zcmMvZXhfZ2V0bG4uYwpAQCAtODAsNiArODAsNyBAQAogc3RhdGljIHZvaWQJYWxsb2NfY21kYnVmZiBfX0FSR1MoKGludCBsZW4pKTsKIHN0YXRpYyBpbnQJcmVhbGxvY19jbWRidWZmIF9fQVJHUygoaW50IGxlbikpOwogc3RhdGljIHZvaWQJZHJhd19jbWRsaW5lIF9fQVJHUygoaW50IHN0YXJ0LCBpbnQgbGVuKSk7CitzdGF0aWMgaW50CWNtZGxpbmVfcGFzdGUgX19BUkdTKChpbnQgcmVnbmFtZSwgaW50IGxpdGVyYWxseSkpOwogI2lmIGRlZmluZWQoRkVBVF9YSU0pICYmIGRlZmluZWQoRkVBVF9HVUlfR1RLKQogc3RhdGljIHZvaWQJcmVkcmF3Y21kX3ByZWVkaXQgX19BUkdTKCh2b2lkKSk7CiAjZW5kaWYKQEAgLTI1MzYsNiArMjUzNywxMDIgQEAKICAgICByZXR1cm4gcmV0dmFsOwogfQogCisvKgorICogcGFzdGUgYSB5YW5rIHJlZ2lzdGVyIGludG8gdGhlIGNvbW1hbmQgbGluZS4KKyAqIHVzZWQgYnkgQ1RSTC1SIGNvbW1hbmQgaW4gY29tbWFuZC1saW5lIG1vZGUKKyAqIGluc2VydF9yZWcoKSBjYW4ndCBiZSB1c2VkIGhlcmUsIGJlY2F1c2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIGZyb20gdGhlCisgKiByZWdpc3RlciBjb250ZW50cyB3aWxsIGJlIGludGVycHJldGVkIGFzIGNvbW1hbmRzLgorICoKKyAqIHJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBvdGhlcndpc2UKKyAqLworICAgIHN0YXRpYyBpbnQKK2NtZGxpbmVfcGFzdGUocmVnbmFtZSwgbGl0ZXJhbGx5KQorICAgIGludCByZWduYW1lOworICAgIGludCBsaXRlcmFsbHk7CS8qIEluc2VydCB0ZXh0IGxpdGVyYWxseSBpbnN0ZWFkIG9mICJhcyB0eXBlZCIgKi8KK3sKKyAgICBsb25nCQlpOworICAgIGNoYXJfdQkJKmFyZzsKKyAgICBpbnQJCQlhbGxvY2F0ZWQ7CisgICAgc3RydWN0IGNtZGxpbmVfaW5mbwlzYXZlX2NjbGluZTsKKworICAgIC8qIGNoZWNrIGZvciB2YWxpZCByZWduYW1lOyBhbHNvIGFjY2VwdCBzcGVjaWFsIGNoYXJhY3RlcnMgZm9yIENUUkwtUiBpbgorICAgICAqIHRoZSBjb21tYW5kIGxpbmUgKi8KKyAgICBpZiAocmVnbmFtZSAhPSBDdHJsX0YgJiYgcmVnbmFtZSAhPSBDdHJsX1AgJiYgcmVnbmFtZSAhPSBDdHJsX1cKKwkgICAgJiYgcmVnbmFtZSAhPSBDdHJsX0EgJiYgIXZhbGlkX3lhbmtfcmVnKHJlZ25hbWUsIEZBTFNFKSkKKwlyZXR1cm4gRkFJTDsKKworICAgIC8qIEEgcmVnaXN0ZXIgY29udGFpbmluZyBDVFJMLVIgY2FuIGNhdXNlIGFuIGVuZGxlc3MgbG9vcC4gIEFsbG93IHVzaW5nCisgICAgICogQ1RSTC1DIHRvIGJyZWFrIHRoZSBsb29wLiAqLworICAgIGxpbmVfYnJlYWtjaGVjaygpOworICAgIGlmIChnb3RfaW50KQorCXJldHVybiBGQUlMOworCisjaWZkZWYgRkVBVF9DTElQQk9BUkQKKyAgICByZWduYW1lID0gbWF5X2dldF9zZWxlY3Rpb24ocmVnbmFtZSk7CisjZW5kaWYKKworICAgIC8qIE5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSBjY2xpbmUsIGJlY2F1c2Ugb2J0YWluaW5nIHRoZSAiPSIgcmVnaXN0ZXIgbWF5CisgICAgICogZXhlY3V0ZSAibm9ybWFsIDpjbWQiIGFuZCBvdmVyd3JpdGUgaXQuICovCisgICAgc2F2ZV9jY2xpbmUgPSBjY2xpbmU7CisgICAgY2NsaW5lLmNtZGJ1ZmYgPSBOVUxMOworICAgIGNjbGluZS5jbWRwcm9tcHQgPSBOVUxMOworICAgIGkgPSBnZXRfc3BlY19yZWcocmVnbmFtZSwgJmFyZywgJmFsbG9jYXRlZCwgVFJVRSk7CisgICAgY2NsaW5lID0gc2F2ZV9jY2xpbmU7CisKKyAgICBpZiAoaSkKKyAgICB7CisJLyogR290IHRoZSB2YWx1ZSBvZiBhIHNwZWNpYWwgcmVnaXN0ZXIgaW4gImFyZyIuICovCisJaWYgKGFyZyA9PSBOVUxMKQorCSAgICByZXR1cm4gRkFJTDsKKwljbWRsaW5lX3Bhc3RlX3N0cihhcmcsIGxpdGVyYWxseSk7CisJaWYgKGFsbG9jYXRlZCkKKwkgICAgdmltX2ZyZWUoYXJnKTsKKwlyZXR1cm4gT0s7CisgICAgfQorCisgICAgcmV0dXJuIGNtZGxpbmVfcGFzdGVfcmVnKHJlZ25hbWUsIGxpdGVyYWxseSk7Cit9CisKKy8qCisgKiBQdXQgYSBzdHJpbmcgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAqIFdoZW4gImxpdGVyYWxseSIgaXMgVFJVRSwgaW5zZXJ0IGxpdGVyYWxseS4KKyAqIFdoZW4gImxpdGVyYWxseSIgaXMgRkFMU0UsIGluc2VydCBhcyB0eXBlZCwgYnV0IGRvbid0IGxlYXZlIHRoZSBjb21tYW5kCisgKiBsaW5lLgorICovCisgICAgdm9pZAorY21kbGluZV9wYXN0ZV9zdHIocywgbGl0ZXJhbGx5KQorICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWxpdGVyYWxseTsKK3sKKyAgICBpbnQJCWMsIGN2OworCisgICAgaWYgKGxpdGVyYWxseSkKKwlwdXRfb25fY21kbGluZShzLCAtMSwgVFJVRSk7CisgICAgZWxzZQorCXdoaWxlICgqcyAhPSBOVUwpCisJeworCSAgICBjdiA9ICpzOworCSAgICBpZiAoY3YgPT0gQ3RybF9WICYmIHNbMV0pCisJCSsrczsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChoYXNfbWJ5dGUpCisJICAgIHsKKwkJYyA9IG1iX3B0cjJjaGFyKHMpOworCQlzICs9IG1iX2NoYXIybGVuKGMpOworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCQljID0gKnMrKzsKKwkgICAgaWYgKGN2ID09IEN0cmxfViB8fCBjID09IEVTQyB8fCBjID09IEN0cmxfQyB8fCBjID09IENBUiB8fCBjID09IE5MCisjaWZkZWYgVU5JWAorCQkgICAgfHwgYyA9PSBpbnRyX2NoYXIKKyNlbmRpZgorCQkgICAgfHwgKGMgPT0gQ3RybF9CU0wgJiYgKnMgPT0gQ3RybF9OKSkKKwkJc3R1ZmZjaGFyUmVhZGJ1ZmYoQ3RybF9WKTsKKwkgICAgc3R1ZmZjaGFyUmVhZGJ1ZmYoYyk7CisJfQorfQorCiAjaWZkZWYgRkVBVF9XSUxETUVOVQogLyoKICAqIERlbGV0ZSBjaGFyYWN0ZXJzIG9uIHRoZSBjb21tYW5kIGxpbmUsIGZyb20gImZyb20iIHRvIHRoZSBjdXJyZW50CmRpZmYgLS1naXQgYS9zcmMvZ2xvYmFscy5oIGIvc3JjL2dsb2JhbHMuaAppbmRleCAwMjZhM2ZlLi44M2U2YzRiIDEwMDY0NAotLS0gYS9zcmMvZ2xvYmFscy5oCisrKyBiL3NyYy9nbG9iYWxzLmgKQEAgLTExMDIsNiArMTEwMiwzMCBAQAogIyBkZWZpbmUgUFJUX1VOSVRfTU0JMgogIyBkZWZpbmUgUFJUX1VOSVRfUE9JTlQJMwogIyBkZWZpbmUgUFJUX1VOSVRfTkFNRVMgeyJwYyIsICJpbiIsICJtbSIsICJwdCJ9CisKKyMgaWZkZWYgRkVBVF9NQllURQorIyBkZWZpbmUgT1BUX01CRk9OVF9VU0VDT1VSSUVSICAwCisjIGRlZmluZSBPUFRfTUJGT05UX0FTQ0lJICAgICAgIDEKKyMgZGVmaW5lIE9QVF9NQkZPTlRfUkVHVUxBUiAgICAgMgorIyBkZWZpbmUgT1BUX01CRk9OVF9CT0xEICAgICAgICAzCisjIGRlZmluZSBPUFRfTUJGT05UX09CTElRVUUgICAgIDQKKyMgZGVmaW5lIE9QVF9NQkZPTlRfQk9MRE9CTElRVUUgNQorIyBkZWZpbmUgT1BUX01CRk9OVF9OVU1fT1BUSU9OUyA2CisjCitFWFRFUk4gb3B0aW9uX3RhYmxlX1QgbWJmb250X29wdHNbT1BUX01CRk9OVF9OVU1fT1BUSU9OU10KKyMgIGlmZGVmIERPX0lOSVQKKyA9Cit7CisgICAgeyJjIiwJRkFMU0UsIDAsIE5VTEwsIDAsIEZBTFNFfSwKKyAgICB7ImEiLAlGQUxTRSwgMCwgTlVMTCwgMCwgRkFMU0V9LAorICAgIHsiciIsCUZBTFNFLCAwLCBOVUxMLCAwLCBGQUxTRX0sCisgICAgeyJiIiwJRkFMU0UsIDAsIE5VTEwsIDAsIEZBTFNFfSwKKyAgICB7ImkiLAlGQUxTRSwgMCwgTlVMTCwgMCwgRkFMU0V9LAorICAgIHsibyIsCUZBTFNFLCAwLCBOVUxMLCAwLCBGQUxTRX0sCit9CisjICBlbmRpZgorOworIyBlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBGRUFUX1hDTElQQk9BUkQKZGlmZiAtLWdpdCBhL3NyYy9pZl9tenNjaC5jIGIvc3JjL2lmX216c2NoLmMKaW5kZXggMzc3YjVmNy4uNTdiYzRkZSAxMDA2NDQKLS0tIGEvc3JjL2lmX216c2NoLmMKKysrIGIvc3JjL2lmX216c2NoLmMKQEAgLTIxLDE3ICsyMSw2IEBACiAgKiAzLiBJIGRvbid0IHVzZSBLJlItc3R5bGUgZnVuY3Rpb25zLiBBbnl3YXksIE16U2NoZW1lIGhlYWRlcnMgYXJlIEFOU0kuCiAgKi8KIAotLyogVE9ETwotICogd2F5IHRvIGNhdGNoIFZpbSBlcnJvcnMgKGluY2wuIHZlcmJvc2UgbWVzc2FnZXMpCi0gKiBsaWJtenNjaGVtZS5kbGwgZHluYW1pYyBsb2FkaW5nCi0gKiBtYWNyb3MgdG8gcGFzcyBtb2RpZmllcnMgKGUuZy4gKGJyb3dzZSBlZGl0KSkKLSAqIG9wcG9ydHVuaXR5IHRvIHVzZSBzaGFyZWQgbXpzY2hlbWUgbGlicmFyaWVzIG9uIFVuaXgKLSAqIGV2ZW50IG9uLWNoYW5nZS1tb2RlCi0gKiBTY2hlbWUtZHJpdmVuIGNvbG9yaW5nCi0gKiBnbG9iYWwgZXhuLWhhbmRsZXIKLSAqIGVtYmVkIFJlYWQtRXZhbC1QcmludC1Mb29wCi0gKi8KLQogI2luY2x1ZGUgInZpbS5oIgogI2luY2x1ZGUgImlmX216c2NoLmgiCiAKQEAgLTQ0LDcgKzMzLDYgQEAKICAgICBTY2hlbWVfVHlwZQkgICAgdGFnOwogICAgIFNjaGVtZV9FbnYJICAgICplbnY7CiAgICAgYnVmX1QJICAgICpidWY7Ci0gICAgU2NoZW1lX09iamVjdCAgICp0ZXh0X29iamVjdHM7CiB9IHZpbV9tel9idWZmZXI7CiAKICNkZWZpbmUgSU5WQUxJRF9CVUZGRVJfVkFMVUUgKChidWZfVCAqKSgtMSkpCkBAIC0yMDc3LDIwICsyMDY1LDYgQEAKICAgICByZXR1cm4gd2luOwogfQogCi0jaWYgMAotICAgIGludAotbXp2aW1fYnVmZmVycChTY2hlbWVfT2JqZWN0ICpvYmopCi17Ci0gICAgcmV0dXJuIFNDSEVNRV9WSU1CVUZGRVJQKG9iaik7Ci19Ci0KLSAgICBpbnQKLW16dmltX3dpbmRvd3AoU2NoZW1lX09iamVjdCAqb2JqKQotewotICAgIHJldHVybiBTQ0hFTUVfVklNV0lORE9XUChvYmopOwotfQotI2VuZGlmCi0KICAgICBpbnQKIG16dGhyZWFkc19hbGxvd2VkKHZvaWQpCiB7CkBAIC0yMjE1LDE0ICsyMTg5LDYgQEAKIAlyZXR1cm4gKHZpbV9tel93aW5kb3cgKiljdXJ3aW4tPm16c2NoZW1lX3JlZjsKIH0KIAotI2lmIDAKLSAgICBjaGFyICoKLW16c2NoZW1lX3ZlcnNpb24odm9pZCkKLXsKLSAgICByZXR1cm4gc2NoZW1lX3ZlcnNpb24oKTsKLX0KLSNlbmRpZgotCiAgICAgc3RhdGljIHZvaWQKIG1ha2VfbW9kdWxlcyhTY2hlbWVfRW52ICplbnYpCiB7CmRpZmYgLS1naXQgYS9zcmMvb3BzLmMgYi9zcmMvb3BzLmMKaW5kZXggZTI0MGM0NS4uY2EyN2VjMCAxMDA2NDQKLS0tIGEvc3JjL29wcy5jCisrKyBiL3NyYy9vcHMuYwpAQCAtOTQsMTMgKzk0LDEwIEBACiBzdGF0aWMgdm9pZCBzaGlmdF9ibG9jayBfX0FSR1MoKG9wYXJnX1QgKm9hcCwgaW50IGFtb3VudCkpOwogc3RhdGljIHZvaWQgYmxvY2tfaW5zZXJ0IF9fQVJHUygob3BhcmdfVCAqb2FwLCBjaGFyX3UgKnMsIGludCBiX2luc2VydCwgc3RydWN0IGJsb2NrX2RlZipiZHApKTsKICNlbmRpZgotc3RhdGljIHZvaWQJZ2V0X3lhbmtfcmVnaXN0ZXIgX19BUkdTKChpbnQgcmVnbmFtZSwgaW50IHdyaXRpbmcpKTsKIHN0YXRpYyBpbnQJc3R1ZmZfeWFuayBfX0FSR1MoKGludCwgY2hhcl91ICopKTsKIHN0YXRpYyB2b2lkCXB1dF9yZWVkaXRfaW5fdHlwZWJ1ZiBfX0FSR1MoKHZvaWQpKTsKIHN0YXRpYyBpbnQJcHV0X2luX3R5cGVidWYgX19BUkdTKChjaGFyX3UgKnMsIGludCBjb2xvbikpOwogc3RhdGljIHZvaWQJc3R1ZmZlc2NhcGVkIF9fQVJHUygoY2hhcl91ICphcmcsIGludCBsaXRlcmFsbHkpKTsKLXN0YXRpYyBpbnQJZ2V0X3NwZWNfcmVnIF9fQVJHUygoaW50IHJlZ25hbWUsIGNoYXJfdSAqKmFyZ3AsIGludCAqYWxsb2NhdGVkLCBpbnQgZXJybXNnKSk7Ci1zdGF0aWMgdm9pZAljbWRsaW5lX3Bhc3RlX3N0ciBfX0FSR1MoKGNoYXJfdSAqcywgaW50IGxpdGVyYWxseSkpOwogI2lmZGVmIEZFQVRfTUJZVEUKIHN0YXRpYyB2b2lkCW1iX2FkanVzdF9vcGVuZCBfX0FSR1MoKG9wYXJnX1QgKm9hcCkpOwogI2VuZGlmCkBAIC04MjAsNyArODE3LDcgQEAKICAqIElmIHJlZ25hbWUgaXMgMCBhbmQgd3JpdGluZywgdXNlIHJlZ2lzdGVyIDAKICAqIElmIHJlZ25hbWUgaXMgMCBhbmQgcmVhZGluZywgdXNlIHByZXZpb3VzIHJlZ2lzdGVyCiAgKi8KLSAgICBzdGF0aWMgdm9pZAorICAgIHZvaWQKIGdldF95YW5rX3JlZ2lzdGVyKHJlZ25hbWUsIHdyaXRpbmcpCiAgICAgaW50CSAgICByZWduYW1lOwogICAgIGludAkgICAgd3JpdGluZzsKQEAgLTg2NCwxNCArODYxLDEyIEBACiAJeV9wcmV2aW91cyA9IHlfY3VycmVudDsKIH0KIAotI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisjaWYgZGVmaW5lZChGRUFUX0NMSVBCT0FSRCkgfHwgZGVmaW5lZChQUk9UTykKIC8qCiAgKiBXaGVuICJyZWduYW1lIiBpcyBhIGNsaXBib2FyZCByZWdpc3Rlciwgb2J0YWluIHRoZSBzZWxlY3Rpb24uICBJZiBpdCdzIG5vdAogICogYXZhaWxhYmxlIHJldHVybiB6ZXJvLCBvdGhlcndpc2UgcmV0dXJuICJyZWduYW1lIi4KICAqLwotc3RhdGljIGludCBtYXlfZ2V0X3NlbGVjdGlvbiBfX0FSR1MoKGludCByZWduYW1lKSk7Ci0KLSAgICBzdGF0aWMgaW50CisgICAgaW50CiBtYXlfZ2V0X3NlbGVjdGlvbihyZWduYW1lKQogICAgIGludCByZWduYW1lOwogewpAQCAtMTM0Nyw3ICsxMzQyLDcgQEAKIC8qCiAgKiBJZiAicmVnbmFtZSIgaXMgYSBzcGVjaWFsIHJlZ2lzdGVyLCByZXR1cm4gYSBwb2ludGVyIHRvIGl0cyB2YWx1ZS4KICAqLwotICAgIHN0YXRpYyBpbnQKKyAgICBpbnQKIGdldF9zcGVjX3JlZyhyZWduYW1lLCBhcmdwLCBhbGxvY2F0ZWQsIGVycm1zZykKICAgICBpbnQJCXJlZ25hbWU7CiAgICAgY2hhcl91CSoqYXJncDsKQEAgLTE0MjYsNDcgKzE0MjEsMjAgQEAKIH0KIAogLyoKLSAqIHBhc3RlIGEgeWFuayByZWdpc3RlciBpbnRvIHRoZSBjb21tYW5kIGxpbmUuCi0gKiB1c2VkIGJ5IENUUkwtUiBjb21tYW5kIGluIGNvbW1hbmQtbGluZSBtb2RlCisgKiBQYXN0ZSBhIHlhbmsgcmVnaXN0ZXIgaW50byB0aGUgY29tbWFuZCBsaW5lLgorICogT25seSBmb3Igbm9uLXNwZWNpYWwgcmVnaXN0ZXJzLgorICogVXNlZCBieSBDVFJMLVIgY29tbWFuZCBpbiBjb21tYW5kLWxpbmUgbW9kZQogICogaW5zZXJ0X3JlZygpIGNhbid0IGJlIHVzZWQgaGVyZSwgYmVjYXVzZSBzcGVjaWFsIGNoYXJhY3RlcnMgZnJvbSB0aGUKICAqIHJlZ2lzdGVyIGNvbnRlbnRzIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgY29tbWFuZHMuCiAgKgogICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQogICovCiAgICAgaW50Ci1jbWRsaW5lX3Bhc3RlKHJlZ25hbWUsIGxpdGVyYWxseSkKK2NtZGxpbmVfcGFzdGVfcmVnKHJlZ25hbWUsIGxpdGVyYWxseSkKICAgICBpbnQgcmVnbmFtZTsKICAgICBpbnQgbGl0ZXJhbGx5OwkvKiBJbnNlcnQgdGV4dCBsaXRlcmFsbHkgaW5zdGVhZCBvZiAiYXMgdHlwZWQiICovCiB7CiAgICAgbG9uZwlpOwotICAgIGNoYXJfdQkqYXJnOwotICAgIGludAkJYWxsb2NhdGVkOwotCi0gICAgLyogY2hlY2sgZm9yIHZhbGlkIHJlZ25hbWU7IGFsc28gYWNjZXB0IHNwZWNpYWwgY2hhcmFjdGVycyBmb3IgQ1RSTC1SIGluCi0gICAgICogdGhlIGNvbW1hbmQgbGluZSAqLwotICAgIGlmIChyZWduYW1lICE9IEN0cmxfRiAmJiByZWduYW1lICE9IEN0cmxfUCAmJiByZWduYW1lICE9IEN0cmxfVwotCSAgICAmJiByZWduYW1lICE9IEN0cmxfQSAmJiAhdmFsaWRfeWFua19yZWcocmVnbmFtZSwgRkFMU0UpKQotCXJldHVybiBGQUlMOwotCi0gICAgLyogQSByZWdpc3RlciBjb250YWluaW5nIENUUkwtUiBjYW4gY2F1c2UgYW4gZW5kbGVzcyBsb29wLiAgQWxsb3cgdXNpbmcKLSAgICAgKiBDVFJMLUMgdG8gYnJlYWsgdGhlIGxvb3AuICovCi0gICAgbGluZV9icmVha2NoZWNrKCk7Ci0gICAgaWYgKGdvdF9pbnQpCi0JcmV0dXJuIEZBSUw7Ci0KLSNpZmRlZiBGRUFUX0NMSVBCT0FSRAotICAgIHJlZ25hbWUgPSBtYXlfZ2V0X3NlbGVjdGlvbihyZWduYW1lKTsKLSNlbmRpZgotCi0gICAgaWYgKGdldF9zcGVjX3JlZyhyZWduYW1lLCAmYXJnLCAmYWxsb2NhdGVkLCBUUlVFKSkKLSAgICB7Ci0JaWYgKGFyZyA9PSBOVUxMKQotCSAgICByZXR1cm4gRkFJTDsKLQljbWRsaW5lX3Bhc3RlX3N0cihhcmcsIGxpdGVyYWxseSk7Ci0JaWYgKGFsbG9jYXRlZCkKLQkgICAgdmltX2ZyZWUoYXJnKTsKLQlyZXR1cm4gT0s7Ci0gICAgfQogCiAgICAgZ2V0X3lhbmtfcmVnaXN0ZXIocmVnbmFtZSwgRkFMU0UpOwogICAgIGlmICh5X2N1cnJlbnQtPnlfYXJyYXkgPT0gTlVMTCkKQEAgLTE0ODksNDYgKzE0NTcsNiBAQAogICAgIHJldHVybiBPSzsKIH0KIAotLyoKLSAqIFB1dCBhIHN0cmluZyBvbiB0aGUgY29tbWFuZCBsaW5lLgotICogV2hlbiAibGl0ZXJhbGx5IiBpcyBUUlVFLCBpbnNlcnQgbGl0ZXJhbGx5LgotICogV2hlbiAibGl0ZXJhbGx5IiBpcyBGQUxTRSwgaW5zZXJ0IGFzIHR5cGVkLCBidXQgZG9uJ3QgbGVhdmUgdGhlIGNvbW1hbmQKLSAqIGxpbmUuCi0gKi8KLSAgICBzdGF0aWMgdm9pZAotY21kbGluZV9wYXN0ZV9zdHIocywgbGl0ZXJhbGx5KQotICAgIGNoYXJfdQkqczsKLSAgICBpbnQJCWxpdGVyYWxseTsKLXsKLSAgICBpbnQJCWMsIGN2OwotCi0gICAgaWYgKGxpdGVyYWxseSkKLQlwdXRfb25fY21kbGluZShzLCAtMSwgVFJVRSk7Ci0gICAgZWxzZQotCXdoaWxlICgqcyAhPSBOVUwpCi0JewotCSAgICBjdiA9ICpzOwotCSAgICBpZiAoY3YgPT0gQ3RybF9WICYmIHNbMV0pCi0JCSsrczsKLSNpZmRlZiBGRUFUX01CWVRFCi0JICAgIGlmIChoYXNfbWJ5dGUpCi0JICAgIHsKLQkJYyA9IG1iX3B0cjJjaGFyKHMpOwotCQlzICs9IG1iX2NoYXIybGVuKGMpOwotCSAgICB9Ci0JICAgIGVsc2UKLSNlbmRpZgotCQljID0gKnMrKzsKLQkgICAgaWYgKGN2ID09IEN0cmxfViB8fCBjID09IEVTQyB8fCBjID09IEN0cmxfQyB8fCBjID09IENBUiB8fCBjID09IE5MCi0jaWZkZWYgVU5JWAotCQkgICAgfHwgYyA9PSBpbnRyX2NoYXIKLSNlbmRpZgotCQkgICAgfHwgKGMgPT0gQ3RybF9CU0wgJiYgKnMgPT0gQ3RybF9OKSkKLQkJc3R1ZmZjaGFyUmVhZGJ1ZmYoQ3RybF9WKTsKLQkgICAgc3R1ZmZjaGFyUmVhZGJ1ZmYoYyk7Ci0JfQotfQotCiAjaWYgZGVmaW5lZChGRUFUX0NMSVBCT0FSRCkgfHwgZGVmaW5lZChQUk9UTykKIC8qCiAgKiBBZGp1c3QgdGhlIHJlZ2lzdGVyIG5hbWUgcG9pbnRlZCB0byB3aXRoICJycCIgZm9yIHRoZSBjbGlwYm9hcmQgYmVpbmcKZGlmZiAtLWdpdCBhL3NyYy9vcHRpb24uYyBiL3NyYy9vcHRpb24uYwppbmRleCAwMTYwOWMyLi45NTJhMDNlIDEwMDY0NAotLS0gYS9zcmMvb3B0aW9uLmMKKysrIGIvc3JjL29wdGlvbi5jCkBAIC0xNjc4LDYgKzE2NzgsMjQgQEAKIAkJCSAgICB7KGNoYXJfdSAqKU5VTEwsIChjaGFyX3UgKikwTH0KICNlbmRpZgogCQkJICAgIH0sCisgICB7InByaW50bWJjaGFyc2V0IiwgInBtYmNzIiwgIFBfU1RSSU5HfFBfVklfREVGLAorI2lmIGRlZmluZWQoRkVBVF9QT1NUU0NSSVBUKSAmJiBkZWZpbmVkKEZFQVRfTUJZVEUpCisJCQkgICAgKGNoYXJfdSAqKSZwX3BtY3MsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKU5VTEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJwcmludG1iZm9udCIsICJwbWJmbiIsICBQX1NUUklOR3xQX1ZJX0RFRiwKKyNpZiBkZWZpbmVkKEZFQVRfUE9TVFNDUklQVCkgJiYgZGVmaW5lZChGRUFUX01CWVRFKQorCQkJICAgIChjaGFyX3UgKikmcF9wbWZuLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilOVUxMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAogICAgIHsicHJpbnRvcHRpb25zIiwgInBvcHQiLCBQX1NUUklOR3xQX1ZJX0RFRnxQX0NPTU1BfFBfTk9EVVAsCiAjaWZkZWYgRkVBVF9QUklOVEVSCiAJCQkgICAgKGNoYXJfdSAqKSZwX3BvcHQsIFBWX05PTkUsCkBAIC01MjgzLDYgKzUzMDEsMTEgQEAKICNpZmRlZiBGRUFUX1BSSU5URVIKICAgICBlbHNlIGlmICh2YXJwID09ICZwX3BvcHQpCiAJZXJybXNnID0gcGFyc2VfbGlzdF9vcHRpb25zKHBfcG9wdCwgcHJpbnRlcl9vcHRzLCBPUFRfUFJJTlRfTlVNX09QVElPTlMpOworCisjIGlmZGVmIEZFQVRfTUJZVEUKKyAgICBlbHNlIGlmICh2YXJwID09ICZwX3BtZm4pCisJZXJybXNnID0gcGFyc2VfbGlzdF9vcHRpb25zKHBfcG1mbiwgbWJmb250X29wdHMsIE9QVF9NQkZPTlRfTlVNX09QVElPTlMpOworIyBlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBGRUFUX0xBTkdNQVAKZGlmZiAtLWdpdCBhL3NyYy9vcHRpb24uaCBiL3NyYy9vcHRpb24uaAppbmRleCAwZmE4M2E1Li5hY2IyM2RlIDEwMDY0NAotLS0gYS9zcmMvb3B0aW9uLmgKKysrIGIvc3JjL29wdGlvbi5oCkBAIC00NTEsNiArNDUxLDEwIEBACiAjIGlmZGVmIEZFQVRfUE9TVFNDUklQVAogRVhURVJOIGNoYXJfdQkqcF9wZW5jOwkvKiAncHJpbnRlbmNvZGluZycgKi8KIEVYVEVSTiBjaGFyX3UJKnBfcGV4cHI7CS8qICdwcmludGV4cHInICovCisjICAgaWZkZWYgRkVBVF9NQllURQorRVhURVJOIGNoYXJfdQkqcF9wbWZuOwkvKiAncHJpbnRtYmZvbnQnICovCitFWFRFUk4gY2hhcl91CSpwX3BtY3M7CS8qICdwcmludG1iY2hhcnNldCcgKi8KKyMgICBlbmRpZgogIyBlbmRpZgogRVhURVJOIGNoYXJfdQkqcF9wZm47CQkvKiAncHJpbnRmb250JyAqLwogRVhURVJOIGNoYXJfdQkqcF9wb3B0OwkvKiAncHJpbnRvcHRpb25zJyAqLwpkaWZmIC0tZ2l0IGEvc3JjL29zX21hYy5jIGIvc3JjL29zX21hYy5jCmluZGV4IGQzOGYxMmEuLmQxZWIwM2QgMTAwNjQ0Ci0tLSBhL3NyYy9vc19tYWMuYworKysgYi9zcmMvb3NfbWFjLmMKQEAgLTEzMDEsMjcgKzEzMDEsMjcgQEAKICAgICBjaGFyX3UgKmZyb207CiAgICAgY2hhcl91ICp0bzsKIHsKLSAgICBGU1NwZWMgIGZyRlNTcGVjOwotICAgIEZTU3BlYyAgdG9GU1NwZWM7Ci0gICAgRkluZm8gICBmbmRySW5mbzsKLSAgICAgU3RyMjU1CW5hbWU7Ci0gICAgIFJlc1R5cGUJdHlwZTsKLSAgICAgUmVzVHlwZQlzaW5rOwotICAgICBIYW5kbGUJcmVzb3VyY2U7Ci0gICAgIHNob3J0CWlkeFR5cGVzOwotICAgICBzaG9ydCAgICBuYlR5cGVzOwotICAgICBzaG9ydAlpZHhSZXNvdXJjZXM7Ci0gICAgIHNob3J0CW5iUmVzb3VyY2VzOwotICAgICBzaG9ydAlJRDsKLSAgICBzaG9ydCBmclJGaWQ7Ci0gICAgc2hvcnQgdG9SRmlkOwotICAgIHNob3J0IGF0dHJzX29yaWc7Ci0gICAgc2hvcnQgYXR0cnNfY29weTsKLSAgICBzaG9ydCB0ZW1wOworICAgIEZTU3BlYwlmckZTU3BlYzsKKyAgICBGU1NwZWMJdG9GU1NwZWM7CisgICAgRkluZm8JZm5kckluZm87CisgICAgU3RyMjU1CW5hbWU7CisgICAgUmVzVHlwZQl0eXBlOworICAgIFJlc1R5cGUJc2luazsKKyAgICBIYW5kbGUJcmVzb3VyY2U7CisgICAgc2hvcnQJaWR4VHlwZXM7CisgICAgc2hvcnQJbmJUeXBlczsKKyAgICBzaG9ydAlpZHhSZXNvdXJjZXM7CisgICAgc2hvcnQJbmJSZXNvdXJjZXM7CisgICAgc2hvcnQJSUQ7CisgICAgc2hvcnQJZnJSRmlkOworICAgIHNob3J0CXRvUkZpZDsKKyAgICBzaG9ydAlhdHRyc19vcmlnOworICAgIHNob3J0CWF0dHJzX2NvcHk7CisgICAgc2hvcnQJdGVtcDsKIAogICAgIC8qIFRPRE86IEhhbmRsZSBlcnJvciAqLwotICAgICh2b2lkKSBHZXRGU1NwZWNGcm9tUGF0aCAoZnJvbSwgJmZyRlNTcGVjKTsKLSAgICAodm9pZCkgR2V0RlNTcGVjRnJvbVBhdGggKHRvICAsICZ0b0ZTU3BlYyk7CisgICAgKHZvaWQpR2V0RlNTcGVjRnJvbVBhdGgoZnJvbSwgJmZyRlNTcGVjKTsKKyAgICAodm9pZClHZXRGU1NwZWNGcm9tUGF0aCh0byAgLCAmdG9GU1NwZWMpOwogCiAgICAgLyogQ29weSByZXNvdXJjZSBmb3JrICovCiAgICAgdGVtcCA9IDA7CkBAIC0xMzMyLDUxICsxMzMyLDUxIEBACiAgICAgIGlmIChmclJGaWQgIT0gLTEpCiAgICAgIHsKIAkgRlNwQ3JlYXRlUmVzRmlsZSgmdG9GU1NwZWMsICdURVhUJywgVU5LTk9XTl9DUkVBVE9SLCAwKTsKLQkgdG9SRmlkID0gRlNwT3BlblJlc0ZpbGUgKCZ0b0ZTU3BlYywgZnNSZFdyUGVybSk7CisJIHRvUkZpZCA9IEZTcE9wZW5SZXNGaWxlKCZ0b0ZTU3BlYywgZnNSZFdyUGVybSk7CiAKLQkgVXNlUmVzRmlsZSAoZnJSRmlkKTsKKwkgVXNlUmVzRmlsZShmclJGaWQpOwogCiAJIG5iVHlwZXMgPSBDb3VudDFUeXBlcygpOwogCiAJIGZvciAoaWR4VHlwZXMgPSAxOyBpZHhUeXBlcyA8PSBuYlR5cGVzOyBpZHhUeXBlcysrKQogCSB7Ci0JICAgR2V0MUluZFR5cGUgKCZ0eXBlLCBpZHhUeXBlcyk7Ci0JICAgbmJSZXNvdXJjZXMgPSBDb3VudDFSZXNvdXJjZXModHlwZSk7CisJICAgICBHZXQxSW5kVHlwZSgmdHlwZSwgaWR4VHlwZXMpOworCSAgICAgbmJSZXNvdXJjZXMgPSBDb3VudDFSZXNvdXJjZXModHlwZSk7CiAKLQkgICBmb3IgKGlkeFJlc291cmNlcyA9IDE7IGlkeFJlc291cmNlcyA8PSBuYlJlc291cmNlczsgaWR4UmVzb3VyY2VzKyspCi0JICAgewotCSAgICAgYXR0cnNfb3JpZyA9IDA7IC8qIGluIGNhc2UgR2V0UmVzIGZhaWxzICovCi0JICAgICBhdHRyc19jb3B5ID0gMDsgLyogaW4gY2FzZSBHZXRSZXMgZmFpbHMgKi8KLQkgICAgIHJlc291cmNlID0gR2V0MUluZFJlc291cmNlKHR5cGUsIGlkeFJlc291cmNlcyk7Ci0JICAgICBHZXRSZXNJbmZvIChyZXNvdXJjZSwgJklELCAmc2luaywgbmFtZSk7Ci0JICAgICBITG9jayAocmVzb3VyY2UpOwotCSAgICAgYXR0cnNfb3JpZyA9IEdldFJlc0F0dHJzIChyZXNvdXJjZSk7Ci0JICAgICBEZXRhY2hSZXNvdXJjZSAocmVzb3VyY2UpOworCSAgICAgZm9yIChpZHhSZXNvdXJjZXMgPSAxOyBpZHhSZXNvdXJjZXMgPD0gbmJSZXNvdXJjZXM7IGlkeFJlc291cmNlcysrKQorCSAgICAgeworCQkgYXR0cnNfb3JpZyA9IDA7IC8qIGluIGNhc2UgR2V0UmVzIGZhaWxzICovCisJCSBhdHRyc19jb3B5ID0gMDsgLyogaW4gY2FzZSBHZXRSZXMgZmFpbHMgKi8KKwkJIHJlc291cmNlID0gR2V0MUluZFJlc291cmNlKHR5cGUsIGlkeFJlc291cmNlcyk7CisJCSBHZXRSZXNJbmZvKHJlc291cmNlLCAmSUQsICZzaW5rLCBuYW1lKTsKKwkJIEhMb2NrKHJlc291cmNlKTsKKwkJIGF0dHJzX29yaWcgPSBHZXRSZXNBdHRycyhyZXNvdXJjZSk7CisJCSBEZXRhY2hSZXNvdXJjZShyZXNvdXJjZSk7CiAKIAotCSAgICAgVXNlUmVzRmlsZSAodG9SRmlkKTsKLQkgICAgIEFkZFJlc291cmNlIChyZXNvdXJjZSwgdHlwZSwgSUQsIG5hbWUpOwotCSAgICAgYXR0cnNfY29weSA9IEdldFJlc0F0dHJzIChyZXNvdXJjZSk7Ci0JICAgICBhdHRyc19jb3B5ID0gKGF0dHJzX2NvcHkgJiAweDIpIHwgKGF0dHJzX29yaWcgJiAweEZEKTsKLQkgICAgIFNldFJlc0F0dHJzIChyZXNvdXJjZSwgYXR0cnNfY29weSk7Ci0JICAgICBXcml0ZVJlc291cmNlIChyZXNvdXJjZSk7Ci0JICAgICBVcGRhdGVSZXNGaWxlICh0b1JGaWQpOworCQkgVXNlUmVzRmlsZSh0b1JGaWQpOworCQkgQWRkUmVzb3VyY2UocmVzb3VyY2UsIHR5cGUsIElELCBuYW1lKTsKKwkJIGF0dHJzX2NvcHkgPSBHZXRSZXNBdHRycyhyZXNvdXJjZSk7CisJCSBhdHRyc19jb3B5ID0gKGF0dHJzX2NvcHkgJiAweDIpIHwgKGF0dHJzX29yaWcgJiAweEZEKTsKKwkJIFNldFJlc0F0dHJzKHJlc291cmNlLCBhdHRyc19jb3B5KTsKKwkJIFdyaXRlUmVzb3VyY2UocmVzb3VyY2UpOworCQkgVXBkYXRlUmVzRmlsZSh0b1JGaWQpOwogCi0JICAgICB0ZW1wID0gR2V0UmVzQXR0cnMgKHJlc291cmNlKTsKKwkJIHRlbXAgPSBHZXRSZXNBdHRycyhyZXNvdXJjZSk7CiAKLQkgICAgIC8qU2V0UmVzQXR0cnMgKHJlc291cmNlLCAwKTsqLwotCSAgICAgSFVubG9jayhyZXNvdXJjZSk7Ci0JICAgICBSZWxlYXNlUmVzb3VyY2UgKHJlc291cmNlKTsKLQkgICAgIFVzZVJlc0ZpbGUgKGZyUkZpZCk7CisJCSAvKlNldFJlc0F0dHJzIChyZXNvdXJjZSwgMCk7Ki8KKwkJIEhVbmxvY2socmVzb3VyY2UpOworCQkgUmVsZWFzZVJlc291cmNlKHJlc291cmNlKTsKKwkJIFVzZVJlc0ZpbGUoZnJSRmlkKTsKIAkgICAgIH0KIAkgfQotCUNsb3NlUmVzRmlsZSAodG9SRmlkKTsKLQlDbG9zZVJlc0ZpbGUgKGZyUkZpZCk7Ci0gICAgfQorCSBDbG9zZVJlc0ZpbGUodG9SRmlkKTsKKwkgQ2xvc2VSZXNGaWxlKGZyUkZpZCk7CisgICAgIH0KICNlbmRpZgogICAgIC8qIENvcHkgRmluZGVyIEluZm8gKi8KLSAgICAodm9pZCkgRlNwR2V0RkluZm8gKCZmckZTU3BlYywgJmZuZHJJbmZvKTsKLSAgICAodm9pZCkgRlNwU2V0RkluZm8gKCZ0b0ZTU3BlYywgJmZuZHJJbmZvKTsKKyAgICAodm9pZClGU3BHZXRGSW5mbygmZnJGU1NwZWMsICZmbmRySW5mbyk7CisgICAgKHZvaWQpRlNwU2V0RkluZm8oJnRvRlNTcGVjLCAmZm5kckluZm8pOwogCiAgICAgcmV0dXJuICh0ZW1wID09IGF0dHJzX2NvcHkpOwogfQpAQCAtMTM4NiwxMyArMTM4NiwxMyBAQAogICAgIGNoYXJfdSAqZmlsZTsKIHsKICAgICBGU1NwZWMgIGZpbGVGU1NwZWM7Ci0gICAgc2hvcnQgZmlsZVJGaWQ7CisgICAgc2hvcnQgICBmaWxlUkZpZDsKIAogICAgIC8qIFRPRE86IEhhbmRsZSBlcnJvciAqLwotICAgICh2b2lkKSBHZXRGU1NwZWNGcm9tUGF0aCAoZmlsZSwgJmZpbGVGU1NwZWMpOwotICAgIGZpbGVSRmlkID0gRlNwT3BlblJlc0ZpbGUgKCZmaWxlRlNTcGVjLCBmc0N1clBlcm0pOworICAgICh2b2lkKUdldEZTU3BlY0Zyb21QYXRoKGZpbGUsICZmaWxlRlNTcGVjKTsKKyAgICBmaWxlUkZpZCA9IEZTcE9wZW5SZXNGaWxlKCZmaWxlRlNTcGVjLCBmc0N1clBlcm0pOwogICAgIGlmIChmaWxlUkZpZCAhPSAtMSkKLQlDbG9zZVJlc0ZpbGUgKGZpbGVSRmlkKTsKKwlDbG9zZVJlc0ZpbGUoZmlsZVJGaWQpOwogCiAgICAgcmV0dXJuIChmaWxlUkZpZCAhPSAtMSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vZXhfZ2V0bG4ucHJvIGIvc3JjL3Byb3RvL2V4X2dldGxuLnBybwppbmRleCBhYTc5MWFjLi44NGJlNzhjIDEwMDY0NAotLS0gYS9zcmMvcHJvdG8vZXhfZ2V0bG4ucHJvCisrKyBiL3NyYy9wcm90by9leF9nZXRsbi5wcm8KQEAgLTksNiArOSw3IEBACiB2b2lkIHB1dGNtZGxpbmUgX19BUkdTKChpbnQgYywgaW50IHNoaWZ0KSk7CiB2b2lkIHVucHV0Y21kbGluZSBfX0FSR1MoKHZvaWQpKTsKIGludCBwdXRfb25fY21kbGluZSBfX0FSR1MoKGNoYXJfdSAqc3RyLCBpbnQgbGVuLCBpbnQgcmVkcmF3KSk7Cit2b2lkIGNtZGxpbmVfcGFzdGVfc3RyIF9fQVJHUygoY2hhcl91ICpzLCBpbnQgbGl0ZXJhbGx5KSk7CiB2b2lkIHJlZHJhd2NtZGxpbmUgX19BUkdTKCh2b2lkKSk7CiB2b2lkIHJlZHJhd2NtZCBfX0FSR1MoKHZvaWQpKTsKIHZvaWQgY29tcHV0ZV9jbWRyb3cgX19BUkdTKCh2b2lkKSk7CmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vb3BzLnBybyBiL3NyYy9wcm90by9vcHMucHJvCmluZGV4IGM2NDI2NzMuLmJlNDlmMGYgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90by9vcHMucHJvCisrKyBiL3NyYy9wcm90by9vcHMucHJvCkBAIC0xMCwxMyArMTAsMTYgQEAKIHZvaWQgc2V0X2V4cHJfbGluZSBfX0FSR1MoKGNoYXJfdSAqbmV3X2xpbmUpKTsKIGNoYXJfdSAqZ2V0X2V4cHJfbGluZSBfX0FSR1MoKHZvaWQpKTsKIGludCB2YWxpZF95YW5rX3JlZyBfX0FSR1MoKGludCByZWduYW1lLCBpbnQgd3JpdGluZykpOwordm9pZCBnZXRfeWFua19yZWdpc3RlciBfX0FSR1MoKGludCByZWduYW1lLCBpbnQgd3JpdGluZykpOworaW50IG1heV9nZXRfc2VsZWN0aW9uIF9fQVJHUygoaW50IHJlZ25hbWUpKTsKIHZvaWQgKmdldF9yZWdpc3RlciBfX0FSR1MoKGludCBuYW1lLCBpbnQgY29weSkpOwogdm9pZCBwdXRfcmVnaXN0ZXIgX19BUkdTKChpbnQgbmFtZSwgdm9pZCAqcmVnKSk7CiBpbnQgeWFua19yZWdpc3Rlcl9tbGluZSBfX0FSR1MoKGludCByZWduYW1lKSk7CiBpbnQgZG9fcmVjb3JkIF9fQVJHUygoaW50IGMpKTsKIGludCBkb19leGVjcmVnIF9fQVJHUygoaW50IHJlZ25hbWUsIGludCBjb2xvbiwgaW50IGFkZGNyKSk7CiBpbnQgaW5zZXJ0X3JlZyBfX0FSR1MoKGludCByZWduYW1lLCBpbnQgbGl0ZXJhbGx5KSk7Ci1pbnQgY21kbGluZV9wYXN0ZSBfX0FSR1MoKGludCByZWduYW1lLCBpbnQgbGl0ZXJhbGx5KSk7CitpbnQgZ2V0X3NwZWNfcmVnIF9fQVJHUygoaW50IHJlZ25hbWUsIGNoYXJfdSAqKmFyZ3AsIGludCAqYWxsb2NhdGVkLCBpbnQgZXJybXNnKSk7CitpbnQgY21kbGluZV9wYXN0ZV9yZWcgX19BUkdTKChpbnQgcmVnbmFtZSwgaW50IGxpdGVyYWxseSkpOwogdm9pZCBhZGp1c3RfY2xpcF9yZWcgX19BUkdTKChpbnQgKnJwKSk7CiBpbnQgb3BfZGVsZXRlIF9fQVJHUygob3BhcmdfVCAqb2FwKSk7CiBpbnQgb3BfcmVwbGFjZSBfX0FSR1MoKG9wYXJnX1QgKm9hcCwgaW50IGMpKTsK