ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggNGUyZDFmMy4uMTBkYzU3NiAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsMTMgKzEsMTMgQEAKLVRoaXMgaXMgcmVsZWFzZSA5NzAyMDIgb2YgV2luZSwgdGhlIE1TIFdpbmRvd3MgZW11bGF0b3IuICBUaGlzIGlzIHN0aWxsIGEKK1RoaXMgaXMgcmVsZWFzZSA5NzAyMTUgb2YgV2luZSwgdGhlIE1TIFdpbmRvd3MgZW11bGF0b3IuICBUaGlzIGlzIHN0aWxsIGEKIGRldmVsb3BlcidzIG9ubHkgcmVsZWFzZS4gIFRoZXJlIGFyZSBtYW55IGJ1Z3MgYW5kIG1hbnkgdW5pbXBsZW1lbnRlZCBBUEkKIGZlYXR1cmVzLiAgTW9zdCBhcHBsaWNhdGlvbnMgc3RpbGwgZG8gbm90IHdvcmsgY29ycmVjdGx5LgogCiBQYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gImp1bGxpYXJkQGxyYy5lcGZsLmNoIi4gIFBsZWFzZSBkb24ndAogZm9yZ2V0IHRvIGluY2x1ZGUgYSBDaGFuZ2VMb2cgZW50cnkuCiAKLVdIQVQnUyBORVcgd2l0aCBXaW5lLTk3MDIwMjogKHNlZSBDaGFuZ2VMb2cgZm9yIGRldGFpbHMpCi0JLSBNb3JlIHByaW50ZXIgc3VwcG9ydC4KLQktIFNvbWUgbmV3IFdpbjMyIGZ1bmN0aW9ucy4KK1dIQVQnUyBORVcgd2l0aCBXaW5lLTk3MDIxNTogKHNlZSBDaGFuZ2VMb2cgZm9yIGRldGFpbHMpCisJLSBNYW55IG1vcmUgV2luMzIgZnVuY3Rpb25zLgorCS0gSHVuZ2FyaWFuIGxhbmd1YWdlIHN1cHBvcnQuCiAJLSBMb3RzIG9mIGJ1ZyBmaXhlcy4KIAogU2VlIHRoZSBSRUFETUUgZmlsZSBpbiB0aGUgZGlzdHJpYnV0aW9uIGZvciBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgpAQCAtMTYsMTAgKzE2LDEwIEBACiB0aGUgcmVsZWFzZSBpcyBhdmFpbGFibGUgYXQgdGhlIGZ0cCBzaXRlcy4gIFRoZSBzb3VyY2VzIHdpbGwgYmUgYXZhaWxhYmxlCiBmcm9tIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgogCi0gIGZ0cDovL3N1bnNpdGUudW5jLmVkdS9wdWIvTGludXgvQUxQSEEvd2luZS9kZXZlbG9wbWVudC9XaW5lLTk3MDIwMi50YXIuZ3oKLSAgZnRwOi8vdHN4LTExLm1pdC5lZHUvcHViL2xpbnV4L0FMUEhBL1dpbmUvZGV2ZWxvcG1lbnQvV2luZS05NzAyMDIudGFyLmd6Ci0gIGZ0cDovL2Z0cC5pbmZvbWFnaWMuY29tL3B1Yi9taXJyb3JzL2xpbnV4L3dpbmUvZGV2ZWxvcG1lbnQvV2luZS05NzAyMDIudGFyLmd6Ci0gIGZ0cDovL2FyaXMuY29tL3B1Yi9saW51eC9BTFBIQS9XaW5lL2RldmVsb3BtZW50L1dpbmUtOTcwMjAyLnRhci5negorICBmdHA6Ly9zdW5zaXRlLnVuYy5lZHUvcHViL0xpbnV4L0FMUEhBL3dpbmUvZGV2ZWxvcG1lbnQvV2luZS05NzAyMTUudGFyLmd6CisgIGZ0cDovL3RzeC0xMS5taXQuZWR1L3B1Yi9saW51eC9BTFBIQS9XaW5lL2RldmVsb3BtZW50L1dpbmUtOTcwMjE1LnRhci5negorICBmdHA6Ly9mdHAuaW5mb21hZ2ljLmNvbS9wdWIvbWlycm9ycy9saW51eC93aW5lL2RldmVsb3BtZW50L1dpbmUtOTcwMjE1LnRhci5negorICBmdHA6Ly9hcmlzLmNvbS9wdWIvbGludXgvQUxQSEEvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk3MDIxNS50YXIuZ3oKIAogSXQgc2hvdWxkIGFsc28gYmUgYXZhaWxhYmxlIGZyb20gYW55IHNpdGUgdGhhdCBtaXJyb3JzIHRzeC0xMSBvciBzdW5zaXRlLgogCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggY2NlOTJmZC4uMmI0OTJiZiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSw0ICsxLDcwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTYXQgRmViIDE1IDExOjU5OjE3IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgorCisJKiBbKi8qXQorCUNvbnZlcnRlZCBhIGxvdCBvZiBmdW5jdGlvbnMgdG8gV2luMzIgdHlwZXMuCisJUmVtb3ZlZCBIV05EIHR5cGUuCisKK0ZyaSBGZWIgMTQgMTU6MDk6MTkgMTk5NyAgT25ubyBIb3ZlcnMgPG9ubm9Ac3RhY2submw+CisKKwkqIFttZW1vcnkvZ2xvYmFsLmNdCisJSW1wbGVtZW50ZWQgR01FTV9NT1ZFQUJMRSBibG9ja3MgZm9yIFdpbjMyLgorCitGcmkgRmViIDE0IDAwOjI0OjM5IDE5OTcgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CisKKwkqIFtsb2FkZXIvdGFzay5jXSBbd2luZG93cy9xdWV1ZS5jXQorCURvIG5vdCByZWFkIFggZXZlbnRzIHdoaWxlIGluIHRoZSBpbnRlcnRhc2sgU2VuZE1lc3NhZ2UoKS4KKworCSogW21pc2MvbHN0ci5jXQorCUZpeGVkIENoYXJQcmV2MzJBKCkuCisKKwkqIFt3aW5kb3dzL2hvb2suY10gW2luY2x1ZGUvaG9vay5oXQorCVJlc3RvcmVkIGJyb2tlbiBXSF9DQUxMV05EUFJPQyBmdW5jdGlvbmFsaXR5IGZvciBkaWFsb2dzLCBldGMuLi4KKworCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy9tZGkuY10KKwkgIFt3aW5kb3dzL2V2ZW50LmNdIFtjb250cm9scy9lZGl0LmNdIAorCUFkZGVkIFdJTl9JU1dJTjMyIGZsYWcgdG8gd2luZG93cyBjcmVhdGVkIGJ5IFdpbjMyIGNhbGxzLiAKKwlTZXZlcmFsIG5ldyBXaW4zMiBtZXNzYWdlcyBhcmUgc2VudCB3aGVuIHRoaXMgZmxhZyBpcyBvbi4KKwkKKwkqIFttc2Rvcy9kb3NtZW0uY10gW21lbW9yeS9nbG9iYWwuY10KKwlTb21lIGNoYW5nZXMgaW4gRE9TIG1lbW9yeSBhbGxvY2F0aW9uLgorCitGcmkgRmViICA3IDIxOjQ2OjAzIDE5OTcgIEFuZHJldyBUYXlsb3IgIDxhbmRyZXdAcmlzY2FuLmNvbT4KKworCSogW3dpbjMyL3NlY3VyaXR5LmNdCisJQWRkZWQgU0lEIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMuCisKKwkqIFtpbmNsdWRlL2RlYnVnLmhdCisJQWRkZWQgZGVidWdnaW5nIGNsYXNzICJzZWN1cml0eSIuCisKK0ZyaSAgRmViIDcgMjA6NDY6MzMgMTk5NyAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KKworCSogW2RlYnVnZ2VyL21zYy5jXSBbZGVidWdnZXIvc291cmNlLmNdIAorCSAgW2RvY3VtZW50YXRpb24vd2luZV9vczIudHh0XSBbbG9hZGVyL3NpZ25hbC5jXQorCVNvbWUgbW9yZSBjaGFuZ2VzIGZvciBPUy8yLiBEb2Vzbid0IHdvcmsgeWV0LgorCitGcmkgIEZlYiA3IDA5OjMxOjE3IDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgorCisJKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10KKwlBZGRlZCBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MqLgorCisJKiBbbWlzYy9udGRsbC5jXSBbaW5jbHVkZS9udGRsbC5oXQorCUFkZGVkIHNvbWUgbmV3IGZ1bmN0aW9ucy4KKworCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQorCUNVUlNPUklDT05fTG9hZEhhbmRsZXI6IGNoZWNrIGFnYWluc3Qgc29tZSBiaXphcnJlIG91dCBvZiBtZW1vcnkKKwljb25kaXRpb25zLgorCQorCSogW3dpbmRvd3MvbWRpLmNdCisJRml4ZWQgRGVmRnJhbWVQcm9jMzIqLCBhZGRlZCBUcmFuc2xhdGVNRElTeXNBY2NlbDMyLgorCitXZWQgRmViICA1IDAxOjMxOjA1IDE5OTcgIEpvaG4gWmVybyA8am9obkBnbG9iZS5ncmFwaGlzb2Z0Lmh1PgorCisJKiBbcmVzb3VyY2VzL3N5c3Jlc19IdS5yY10gW21pc2Mvb2xlMm5scy5jXSBbbWlzYy9tYWluLmNdCisJICBbcHJvZ3JhbXMvcHJvZ21hbi9IdS5yY10gW3Byb2dyYW1zL3dpbmhlbHAvSHUucmNdCisJQWRkZWQgSHVuZ2FyaWFuIGxhbmd1YWdlIHN1cHBvcnQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFN1biBGZWIgIDIgMTI6MzE6MDMgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CiAKIAkqIFtmaWxlcy9kcml2ZS5jXQpkaWZmIC0tZ2l0IGEvY29udHJvbHMvYnV0dG9uLmMgYi9jb250cm9scy9idXR0b24uYwppbmRleCBiOWJiZTA1Li45Mjc1OWI3IDEwMDY0NAotLS0gYS9jb250cm9scy9idXR0b24uYworKysgYi9jb250cm9scy9idXR0b24uYwpAQCAtMjY4LDEwICsyNjgsMTAgQEAKICAgICBSZWN0YW5nbGUzMihoREMsIHJjLmxlZnQsIHJjLnRvcCwgcmMucmlnaHQsIHJjLmJvdHRvbSk7CiAgICAgaWYgKGFjdGlvbiA9PSBPREFfRFJBV0VOVElSRSkKICAgICB7Ci0gICAgICAgIFNldFBpeGVsMzIoIGhEQywgcmMubGVmdCwgcmMudG9wLCBHZXRTeXNDb2xvcihDT0xPUl9XSU5ET1cpICk7Ci0gICAgICAgIFNldFBpeGVsMzIoIGhEQywgcmMubGVmdCwgcmMuYm90dG9tLTEsIEdldFN5c0NvbG9yKENPTE9SX1dJTkRPVykgKTsKLSAgICAgICAgU2V0UGl4ZWwzMiggaERDLCByYy5yaWdodC0xLCByYy50b3AsIEdldFN5c0NvbG9yKENPTE9SX1dJTkRPVykgKTsKLSAgICAgICAgU2V0UGl4ZWwzMiggaERDLCByYy5yaWdodC0xLCByYy5ib3R0b20tMSwgR2V0U3lzQ29sb3IoQ09MT1JfV0lORE9XKSApOworICAgICAgICBTZXRQaXhlbDMyKCBoREMsIHJjLmxlZnQsIHJjLnRvcCwgR2V0U3lzQ29sb3IzMihDT0xPUl9XSU5ET1cpICk7CisgICAgICAgIFNldFBpeGVsMzIoIGhEQywgcmMubGVmdCwgcmMuYm90dG9tLTEsIEdldFN5c0NvbG9yMzIoQ09MT1JfV0lORE9XKSApOworICAgICAgICBTZXRQaXhlbDMyKCBoREMsIHJjLnJpZ2h0LTEsIHJjLnRvcCwgR2V0U3lzQ29sb3IzMihDT0xPUl9XSU5ET1cpICk7CisgICAgICAgIFNldFBpeGVsMzIoIGhEQywgcmMucmlnaHQtMSwgcmMuYm90dG9tLTEsIEdldFN5c0NvbG9yMzIoQ09MT1JfV0lORE9XKSk7CiAgICAgfQogICAgIEluZmxhdGVSZWN0MzIoICZyYywgLTEsIC0xICk7CiAKQEAgLTI5OCwxMyArMjk4LDE0IEBACiAgICAgICAgIExPR0JSVVNIMTYgbGI7CiAgICAgICAgIEdldE9iamVjdDE2KCBzeXNDb2xvck9iamVjdHMuaGJydXNoQnRuRmFjZSwgc2l6ZW9mKGxiKSwgJmxiICk7CiAgICAgICAgIGlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19ESVNBQkxFRCAmJgotICAgICAgICAgICAgR2V0U3lzQ29sb3IoQ09MT1JfR1JBWVRFWFQpPT1sYi5sYkNvbG9yKQorICAgICAgICAgICAgR2V0U3lzQ29sb3IzMihDT0xPUl9HUkFZVEVYVCk9PWxiLmxiQ29sb3IpCiAgICAgICAgICAgICAvKiBkb24ndCB3cml0ZSBncmF5IHRleHQgb24gZ3JheSBia2cgKi8KICAgICAgICAgICAgIFBCX1BhaW50R3JheU9uR3JheShoREMsaW5mb1B0ci0+aEZvbnQsJnJjLHduZFB0ci0+dGV4dCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAgU2V0VGV4dENvbG9yKCBoREMsICh3bmRQdHItPmR3U3R5bGUgJiBXU19ESVNBQkxFRCkgPwotICAgICAgICAgICAgICAgICAgICAgR2V0U3lzQ29sb3IoQ09MT1JfR1JBWVRFWFQpIDogR2V0U3lzQ29sb3IoQ09MT1JfQlROVEVYVCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTeXNDb2xvcjMyKENPTE9SX0dSQVlURVhUKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN5c0NvbG9yMzIoQ09MT1JfQlROVEVYVCkgKTsKICAgICAgICAgICAgIERyYXdUZXh0MzJBKCBoREMsIHduZFB0ci0+dGV4dCwgLTEsICZyYywKICAgICAgICAgICAgICAgICAgICAgICAgICBEVF9TSU5HTEVMSU5FIHwgRFRfQ0VOVEVSIHwgRFRfVkNFTlRFUiApOwogICAgICAgICAgICAgLyogZG8gd2UgaGF2ZSB0aGUgZm9jdXM/ICovCkBAIC00MTYsNyArNDE3LDcgQEAKICAgICAgICAgaWYoIHRleHRsZW4gJiYgYWN0aW9uICE9IE9EQV9TRUxFQ1QgKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfRElTQUJMRUQpCi0gICAgICAgICAgICAgICAgU2V0VGV4dENvbG9yKCBoREMsIEdldFN5c0NvbG9yKENPTE9SX0dSQVlURVhUKSApOworICAgICAgICAgICAgICAgIFNldFRleHRDb2xvciggaERDLCBHZXRTeXNDb2xvcjMyKENPTE9SX0dSQVlURVhUKSApOwogICAgICAgICAgICAgRHJhd1RleHQxNiggaERDLCB3bmRQdHItPnRleHQsIHRleHRsZW4sICZydGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgIERUX1NJTkdMRUxJTkUgfCBEVF9WQ0VOVEVSICk7CiAgICAgICAgIH0KQEAgLTQ4NSw3ICs0ODYsNyBAQAogCiAgICAgaWYgKCF3bmRQdHItPnRleHQpIHJldHVybjsKICAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfRElTQUJMRUQpCi0gICAgICAgIFNldFRleHRDb2xvciggaERDLCBHZXRTeXNDb2xvcihDT0xPUl9HUkFZVEVYVCkgKTsKKyAgICAgICAgU2V0VGV4dENvbG9yKCBoREMsIEdldFN5c0NvbG9yMzIoQ09MT1JfR1JBWVRFWFQpICk7CiAgICAgcmMubGVmdCArPSAxMDsKICAgICBEcmF3VGV4dDE2KCBoREMsIHduZFB0ci0+dGV4dCwgLTEsICZyYywgRFRfU0lOR0xFTElORSB8IERUX05PQ0xJUCApOwogfQpkaWZmIC0tZ2l0IGEvY29udHJvbHMvY29tYm8uYyBiL2NvbnRyb2xzL2NvbWJvLmMKaW5kZXggNWVjZTg3Ny4uNzJhY2E0NCAxMDA2NDQKLS0tIGEvY29udHJvbHMvY29tYm8uYworKysgYi9jb250cm9scy9jb21iby5jCkBAIC0zOCw4ICszOCw4IEBACiAjZGVmaW5lIENCTE1NX0VER0UgICA0ICAgIC8qIGRpc3RhbmNlIGluc2lkZSBib3ggd2hpY2ggaXMgc2FtZSBhcyBtb3ZpbmcgbW91c2UKIAkJCSAgICAgb3V0c2lkZSBib3gsIHRvIHRyaWdnZXIgc2Nyb2xsaW5nIG9mIENCTCAqLwogCi1zdGF0aWMgQk9PTCBDQkNoZWNrU2l6ZShIV05EIGh3bmQpOwotc3RhdGljIEJPT0wgQ0JMQ2hlY2tTaXplKEhXTkQgaHduZCk7CitzdGF0aWMgQk9PTCBDQkNoZWNrU2l6ZShIV05EMTYgaHduZCk7CitzdGF0aWMgQk9PTCBDQkxDaGVja1NpemUoSFdORDE2IGh3bmQpOwogCiBzdGF0aWMgSEJJVE1BUDE2IGhDb21ib0JpdCA9IDA7CiBzdGF0aWMgV09SRCBDQml0SGVpZ2h0LCBDQml0V2lkdGg7CkBAIC01NiwxNyArNTYsMTcgQEAKICAgcmV0dXJuIDA7CiB9CiAKLUxQSEVBRENPTUJPIENvbWJvR2V0U3RvcmFnZUhlYWRlcihIV05EIGh3bmQpCitMUEhFQURDT01CTyBDb21ib0dldFN0b3JhZ2VIZWFkZXIoSFdORDE2IGh3bmQpCiB7CiAgIHJldHVybiAoTFBIRUFEQ09NQk8pR2V0V2luZG93TG9uZzMyQShod25kLDQpOwogfQogCi1MUEhFQURMSVNUIENvbWJvR2V0TGlzdEhlYWRlcihIV05EIGh3bmQpCitMUEhFQURMSVNUIENvbWJvR2V0TGlzdEhlYWRlcihIV05EMTYgaHduZCkKIHsKICAgcmV0dXJuIChMUEhFQURMSVNUKUdldFdpbmRvd0xvbmczMkEoaHduZCwwKTsKIH0KIAotaW50IENyZWF0ZUNvbWJvU3RydWN0KEhXTkQgaHduZCwgTE9ORyBzdHlsZSkKK2ludCBDcmVhdGVDb21ib1N0cnVjdChIV05EMTYgaHduZCwgTE9ORyBzdHlsZSkKIHsKICAgTFBIRUFEQ09NQk8gbHBoYzsKIApAQCAtODEsNyArODEsNyBAQAogICByZXR1cm4gVFJVRTsKIH0KIAotdm9pZCBDb21ib1VwZGF0ZVdpbmRvdyhIV05EIGh3bmQsIExQSEVBRExJU1QgbHBobCwgTFBIRUFEQ09NQk8gbHBoYywgQk9PTCByZXBhaW50KQordm9pZCBDb21ib1VwZGF0ZVdpbmRvdyhIV05EMTYgaHduZCwgTFBIRUFETElTVCBscGhsLCBMUEhFQURDT01CTyBscGhjLCBCT09MIHJlcGFpbnQpCiB7CiAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoaHduZCk7CiAKQEAgLTkzLDcgKzkzLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENCTkNDcmVhdGUKICAqLwotc3RhdGljIExSRVNVTFQgQ0JOQ0NyZWF0ZShIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3N0YXRpYyBMUkVTVUxUIENCTkNDcmVhdGUoSFdORDE2IGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgQ1JFQVRFU1RSVUNUMTYgKmNyZWF0ZVN0cnVjdDsKIApAQCAtMTExLDcgKzExMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDQkNyZWF0ZQogICovCi1zdGF0aWMgTFJFU1VMVCBDQkNyZWF0ZShIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3N0YXRpYyBMUkVTVUxUIENCQ3JlYXRlKEhXTkQxNiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIExQSEVBRExJU1QgICBscGhsOwogICBMUEhFQURDT01CTyAgbHBoYzsKQEAgLTEyMSw3ICsxMjEsNyBAQAogICBXTkQqICAgICAgICAgd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoaHduZCk7CiAgIGNoYXIgY2xhc3NOYW1lW10gPSAiQ09NQk9MQk9YIjsgIC8qIEhhY2sgc28gdGhhdCBjbGFzcyBuYW1lcyBhcmUgPiAweDEwMDAwICovCiAgIGNoYXIgZWRpdE5hbWVbXSA9ICJFRElUIjsKLSAgSFdORCBod25kcD0wOworICBIV05EMTYgaHduZHA9MDsKIAogICAvKiB0cmFuc2xhdGUgY29tYm8gaW50byBsaXN0Ym94IHN0eWxlcyAqLwogICBjc3R5bGUgfD0gV1NfQk9SREVSOwpAQCAtMjA1LDcgKzIwNSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDQkRlc3Ryb3kKICAqLwotc3RhdGljIExSRVNVTFQgQ0JEZXN0cm95KEhXTkQgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorc3RhdGljIExSRVNVTFQgQ0JEZXN0cm95KEhXTkQxNiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIExQSEVBRENPTUJPIGxwaGMgPSBDb21ib0dldFN0b3JhZ2VIZWFkZXIoaHduZCk7CiAKQEAgLTIxNyw3ICsyMTcsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ0JQYWludAogICovCi1zdGF0aWMgTFJFU1VMVCBDQlBhaW50KEhXTkQgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorc3RhdGljIExSRVNVTFQgQ0JQYWludChIV05EMTYgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICBMUEhFQURMSVNUIGxwaGwgPSBDb21ib0dldExpc3RIZWFkZXIoaHduZCk7CiAgIExQSEVBRENPTUJPIGxwaGMgPSBDb21ib0dldFN0b3JhZ2VIZWFkZXIoaHduZCk7CkBAIC0yNzcsNyArMjc3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENCR2V0RGxnQ29kZQogICovCi1zdGF0aWMgTFJFU1VMVCBDQkdldERsZ0NvZGUoSFdORCBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitzdGF0aWMgTFJFU1VMVCBDQkdldERsZ0NvZGUoSFdORDE2IGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgcmV0dXJuIERMR0NfV0FOVEFSUk9XUyB8IERMR0NfV0FOVENIQVJTOwogfQpAQCAtMjg1LDcgKzI4NSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDQkxCdXR0b25Eb3duCiAgKi8KLXN0YXRpYyBMUkVTVUxUIENCTEJ1dHRvbkRvd24oSFdORCBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitzdGF0aWMgTFJFU1VMVCBDQkxCdXR0b25Eb3duKEhXTkQxNiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIExQSEVBRENPTUJPIGxwaGMgPSBDb21ib0dldFN0b3JhZ2VIZWFkZXIoaHduZCk7CiAgIFNlbmRNZXNzYWdlMTYoaHduZCxDQl9TSE9XRFJPUERPV04xNiwhbHBoYy0+RHJvcERvd25WaXNpYmxlLDApOwpAQCAtMjk1LDcgKzI5NSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDQktleURvd24KICAqLwotc3RhdGljIExSRVNVTFQgQ0JLZXlEb3duKEhXTkQgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorc3RhdGljIExSRVNVTFQgQ0JLZXlEb3duKEhXTkQxNiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIExQSEVBRExJU1QgbHBobCA9IENvbWJvR2V0TGlzdEhlYWRlcihod25kKTsKICAgV09SRCAgICAgICBuZXdGb2N1c2VkID0gbHBobC0+SXRlbUZvY3VzZWQ7CkBAIC0zMzUsNyArMzM1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENCQ2hhcgogICovCi1zdGF0aWMgTFJFU1VMVCBDQkNoYXIoSFdORCBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitzdGF0aWMgTFJFU1VMVCBDQkNoYXIoSFdORDE2IGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgTFBIRUFETElTVCBscGhsID0gQ29tYm9HZXRMaXN0SGVhZGVyKGh3bmQpOwogICBXT1JEICAgICAgIG5ld0ZvY3VzZWQ7CkBAIC0zNjEsNyArMzYxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENCS2lsbEZvY3VzCiAgKi8KLXN0YXRpYyBMUkVTVUxUIENCS2lsbEZvY3VzKEhXTkQgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorc3RhdGljIExSRVNVTFQgQ0JLaWxsRm9jdXMoSFdORDE2IGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgcmV0dXJuIDA7CiB9CkBAIC0zNjksNyArMzY5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENCU2V0Rm9jdXMKICAqLwotc3RhdGljIExSRVNVTFQgQ0JTZXRGb2N1cyhIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3N0YXRpYyBMUkVTVUxUIENCU2V0Rm9jdXMoSFdORDE2IGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgcmV0dXJuIDA7CiB9CkBAIC0zNzcsNyArMzc3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENCUmVzZXRDb250ZW50CiAgKi8KLXN0YXRpYyBMUkVTVUxUIENCUmVzZXRDb250ZW50KEhXTkQgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorc3RhdGljIExSRVNVTFQgQ0JSZXNldENvbnRlbnQoSFdORDE2IGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgTFBIRUFETElTVCBscGhsID0gQ29tYm9HZXRMaXN0SGVhZGVyKGh3bmQpOwogICBMUEhFQURDT01CTyBscGhjID0gQ29tYm9HZXRTdG9yYWdlSGVhZGVyKGh3bmQpOwpAQCAtMzkwLDcgKzM5MCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDQkRpcgogICovCi1zdGF0aWMgTFJFU1VMVCBDQkRpcihIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3N0YXRpYyBMUkVTVUxUIENCRGlyKEhXTkQxNiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIFdPUkQgd1JldDsKICAgTFBIRUFETElTVCBscGhsID0gQ29tYm9HZXRMaXN0SGVhZGVyKGh3bmQpOwpAQCAtNDA0LDcgKzQwNCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDQkluc2VydFN0cmluZwogICovCi1zdGF0aWMgTFJFU1VMVCBDQkluc2VydFN0cmluZyhIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3N0YXRpYyBMUkVTVUxUIENCSW5zZXJ0U3RyaW5nKEhXTkQxNiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIFdPUkQgIHdSZXQ7CiAgIExQSEVBRExJU1QgbHBobCA9IENvbWJvR2V0TGlzdEhlYWRlcihod25kKTsKQEAgLTQyMSw3ICs0MjEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ0JBZGRTdHJpbmcKICAqLwotc3RhdGljIExSRVNVTFQgQ0JBZGRTdHJpbmcoSFdORCBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitzdGF0aWMgTFJFU1VMVCBDQkFkZFN0cmluZyhIV05EMTYgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICBXT1JEICB3UmV0OwogICBMUEhFQURMSVNUIGxwaGwgPSBDb21ib0dldExpc3RIZWFkZXIoaHduZCk7CkBAIC00MzYsNyArNDM2LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENCRGVsZXRlU3RyaW5nCiAgKi8KLXN0YXRpYyBMUkVTVUxUIENCRGVsZXRlU3RyaW5nKEhXTkQgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorc3RhdGljIExSRVNVTFQgQ0JEZWxldGVTdHJpbmcoSFdORDE2IGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgTFBIRUFETElTVCBscGhsID0gQ29tYm9HZXRMaXN0SGVhZGVyKGh3bmQpOwogICBMUEhFQURDT01CTyBscGhjID0gQ29tYm9HZXRTdG9yYWdlSGVhZGVyKGh3bmQpOwpAQCAtNDQ5LDcgKzQ0OSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDQlNlbGVjdFN0cmluZwogICovCi1zdGF0aWMgTFJFU1VMVCBDQlNlbGVjdFN0cmluZyhIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3N0YXRpYyBMUkVTVUxUIENCU2VsZWN0U3RyaW5nKEhXTkQxNiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIExQSEVBRExJU1QgbHBobCA9IENvbWJvR2V0TGlzdEhlYWRlcihod25kKTsKICAgV09SRCAgd1JldDsKQEAgLTQ2NCw3ICs0NjQsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ0JGaW5kU3RyaW5nCiAgKi8KLXN0YXRpYyBMUkVTVUxUIENCRmluZFN0cmluZyhIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3N0YXRpYyBMUkVTVUxUIENCRmluZFN0cmluZyhIV05EMTYgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICBMUEhFQURMSVNUIGxwaGwgPSBDb21ib0dldExpc3RIZWFkZXIoaHduZCk7CiAgIHJldHVybiBMaXN0Qm94RmluZFN0cmluZyhscGhsLCB3UGFyYW0sIChTRUdQVFIpbFBhcmFtKTsKQEAgLTQ3Myw3ICs0NzMsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ0JGaW5kU3RyaW5nRXhhY3QKICAqLwotc3RhdGljIExSRVNVTFQgQ0JGaW5kU3RyaW5nRXhhY3QoSFdORCBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitzdGF0aWMgTFJFU1VMVCBDQkZpbmRTdHJpbmdFeGFjdChIV05EMTYgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICBMUEhFQURMSVNUIGxwaGwgPSBDb21ib0dldExpc3RIZWFkZXIoaHduZCk7CiAgIHJldHVybiBMaXN0Qm94RmluZFN0cmluZ0V4YWN0KGxwaGwsIHdQYXJhbSwgKFNFR1BUUilsUGFyYW0pOwpAQCAtNDgyLDcgKzQ4Miw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDQkdldENvdW50CiAgKi8KLXN0YXRpYyBMUkVTVUxUIENCR2V0Q291bnQoSFdORCBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitzdGF0aWMgTFJFU1VMVCBDQkdldENvdW50KEhXTkQxNiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIExQSEVBRExJU1QgbHBobCA9IENvbWJvR2V0TGlzdEhlYWRlcihod25kKTsKICAgcmV0dXJuIGxwaGwtPkl0ZW1zQ291bnQ7CkBAIC00OTEsNyArNDkxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENCU2V0Q3VyU2VsCiAgKi8KLXN0YXRpYyBMUkVTVUxUIENCU2V0Q3VyU2VsKEhXTkQgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorc3RhdGljIExSRVNVTFQgQ0JTZXRDdXJTZWwoSFdORDE2IGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgTFBIRUFETElTVCBscGhsID0gQ29tYm9HZXRMaXN0SGVhZGVyKGh3bmQpOwogICBXT1JEICB3UmV0OwpAQCAtNTA5LDcgKzUwOSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDQkdldEN1clNlbAogICovCi1zdGF0aWMgTFJFU1VMVCBDQkdldEN1clNlbChIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3N0YXRpYyBMUkVTVUxUIENCR2V0Q3VyU2VsKEhXTkQxNiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIExQSEVBRExJU1QgbHBobCA9IENvbWJvR2V0TGlzdEhlYWRlcihod25kKTsKICAgcmV0dXJuIGxwaGwtPkl0ZW1Gb2N1c2VkOwpAQCAtNTE4LDcgKzUxOCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDQkdldEl0ZW1IZWlnaHQKICAqLwotc3RhdGljIExSRVNVTFQgQ0JHZXRJdGVtSGVpZ2h0KEhXTkQgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorc3RhdGljIExSRVNVTFQgQ0JHZXRJdGVtSGVpZ2h0KEhXTkQxNiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIExQSEVBRExJU1QgbHBobCA9IENvbWJvR2V0TGlzdEhlYWRlcihod25kKTsKICAgTFBMSVNUU1RSVUNUIGxwbHMgPSBMaXN0Qm94R2V0SXRlbSAobHBobCwgd1BhcmFtKTsKQEAgLTUzMCw3ICs1MzAsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ0JTZXRJdGVtSGVpZ2h0CiAgKi8KLXN0YXRpYyBMUkVTVUxUIENCU2V0SXRlbUhlaWdodChIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3N0YXRpYyBMUkVTVUxUIENCU2V0SXRlbUhlaWdodChIV05EMTYgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICBMUEhFQURMSVNUIGxwaGwgPSBDb21ib0dldExpc3RIZWFkZXIoaHduZCk7CiAgIHJldHVybiBMaXN0Qm94U2V0SXRlbUhlaWdodChscGhsLCB3UGFyYW0sIGxQYXJhbSk7CkBAIC01MzksNyArNTM5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENCU2V0UmVkcmF3CiAgKi8KLXN0YXRpYyBMUkVTVUxUIENCU2V0UmVkcmF3KEhXTkQgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorc3RhdGljIExSRVNVTFQgQ0JTZXRSZWRyYXcoSFdORDE2IGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgTFBIRUFETElTVCBscGhsID0gQ29tYm9HZXRMaXN0SGVhZGVyKGh3bmQpOwogICBscGhsLT5iUmVkcmF3RmxhZyA9IHdQYXJhbTsKQEAgLTU0OSw3ICs1NDksNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ0JTZXRGb250CiAgKi8KLXN0YXRpYyBMUkVTVUxUIENCU2V0Rm9udChIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3N0YXRpYyBMUkVTVUxUIENCU2V0Rm9udChIV05EMTYgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICBMUEhFQURMSVNUICBscGhsID0gQ29tYm9HZXRMaXN0SGVhZGVyKGh3bmQpOwogICBMUEhFQURDT01CTyBscGhjID0gQ29tYm9HZXRTdG9yYWdlSGVhZGVyKGh3bmQpOwpAQCAtNTY2LDcgKzU2Niw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDQkdldExCVGV4dExlbgogICovCi1zdGF0aWMgTFJFU1VMVCBDQkdldExCVGV4dExlbihIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3N0YXRpYyBMUkVTVUxUIENCR2V0TEJUZXh0TGVuKEhXTkQxNiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIExQSEVBRExJU1QgICBscGhsID0gQ29tYm9HZXRMaXN0SGVhZGVyKGh3bmQpOwogICBMUExJU1RTVFJVQ1QgbHBscyA9IExpc3RCb3hHZXRJdGVtKGxwaGwsd1BhcmFtKTsKQEAgLTU3OCw3ICs1NzgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ0JHZXRMQlRleHQKICAqLwotc3RhdGljIExSRVNVTFQgQ0JHZXRMQlRleHQoSFdORCBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitzdGF0aWMgTFJFU1VMVCBDQkdldExCVGV4dChIV05EMTYgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICBMUEhFQURMSVNUIGxwaGwgPSBDb21ib0dldExpc3RIZWFkZXIoaHduZCk7CiAgIHJldHVybiBMaXN0Qm94R2V0VGV4dChscGhsLCB3UGFyYW0sIChMUFNUUilQVFJfU0VHX1RPX0xJTihsUGFyYW0pKTsKQEAgLTU4Nyw3ICs1ODcsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ0JHZXRJdGVtRGF0YQogICovCi1zdGF0aWMgTFJFU1VMVCBDQkdldEl0ZW1EYXRhKEhXTkQgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorc3RhdGljIExSRVNVTFQgQ0JHZXRJdGVtRGF0YShIV05EMTYgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICBMUEhFQURMSVNUIGxwaGwgPSBDb21ib0dldExpc3RIZWFkZXIoaHduZCk7CiAgIHJldHVybiBMaXN0Qm94R2V0SXRlbURhdGEobHBobCwgd1BhcmFtKTsKQEAgLTU5Niw3ICs1OTYsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ0JTZXRJdGVtRGF0YQogICovCi1zdGF0aWMgTFJFU1VMVCBDQlNldEl0ZW1EYXRhKEhXTkQgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorc3RhdGljIExSRVNVTFQgQ0JTZXRJdGVtRGF0YShIV05EMTYgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICBMUEhFQURMSVNUIGxwaGwgPSBDb21ib0dldExpc3RIZWFkZXIoaHduZCk7CiAgIHJldHVybiBMaXN0Qm94U2V0SXRlbURhdGEobHBobCwgd1BhcmFtLCBsUGFyYW0pOwpAQCAtNjA1LDcgKzYwNSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDQlNob3dEcm9wRG93bgogICovCi1zdGF0aWMgTFJFU1VMVCBDQlNob3dEcm9wRG93bihIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3N0YXRpYyBMUkVTVUxUIENCU2hvd0Ryb3BEb3duKEhXTkQxNiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIExQSEVBRENPTUJPIGxwaGMgPSBDb21ib0dldFN0b3JhZ2VIZWFkZXIoaHduZCk7CiAgIFJFQ1QzMiByZWN0OwpAQCAtNjI4LDcgKzYyOCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgIENCQ2hlY2tTaXplCiAgKi8KLXN0YXRpYyBCT09MIENCQ2hlY2tTaXplKEhXTkQgaHduZCkKK3N0YXRpYyBCT09MIENCQ2hlY2tTaXplKEhXTkQxNiBod25kKQogewogICBMUEhFQURDT01CTyAgbHBoYyA9IENvbWJvR2V0U3RvcmFnZUhlYWRlcihod25kKTsKICAgTFBIRUFETElTVCAgIGxwaGwgPSBDb21ib0dldExpc3RIZWFkZXIoaHduZCk7CkBAIC02OTAsNyArNjkwLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENCQ29tbWFuZCAgICAgICAgCiAgKi8KLXN0YXRpYyBMUkVTVUxUIENCQ29tbWFuZChIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3N0YXRpYyBMUkVTVUxUIENCQ29tbWFuZChIV05EMTYgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICBMUEhFQURDT01CTyBscGhjID0gQ29tYm9HZXRTdG9yYWdlSGVhZGVyKGh3bmQpOwogICBMUEhFQURMSVNUIGxwaGwgPSBDb21ib0dldExpc3RIZWFkZXIoaHduZCk7CkBAIC03NTAsNyArNzUwLDcgQEAKICAqICAgICAgICAgICBDQkdldEVkaXRTZWwKICAqIExvb2sgb3V0ISBVbmRlciBXaW4zMiwgdGhlIHBhcmFtZXRlciBwYWNraW5nIGlzIHZlcnkgZGlmZmVyZW50LgogICovCi1zdGF0aWMgTFJFU1VMVCBDQkdldEVkaXRTZWwoSFdORCBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitzdGF0aWMgTFJFU1VMVCBDQkdldEVkaXRTZWwoSFdORDE2IGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBMUEhFQURDT01CTyBscGhjID0gQ29tYm9HZXRTdG9yYWdlSGVhZGVyKGh3bmQpOwogCkBAIC03NjQsNyArNzY0LDcgQEAKICAqICAgICAgICAgICBDQlNldEVkaXRTZWwKICAqIExvb2sgb3V0ISBVbmRlciBXaW4zMiwgdGhlIHBhcmFtZXRlciBwYWNraW5nIGlzIHZlcnkgZGlmZmVyZW50LgogICovCi1zdGF0aWMgTFJFU1VMVCBDQlNldEVkaXRTZWwoSFdORCBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitzdGF0aWMgTFJFU1VMVCBDQlNldEVkaXRTZWwoSFdORDE2IGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBMUEhFQURDT01CTyBscGhjID0gQ29tYm9HZXRTdG9yYWdlSGVhZGVyKGh3bmQpOwogCkBAIC03NzYsNyArNzc2LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENCR2V0VGV4dAogICovCi1zdGF0aWMgTFJFU1VMVCBDQkdldFRleHQoSFdORCBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitzdGF0aWMgTFJFU1VMVCBDQkdldFRleHQoSFdORDE2IGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBMUEhFQURDT01CTyBscGhjID0gQ29tYm9HZXRTdG9yYWdlSGVhZGVyKGh3bmQpOwogCkBAIC03ODYsNyArNzg2LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENvbWJvV25kUHJvYwogICovCi1MUkVTVUxUIENvbWJvQm94V25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorTFJFU1VMVCBDb21ib0JveFduZFByb2MoSFdORDE2IGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICAgIHN3aXRjaChtZXNzYWdlKSB7CQogICAgICBjYXNlIFdNX05DQ1JFQVRFOiByZXR1cm4gQ0JOQ0NyZWF0ZShod25kLCB3UGFyYW0sIGxQYXJhbSk7CkBAIC04MzEsMTIgKzgzMSwxMiBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBDb21ib0xCb3ggY29kZSBzdGFydHMgaGVyZSAqLwogCi1IV05EIENMQm94R2V0Q29tYm8oSFdORCBod25kKQorSFdORDE2IENMQm94R2V0Q29tYm8oSFdORDE2IGh3bmQpCiB7Ci0gIHJldHVybiAoSFdORClHZXRXaW5kb3dMb25nMzJBKGh3bmQsMCk7CisgIHJldHVybiAoSFdORDE2KUdldFdpbmRvd0xvbmczMkEoaHduZCwwKTsKIH0KIAotTFBIRUFETElTVCBDTEJveEdldExpc3RIZWFkZXIoSFdORCBod25kKQorTFBIRUFETElTVCBDTEJveEdldExpc3RIZWFkZXIoSFdORDE2IGh3bmQpCiB7CiAgIHJldHVybiBDb21ib0dldExpc3RIZWFkZXIoQ0xCb3hHZXRDb21ibyhod25kKSk7CiB9CkBAIC04NDQsNyArODQ0LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENCTENyZWF0ZQogICovCi1zdGF0aWMgTFJFU1VMVCBDQkxDcmVhdGUoIEhXTkQgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtICkKK3N0YXRpYyBMUkVTVUxUIENCTENyZWF0ZSggSFdORDE2IGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSApCiB7CiAgIENSRUFURVNUUlVDVDE2ICpjcmVhdGVTdHJ1Y3QgPSAoQ1JFQVRFU1RSVUNUMTYgKilQVFJfU0VHX1RPX0xJTihsUGFyYW0pOwogICBTZXRXaW5kb3dMb25nMzJBKGh3bmQsMCwoTE9ORyljcmVhdGVTdHJ1Y3QtPmxwQ3JlYXRlUGFyYW1zKTsKQEAgLTg1NCw3ICs4NTQsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ0JMR2V0RGxnQ29kZQogICovCi1zdGF0aWMgTFJFU1VMVCBDQkxHZXREbGdDb2RlKCBIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSApCitzdGF0aWMgTFJFU1VMVCBDQkxHZXREbGdDb2RlKCBIV05EMTYgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtICkKIHsKICAgcmV0dXJuIERMR0NfV0FOVEFSUk9XUyB8IERMR0NfV0FOVENIQVJTOwogfQpAQCAtODYyLDcgKzg2Miw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDQkxLZXlEb3duCiAgKi8KLXN0YXRpYyBMUkVTVUxUIENCTEtleURvd24oIEhXTkQgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtICkgCitzdGF0aWMgTFJFU1VMVCBDQkxLZXlEb3duKCBIV05EMTYgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtICkgCiB7CiAgIExQSEVBRExJU1QgbHBobCA9IENMQm94R2V0TGlzdEhlYWRlcihod25kKTsKICAgV09SRCBuZXdGb2N1c2VkID0gbHBobC0+SXRlbUZvY3VzZWQ7CkBAIC05MTAsNyArOTEwLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENCTENoYXIKICAqLwotc3RhdGljIExSRVNVTFQgQ0JMQ2hhciggSFdORCBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0gKQorc3RhdGljIExSRVNVTFQgQ0JMQ2hhciggSFdORDE2IGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSApCiB7CiAgIHJldHVybiAwOwogfQpAQCAtOTE4LDcgKzkxOCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDQkxQYWludAogICovCi1zdGF0aWMgTFJFU1VMVCBDQkxQYWludCggSFdORCBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0gKQorc3RhdGljIExSRVNVTFQgQ0JMUGFpbnQoIEhXTkQxNiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0gKQogewogICBMUEhFQURMSVNUICAgbHBobCA9IENMQm94R2V0TGlzdEhlYWRlcihod25kKTsKICAgTFBMSVNUU1RSVUNUIGxwbHM7CkBAIC05MjYsNyArOTI2LDcgQEAKICAgSEJSVVNIMzIgaEJydXNoOwogICBIRk9OVDMyIGhPbGRGb250OwogICBXTkQgKiB3bmRQdHIgPSBXSU5fRmluZFduZFB0cihod25kKTsKLSAgSFdORCAgY29tYm9od25kID0gQ0xCb3hHZXRDb21ibyhod25kKTsKKyAgSFdORDE2ICBjb21ib2h3bmQgPSBDTEJveEdldENvbWJvKGh3bmQpOwogICBIREMxNiBoZGM7CiAgIFJFQ1QxNiByZWN0OwogICBpbnQgICBpLCB0b3AsIGhlaWdodDsKQEAgLTEwMDAsNyArMTAwMCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDQkxLaWxsRm9jdXMKICAqLwotc3RhdGljIExSRVNVTFQgQ0JMS2lsbEZvY3VzKCBIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSApCitzdGF0aWMgTFJFU1VMVCBDQkxLaWxsRm9jdXMoIEhXTkQxNiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0gKQogewogLyogIFNlbmRNZXNzYWdlMTYoQ0xCb3hHZXRDb21ibyhod25kKSxDQl9TSE9XRFJPUERPV04xNiwwLDApOyovCiAgIHJldHVybiAwOwpAQCAtMTAwOSw3ICsxMDA5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENCTEFjdGl2YXRlCiAgKi8KLXN0YXRpYyBMUkVTVUxUIENCTEFjdGl2YXRlKCBIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSApCitzdGF0aWMgTFJFU1VMVCBDQkxBY3RpdmF0ZSggSFdORDE2IGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSApCiB7CiAgIGlmICh3UGFyYW0gPT0gV0FfSU5BQ1RJVkUpCiAgICAgU2VuZE1lc3NhZ2UxNihDTEJveEdldENvbWJvKGh3bmQpLENCX1NIT1dEUk9QRE9XTjE2LDAsMCk7CkBAIC0xMDE5LDcgKzEwMTksNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ0JMTEJ1dHRvbkRvd24KICAqLwotc3RhdGljIExSRVNVTFQgQ0JMTEJ1dHRvbkRvd24oIEhXTkQgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtICkKK3N0YXRpYyBMUkVTVUxUIENCTExCdXR0b25Eb3duKCBIV05EMTYgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtICkKIHsKICAgTFBIRUFETElTVCBscGhsID0gQ0xCb3hHZXRMaXN0SGVhZGVyKGh3bmQpOwogICBpbnQgICAgICAgIHk7CkBAIC0xMDQ0LDcgKzEwNDQsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ0JMTEJ1dHRvblVwCiAgKi8KLXN0YXRpYyBMUkVTVUxUIENCTExCdXR0b25VcCggSFdORCBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0gKQorc3RhdGljIExSRVNVTFQgQ0JMTEJ1dHRvblVwKCBIV05EMTYgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtICkKIHsKICAgTFBIRUFETElTVCBscGhsID0gQ0xCb3hHZXRMaXN0SGVhZGVyKGh3bmQpOwogCkBAIC0xMDY5LDcgKzEwNjksNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ0JMTW91c2VNb3ZlCiAgKi8KLXN0YXRpYyBMUkVTVUxUIENCTE1vdXNlTW92ZSggSFdORCBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0gKQorc3RhdGljIExSRVNVTFQgQ0JMTW91c2VNb3ZlKCBIV05EMTYgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtICkKIHsKICAgTFBIRUFETElTVCBscGhsID0gQ0xCb3hHZXRMaXN0SGVhZGVyKGh3bmQpOwogICBzaG9ydCB5OwpAQCAtMTExNiw3ICsxMTE2LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENCTFZTY3JvbGwKICAqLwotc3RhdGljIExSRVNVTFQgQ0JMVlNjcm9sbCggSFdORCBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0gKQorc3RhdGljIExSRVNVTFQgQ0JMVlNjcm9sbCggSFdORDE2IGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSApCiB7CiAgIExQSEVBRExJU1QgbHBobCA9IENMQm94R2V0TGlzdEhlYWRlcihod25kKTsKICAgaW50ICB5OwpAQCAtMTE2NSwxMiArMTE2NSwxMiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICBDQkxDaGVja1NpemUKICAqLwotc3RhdGljIEJPT0wgQ0JMQ2hlY2tTaXplKEhXTkQgaHduZCkKK3N0YXRpYyBCT09MIENCTENoZWNrU2l6ZShIV05EMTYgaHduZCkKIHsKICAgTFBIRUFEQ09NQk8gIGxwaGMgPSBDb21ib0dldFN0b3JhZ2VIZWFkZXIoaHduZCk7CiAgIExQSEVBRExJU1QgICBscGhsID0gQ29tYm9HZXRMaXN0SGVhZGVyKGh3bmQpOwogICBMUExJU1RTVFJVQ1QgbHBsczsKLSAgSFdORCAgICAgICAgIGhXbmRMQm94OworICBIV05EMTYgICAgICAgICBoV25kTEJveDsKICAgUkVDVDE2IGNSZWN0LHdSZWN0LGxSZWN0LGx3UmVjdDsKICAgaW50IHRvdGhlaWdodCxkdzsKICAgY2hhciBjbGFzc05hbWVbODBdOwpAQCAtMTIxOCw3ICsxMjE4LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENvbWJvTEJveFduZFByb2MKICAqLwotTFJFU1VMVCBDb21ib0xCb3hXbmRQcm9jKEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitMUkVTVUxUIENvbWJvTEJveFduZFByb2MoSFdORDE2IGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICAgIHN3aXRjaChtZXNzYWdlKSB7CQogICAgICBjYXNlIFdNX0NSRUFURTogcmV0dXJuIENCTENyZWF0ZShod25kLCB3UGFyYW0sIGxQYXJhbSk7CmRpZmYgLS1naXQgYS9jb250cm9scy9kZXNrdG9wLmMgYi9jb250cm9scy9kZXNrdG9wLmMKaW5kZXggODk1ZmVjNC4uZGI4NzZhOCAxMDA2NDQKLS0tIGEvY29udHJvbHMvZGVza3RvcC5jCisrKyBiL2NvbnRyb2xzL2Rlc2t0b3AuYwpAQCAtOTIsNyArOTIsNyBAQAogICAgIHsKIAkgIC8qIFNldCBjb2xvcnMgaW4gY2FzZSBwYXR0ZXJuIGlzIGEgbW9ub2Nocm9tZSBiaXRtYXAgKi8KIAlTZXRCa0NvbG9yKCBoZGMsIFJHQigwLDAsMCkgKTsKLQlTZXRUZXh0Q29sb3IoIGhkYywgR2V0U3lzQ29sb3IoQ09MT1JfQkFDS0dST1VORCkgKTsKKwlTZXRUZXh0Q29sb3IoIGhkYywgR2V0U3lzQ29sb3IzMihDT0xPUl9CQUNLR1JPVU5EKSApOwogCUZpbGxSZWN0MzIoIGhkYywgJnJlY3QsIGluZm9QdHItPmhicnVzaFBhdHRlcm4gKTsKICAgICB9CiAKQEAgLTE1OSw3ICsxNTksNyBAQAogCUV4aXRXaW5kb3dzMTYoIDAsIDAgKTsgCiAKICAgICBjYXNlIFdNX1NFVENVUlNPUjoKLSAgICAgICAgcmV0dXJuIChMUkVTVUxUKVNldEN1cnNvciggTG9hZEN1cnNvcjE2KCAwLCBJRENfQVJST1cgKSApOworICAgICAgICByZXR1cm4gKExSRVNVTFQpU2V0Q3Vyc29yMTYoIExvYWRDdXJzb3IxNiggMCwgSURDX0FSUk9XICkgKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIDA7CkBAIC0yNDcsNyArMjQ3LDcgQEAKIAlpbmZvUHRyLT5oYnJ1c2hQYXR0ZXJuID0gQ3JlYXRlUGF0dGVybkJydXNoMzIoIGhiaXRtYXAgKTsKIAlEZWxldGVPYmplY3QzMiggaGJpdG1hcCApOwogICAgIH0KLSAgICBlbHNlIGluZm9QdHItPmhicnVzaFBhdHRlcm4gPSBDcmVhdGVTb2xpZEJydXNoMzIoIEdldFN5c0NvbG9yKENPTE9SX0JBQ0tHUk9VTkQpICk7CisgICAgZWxzZSBpbmZvUHRyLT5oYnJ1c2hQYXR0ZXJuID0gQ3JlYXRlU29saWRCcnVzaDMyKCBHZXRTeXNDb2xvcjMyKENPTE9SX0JBQ0tHUk9VTkQpICk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL2VkaXQuYyBiL2NvbnRyb2xzL2VkaXQuYwppbmRleCBiMzMzMjIyLi44ZTdiNTlmIDEwMDY0NAotLS0gYS9jb250cm9scy9lZGl0LmMKKysrIGIvY29udHJvbHMvZWRpdC5jCkBAIC05OCw3ICs5OCw3IEBACiAJSU5UMzIgU2VsU3RhcnQ7CQkvKiBvZmZzZXQgb2Ygc2VsZWN0aW9uIHN0YXJ0LCA9PSBTZWxFbmQgaWYgbm8gc2VsZWN0aW9uICovCiAJSU5UMzIgU2VsRW5kOwkJLyogb2Zmc2V0IG9mIHNlbGVjdGlvbiBlbmQgPT0gY3VycmVudCBjYXJldCBwb3NpdGlvbiAqLwogCUlOVDMyIE51bVRhYlN0b3BzOwotCUxQSU5UMTYgVGFiU3RvcHM7CisJTFBJTlQzMiBUYWJTdG9wczsKIAkvKgogCSAqCUZJWE1FOiBUaGUgZm9sbG93aW5nIHNob3VsZCBwcm9iYWJseSBiZSBhIChWT0lEICopIHRoYXQgaXMKIAkgKgl0eXBlY2FzdCB0byBlaXRoZXIgMTYtIG9yIDMyLWJpdCBjYWxsYmFjayB3aGVuIHVzZWQsCkBAIC02NjcsMTUgKzY2Nyw4IEBACiAJCWxSZXN1bHQgPSBFRElUX1dNX0NvbW1hbmQod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CiAJCWJyZWFrOwogCi0vKgotICoJRklYTUU6IHdoZW4gdGhpcyBvbmUgaXMgYWRkZWQgdG8gV0lORSwgY2hhbmdlIFJCVVRUT05VUCB0byBDT05URVhUTUVOVQotICoJRnVydGhlcm1vcmUsIGNvb3JkaW5hdGUgY29udmVyc2lvbiBzaG91bGQgbm8gbG9uZ2VyIGJlIHJlcXVpcmVkCi0gKgotICoJY2FzZSBXTV9DT05URVhUTUVOVToKLSAqLwotIAljYXNlIFdNX1JCVVRUT05VUDoKLQkJRFBSSU5URl9FRElUX01TRzMyKCJXTV9SQlVUVE9OVVAiKTsKLQkJQ2xpZW50VG9TY3JlZW4xNih3bmRQdHItPmh3bmRTZWxmLCAoTFBQT0lOVDE2KSZsUGFyYW0pOworIAljYXNlIFdNX0NPTlRFWFRNRU5VOgorCQlEUFJJTlRGX0VESVRfTVNHMzIoIldNX0NPTlRFWFRNRU5VIik7CiAJCWxSZXN1bHQgPSBFRElUX1dNX0NvbnRleHRNZW51KHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOwogCQlicmVhazsKIApAQCAtODY1LDcgKzg1OCw3IEBACiAJCWVzLT5MaW5lRGVmc1swXS5vZmZzZXQgPSAwOwogCQllcy0+TGluZURlZnNbMF0ubGVuZ3RoID0gRURJVF9XTV9HZXRUZXh0TGVuZ3RoKHduZFB0ciwgMCwgMCk7CiAJCWVzLT5MaW5lRGVmc1swXS5lbmRpbmcgPSBFTkRfMDsKLQkJZXMtPlRleHRXaWR0aCA9IChJTlQzMilMT1dPUkQoR2V0VGFiYmVkVGV4dEV4dGVudChoZGMsIHRleHQsCisJCWVzLT5UZXh0V2lkdGggPSAoSU5UMzIpTE9XT1JEKEdldFRhYmJlZFRleHRFeHRlbnQzMkEoaGRjLCB0ZXh0LAogCQkJCQllcy0+TGluZURlZnNbMF0ubGVuZ3RoLAogCQkJCQllcy0+TnVtVGFiU3RvcHMsIGVzLT5UYWJTdG9wcykpOwogCX0gZWxzZSB7CkBAIC04ODIsNyArODc1LDcgQEAKIAkJCQllbmRpbmcgPSBFTkRfSEFSRDsKIAkJCQlsZW5ndGggPSBjcCAtIHN0YXJ0OwogCQkJfQotCQkJd2lkdGggPSAoSU5UMzIpTE9XT1JEKEdldFRhYmJlZFRleHRFeHRlbnQoaGRjLCBzdGFydCwgbGVuZ3RoLAorCQkJd2lkdGggPSAoSU5UMzIpTE9XT1JEKEdldFRhYmJlZFRleHRFeHRlbnQzMkEoaGRjLCBzdGFydCwgbGVuZ3RoLAogCQkJCQkJZXMtPk51bVRhYlN0b3BzLCBlcy0+VGFiU3RvcHMpKTsKIAogCQkJaWYgKElzV29yZFdyYXAod25kUHRyKSAmJiAod2lkdGggPiB3dykpIHsKQEAgLTg5MSw3ICs4ODQsNyBAQAogCQkJCQlwcmV2ID0gbmV4dDsKIAkJCQkJbmV4dCA9IEVESVRfQ2FsbFdvcmRCcmVha1Byb2Mod25kUHRyLCBzdGFydCwKIAkJCQkJCQlwcmV2ICsgMSwgbGVuZ3RoLCBXQl9SSUdIVCk7Ci0JCQkJCXdpZHRoID0gKElOVDMyKUxPV09SRChHZXRUYWJiZWRUZXh0RXh0ZW50KGhkYywgc3RhcnQsIG5leHQsCisJCQkJCXdpZHRoID0gKElOVDMyKUxPV09SRChHZXRUYWJiZWRUZXh0RXh0ZW50MzJBKGhkYywgc3RhcnQsIG5leHQsCiAJCQkJCQkJZXMtPk51bVRhYlN0b3BzLCBlcy0+VGFiU3RvcHMpKTsKIAkJCQl9IHdoaWxlICh3aWR0aCA8PSB3dyk7CiAJCQkJaWYgKCFwcmV2KSB7CkBAIC04OTksNyArODkyLDcgQEAKIAkJCQkJZG8gewogCQkJCQkJcHJldiA9IG5leHQ7CiAJCQkJCQluZXh0Kys7Ci0JCQkJCQl3aWR0aCA9IChJTlQzMilMT1dPUkQoR2V0VGFiYmVkVGV4dEV4dGVudChoZGMsIHN0YXJ0LCBuZXh0LAorCQkJCQkJd2lkdGggPSAoSU5UMzIpTE9XT1JEKEdldFRhYmJlZFRleHRFeHRlbnQzMkEoaGRjLCBzdGFydCwgbmV4dCwKIAkJCQkJCQkJZXMtPk51bVRhYlN0b3BzLCBlcy0+VGFiU3RvcHMpKTsKIAkJCQkJfSB3aGlsZSAod2lkdGggPD0gd3cpOwogCQkJCQlpZighcHJldikgcHJldiA9IDE7CkBAIC05MTEsNyArOTA0LDcgQEAKIAkJCQkJZW5kaW5nID0gRU5EX0RFTElNSVQ7CiAJCQkJfSBlbHNlCiAJCQkJCWVuZGluZyA9IEVORF9OT05FOwotCQkJCXdpZHRoID0gKElOVDMyKUxPV09SRChHZXRUYWJiZWRUZXh0RXh0ZW50KGhkYywgc3RhcnQsIGxlbmd0aCwKKwkJCQl3aWR0aCA9IChJTlQzMilMT1dPUkQoR2V0VGFiYmVkVGV4dEV4dGVudDMyQShoZGMsIHN0YXJ0LCBsZW5ndGgsCiAJCQkJCQkJZXMtPk51bVRhYlN0b3BzLCBlcy0+VGFiU3RvcHMpKTsKIAkJCX0KIApAQCAtMTc4NiwxMyArMTc3OSwxMyBAQAogCUJrQ29sb3IgPSBHZXRCa0NvbG9yMzIoaGRjKTsKIAlUZXh0Q29sb3IgPSBHZXRUZXh0Q29sb3IzMihoZGMpOwogCWlmIChyZXYpIHsKLQkJU2V0QmtDb2xvcihoZGMsIEdldFN5c0NvbG9yKENPTE9SX0hJR0hMSUdIVCkpOwotCQlTZXRUZXh0Q29sb3IoaGRjLCBHZXRTeXNDb2xvcihDT0xPUl9ISUdITElHSFRURVhUKSk7CisJCVNldEJrQ29sb3IoaGRjLCBHZXRTeXNDb2xvcjMyKENPTE9SX0hJR0hMSUdIVCkpOworCQlTZXRUZXh0Q29sb3IoaGRjLCBHZXRTeXNDb2xvcjMyKENPTE9SX0hJR0hMSUdIVFRFWFQpKTsKIAl9CiAJdGV4dCA9IEVESVRfR2V0UGFzc3dvcmRQb2ludGVyKHduZFB0cik7CiAJbGkgPSAoSU5UMzIpRURJVF9FTV9MaW5lSW5kZXgod25kUHRyLCBsaW5lLCAwKTsKIAl4b2ZmID0gRURJVF9HZXRYT2Zmc2V0KHduZFB0cik7Ci0JcmV0ID0gKElOVDMyKUxPV09SRChUYWJiZWRUZXh0T3V0KGhkYywgeCwgeSwgdGV4dCArIGxpICsgY29sLCBjb3VudCwKKwlyZXQgPSAoSU5UMzIpTE9XT1JEKFRhYmJlZFRleHRPdXQzMkEoaGRjLCB4LCB5LCB0ZXh0ICsgbGkgKyBjb2wsIGNvdW50LAogCQkJCQllcy0+TnVtVGFiU3RvcHMsIGVzLT5UYWJTdG9wcywgLXhvZmYpKTsKIAlmcmVlKHRleHQpOwogCWlmIChyZXYpIHsKQEAgLTE5MTEsNyArMTkwNCw3IEBACiAJaWYgKGhGb250KSBvbGRGb250ID0gU2VsZWN0T2JqZWN0MzIoaGRjLCBoRm9udCk7CiAJbGluZSA9IE1BWCgwLCBNSU4obGluZSwgbGMgLSAxKSk7CiAJY29sID0gTUlOKGNvbCwgbGwpOwotCXJldCA9IChJTlQzMilMT1dPUkQoR2V0VGFiYmVkVGV4dEV4dGVudChoZGMsCisJcmV0ID0gKElOVDMyKUxPV09SRChHZXRUYWJiZWRUZXh0RXh0ZW50MzJBKGhkYywKIAkJCXRleHQgKyBsaSwgY29sLAogCQkJZXMtPk51bVRhYlN0b3BzLCBlcy0+VGFiU3RvcHMpKSAtIHhvZmY7CiAJaWYgKGhGb250KSBTZWxlY3RPYmplY3QzMihoZGMsIG9sZEZvbnQpOwpAQCAtMjkxMCw3ICsyOTAzLDYgQEAKIHN0YXRpYyBMUkVTVUxUIEVESVRfRU1fU2V0VGFiU3RvcHMoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKIAlFRElUU1RBVEUgKmVzID0gRURJVFNUQVRFUFRSKHduZFB0cik7Ci0JSU5UMzIgaTsKIAogCWlmICghSXNNdWx0aUxpbmUod25kUHRyKSkKIAkJcmV0dXJuIEZBTFNFOwpAQCAtMjkyMCw5ICsyOTEyLDkgQEAKIAlpZiAoIXdQYXJhbSkKIAkJZXMtPlRhYlN0b3BzID0gTlVMTDsKIAllbHNlIHsKLQkJZXMtPlRhYlN0b3BzID0gKExQSU5UMTYpeG1hbGxvYyh3UGFyYW0gKiBzaXplb2YoSU5UMTYpKTsKLQkJZm9yICggaSA9IDAgOyBpIDwgKElOVDMyKXdQYXJhbSA7IGkrKyApCi0JCQllcy0+VGFiU3RvcHNbaV0gPSAoSU5UMTYpKChMUElOVDMyKWxQYXJhbSlbaV07CisJCWVzLT5UYWJTdG9wcyA9IChMUElOVDMyKXhtYWxsb2Mod1BhcmFtICogc2l6ZW9mKElOVDMyKSk7CisJCW1lbWNweSggZXMtPlRhYlN0b3BzLCAoTFBJTlQzMilsUGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAoSU5UMzIpd1BhcmFtICogc2l6ZW9mKElOVDMyKSApOwogCX0KIAlyZXR1cm4gVFJVRTsKIH0KQEAgLTI5MzYsNiArMjkyOCw3IEBACiBzdGF0aWMgTFJFU1VMVCBFRElUX0VNX1NldFRhYlN0b3BzMTYoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKIAlFRElUU1RBVEUgKmVzID0gRURJVFNUQVRFUFRSKHduZFB0cik7CisJSU5UMzIgaTsKIAogCWlmICghSXNNdWx0aUxpbmUod25kUHRyKSkKIAkJcmV0dXJuIEZBTFNFOwpAQCAtMjk0NCwxMCArMjkzNywxMSBAQAogCWVzLT5OdW1UYWJTdG9wcyA9IChJTlQzMil3UGFyYW07CiAJaWYgKCF3UGFyYW0pCiAJCWVzLT5UYWJTdG9wcyA9IE5VTEw7Ci0JZWxzZSB7Ci0JCWVzLT5UYWJTdG9wcyA9IChMUElOVDE2KXhtYWxsb2Mod1BhcmFtICogc2l6ZW9mKElOVDE2KSk7Ci0JCW1lbWNweShlcy0+VGFiU3RvcHMsIChMUElOVDE2KVBUUl9TRUdfVE9fTElOKGxQYXJhbSksCi0JCQkJKElOVDMyKXdQYXJhbSAqIHNpemVvZihJTlQxNikpOworCWVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTFBJTlQxNiBwID0gKExQSU5UMTYpUFRSX1NFR19UT19MSU4obFBhcmFtKTsKKyAgICAgICAgICAgIGVzLT5UYWJTdG9wcyA9IChMUElOVDMyKXhtYWxsb2Mod1BhcmFtICogc2l6ZW9mKElOVDMyKSk7CisgICAgICAgICAgICBmb3IgKCBpID0gMCA7IGkgPCAoSU5UMzIpd1BhcmFtIDsgaSsrKSBlcy0+VGFiU3RvcHNbaV0gPSAqcCsrOwogCX0KIAlyZXR1cm4gVFJVRTsKIH0KQEAgLTMxMjYsMTAgKzMxMjAsMTAgQEAKIAl0ZXh0ID0gRURJVF9HZXRQb2ludGVyKHduZFB0cik7CiAJbHN0cmNweW4zMkEoZHN0LCB0ZXh0ICsgcywgZSAtIHMgKyAxKTsKIAlHbG9iYWxVbmxvY2sxNihoZHN0KTsKLQlPcGVuQ2xpcGJvYXJkKHduZFB0ci0+aHduZFNlbGYpOwotCUVtcHR5Q2xpcGJvYXJkKCk7CisJT3BlbkNsaXBib2FyZDMyKHduZFB0ci0+aHduZFNlbGYpOworCUVtcHR5Q2xpcGJvYXJkMzIoKTsKIAlTZXRDbGlwYm9hcmREYXRhKENGX1RFWFQsIGhkc3QpOwotCUNsb3NlQ2xpcGJvYXJkKCk7CisJQ2xvc2VDbGlwYm9hcmQzMigpOwogCXJldHVybiAtMTsKIH0KIApAQCAtMzQyMyw3ICszNDE3LDcgQEAKIAkJKChlIC0gcykgJiYgIUlzUGFzc3dvcmQod25kUHRyKSA/IE1GX0VOQUJMRUQgOiBNRl9HUkFZRUQpKTsKIAkvKiBwYXN0ZSAqLwogCUVuYWJsZU1lbnVJdGVtMzIoaFBvcHVwLCA0LCBNRl9CWVBPU0lUSU9OIHwKLQkJKElzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlKENGX1RFWFQpID8gTUZfRU5BQkxFRCA6IE1GX0dSQVlFRCkpOworCQkoSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUzMihDRl9URVhUKSA/IE1GX0VOQUJMRUQgOiBNRl9HUkFZRUQpKTsKIAkvKiBkZWxldGUgKi8KIAlFbmFibGVNZW51SXRlbTMyKGhQb3B1cCwgNSwgTUZfQllQT1NJVElPTiB8CiAJCSgoZSAtIHMpID8gTUZfRU5BQkxFRCA6IE1GX0dSQVlFRCkpOwpAQCAtMzY5NCw3ICszNjg4LDcgQEAKIAkJb2xkRm9udCA9IChIRk9OVDMyKVNlbGVjdE9iamVjdDMyKGhkYywgaEZvbnQpOwogCUVESVRfU0VORF9DVExDT0xPUih3bmRQdHIsIGhkYyk7CiAJaWYgKCFJc1dpbmRvd0VuYWJsZWQzMih3bmRQdHItPmh3bmRTZWxmKSkKLQkJU2V0VGV4dENvbG9yKGhkYywgR2V0U3lzQ29sb3IoQ09MT1JfR1JBWVRFWFQpKTsKKwkJU2V0VGV4dENvbG9yKGhkYywgR2V0U3lzQ29sb3IzMihDT0xPUl9HUkFZVEVYVCkpOwogCUdldENsaXBCb3gzMihoZGMsICZyY1Jnbik7CiAJZm9yIChpID0gZnYgOyBpIDw9IE1JTihmdiArIHZsYywgZnYgKyBsYyAtIDEpIDsgaSsrICkgewogCQlFRElUX0dldExpbmVSZWN0KHduZFB0ciwgaSwgMCwgLTEsICZyY0xpbmUpOwpAQCAtMzcyMiwxMyArMzcxNiwxMyBAQAogCUhHTE9CQUwxNiBoc3JjOwogCUxQU1RSIHNyYzsKIAotCU9wZW5DbGlwYm9hcmQod25kUHRyLT5od25kU2VsZik7CisJT3BlbkNsaXBib2FyZDMyKHduZFB0ci0+aHduZFNlbGYpOwogCWlmICgoaHNyYyA9IEdldENsaXBib2FyZERhdGEoQ0ZfVEVYVCkpKSB7CiAJCXNyYyA9IChMUFNUUilHbG9iYWxMb2NrMTYoaHNyYyk7CiAJCUVESVRfRU1fUmVwbGFjZVNlbCh3bmRQdHIsIChXUEFSQU0zMilUUlVFLCAoTFBBUkFNKXNyYyk7CiAJCUdsb2JhbFVubG9jazE2KGhzcmMpOwogCX0KLQlDbG9zZUNsaXBib2FyZCgpOworCUNsb3NlQ2xpcGJvYXJkMzIoKTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTM3NDEsNyArMzczNSw3IEBACiBzdGF0aWMgTFJFU1VMVCBFRElUX1dNX1NldEN1cnNvcihXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogCWlmIChMT1dPUkQobFBhcmFtKSA9PSBIVENMSUVOVCkgewotCQlTZXRDdXJzb3IoTG9hZEN1cnNvcjE2KDAsIElEQ19JQkVBTSkpOworCQlTZXRDdXJzb3IxNihMb2FkQ3Vyc29yMTYoMCwgSURDX0lCRUFNKSk7CiAJCXJldHVybiAtMTsKIAl9IGVsc2UKIAkJcmV0dXJuIDA7CkBAIC0zNzYzLDcgKzM3NTcsNyBAQAogCUVESVRfU2V0U2VsKHduZFB0ciwgcywgZSk7CiAJaWYoISh3bmRQdHItPmR3U3R5bGUgJiBFU19OT0hJREVTRUwpKQogCQlFRElUX0ludmFsaWRhdGVUZXh0KHduZFB0ciwgcywgZSk7Ci0JU2hvd0NhcmV0KHduZFB0ci0+aHduZFNlbGYpOworCVNob3dDYXJldDMyKHduZFB0ci0+aHduZFNlbGYpOwogCWRwcmludGZfZWRpdChzdGRkZWIsICJlZGl0OiBub3RpZmljYXRpb24gRU5fU0VURk9DVVMgc2VudFxuIik7CiAJRURJVF9OT1RJRllfUEFSRU5UKHduZFB0ciwgRU5fU0VURk9DVVMpOwogCXJldHVybiAwOwpAQCAtMzgwMCw3ICszNzk0LDcgQEAKIAkJRGVzdHJveUNhcmV0KCk7CiAJCUNyZWF0ZUNhcmV0KHduZFB0ci0+aHduZFNlbGYsIDAsIDIsIEVESVRfR2V0TGluZUhlaWdodCh3bmRQdHIpKTsKIAkJRURJVF9TZXRTZWwod25kUHRyLCBzLCBlKTsKLQkJU2hvd0NhcmV0KHduZFB0ci0+aHduZFNlbGYpOworCQlTaG93Q2FyZXQzMih3bmRQdHItPmh3bmRTZWxmKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9jb250cm9scy9saXN0Ym94LmMgYi9jb250cm9scy9saXN0Ym94LmMKaW5kZXggZmQ4YzY2NS4uZGIwMDExNiAxMDA2NDQKLS0tIGEvY29udHJvbHMvbGlzdGJveC5jCisrKyBiL2NvbnRyb2xzL2xpc3Rib3guYwpAQCAtNDcwLDE2ICs0NzAsMTYgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLT5zZWxlY3RlZCkKICAgICAgICAgewotICAgICAgICAgICAgU2V0QmtDb2xvciggaGRjLCBHZXRTeXNDb2xvciggQ09MT1JfSElHSExJR0hUICkgKTsKLSAgICAgICAgICAgIFNldFRleHRDb2xvciggaGRjLCBHZXRTeXNDb2xvciggQ09MT1JfSElHSExJR0hUVEVYVCApICk7CisgICAgICAgICAgICBTZXRCa0NvbG9yKCBoZGMsIEdldFN5c0NvbG9yMzIoIENPTE9SX0hJR0hMSUdIVCApICk7CisgICAgICAgICAgICBTZXRUZXh0Q29sb3IoIGhkYywgR2V0U3lzQ29sb3IzMiggQ09MT1JfSElHSExJR0hUVEVYVCApICk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBTZXRCa0NvbG9yKCBoZGMsIEdldFN5c0NvbG9yKCBDT0xPUl9XSU5ET1cgKSApOworICAgICAgICAgICAgU2V0QmtDb2xvciggaGRjLCBHZXRTeXNDb2xvcjMyKCBDT0xPUl9XSU5ET1cgKSApOwogICAgICAgICAgICAgaWYgKHduZC0+ZHdTdHlsZSAmIFdTX0RJU0FCTEVEKQotICAgICAgICAgICAgICAgIFNldFRleHRDb2xvciggaGRjLCBHZXRTeXNDb2xvciggQ09MT1JfR1JBWVRFWFQgKSApOworICAgICAgICAgICAgICAgIFNldFRleHRDb2xvciggaGRjLCBHZXRTeXNDb2xvcjMyKCBDT0xPUl9HUkFZVEVYVCApICk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgU2V0VGV4dENvbG9yKCBoZGMsIEdldFN5c0NvbG9yKCBDT0xPUl9XSU5ET1dURVhUICkgKTsKKyAgICAgICAgICAgICAgICBTZXRUZXh0Q29sb3IoIGhkYywgR2V0U3lzQ29sb3IzMiggQ09MT1JfV0lORE9XVEVYVCApICk7CiAgICAgICAgIH0KICAgICAgICAgZHByaW50Zl9saXN0Ym94KCBzdGRkZWIsICJMaXN0Ym94ICUwNHg6IHBhaW50aW5nICVkICglcykgYWN0aW9uPSUwMnggIgogICAgICAgICAgICAgICAgICAgICAgICAgICJyZWN0PSVkLCVkLSVkLCVkXG4iLApAQCAtODU2LDcgKzg1Niw3IEBACiAgICAgICAgICAgICBpZiAoIUlTX09XTkVSRFJBVyhkZXNjcikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLyogQ2xlYXIgdGhlIGJvdHRvbSBvZiB0aGUgY29sdW1uICovCi0gICAgICAgICAgICAgICAgU2V0QmtDb2xvciggaGRjLCBHZXRTeXNDb2xvciggQ09MT1JfV0lORE9XICkgKTsKKyAgICAgICAgICAgICAgICBTZXRCa0NvbG9yKCBoZGMsIEdldFN5c0NvbG9yMzIoIENPTE9SX1dJTkRPVyApICk7CiAgICAgICAgICAgICAgICAgaWYgKHJlY3QudG9wIDwgZGVzY3ItPmhlaWdodCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tID0gZGVzY3ItPmhlaWdodDsKQEAgLTg4MSw3ICs4ODEsNyBAQAogICAgIGlmICghSVNfT1dORVJEUkFXKGRlc2NyKSkKICAgICB7CiAgICAgICAgIC8qIENsZWFyIHRoZSByZW1haW5kZXIgb2YgdGhlIGNsaWVudCBhcmVhICovCi0gICAgICAgIFNldEJrQ29sb3IoIGhkYywgR2V0U3lzQ29sb3IoIENPTE9SX1dJTkRPVyApICk7CisgICAgICAgIFNldEJrQ29sb3IoIGhkYywgR2V0U3lzQ29sb3IzMiggQ09MT1JfV0lORE9XICkgKTsKICAgICAgICAgaWYgKHJlY3QudG9wIDwgZGVzY3ItPmhlaWdodCkKICAgICAgICAgewogICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBkZXNjci0+aGVpZ2h0OwpAQCAtMTY5MSw4ICsxNjkxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQUtFTFBBUkFNKCB4LCB5ICkgKTsKICAgICAgICAgaWYgKHduZC0+ZHdFeFN0eWxlICYgV1NfRVhfRFJBR0RFVEVDVCkKICAgICAgICAgewotICAgICAgICAgICAgUE9JTlQxNiBwdCA9IHsgeCwgeSB9OwotICAgICAgICAgICAgaWYgKERyYWdEZXRlY3QoIHduZC0+aHduZFNlbGYsIHB0ICkpCisgICAgICAgICAgICBQT0lOVDMyIHB0ID0geyB4LCB5IH07CisgICAgICAgICAgICBpZiAoRHJhZ0RldGVjdDMyKCB3bmQtPmh3bmRTZWxmLCBwdCApKQogICAgICAgICAgICAgICAgIFNlbmRNZXNzYWdlMzJBKCBkZXNjci0+b3duZXIsIFdNX0JFR0lORFJBRywgMCwgMCApOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29udHJvbHMvbWVudS5jIGIvY29udHJvbHMvbWVudS5jCmluZGV4IGJlZGQ2NzcuLjZmMGMwNzEgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL21lbnUuYworKysgYi9jb250cm9scy9tZW51LmMKQEAgLTYwMCwxOCArNjAwLDE4IEBACiAgICAgaWYgKGxwaXRlbS0+aXRlbV9mbGFncyAmIE1GX0hJTElURSkKICAgICB7CiAJaWYgKGxwaXRlbS0+aXRlbV9mbGFncyAmIE1GX0dSQVlFRCkKLQkgICAgU2V0VGV4dENvbG9yKCBoZGMsIEdldFN5c0NvbG9yKCBDT0xPUl9HUkFZVEVYVCApICk7CisJICAgIFNldFRleHRDb2xvciggaGRjLCBHZXRTeXNDb2xvcjMyKCBDT0xPUl9HUkFZVEVYVCApICk7CiAJZWxzZQotCSAgICBTZXRUZXh0Q29sb3IoIGhkYywgR2V0U3lzQ29sb3IoIENPTE9SX0hJR0hMSUdIVFRFWFQgKSApOwotCVNldEJrQ29sb3IoIGhkYywgR2V0U3lzQ29sb3IoIENPTE9SX0hJR0hMSUdIVCApICk7CisJICAgIFNldFRleHRDb2xvciggaGRjLCBHZXRTeXNDb2xvcjMyKCBDT0xPUl9ISUdITElHSFRURVhUICkgKTsKKwlTZXRCa0NvbG9yKCBoZGMsIEdldFN5c0NvbG9yMzIoIENPTE9SX0hJR0hMSUdIVCApICk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAJaWYgKGxwaXRlbS0+aXRlbV9mbGFncyAmIE1GX0dSQVlFRCkKLQkgICAgU2V0VGV4dENvbG9yKCBoZGMsIEdldFN5c0NvbG9yKCBDT0xPUl9HUkFZVEVYVCApICk7CisJICAgIFNldFRleHRDb2xvciggaGRjLCBHZXRTeXNDb2xvcjMyKCBDT0xPUl9HUkFZVEVYVCApICk7CiAJZWxzZQotCSAgICBTZXRUZXh0Q29sb3IoIGhkYywgR2V0U3lzQ29sb3IoIENPTE9SX01FTlVURVhUICkgKTsKLQlTZXRCa0NvbG9yKCBoZGMsIEdldFN5c0NvbG9yKCBDT0xPUl9NRU5VICkgKTsKKwkgICAgU2V0VGV4dENvbG9yKCBoZGMsIEdldFN5c0NvbG9yMzIoIENPTE9SX01FTlVURVhUICkgKTsKKwlTZXRCa0NvbG9yKCBoZGMsIEdldFN5c0NvbG9yMzIoIENPTE9SX01FTlUgKSApOwogICAgIH0KIAogICAgIGlmICghbWVudUJhcikKQEAgLTE2NzYsNyArMTY3Niw3IEBACiAJCQkJCSAgICAgIFBNX05PUkVNT1ZFLCBUUlVFICkpCiAJICAgIGJyZWFrOwogCi0gICAgICAgIFRyYW5zbGF0ZU1lc3NhZ2UoICZtc2cgKTsKKyAgICAgICAgVHJhbnNsYXRlTWVzc2FnZTE2KCAmbXNnICk7CiAgICAgICAgIENPTlZfUE9JTlQxNlRPMzIoICZtc2cucHQsICZwdCApOwogCiAgICAgICAgIGZSZW1vdmUgPSBGQUxTRTsKQEAgLTE3OTAsNyArMTc5MCw3IEBACiAJCSAgICBpZiAoKG1zZy53UGFyYW0gPD0gMzIpIHx8IChtc2cud1BhcmFtID49IDEyNykpIGJyZWFrOwogCQkgICAgcG9zID0gTUVOVV9GaW5kSXRlbUJ5S2V5KCBod25kLCBobWVudUN1cnJlbnQsIG1zZy53UGFyYW0gKTsKIAkJICAgIGlmIChwb3MgPT0gKFVJTlQzMiktMikgZkNsb3NlZCA9IFRSVUU7Ci0JCSAgICBlbHNlIGlmIChwb3MgPT0gKFVJTlQzMiktMSkgTWVzc2FnZUJlZXAoMCk7CisJCSAgICBlbHNlIGlmIChwb3MgPT0gKFVJTlQzMiktMSkgTWVzc2FnZUJlZXAzMigwKTsKIAkJICAgIGVsc2UKIAkJICAgIHsKIAkJCU1FTlVfU2VsZWN0SXRlbSggaHduZCwgaG1lbnVDdXJyZW50LCBwb3MsIFRSVUUgKTsKQEAgLTE4MDQsNyArMTgwNCw3IEBACiAJfQogCWVsc2UKIAl7Ci0JICAgIERpc3BhdGNoTWVzc2FnZSggJm1zZyApOworCSAgICBEaXNwYXRjaE1lc3NhZ2UxNiggJm1zZyApOwogCX0KIAlpZiAoZkVuZE1lbnVDYWxsZWQpIGZDbG9zZWQgPSBUUlVFOwogCWlmICghZkNsb3NlZCkgZlJlbW92ZSA9IFRSVUU7CkBAIC0xODczLDcgKzE4NzMsNyBAQAogCiAgICAgaWYgKElzTWVudTMyKGhNZW51KSkKICAgICB7Ci0JSGlkZUNhcmV0KDApOworCUhpZGVDYXJldDMyKDApOwogCVNlbmRNZXNzYWdlMTYoIGhXbmQsIFdNX0VOVEVSTUVOVUxPT1AsIDAsIDAgKTsKIAlTZW5kTWVzc2FnZTE2KCBoV25kLCBXTV9JTklUTUVOVSwgaE1lbnUsIDAgKTsKIAlpZiggYlRyYWNrU3lzICkKQEAgLTE4ODIsNyArMTg4Miw3IEBACiAJICAgIE1FTlVfVHJhY2tNZW51KCBoTWVudSwgVFBNX0xFRlRBTElHTiB8IFRQTV9MRUZUQlVUVE9OLAogCQkJICAgIHB0LngsIHB0LnksIGhXbmQsIE5VTEwgKTsKIAlTZW5kTWVzc2FnZTE2KCBoV25kLCBXTV9FWElUTUVOVUxPT1AsIDAsIDAgKTsKLQlTaG93Q2FyZXQoMCk7CisJU2hvd0NhcmV0MzIoMCk7CiAgICAgfQogfQogCkBAIC0xOTExLDcgKzE5MTEsNyBAQAogCiAgICAgaWYgKElzTWVudTMyKCBoVHJhY2tNZW51ICkpCiAgICAgewotICAgICAgICBIaWRlQ2FyZXQoMCk7CisgICAgICAgIEhpZGVDYXJldDMyKDApOwogICAgICAgICBTZW5kTWVzc2FnZTE2KCB3bmRQdHItPmh3bmRTZWxmLCBXTV9FTlRFUk1FTlVMT09QLCAwLCAwICk7CiAgICAgICAgIFNlbmRNZXNzYWdlMTYoIHduZFB0ci0+aHduZFNlbGYsIFdNX0lOSVRNRU5VLCBoVHJhY2tNZW51LCAwICk7CiAKQEAgLTE5MjYsNyArMTkyNiw3IEBACiAJCSAgICA6IE1FTlVfRmluZEl0ZW1CeUtleSggd25kUHRyLT5od25kU2VsZiwgd25kUHRyLT53SURtZW51LCB2a2V5ICk7CiAJICAgIGlmKCB1SXRlbSA+PSAweEZGRkUgKQogCSAgICB7Ci0JICAgICAgICBpZiggdUl0ZW0gPT0gMHhGRkZGICkgTWVzc2FnZUJlZXAoMCk7CisJICAgICAgICBpZiggdUl0ZW0gPT0gMHhGRkZGICkgTWVzc2FnZUJlZXAzMigwKTsKIAkJaHRNZW51ID0gMDsKIAkgICAgfQogICAgICAgICB9CkBAIC0xOTQ2LDEyICsxOTQ2LDEwIEBACiAKIAkgICAgY2FzZSBIVFNZU01FTlU6CiAJCU1FTlVfVHJhY2tTeXNQb3B1cCggd25kUHRyICk7Ci0KLQkgICAgZGVmYXVsdDoKIAl9CiAKICAgICAgICAgU2VuZE1lc3NhZ2UxNiggd25kUHRyLT5od25kU2VsZiwgV01fRVhJVE1FTlVMT09QLCAwLCAwICk7Ci0gICAgICAgIFNob3dDYXJldCgwKTsKKyAgICAgICAgU2hvd0NhcmV0MzIoMCk7CiAgICAgfQogfQogCkBAIC0xOTc4LDEwICsxOTc2LDEwIEBACiB7CiAgICAgQk9PTDMyIHJldCA9IEZBTFNFOwogCi0gICAgSGlkZUNhcmV0KDApOworICAgIEhpZGVDYXJldDMyKDApOwogICAgIGlmIChNRU5VX1Nob3dQb3B1cCggaFduZCwgaE1lbnUsIDAsIHgsIHksIDAsIDAgKSkgCiAJcmV0ID0gTUVOVV9UcmFja01lbnUoIGhNZW51LCB3RmxhZ3MsIDAsIDAsIGhXbmQsIGxwUmVjdCApOwotICAgIFNob3dDYXJldCgwKTsKKyAgICBTaG93Q2FyZXQzMigwKTsKICAgICByZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9jb250cm9scy9vbGRsYm94LmMgYi9jb250cm9scy9vbGRsYm94LmMKaW5kZXggMWVlZjMzYy4uODdlNmE1YSAxMDA2NDQKLS0tIGEvY29udHJvbHMvb2xkbGJveC5jCisrKyBiL2NvbnRyb2xzL29sZGxib3guYwpAQCAtNTcsNyArNTcsNyBAQAogICBscGhsLT5QcmV2Rm9jdXNlZCAgICA9IC0xOwogfQogCi12b2lkIENyZWF0ZUxpc3RCb3hTdHJ1Y3QoSFdORCBod25kLCBXT1JEIEN0bFR5cGUsIExPTkcgc3R5bGVzLCBIV05EIHBhcmVudCkKK3ZvaWQgQ3JlYXRlTGlzdEJveFN0cnVjdChIV05EMTYgaHduZCwgV09SRCBDdGxUeXBlLCBMT05HIHN0eWxlcywgSFdORDE2IHBhcmVudCkKIHsKICAgTFBIRUFETElTVCBscGhsOwogICBIREMzMiAgICAgICAgIGhkYzsKQEAgLTE3Myw3ICsxNzMsNyBAQAogfQogCiAKLXZvaWQgTGlzdEJveERyYXdJdGVtKEhXTkQgaHduZCwgTFBIRUFETElTVCBscGhsLCBIREMxNiBoZGMsIExQTElTVFNUUlVDVCBscGxzLCAKK3ZvaWQgTGlzdEJveERyYXdJdGVtKEhXTkQxNiBod25kLCBMUEhFQURMSVNUIGxwaGwsIEhEQzE2IGhkYywgTFBMSVNUU1RSVUNUIGxwbHMsIAogICAgICAgICAgICAgICAgICAgICAgUkVDVDE2ICpyZWN0LCBXT1JEIGl0ZW1BY3Rpb24sIFdPUkQgaXRlbVN0YXRlKQogewogICAgIGlmIChscGhsLT5Pd25lckRyYXduKQpAQCAtMjA0LDcgKzIwNCw3IEBACiAgICAgICB9CiAKICAgICAgIGlmIChscGhsLT5kd1N0eWxlICYgTEJTX1VTRVRBQlNUT1BTKSB7Ci0JVGFiYmVkVGV4dE91dChoZGMsIHJlY3QtPmxlZnQgKyA1LCByZWN0LT50b3AgKyAyLCAKKwlUYWJiZWRUZXh0T3V0MTYoaGRjLCByZWN0LT5sZWZ0ICsgNSwgcmVjdC0+dG9wICsgMiwgCiAJCSAgICAgIChjaGFyICopbHBscy0+aXRlbVRleHQsIHN0cmxlbigoY2hhciAqKWxwbHMtPml0ZW1UZXh0KSwgCiAJCSAgICAgIGxwaGwtPmlOdW1TdG9wcywgbHBobC0+VGFiU3RvcHMsIDApOwogICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL3N0YXRpYy5jIGIvY29udHJvbHMvc3RhdGljLmMKaW5kZXggOTE4NGNmNS4uOTg0MmYwNiAxMDA2NDQKLS0tIGEvY29udHJvbHMvc3RhdGljLmMKKysrIGIvY29udHJvbHMvc3RhdGljLmMKQEAgLTY3LDcgKzY3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIFN0YXRpY1duZFByb2MKICAqLwotTFJFU1VMVCBTdGF0aWNXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCB1TXNnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitMUkVTVUxUIFN0YXRpY1duZFByb2MoIEhXTkQxNiBoV25kLCBVSU5UIHVNc2csIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBMUkVTVUxUIGxSZXN1bHQgPSAwOwogICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoaFduZCk7CkBAIC0xMDMsMTQgKzEwMywxNCBAQAogCQlicmVhazsKICAgICAgICAgICAgIH0KIAkgICAgLyogaW5pdGlhbGlzZSBjb2xvdXJzICovCi0JICAgIGNvbG9yX3dpbmRvd2ZyYW1lICA9IEdldFN5c0NvbG9yKENPTE9SX1dJTkRPV0ZSQU1FKTsKLQkgICAgY29sb3JfYmFja2dyb3VuZCAgID0gR2V0U3lzQ29sb3IoQ09MT1JfQkFDS0dST1VORCk7Ci0JICAgIGNvbG9yX3dpbmRvdyAgICAgICA9IEdldFN5c0NvbG9yKENPTE9SX1dJTkRPVyk7CisJICAgIGNvbG9yX3dpbmRvd2ZyYW1lICA9IEdldFN5c0NvbG9yMzIoQ09MT1JfV0lORE9XRlJBTUUpOworCSAgICBjb2xvcl9iYWNrZ3JvdW5kICAgPSBHZXRTeXNDb2xvcjMyKENPTE9SX0JBQ0tHUk9VTkQpOworCSAgICBjb2xvcl93aW5kb3cgICAgICAgPSBHZXRTeXNDb2xvcjMyKENPTE9SX1dJTkRPVyk7CiAJICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgV01fTkNERVNUUk9ZOgogICAgICAgICAgICAgaWYgKHN0eWxlID09IFNTX0lDT04pCi0gICAgICAgICAgICAgICAgRGVzdHJveUljb24oIFNUQVRJQ19TZXRJY29uKCB3bmRQdHIsIDAgKSApOworICAgICAgICAgICAgICAgIERlc3Ryb3lJY29uMzIoIFNUQVRJQ19TZXRJY29uKCB3bmRQdHIsIDAgKSApOwogICAgICAgICAgICAgZWxzZSAKICAgICAgICAgICAgICAgICBsUmVzdWx0ID0gRGVmV2luZG93UHJvYzE2KGhXbmQsIHVNc2csIHdQYXJhbSwgbFBhcmFtKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTI2LDkgKzEyNiw5IEBACiAJICAgIGJyZWFrOwogCiAJY2FzZSBXTV9TWVNDT0xPUkNIQU5HRToKLQkgICAgY29sb3Jfd2luZG93ZnJhbWUgID0gR2V0U3lzQ29sb3IoQ09MT1JfV0lORE9XRlJBTUUpOwotCSAgICBjb2xvcl9iYWNrZ3JvdW5kICAgPSBHZXRTeXNDb2xvcihDT0xPUl9CQUNLR1JPVU5EKTsKLQkgICAgY29sb3Jfd2luZG93ICAgICAgID0gR2V0U3lzQ29sb3IoQ09MT1JfV0lORE9XKTsKKwkgICAgY29sb3Jfd2luZG93ZnJhbWUgID0gR2V0U3lzQ29sb3IzMihDT0xPUl9XSU5ET1dGUkFNRSk7CisJICAgIGNvbG9yX2JhY2tncm91bmQgICA9IEdldFN5c0NvbG9yMzIoQ09MT1JfQkFDS0dST1VORCk7CisJICAgIGNvbG9yX3dpbmRvdyAgICAgICA9IEdldFN5c0NvbG9yMzIoQ09MT1JfV0lORE9XKTsKIAkgICAgSW52YWxpZGF0ZVJlY3QzMiggaFduZCwgTlVMTCwgVFJVRSApOwogCSAgICBicmVhazsKIApAQCAtMjcwLDEzICsyNzAsMTMgQEAKIAogc3RhdGljIHZvaWQgU1RBVElDX1BhaW50SWNvbmZuKCBXTkQgKnduZFB0ciwgSERDMzIgaGRjICkKIHsKLSAgICBSRUNUMTYgcmM7Ci0gICAgSEJSVVNIMTYgaGJydXNoOworICAgIFJFQ1QzMiByYzsKKyAgICBIQlJVU0gzMiBoYnJ1c2g7CiAgICAgU1RBVElDSU5GTyAqaW5mb1B0ciA9IChTVEFUSUNJTkZPICopd25kUHRyLT53RXh0cmE7CiAKLSAgICBHZXRDbGllbnRSZWN0MTYoIHduZFB0ci0+aHduZFNlbGYsICZyYyk7CisgICAgR2V0Q2xpZW50UmVjdDMyKCB3bmRQdHItPmh3bmRTZWxmLCAmcmMgKTsKICAgICBoYnJ1c2ggPSBTZW5kTWVzc2FnZTMyQSggR2V0UGFyZW50MzIod25kUHRyLT5od25kU2VsZiksIFdNX0NUTENPTE9SU1RBVElDLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZGMsIHduZFB0ci0+aHduZFNlbGYgKTsKLSAgICBGaWxsUmVjdDE2KCBoZGMsICZyYywgaGJydXNoICk7Ci0gICAgaWYgKGluZm9QdHItPmhJY29uKSBEcmF3SWNvbiggaGRjLCByYy5sZWZ0LCByYy50b3AsIGluZm9QdHItPmhJY29uICk7CisgICAgRmlsbFJlY3QzMiggaGRjLCAmcmMsIGhicnVzaCApOworICAgIGlmIChpbmZvUHRyLT5oSWNvbikgRHJhd0ljb24zMiggaGRjLCByYy5sZWZ0LCByYy50b3AsIGluZm9QdHItPmhJY29uICk7CiB9CmRpZmYgLS1naXQgYS9kZWJ1Z2dlci9tc2MuYyBiL2RlYnVnZ2VyL21zYy5jCmluZGV4IDY1MTRmMzcuLmZkOGRhNzcgMTAwNjQ0Ci0tLSBhL2RlYnVnZ2VyL21zYy5jCisrKyBiL2RlYnVnZ2VyL21zYy5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KIAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgpAQCAtMjQsNyArMjUsOSBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPG1hbGxvYy5oPgotCisjaWZuZGVmIFBBVEhfTUFYCisjZGVmaW5lIFBBVEhfTUFYIF9NQVhfUEFUSAorI2VuZGlmCiAjaW5jbHVkZSAid2luLmgiCiAjaW5jbHVkZSAicGVfaW1hZ2UuaCIKICNpbmNsdWRlICJwZWV4ZS5oIgpkaWZmIC0tZ2l0IGEvZGVidWdnZXIvc291cmNlLmMgYi9kZWJ1Z2dlci9zb3VyY2UuYwppbmRleCA4Y2FkNTY4Li5kOWM2NDEyIDEwMDY0NAotLS0gYS9kZWJ1Z2dlci9zb3VyY2UuYworKysgYi9kZWJ1Z2dlci9zb3VyY2UuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CkBAIC0xNSw2ICsxNiw5IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8bWFsbG9jLmg+CisjaWZuZGVmIFBBVEhfTUFYCisjZGVmaW5lIFBBVEhfTUFYIF9NQVhfUEFUSAorI2VuZGlmCiAKICNpbmNsdWRlICJ3aW4uaCIKICNpbmNsdWRlICJwZV9pbWFnZS5oIgpkaWZmIC0tZ2l0IGEvZGVidWdnZXIvc3RhYnMuYyBiL2RlYnVnZ2VyL3N0YWJzLmMKaW5kZXggOGExYmVhMS4uOWU2NGEzNiAxMDA2NDQKLS0tIGEvZGVidWdnZXIvc3RhYnMuYworKysgYi9kZWJ1Z2dlci9zdGFicy5jCkBAIC00LDggKzQsMTAgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NiwgRXJpYyBZb3VuZ2RhbGUuCiAgKi8KIAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3dpbmVfb3MyLnR4dCBiL2RvY3VtZW50YXRpb24vd2luZV9vczIudHh0CmluZGV4IDk3YWQwNDQuLmY2NmZiNzEgMTAwNjQ0Ci0tLSBhL2RvY3VtZW50YXRpb24vd2luZV9vczIudHh0CisrKyBiL2RvY3VtZW50YXRpb24vd2luZV9vczIudHh0CkBAIC0xLDUgKzEsOSBAQAogCVJ1bm5pbmcgJiBDb21waWxpbmcgV0lORSBpbiBPUy8yCiAKK0lmIHlvdSB3YW50IHRvIGhlbHAgZm9yIHRoZSBwb3J0IG9mIFdJTkUgdG8gT1MvMiwgCitzZW5kIG1lIGEgbWVzc2FnZSBhdCBrcnlub3NAY2xpYy5uZXQKK0kgY3VycmVudGx5IGRvbid0IHdhbnQgYmV0YSB0ZXN0ZXJzLiBJdCBtdXN0IHdvcmsgYmVmb3JlIHdlIGNhbiB0ZXN0IGl0LgorCiBIZXJlIGlzIHdoYXQgeW91IG5lZWQgdG8gKHRyeSB0bykgY29tcGlsZSBXaW5lIGZvciBPUy8yOgogRU1YIDAuOWMgKGZpeCAyKQogWEZyZWU4NiAzLjIgT1MvMiAod2l0aCBkZXZlbG9wbWVudCBsaWJyYXJpZXMpCkBAIC03LDM1ICsxMSwzNSBAQAogc2VkIChhIHdvcmtpbmcgY29weSBvZikKIHhwbQogZGlmZiBhbmQgcGF0Y2ggYXJlIHJlY29tbWVuZGVkCitMb3RzIG9mIGRpc2sgc3BhY2UgKGFib3V0IDQwLTUwIG1lZ3MgYWZ0ZXIgRU1YIGFuZCBYRnJlZSBpbnN0YWxsZWQpCiAKIFRvIGNvbXBpbGU6CiBzaCAKIHRvb2xzL21ha2Vfb3MyLnNoCiBtYWtlIGRlcGVuZAotbWFrZSAobWFrZSBkb2Vzbid0IHdvcmsgeWV0Li4uIEkgd2lsbCBuZWVkIHRvIGRvIHNvbWUgb3RoZXJzIHBhdGNoLCBvcgotICAgICAgeW91IG1heSBkbyBpdC4uLikKK21ha2UKK2VteGJpbmQgd2luZQogCiBDdXJyZW50bHk6CiAtIGNvbmZpZ3VyZSBhbmQgbWFrZSBkZXBlbmQgd29yay4uLgotLSBtYWtlIGRvZXNuJ3Qgd29yayB3ZWxsLi4uCi0tIHRoZSBzZWxlY3RvcnMgbnVtYmVycyAoMCkgYXJlIHdyb25nLi4uCistIG1ha2UgY29tcGlsZXMgKHdpdGggYSBtb2RpZmllZCBMaW51eCBtbWFuLmgpLCBidXQgZG9lc24ndCBsaW5rLgogLSBzaWduYWwgaGFuZGxpbmcgaXMgaG9ycmlibGUuLi4gKGlmIGFueSkKLS0gRU1YIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IG1tYXAKLS0gZGVidWdnZXIgZG9uJ3QgY29tcGlsZSBhdCBhbGwKLS0gc2lnY29udGV4dC5oIGlzbid0IHJpZ2h0IChpbmNvbXBsZXRlIHN0cnVjdHVyZT8pLgorLSBFTVggZG9lc24ndCBzdXBwb3J0IG1tYXAgKGFuZCByZWxhdGVkKSwgU3lzViBJUEMgYW5kIHN0YWZzKCkKKy0gWEZyZWU4Ni9PUzIgMy4yIGRvZXNuJ3Qgc3VwcG9ydCBYU2htUXVlcnlFeHRlbnNpb24oKSBhbmQgWFNobVBpeG1hcEZvcm1hdCgpCisgIGR1ZSB0byB0aGUgc2FtZSBsYWNrIGluIEVNWC4uLgogCiBXaGF0IG5lZWRzIHRvIGJlIHJlZG9uZToKKy0gTERUICh1c2luZyBEb3NBbGxvY1NlZyBpbiBtZW1vcnkvbGR0LmMpICoKKy0gaW1wbGVtZW50IG1tYXAoKSBhbmQgU3lzViBJUEMgaW4gRU1YICoKIC0gRmlsZSBmdW5jdGlvbnMsIAogLSBJL08gYWNjZXNzIChkbyBpdCEpLAogLSBDb21tdW5pY2F0aW9uIChtb2RlbSksCiAtIEludGVycnVwdCAoaWYgaW50IHVua25vdywgY2FsbCBjdXJyZW50IFJlYWxNb2RlIG9uZS4uLiksIAogLSB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIGlzIHRocmVhZCBzYWZlIChob3cgZG9lcyBXaW45NS9OVCBoYW5kbGUgbXVsdGktdGhyZWFkPyksIAogLSBtb3ZlIFggZnVuY3Rpb25zIGluIHNvbWUgZmlsZXMgKGFuZCBtYWtlIGEgd3JhcHBlciwgdG8gdXNlIFBNIGluc3RlYWQgbGF0dGVyKSwgCi0tIGltcGxlbWVudCBtbWFwIChvciBmaW5kIHNvbWV0aGluZyBlbHNlKSwgCi0tIG1ha2UgZGVidWdnZXIgd29yaywgCiAtIHJldHVybiByaWdodCBDUFUgdHlwZSwgCiAtIG1ha2Ugd2luc29jayB3b3JrCi0KKyogVG9wIHByaW9yaXR5CiAKIFRoZSBnb29kIHRoaW5nczoKIC0gT1MvMiBoYXZlIERPUyBpbnRlcnJ1cHRzCmRpZmYgLS1naXQgYS9ncmFwaGljcy93aW4xNmRydi9pbml0LmMgYi9ncmFwaGljcy93aW4xNmRydi9pbml0LmMKaW5kZXggOTMwZDAwNS4uM2E5Yjc0MiAxMDA2NDQKLS0tIGEvZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jCisrKyBiL2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuYwpAQCAtODEzLDcgKzgxMyw3IEBACiAgICAgaWYgKChwTFBEID0gRmluZFByaW50ZXJEcml2ZXJGcm9tUERFVklDRShscERlc3REZXYpKSAhPSBOVUxMKQogICAgIHsKIAlMT05HIGxQMSwgbFA0LCBsUDUsIGxQNywgbFA4LCBsUDksIGxQMTAsIGxQMTE7ICAKLQlXT1JEIHdQMiwgd1AzLCB3UDYsIHdQMTI7CisJV09SRCB3UDIsIHdQMywgd1AxMjsKICAgICAgICAgSU5UMTYgaVA2OwogCiAJU0VHUFRSIFNlZ1B0ciA9IHBMUEQtPlRodW5rQnVmU2VnUHRyOwpAQCAtOTQ1LDcgKzk0NSw3IEBACiBFeHRyYWN0UFEoSFBRIGhQUSkgCiB7IAogICAgIHN0cnVjdCBocHEgKnF1ZXVlLCAqcHJldiwgKmN1cnJlbnQsICpjdXJyZW50UHJldjsKLSAgICBpbnQga2V5LCB0YWcgPSAtMTsKKyAgICBpbnQga2V5ID0gMCwgdGFnID0gLTE7CiAgICAgY3VycmVudFByZXYgPSBwcmV2ID0gTlVMTDsKICAgICBxdWV1ZSA9IGN1cnJlbnQgPSBocHF1ZXVlOwogICAgIGlmIChjdXJyZW50KQpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAKIAogICAgIGRwcmludGZfd2luMTZkcnYoc3RkZGViLCAiV3JpdGVEaWFsb2c6ICUwNHggJTA0eCBcIiVzXCJcbiIsIGhKb2IsICBjY2hNc2csIGxwTXNnKTsKIAotICAgIG5SZXQgPSBNZXNzYWdlQm94MTYoTlVMTCwgbHBNc2csICJQcmludGluZyBFcnJvciIsIE1CX09LQ0FOQ0VMKTsKKyAgICBuUmV0ID0gTWVzc2FnZUJveDE2KCAwLCBscE1zZywgIlByaW50aW5nIEVycm9yIiwgTUJfT0tDQU5DRUwpOwogICAgIHJldHVybiBuUmV0OwogfQogCmRpZmYgLS1naXQgYS9ncmFwaGljcy93aW4xNmRydi90ZXh0LmMgYi9ncmFwaGljcy93aW4xNmRydi90ZXh0LmMKaW5kZXggMDYyMGRkYy4uZmUwNzQ2MyAxMDA2NDQKLS0tIGEvZ3JhcGhpY3Mvd2luMTZkcnYvdGV4dC5jCisrKyBiL2dyYXBoaWNzL3dpbjE2ZHJ2L3RleHQuYwpAQCAtODcsMTAgKzg3LDEwIEBACiAJbHBPcGFxdWVSZWN0LT50b3AgPSB5OwogCWxwT3BhcXVlUmVjdC0+cmlnaHQgPSAweDNhMTsKIAlscE9wYXF1ZVJlY3QtPmJvdHRvbSA9IDB4MDE7Ci0gICAgICAgIHByaW50ZigiZHJhd21vZGUgcm9wdCAweCV4IGJrTW9kZSAweCV4IGJrQ29sb3IgMHgleCB0ZXh0Q29sb3IgMHgleCB0YmJyZWFrRXh0cmEgMHgleCBicmVha2V4dHJhIDB4JXhcbiIsCisgICAgICAgIHByaW50ZigiZHJhd21vZGUgcm9wdCAweCV4IGJrTW9kZSAweCV4IGJrQ29sb3IgMHglbHggdGV4dENvbG9yIDB4JWx4IHRiYnJlYWtFeHRyYSAweCV4IGJyZWFrZXh0cmEgMHgleFxuIiwKICAgICAgICAgICAgICAgIGxwRHJhd01vZGUtPlJvcDIsICAgIGxwRHJhd01vZGUtPmJrTW9kZSwgICAgbHBEcmF3TW9kZS0+YmtDb2xvciwKICAgICAgICAgICAgICAgIGxwRHJhd01vZGUtPlRleHRDb2xvciwgICAgbHBEcmF3TW9kZS0+VEJyZWFrRXh0cmEsICAgIGxwRHJhd01vZGUtPkJyZWFrRXh0cmEpOwotICAgICAgICBwcmludGYoImJyZWFrZXJyIDB4JXggYnJlYWtyZW0gMHgleCBicmVha2NvdW50IDB4JXggY2hleHRyYSAweCV4IGxia2NvbG9yIDB4JXggbHRleHRjb2xvciAweCV4XG4iLAorICAgICAgICBwcmludGYoImJyZWFrZXJyIDB4JXggYnJlYWtyZW0gMHgleCBicmVha2NvdW50IDB4JXggY2hleHRyYSAweCV4IGxia2NvbG9yIDB4JWx4IGx0ZXh0Y29sb3IgMHglbHhcbiIsCiAgICAgICAgICAgICAgICBscERyYXdNb2RlLT5CcmVha0VyciwgICAgbHBEcmF3TW9kZS0+QnJlYWtSZW0sICAgIGxwRHJhd01vZGUtPkJyZWFrQ291bnQsCiAgICAgICAgICAgICAgICBscERyYXdNb2RlLT5DaGFyRXh0cmEsCSAgIGxwRHJhd01vZGUtPkxia0NvbG9yLCAgICBscERyYXdNb2RlLT5MVGV4dENvbG9yKTsKIApkaWZmIC0tZ2l0IGEvaWYxNjMyL2FkdmFwaTMyLnNwZWMgYi9pZjE2MzIvYWR2YXBpMzIuc3BlYwppbmRleCBhNzhkNzhkLi5mYjU4NGU0IDEwMDY0NAotLS0gYS9pZjE2MzIvYWR2YXBpMzIuc3BlYworKysgYi9pZjE2MzIvYWR2YXBpMzIuc3BlYwpAQCAtMTMsNyArMTMsNyBAQAogMDAwOCBzdHViIEFkZEF1ZGl0QWNjZXNzQWNlCiAwMDA5IHN0dWIgQWRqdXN0VG9rZW5Hcm91cHMKIDAwMTAgc3R1YiBBZGp1c3RUb2tlblByaXZpbGVnZXMKLTAwMTEgc3R1YiBBbGxvY2F0ZUFuZEluaXRpYWxpemVTaWQKKzAwMTEgc3RkY2FsbCBBbGxvY2F0ZUFuZEluaXRpYWxpemVTaWQocHRyIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIHB0cikgQWxsb2NhdGVBbmRJbml0aWFsaXplU2lkCiAwMDEyIHN0dWIgQWxsb2NhdGVMb2NhbGx5VW5pcXVlSWQKIDAwMTMgc3R1YiBBcmVBbGxBY2Nlc3Nlc0dyYW50ZWQKIDAwMTQgc3R1YiBBcmVBbnlBY2Nlc3Nlc0dyYW50ZWQKQEAgLTI2LDcgKzI2LDcgQEAKIDAwMjEgc3R1YiBDbG9zZUV2ZW50TG9nCiAwMDIyIHN0dWIgQ2xvc2VTZXJ2aWNlSGFuZGxlCiAwMDIzIHN0dWIgQ29udHJvbFNlcnZpY2UKLTAwMjQgc3R1YiBDb3B5U2lkCiswMDI0IHN0ZGNhbGwgQ29weVNpZChsb25nIHB0ciBwdHIpIENvcHlTaWQKIDAwMjUgc3R1YiBDcmVhdGVQcml2YXRlT2JqZWN0U2VjdXJpdHkKIDAwMjYgc3R1YiBDcmVhdGVQcm9jZXNzQXNVc2VyQQogMDAyNyBzdHViIENyZWF0ZVByb2Nlc3NBc1VzZXJXCkBAIC00MSwxNiArNDEsMTYgQEAKIDAwMzYgc3R1YiBFbnVtRGVwZW5kZW50U2VydmljZXNXCiAwMDM3IHN0dWIgRW51bVNlcnZpY2VzU3RhdHVzQQogMDAzOCBzdHViIEVudW1TZXJ2aWNlc1N0YXR1c1cKLTAwMzkgc3R1YiBFcXVhbFByZWZpeFNpZAotMDA0MCBzdHViIEVxdWFsU2lkCiswMDM5IHN0ZGNhbGwgRXF1YWxQcmVmaXhTaWQocHRyIHB0cikgRXF1YWxQcmVmaXhTaWQKKzAwNDAgc3RkY2FsbCBFcXVhbFNpZChwdHIgcHRyKSBFcXVhbFNpZAogMDA0MSBzdHViIEZpbmRGaXJzdEZyZWVBY2UKLTAwNDIgc3R1YiBGcmVlU2lkCiswMDQyIHN0ZGNhbGwgRnJlZVNpZChwdHIpIEZyZWVTaWQKIDAwNDMgc3R1YiBHZXRBY2UKIDAwNDQgc3R1YiBHZXRBY2xJbmZvcm1hdGlvbgogMDA0NSBzdHViIEdldEZpbGVTZWN1cml0eUEKIDAwNDYgc3R1YiBHZXRGaWxlU2VjdXJpdHlXCiAwMDQ3IHN0dWIgR2V0S2VybmVsT2JqZWN0U2VjdXJpdHkKLTAwNDggc3R1YiBHZXRMZW5ndGhTaWQKKzAwNDggc3RkY2FsbCBHZXRMZW5ndGhTaWQocHRyKSBHZXRMZW5ndGhTaWQKIDAwNDkgc3R1YiBHZXROdW1iZXJPZkV2ZW50TG9nUmVjb3JkcwogMDA1MCBzdHViIEdldE9sZGVzdEV2ZW50TG9nUmVjb3JkCiAwMDUxIHN0dWIgR2V0UHJpdmF0ZU9iamVjdFNlY3VyaXR5CkBAIC02NCwxMCArNjQsMTAgQEAKIDAwNTkgc3R1YiBHZXRTZXJ2aWNlRGlzcGxheU5hbWVXCiAwMDYwIHN0dWIgR2V0U2VydmljZUtleU5hbWVBCiAwMDYxIHN0dWIgR2V0U2VydmljZUtleU5hbWVXCi0wMDYyIHN0dWIgR2V0U2lkSWRlbnRpZmllckF1dGhvcml0eQotMDA2MyBzdHViIEdldFNpZExlbmd0aFJlcXVpcmVkCi0wMDY0IHN0dWIgR2V0U2lkU3ViQXV0aG9yaXR5Ci0wMDY1IHN0dWIgR2V0U2lkU3ViQXV0aG9yaXR5Q291bnQKKzAwNjIgc3RkY2FsbCBHZXRTaWRJZGVudGlmaWVyQXV0aG9yaXR5KHB0cikgR2V0U2lkSWRlbnRpZmllckF1dGhvcml0eQorMDA2MyBzdGRjYWxsIEdldFNpZExlbmd0aFJlcXVpcmVkKGxvbmcpIEdldFNpZExlbmd0aFJlcXVpcmVkCiswMDY0IHN0ZGNhbGwgR2V0U2lkU3ViQXV0aG9yaXR5KHB0ciBsb25nKSBHZXRTaWRTdWJBdXRob3JpdHkKKzAwNjUgc3RkY2FsbCBHZXRTaWRTdWJBdXRob3JpdHlDb3VudChwdHIpIEdldFNpZFN1YkF1dGhvcml0eUNvdW50CiAwMDY2IHN0dWIgR2V0VG9rZW5JbmZvcm1hdGlvbgogMDA2NyBzdGRjYWxsIEdldFVzZXJOYW1lQShwdHIgcHRyKSBHZXRVc2VyTmFtZTMyQQogMDA2OCBzdGRjYWxsIEdldFVzZXJOYW1lVyhwdHIgcHRyKSBHZXRVc2VyTmFtZTMyVwpAQCAtNzYsMTMgKzc2LDEzIEBACiAwMDcxIHN0dWIgSW1wZXJzb25hdGVTZWxmCiAwMDcyIHN0dWIgSW5pdGlhbGl6ZUFjbAogMDA3MyByZXR1cm4gSW5pdGlhbGl6ZVNlY3VyaXR5RGVzY3JpcHRvciA4IDEKLTAwNzQgc3R1YiBJbml0aWFsaXplU2lkCiswMDc0IHN0ZGNhbGwgSW5pdGlhbGl6ZVNpZChwdHIgcHRyIGxvbmcpIEluaXRpYWxpemVTaWQKIDAwNzUgc3R1YiBJbml0aWF0ZVN5c3RlbVNodXRkb3duQQogMDA3NiBzdHViIEluaXRpYXRlU3lzdGVtU2h1dGRvd25XCiAwMDc3IHN0dWIgSXNUZXh0VW5pY29kZQogMDA3OCBzdHViIElzVmFsaWRBY2wKIDAwNzkgc3R1YiBJc1ZhbGlkU2VjdXJpdHlEZXNjcmlwdG9yCi0wMDgwIHN0dWIgSXNWYWxpZFNpZAorMDA4MCBzdGRjYWxsIElzVmFsaWRTaWQocHRyKSBJc1ZhbGlkU2lkCiAwMDgxIHN0dWIgTG9ja1NlcnZpY2VEYXRhYmFzZQogMDA4MiBzdHViIExvZ29uVXNlckEKIDAwODMgc3R1YiBMb2dvblVzZXJXCmRpZmYgLS1naXQgYS9pZjE2MzIvYnVpbHRpbi5jIGIvaWYxNjMyL2J1aWx0aW4uYwppbmRleCBhMDIzZWYzLi4zYTQzODZjIDEwMDY0NAotLS0gYS9pZjE2MzIvYnVpbHRpbi5jCisrKyBiL2lmMTYzMi9idWlsdGluLmMKQEAgLTE5OSwyMSArMTk5LDcgQEAKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIHJlYWwtbW9kZSBzZWxlY3RvciBlbnRyeSBwb2ludHMgKi8KIAotI2RlZmluZSBTRVRfRU5UUllfUE9JTlQobnVtLGFkZHIpIFwKLSAgICBNT0RVTEVfU2V0RW50cnlQb2ludCggaE1vZHVsZSwgKG51bSksIEdMT0JBTF9DcmVhdGVCbG9jayggR01FTV9GSVhFRCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERPU01FTV9kb3NtZW0rKGFkZHIpLCAweDEwMDAwLCBoTW9kdWxlLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIEZBTFNFLCBGQUxTRSwgTlVMTCApKQotCi0gICAgU0VUX0VOVFJZX1BPSU5UKCAxNzQsIDB4YTAwMDAgKTsgIC8qIEtFUk5FTC4xNzQ6IF9fQTAwMEggKi8KLSAgICBTRVRfRU5UUllfUE9JTlQoIDE4MSwgMHhiMDAwMCApOyAgLyogS0VSTkVMLjE4MTogX19CMDAwSCAqLwotICAgIFNFVF9FTlRSWV9QT0lOVCggMTgyLCAweGI4MDAwICk7ICAvKiBLRVJORUwuMTgyOiBfX0I4MDBIICovCi0gICAgU0VUX0VOVFJZX1BPSU5UKCAxOTUsIDB4YzAwMDAgKTsgIC8qIEtFUk5FTC4xOTU6IF9fQzAwMEggKi8KLSAgICBTRVRfRU5UUllfUE9JTlQoIDE3OSwgMHhkMDAwMCApOyAgLyogS0VSTkVMLjE3OTogX19EMDAwSCAqLwotICAgIFNFVF9FTlRSWV9QT0lOVCggMTkwLCAweGUwMDAwICk7ICAvKiBLRVJORUwuMTkwOiBfX0UwMDBIICovCi0gICAgU0VUX0VOVFJZX1BPSU5UKCAxNzMsIDB4ZjAwMDAgKTsgIC8qIEtFUk5FTC4xNzM6IF9fUk9NQklPUyAqLwotICAgIFNFVF9FTlRSWV9QT0lOVCggMTk0LCAweGYwMDAwICk7ICAvKiBLRVJORUwuMTk0OiBfX0YwMDBIICovCi0gICAgTU9EVUxFX1NldEVudHJ5UG9pbnQoaE1vZHVsZSwxOTMsRE9TTUVNX0Jpb3NTZWcpOyAvKiBLRVJORUwuMTkzOiBfXzAwNDBIICovCi0jdW5kZWYgU0VUX0VOVFJZX1BPSU5UCisgICAgRE9TTUVNX0luaXRFeHBvcnRzKCBoTW9kdWxlICk7CiAKICAgICAvKiBTZXQgaW50ZXJydXB0IHZlY3RvcnMgZnJvbSBlbnRyeSBwb2ludHMgaW4gV1BST0NTLkRMTCAqLwogCmRpZmYgLS1naXQgYS9pZjE2MzIvY3J0ZGxsLnNwZWMgYi9pZjE2MzIvY3J0ZGxsLnNwZWMKaW5kZXggYTEyNzlmOS4uYmUzNDE1NSAxMDA2NDQKLS0tIGEvaWYxNjMyL2NydGRsbC5zcGVjCisrKyBiL2lmMTYzMi9jcnRkbGwuc3BlYwpAQCAtMzIzLDEyICszMjMsMTIgQEAKIDMxOCBzdHViIF92c25wcmludGYKIDMxOSBzdHViIF92c253cHJpbnRmCiAzMjAgc3R1YiBfd2NzZHVwCi0zMjEgc3R1YiBfd2NzaWNtcAorMzIxIGNkZWNsIF93Y3NpY21wKHB0ciBwdHIpIGxzdHJjbXBpMzJXCiAzMjIgY2RlY2wgX3djc2ljb2xsKHB0ciBwdHIpIENSVERMTF9fd2NzaWNvbGwKIDMyMyBjZGVjbCBfd2NzbHdyKHB0cikgQ1JURExMX193Y3Nsd3IKIDMyNCBzdHViIF93Y3NuaWNtcAogMzI1IHN0dWIgX3djc25zZXQKLTMyNiBzdHViIF93Y3NyZXYKKzMyNiBjZGVjbCBfd2NzcmV2KHB0cikgQ1JURExMX193Y3NyZXYKIDMyNyBzdHViIF93Y3NzZXQKIDMyOCBjZGVjbCBfd2NzdXByKHB0cikgQ1JURExMX193Y3N1cHIKIDMyOSBleHRlcm4gX3dpbm1ham9yX2RsbCBDUlRETExfd2lubWFqb3JfZGxsCmRpZmYgLS1naXQgYS9pZjE2MzIvZ2RpLnNwZWMgYi9pZjE2MzIvZ2RpLnNwZWMKaW5kZXggY2E4ZDFmMS4uYWY4ZGMzMSAxMDA2NDQKLS0tIGEvaWYxNjMyL2dkaS5zcGVjCisrKyBiL2lmMTYzMi9nZGkuc3BlYwpAQCAtODYsNyArODYsNyBAQAogNzcgIHBhc2NhbDE2IEdldENsaXBCb3god29yZCBwdHIpIEdldENsaXBCb3gxNgogNzggIHBhc2NhbCAgIEdldEN1cnJlbnRQb3NpdGlvbih3b3JkKSBHZXRDdXJyZW50UG9zaXRpb24KIDc5ICBwYXNjYWwgICBHZXREQ09yZyh3b3JkKSBHZXREQ09yZwotODAgIHBhc2NhbDE2IEdldERldmljZUNhcHMod29yZCBzX3dvcmQpIEdldERldmljZUNhcHMKKzgwICBwYXNjYWwxNiBHZXREZXZpY2VDYXBzKHdvcmQgc193b3JkKSBHZXREZXZpY2VDYXBzMTYKIDgxICBwYXNjYWwxNiBHZXRNYXBNb2RlKHdvcmQpIEdldE1hcE1vZGUxNgogODIgIHBhc2NhbDE2IEdldE9iamVjdCh3b3JkIHNfd29yZCBwdHIpIEdldE9iamVjdDE2CiA4MyAgcGFzY2FsICAgR2V0UGl4ZWwod29yZCBzX3dvcmQgc193b3JkKSBHZXRQaXhlbDE2CkBAIC0xMTgsOCArMTE4LDggQEAKIDExOSBwYXNjYWwxNiBBZGRGb250UmVzb3VyY2UocHRyKSBBZGRGb250UmVzb3VyY2UKICMxMjEgcGFzY2FsIERlYXRoCiAjMTIyIHBhc2NhbCBSZVN1clJlY3Rpb24KLTEyMyBwYXNjYWwxNiBQbGF5TWV0YUZpbGUod29yZCB3b3JkKSBQbGF5TWV0YUZpbGUKLTEyNCBwYXNjYWwxNiBHZXRNZXRhRmlsZShwdHIpIEdldE1ldGFGaWxlCisxMjMgcGFzY2FsMTYgUGxheU1ldGFGaWxlKHdvcmQgd29yZCkgUGxheU1ldGFGaWxlMTYKKzEyNCBwYXNjYWwxNiBHZXRNZXRhRmlsZShwdHIpIEdldE1ldGFGaWxlMTYKIDEyNSBwYXNjYWwxNiBDcmVhdGVNZXRhRmlsZShwdHIpIENyZWF0ZU1ldGFGaWxlMTYKIDEyNiBwYXNjYWwxNiBDbG9zZU1ldGFGaWxlKHdvcmQpIENsb3NlTWV0YUZpbGUxNgogMTI3IHBhc2NhbDE2IERlbGV0ZU1ldGFGaWxlKHdvcmQpIERlbGV0ZU1ldGFGaWxlMTYKQEAgLTEzNSw5ICsxMzUsOSBAQAogMTQ4IHBhc2NhbCBTZXRCcnVzaE9yZyh3b3JkIHNfd29yZCBzX3dvcmQpIFNldEJydXNoT3JnCiAxNDkgcGFzY2FsIEdldEJydXNoT3JnKHdvcmQpIEdldEJydXNoT3JnCiAxNTAgcGFzY2FsMTYgVW5yZWFsaXplT2JqZWN0KHdvcmQpIFVucmVhbGl6ZU9iamVjdDE2Ci0xNTEgcGFzY2FsMTYgQ29weU1ldGFGaWxlKHdvcmQgcHRyKSBDb3B5TWV0YUZpbGUKKzE1MSBwYXNjYWwxNiBDb3B5TWV0YUZpbGUod29yZCBwdHIpIENvcHlNZXRhRmlsZTE2CiAxNTMgcGFzY2FsMTYgQ3JlYXRlSUMocHRyIHB0ciBwdHIgcHRyKSBDcmVhdGVJQzE2Ci0xNTQgcGFzY2FsIEdldE5lYXJlc3RDb2xvcih3b3JkIGxvbmcpIEdldE5lYXJlc3RDb2xvcgorMTU0IHBhc2NhbCAgIEdldE5lYXJlc3RDb2xvcih3b3JkIGxvbmcpIEdldE5lYXJlc3RDb2xvcjE2CiAxNTUgc3R1YiBRdWVyeUFib3J0CiAxNTYgcGFzY2FsMTYgQ3JlYXRlRGlzY2FyZGFibGVCaXRtYXAod29yZCB3b3JkIHdvcmQpIENyZWF0ZURpc2NhcmRhYmxlQml0bWFwCiAxNTggcGFzY2FsMTYgRW51bUNhbGxiYWNrKHB0ciBwdHIgd29yZCBsb25nKSBXaW5lRW51bURGb250Q2FsbGJhY2sKQEAgLTIzMywyOCArMjMzLDI3IEBACiAzNDYgcGFzY2FsMTYgU2V0VGV4dEFsaWduKHdvcmQgd29yZCkgU2V0VGV4dEFsaWduMTYKIDM0OCBwYXNjYWwxNiBDaG9yZCh3b3JkIHNfd29yZCBzX3dvcmQgc193b3JkIHNfd29yZCBzX3dvcmQgc193b3JkCiAgICAgICAgICAgICAgICAgICAgc193b3JkIHNfd29yZCkgQ2hvcmQxNgotMzQ5IHBhc2NhbCBTZXRNYXBwZXJGbGFncyh3b3JkIGxvbmcpIFNldE1hcHBlckZsYWdzCiszNDkgcGFzY2FsIFNldE1hcHBlckZsYWdzKHdvcmQgbG9uZykgU2V0TWFwcGVyRmxhZ3MxNgogMzUwIHBhc2NhbDE2IEdldENoYXJXaWR0aCh3b3JkIHdvcmQgd29yZCBwdHIpIEdldENoYXJXaWR0aDE2CiAzNTEgcGFzY2FsMTYgRXh0VGV4dE91dCh3b3JkIHNfd29yZCBzX3dvcmQgd29yZCBwdHIgcHRyIHdvcmQgcHRyKSBFeHRUZXh0T3V0MTYKIDM1MiBzdHViIEdldFBoeXNpY2FsRm9udEhhbmRsZQogMzUzIHN0dWIgR2V0QXNwZWN0UmF0aW9GaWx0ZXIKIDM1NCBzdHViIFNocmlua0dESUhlYXAKIDM1NSBzdHViIEZUcmFwcGluZzAKLTM2MCBwYXNjYWwxNiBDcmVhdGVQYWxldHRlKHB0cikgQ3JlYXRlUGFsZXR0ZQorMzYwIHBhc2NhbDE2IENyZWF0ZVBhbGV0dGUocHRyKSBDcmVhdGVQYWxldHRlMTYKIDM2MSBwYXNjYWwxNiBHRElTZWxlY3RQYWxldHRlKHdvcmQgd29yZCB3b3JkKSBHRElTZWxlY3RQYWxldHRlCiAzNjIgcGFzY2FsMTYgR0RJUmVhbGl6ZVBhbGV0dGUod29yZCkgR0RJUmVhbGl6ZVBhbGV0dGUKLTM2MyBwYXNjYWwxNiBHZXRQYWxldHRlRW50cmllcyh3b3JkIHdvcmQgd29yZCBwdHIpIEdldFBhbGV0dGVFbnRyaWVzCi0zNjQgcGFzY2FsMTYgU2V0UGFsZXR0ZUVudHJpZXMod29yZCB3b3JkIHdvcmQgcHRyKSBTZXRQYWxldHRlRW50cmllcworMzYzIHBhc2NhbDE2IEdldFBhbGV0dGVFbnRyaWVzKHdvcmQgd29yZCB3b3JkIHB0cikgR2V0UGFsZXR0ZUVudHJpZXMxNgorMzY0IHBhc2NhbDE2IFNldFBhbGV0dGVFbnRyaWVzKHdvcmQgd29yZCB3b3JkIHB0cikgU2V0UGFsZXR0ZUVudHJpZXMxNgogMzY1IHBhc2NhbDE2IFJlYWxpemVEZWZhdWx0UGFsZXR0ZSh3b3JkKSBSZWFsaXplRGVmYXVsdFBhbGV0dGUKIDM2NiBwYXNjYWwxNiBVcGRhdGVDb2xvcnMod29yZCkgVXBkYXRlQ29sb3JzCi0zNjcgcGFzY2FsMTYgQW5pbWF0ZVBhbGV0dGUod29yZCB3b3JkIHdvcmQgcHRyKSBBbmltYXRlUGFsZXR0ZQotMzY4IHBhc2NhbDE2IFJlc2l6ZVBhbGV0dGUod29yZCB3b3JkKSBSZXNpemVQYWxldHRlCi0zNzAgcGFzY2FsMTYgR2V0TmVhcmVzdFBhbGV0dGVJbmRleCh3b3JkIGxvbmcpIEdldE5lYXJlc3RQYWxldHRlSW5kZXgKKzM2NyBwYXNjYWwxNiBBbmltYXRlUGFsZXR0ZSh3b3JkIHdvcmQgd29yZCBwdHIpIEFuaW1hdGVQYWxldHRlMTYKKzM2OCBwYXNjYWwxNiBSZXNpemVQYWxldHRlKHdvcmQgd29yZCkgUmVzaXplUGFsZXR0ZTE2CiszNzAgcGFzY2FsMTYgR2V0TmVhcmVzdFBhbGV0dGVJbmRleCh3b3JkIGxvbmcpIEdldE5lYXJlc3RQYWxldHRlSW5kZXgxNgogMzcyIHBhc2NhbDE2IEV4dEZsb29kRmlsbCh3b3JkIHNfd29yZCBzX3dvcmQgbG9uZyB3b3JkKSBFeHRGbG9vZEZpbGwxNgotMzczIHBhc2NhbDE2IFNldFN5c3RlbVBhbGV0dGVVc2Uod29yZCB3b3JkKSBTZXRTeXN0ZW1QYWxldHRlVXNlCi0zNzQgcGFzY2FsMTYgR2V0U3lzdGVtUGFsZXR0ZVVzZSh3b3JkKSBHZXRTeXN0ZW1QYWxldHRlVXNlCi0zNzUgcGFzY2FsMTYgR2V0U3lzdGVtUGFsZXR0ZUVudHJpZXMod29yZCB3b3JkIHdvcmQgcHRyKQotICAgICAgICAgICAgIEdldFN5c3RlbVBhbGV0dGVFbnRyaWVzCiszNzMgcGFzY2FsMTYgU2V0U3lzdGVtUGFsZXR0ZVVzZSh3b3JkIHdvcmQpIFNldFN5c3RlbVBhbGV0dGVVc2UxNgorMzc0IHBhc2NhbDE2IEdldFN5c3RlbVBhbGV0dGVVc2Uod29yZCkgR2V0U3lzdGVtUGFsZXR0ZVVzZTE2CiszNzUgcGFzY2FsMTYgR2V0U3lzdGVtUGFsZXR0ZUVudHJpZXMod29yZCB3b3JkIHdvcmQgcHRyKSBHZXRTeXN0ZW1QYWxldHRlRW50cmllczE2CiAzNzYgcGFzY2FsMTYgUmVzZXREQyh3b3JkIHB0cikgUmVzZXREQzE2CiAzNzcgc3R1YiBTVEFSVERPQwogMzc4IHN0dWIgRU5ERE9DCmRpZmYgLS1naXQgYS9pZjE2MzIvZ2RpMzIuc3BlYyBiL2lmMTYzMi9nZGkzMi5zcGVjCmluZGV4IGE3MDMzZGYuLmRkNjU2MDMgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9nZGkzMi5zcGVjCisrKyBiL2lmMTYzMi9nZGkzMi5zcGVjCkBAIC04LDcgKzgsNyBAQAogMDAwMyBzdHViIEFkZEZvbnRSZXNvdXJjZVRyYWNraW5nCiAwMDA0IHN0dWIgQWRkRm9udFJlc291cmNlVwogMDAwNSBzdHViIEFuZ2xlQXJjCi0wMDA2IHN0dWIgQW5pbWF0ZVBhbGV0dGUKKzAwMDYgc3RkY2FsbCBBbmltYXRlUGFsZXR0ZShsb25nIGxvbmcgbG9uZyBwdHIpIEFuaW1hdGVQYWxldHRlMzIKIDAwMDcgc3RkY2FsbCBBcmMobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcpIEFyYzMyCiAwMDA4IHN0dWIgQXJjVG8KIDAwMDkgc3R1YiBCZWdpblBhdGgKQEAgLTI1LDggKzI1LDggQEAKIDAwMjAgc3R1YiBDb21iaW5lVHJhbnNmb3JtCiAwMDIxIHN0dWIgQ29weUVuaE1ldGFGaWxlQQogMDAyMiBzdHViIENvcHlFbmhNZXRhRmlsZVcKLTAwMjMgc3R1YiBDb3B5TWV0YUZpbGVBCi0wMDI0IHN0dWIgQ29weU1ldGFGaWxlVworMDAyMyBzdGRjYWxsIENvcHlNZXRhRmlsZUEobG9uZyBwdHIpIENvcHlNZXRhRmlsZTMyQQorMDAyNCBzdGRjYWxsIENvcHlNZXRhRmlsZVcobG9uZyBwdHIpIENvcHlNZXRhRmlsZTMyVwogMDAyNSBzdGRjYWxsIENyZWF0ZUJpdG1hcChsb25nIGxvbmcgbG9uZyBsb25nIHB0cikgQ3JlYXRlQml0bWFwCiAwMDI2IHN0ZGNhbGwgQ3JlYXRlQml0bWFwSW5kaXJlY3QocHRyKSBDcmVhdGVCaXRtYXBJbmRpcmVjdDMyCiAwMDI3IHN0ZGNhbGwgQ3JlYXRlQnJ1c2hJbmRpcmVjdChwdHIpIENyZWF0ZUJydXNoSW5kaXJlY3QzMgpAQCAtNTcsNyArNTcsNyBAQAogMDA1MCBzdGRjYWxsIENyZWF0ZUlDVyhwdHIgcHRyIHB0ciBwdHIpIENyZWF0ZUlDMzJXCiAwMDUxIHN0dWIgQ3JlYXRlTWV0YUZpbGVBCiAwMDUyIHN0dWIgQ3JlYXRlTWV0YUZpbGVXCi0wMDUzIHN0ZGNhbGwgQ3JlYXRlUGFsZXR0ZShwdHIpIENyZWF0ZVBhbGV0dGUKKzAwNTMgc3RkY2FsbCBDcmVhdGVQYWxldHRlKHB0cikgQ3JlYXRlUGFsZXR0ZTMyCiAwMDU0IHN0ZGNhbGwgQ3JlYXRlUGF0dGVybkJydXNoKGxvbmcpIENyZWF0ZVBhdHRlcm5CcnVzaDMyCiAwMDU1IHN0ZGNhbGwgQ3JlYXRlUGVuKGxvbmcgbG9uZyBsb25nKSBDcmVhdGVQZW4zMgogMDA1NiBzdGRjYWxsIENyZWF0ZVBlbkluZGlyZWN0KHB0cikgQ3JlYXRlUGVuSW5kaXJlY3QzMgpAQCAtMTc2LDcgKzE3Niw3IEBACiAwMTY4IHN0ZGNhbGwgR2V0RENPcmdFeChsb25nIHB0cikgR2V0RENPcmdFeAogMDE2OSBzdHViIEdldERJQkNvbG9yVGFibGUKIDAxNzAgc3RkY2FsbCBHZXRESUJpdHMobG9uZyBsb25nIGxvbmcgbG9uZyBwdHIgcHRyIGxvbmcpIEdldERJQml0czMyCi0wMTcxIHN0ZGNhbGwgR2V0RGV2aWNlQ2Fwcyhsb25nIGxvbmcpIEdldERldmljZUNhcHMKKzAxNzEgc3RkY2FsbCBHZXREZXZpY2VDYXBzKGxvbmcgbG9uZykgR2V0RGV2aWNlQ2FwczMyCiAwMTcyIHN0dWIgR2V0RGV2aWNlR2FtbWFSYW1wCiAwMTczIHN0dWIgR2V0RVRNCiAwMTc0IHN0dWIgR2V0RW5oTWV0YUZpbGVBCkBAIC0yMDIsMTkgKzIwMiwxOSBAQAogMDE5NCBzdHViIEdldExvZ0NvbG9yU3BhY2VBCiAwMTk1IHN0dWIgR2V0TG9nQ29sb3JTcGFjZVcKIDAxOTYgc3RkY2FsbCBHZXRNYXBNb2RlKGxvbmcpIEdldE1hcE1vZGUzMgotMDE5NyBzdHViIEdldE1ldGFGaWxlQQorMDE5NyBzdGRjYWxsIEdldE1ldGFGaWxlQShwdHIpIEdldE1ldGFGaWxlMzJBCiAwMTk4IHN0dWIgR2V0TWV0YUZpbGVCaXRzRXgKLTAxOTkgc3R1YiBHZXRNZXRhRmlsZVcKKzAxOTkgc3RkY2FsbCBHZXRNZXRhRmlsZVcocHRyKSBHZXRNZXRhRmlsZTMyVwogMDIwMCBzdHViIEdldE1ldGFSZ24KIDAyMDEgc3R1YiBHZXRNaXRlckxpbWl0Ci0wMjAyIHN0ZGNhbGwgR2V0TmVhcmVzdENvbG9yKGxvbmcgbG9uZykgR2V0TmVhcmVzdENvbG9yCi0wMjAzIHN0dWIgR2V0TmVhcmVzdFBhbGV0dGVJbmRleAorMDIwMiBzdGRjYWxsIEdldE5lYXJlc3RDb2xvcihsb25nIGxvbmcpIEdldE5lYXJlc3RDb2xvcjMyCiswMjAzIHN0ZGNhbGwgR2V0TmVhcmVzdFBhbGV0dGVJbmRleChsb25nIGxvbmcpIEdldE5lYXJlc3RQYWxldHRlSW5kZXgzMgogMDIwNCBzdGRjYWxsIEdldE9iamVjdEEobG9uZyBsb25nIHB0cikgR2V0T2JqZWN0MzJBCiAwMjA1IHN0dWIgR2V0T2JqZWN0VHlwZQogMDIwNiBzdGRjYWxsIEdldE9iamVjdFcobG9uZyBsb25nIHB0cikgR2V0T2JqZWN0MzJXCiAwMjA3IHN0dWIgR2V0T3V0bGluZVRleHRNZXRyaWNzQQogMDIwOCBzdHViIEdldE91dGxpbmVUZXh0TWV0cmljc1cKLTAyMDkgc3RkY2FsbCBHZXRQYWxldHRlRW50cmllcyhsb25nIGxvbmcgbG9uZyBwdHIpIEdldFBhbGV0dGVFbnRyaWVzCiswMjA5IHN0ZGNhbGwgR2V0UGFsZXR0ZUVudHJpZXMobG9uZyBsb25nIGxvbmcgcHRyKSBHZXRQYWxldHRlRW50cmllczMyCiAwMjEwIHN0dWIgR2V0UGF0aAogMDIxMSBzdGRjYWxsIEdldFBpeGVsKGxvbmcgbG9uZyBsb25nKSBHZXRQaXhlbDMyCiAwMjEyIHN0dWIgR2V0UGl4ZWxGb3JtYXQKQEAgLTIyNyw4ICsyMjcsOCBAQAogMDIxOSBzdGRjYWxsIEdldFJnbkJveChsb25nIHB0cikgR2V0UmduQm94MzIKIDAyMjAgc3RkY2FsbCBHZXRTdG9ja09iamVjdChsb25nKSBHZXRTdG9ja09iamVjdDMyCiAwMjIxIHN0ZGNhbGwgR2V0U3RyZXRjaEJsdE1vZGUobG9uZykgR2V0U3RyZXRjaEJsdE1vZGUzMgotMDIyMiBzdGRjYWxsIEdldFN5c3RlbVBhbGV0dGVFbnRyaWVzKGxvbmcgbG9uZyBsb25nIHB0cikgR2V0U3lzdGVtUGFsZXR0ZUVudHJpZXMKLTAyMjMgc3R1YiBHZXRTeXN0ZW1QYWxldHRlVXNlCiswMjIyIHN0ZGNhbGwgR2V0U3lzdGVtUGFsZXR0ZUVudHJpZXMobG9uZyBsb25nIGxvbmcgcHRyKSBHZXRTeXN0ZW1QYWxldHRlRW50cmllczMyCiswMjIzIHN0ZGNhbGwgR2V0U3lzdGVtUGFsZXR0ZVVzZSgpIEdldFN5c3RlbVBhbGV0dGVVc2UzMgogMDIyNCBzdGRjYWxsIEdldFRleHRBbGlnbihsb25nKSBHZXRUZXh0QWxpZ24zMgogMDIyNSBzdGRjYWxsIEdldFRleHRDaGFyYWN0ZXJFeHRyYShsb25nKSBHZXRUZXh0Q2hhcmFjdGVyRXh0cmEzMgogMDIyNiBzdHViIEdldFRleHRDaGFyc2V0CkBAIC0yNzAsNyArMjcwLDcgQEAKIDAyNjIgc3RkY2FsbCBQaWUobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcpIFBpZTMyCiAwMjYzIHN0dWIgUGxheUVuaE1ldGFGaWxlCiAwMjY0IHN0dWIgUGxheUVuaE1ldGFGaWxlUmVjb3JkCi0wMjY1IHN0dWIgUGxheU1ldGFGaWxlCiswMjY1IHN0ZGNhbGwgUGxheU1ldGFGaWxlKGxvbmcgbG9uZykgUGxheU1ldGFGaWxlMzIKIDAyNjYgc3R1YiBQbGF5TWV0YUZpbGVSZWNvcmQKIDAyNjcgc3R1YiBQbGdCbHQKIDAyNjggc3R1YiBQb2x5QmV6aWVyCkBAIC0yODUsNyArMjg1LDcgQEAKIDAyNzcgc3R1YiBQb2x5bGluZVRvCiAwMjc4IHN0ZGNhbGwgUHRJblJlZ2lvbihsb25nIGxvbmcgbG9uZykgUHRJblJlZ2lvbjMyCiAwMjc5IHN0ZGNhbGwgUHRWaXNpYmxlKGxvbmcgbG9uZyBsb25nKSBQdFZpc2libGUzMgotMDI4MCBzdGRjYWxsIFJlYWxpemVQYWxldHRlKGxvbmcpIFJlYWxpemVQYWxldHRlCiswMjgwIHN0ZGNhbGwgUmVhbGl6ZVBhbGV0dGUobG9uZykgUmVhbGl6ZVBhbGV0dGUzMgogMDI4MSBzdGRjYWxsIFJlY3RJblJlZ2lvbihsb25nIHB0cikgUmVjdEluUmVnaW9uMzIKIDAyODIgc3RkY2FsbCBSZWN0VmlzaWJsZShsb25nIHB0cikgUmVjdFZpc2libGUzMgogMDI4MyBzdGRjYWxsIFJlY3RhbmdsZShsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcpIFJlY3RhbmdsZTMyCkBAIC0yOTQsNyArMjk0LDcgQEAKIDAyODYgc3R1YiBSZW1vdmVGb250UmVzb3VyY2VXCiAwMjg3IHN0ZGNhbGwgUmVzZXREQ0EobG9uZyBwdHIpIFJlc2V0REMzMkEKIDAyODggc3RkY2FsbCBSZXNldERDVyhsb25nIHB0cikgUmVzZXREQzMyVwotMDI4OSBzdGRjYWxsIFJlc2l6ZVBhbGV0dGUobG9uZyBsb25nKSBSZXNpemVQYWxldHRlCiswMjg5IHN0ZGNhbGwgUmVzaXplUGFsZXR0ZShsb25nIGxvbmcpIFJlc2l6ZVBhbGV0dGUzMgogMDI5MCBzdGRjYWxsIFJlc3RvcmVEQyhsb25nIGxvbmcpIFJlc3RvcmVEQzMyCiAwMjkxIHN0ZGNhbGwgUm91bmRSZWN0KGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcpIFJvdW5kUmVjdDMyCiAwMjkyIHN0ZGNhbGwgU2F2ZURDKGxvbmcpIFNhdmVEQzMyCkBAIC0zMDUsNyArMzA1LDcgQEAKIDAyOTcgc3RkY2FsbCBTZWxlY3RDbGlwUmduKGxvbmcgbG9uZykgU2VsZWN0Q2xpcFJnbjMyCiAwMjk4IHN0dWIgU2VsZWN0Rm9udExvY2FsCiAwMjk5IHN0ZGNhbGwgU2VsZWN0T2JqZWN0KGxvbmcgbG9uZykgU2VsZWN0T2JqZWN0MzIKLTAzMDAgc3RkY2FsbCBTZWxlY3RQYWxldHRlKGxvbmcgbG9uZyBsb25nKSBTZWxlY3RQYWxldHRlCiswMzAwIHN0ZGNhbGwgU2VsZWN0UGFsZXR0ZShsb25nIGxvbmcgbG9uZykgU2VsZWN0UGFsZXR0ZTMyCiAwMzAxIHN0dWIgU2V0QWJvcnRQcm9jCiAwMzAyIHN0dWIgU2V0QXJjRGlyZWN0aW9uCiAwMzAzIHN0ZGNhbGwgU2V0Qml0bWFwQml0cyhsb25nIGxvbmcgcHRyKSBTZXRCaXRtYXBCaXRzCkBAIC0zMjgsMTEgKzMyOCwxMSBAQAogMDMxOSBzdHViIFNldElDTVByb2ZpbGVBCiAwMzIwIHN0dWIgU2V0SUNNUHJvZmlsZVcKIDAzMjEgc3RkY2FsbCBTZXRNYXBNb2RlKGxvbmcgbG9uZykgU2V0TWFwTW9kZTMyCi0wMzIyIHN0ZGNhbGwgU2V0TWFwcGVyRmxhZ3MobG9uZyBsb25nKSBTZXRNYXBwZXJGbGFncworMDMyMiBzdGRjYWxsIFNldE1hcHBlckZsYWdzKGxvbmcgbG9uZykgU2V0TWFwcGVyRmxhZ3MzMgogMDMyMyBzdHViIFNldE1ldGFGaWxlQml0c0V4CiAwMzI0IHN0dWIgU2V0TWV0YVJnbgogMDMyNSBzdHViIFNldE1pdGVyTGltaXQKLTAzMjYgc3RkY2FsbCBTZXRQYWxldHRlRW50cmllcyhsb25nIGxvbmcgbG9uZyBwdHIpIFNldFBhbGV0dGVFbnRyaWVzCiswMzI2IHN0ZGNhbGwgU2V0UGFsZXR0ZUVudHJpZXMobG9uZyBsb25nIGxvbmcgcHRyKSBTZXRQYWxldHRlRW50cmllczMyCiAwMzI3IHN0ZGNhbGwgU2V0UGl4ZWwobG9uZyBsb25nIGxvbmcgbG9uZykgU2V0UGl4ZWwzMgogMDMyOCBzdHViIFNldFBpeGVsRm9ybWF0CiAwMzI5IHN0dWIgU2V0UGl4ZWxWCkBAIC0zNDEsNyArMzQxLDcgQEAKIDAzMzIgc3RkY2FsbCBTZXRSZWN0UmduKGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZykgU2V0UmVjdFJnbgogMDMzMyBzdGRjYWxsIFNldFJlbEFicyhsb25nIGxvbmcpIFNldFJlbEFiczMyCiAwMzM0IHN0ZGNhbGwgU2V0U3RyZXRjaEJsdE1vZGUobG9uZyBsb25nKSBTZXRTdHJldGNoQmx0TW9kZTMyCi0wMzM1IHN0ZGNhbGwgU2V0U3lzdGVtUGFsZXR0ZVVzZShsb25nIGxvbmcpIFNldFN5c3RlbVBhbGV0dGVVc2UKKzAzMzUgc3RkY2FsbCBTZXRTeXN0ZW1QYWxldHRlVXNlKGxvbmcgbG9uZykgU2V0U3lzdGVtUGFsZXR0ZVVzZTMyCiAwMzM2IHN0ZGNhbGwgU2V0VGV4dEFsaWduKGxvbmcgbG9uZykgU2V0VGV4dEFsaWduMzIKIDAzMzcgc3RkY2FsbCBTZXRUZXh0Q2hhcmFjdGVyRXh0cmEobG9uZyBsb25nKSBTZXRUZXh0Q2hhcmFjdGVyRXh0cmEzMgogMDMzOCBzdGRjYWxsIFNldFRleHRDb2xvcihsb25nIGxvbmcpIFNldFRleHRDb2xvcgpkaWZmIC0tZ2l0IGEvaWYxNjMyL2tlcm5lbC5zcGVjIGIvaWYxNjMyL2tlcm5lbC5zcGVjCmluZGV4IGQ5MzRkYWQuLjc1ZmFhOWIgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9rZXJuZWwuc3BlYworKysgYi9pZjE2MzIva2VybmVsLnNwZWMKQEAgLTY0LDExICs2NCwxMSBAQAogNjUgIHBhc2NhbCBTaXplb2ZSZXNvdXJjZSh3b3JkIHdvcmQpIFNpemVvZlJlc291cmNlMTYKIDY2ICBwYXNjYWwxNiBBbGxvY1Jlc291cmNlKHdvcmQgd29yZCBsb25nKSBBbGxvY1Jlc291cmNlMTYKIDY3ICBwYXNjYWwgU2V0UmVzb3VyY2VIYW5kbGVyKHdvcmQgcHRyIHB0cikgU2V0UmVzb3VyY2VIYW5kbGVyCi02OCAgcGFzY2FsMTYgSW5pdEF0b21UYWJsZSh3b3JkKSBJbml0QXRvbVRhYmxlCi02OSAgcGFzY2FsMTYgRmluZEF0b20oc2VncHRyKSBGaW5kQXRvbQotNzAgIHBhc2NhbDE2IEFkZEF0b20oc2VncHRyKSBBZGRBdG9tCi03MSAgcGFzY2FsMTYgRGVsZXRlQXRvbSh3b3JkKSBEZWxldGVBdG9tCi03MiAgcGFzY2FsMTYgR2V0QXRvbU5hbWUod29yZCBwdHIgd29yZCkgR2V0QXRvbU5hbWUKKzY4ICBwYXNjYWwxNiBJbml0QXRvbVRhYmxlKHdvcmQpIEluaXRBdG9tVGFibGUxNgorNjkgIHBhc2NhbDE2IEZpbmRBdG9tKHNlZ3B0cikgRmluZEF0b20xNgorNzAgIHBhc2NhbDE2IEFkZEF0b20oc2VncHRyKSBBZGRBdG9tMTYKKzcxICBwYXNjYWwxNiBEZWxldGVBdG9tKHdvcmQpIERlbGV0ZUF0b20xNgorNzIgIHBhc2NhbDE2IEdldEF0b21OYW1lKHdvcmQgcHRyIHdvcmQpIEdldEF0b21OYW1lMTYKIDczICBwYXNjYWwxNiBHZXRBdG9tSGFuZGxlKHdvcmQpIEdldEF0b21IYW5kbGUKIDc0ICBwYXNjYWwxNiBPcGVuRmlsZShwdHIgcHRyIHdvcmQpIE9wZW5GaWxlMTYKIDc1ICBzdHViIE9wZW5QYXRoTmFtZQpAQCAtMTA3LDggKzEwNyw4IEBACiAxMDggcGFzY2FsMTYgU3dpdGNoU3RhY2tUbyh3b3JkIHdvcmQgd29yZCkgU3dpdGNoU3RhY2tUbwogMTA5IHJlZ2lzdGVyIFN3aXRjaFN0YWNrQmFjaygpIFN3aXRjaFN0YWNrQmFjawogMTEwIHBhc2NhbDE2IFBhdGNoQ29kZUhhbmRsZSh3b3JkKSBQYXRjaENvZGVIYW5kbGUKLTExMSBwYXNjYWwgR2xvYmFsV2lyZSh3b3JkKSBHbG9iYWxXaXJlCi0xMTIgcGFzY2FsMTYgR2xvYmFsVW5XaXJlKHdvcmQpIEdsb2JhbFVuV2lyZQorMTExIHBhc2NhbCAgIEdsb2JhbFdpcmUod29yZCkgR2xvYmFsV2lyZTE2CisxMTIgcGFzY2FsMTYgR2xvYmFsVW5XaXJlKHdvcmQpIEdsb2JhbFVuV2lyZTE2CiAxMTMgZXF1YXRlIF9fQUhTSElGVCAzCiAxMTQgZXF1YXRlIF9fQUhJTkNSIDgKIDExNSBwYXNjYWwxNiBPdXRwdXREZWJ1Z1N0cmluZyhwdHIpIE91dHB1dERlYnVnU3RyaW5nCkBAIC0xNjYsNyArMTY2LDcgQEAKIDE2NiBwYXNjYWwxNiBXaW5FeGVjKHB0ciB3b3JkKSBXaW5FeGVjMTYKIDE2NyBwYXNjYWwxNiBHZXRFeHBXaW5WZXIod29yZCkgR2V0RXhwV2luVmVyCiAxNjggcGFzY2FsMTYgRGlyZWN0UmVzQWxsb2Mod29yZCB3b3JkIHdvcmQpIERpcmVjdFJlc0FsbG9jCi0xNjkgcGFzY2FsIEdldEZyZWVTcGFjZSh3b3JkKSBHZXRGcmVlU3BhY2UKKzE2OSBwYXNjYWwgR2V0RnJlZVNwYWNlKHdvcmQpIEdldEZyZWVTcGFjZTE2CiAxNzAgcGFzY2FsMTYgQWxsb2NDU3RvRFNBbGlhcyh3b3JkKSBBbGxvY0NTdG9EU0FsaWFzCiAxNzEgcGFzY2FsMTYgQWxsb2NEU3RvQ1NBbGlhcyh3b3JkKSBBbGxvY0RTdG9DU0FsaWFzCiAxNzIgcGFzY2FsMTYgQWxsb2NBbGlhcyh3b3JkKSBBbGxvY0NTdG9EU0FsaWFzCkBAIC0xOTQsOCArMTk0LDggQEAKIDE5NCBlcXVhdGUgX19GMDAwSCAwCiAxOTUgZXF1YXRlIF9fQzAwMEggMAogMTk2IHBhc2NhbDE2IFNlbGVjdG9yQWNjZXNzUmlnaHRzKHdvcmQgd29yZCB3b3JkKSBTZWxlY3RvckFjY2Vzc1JpZ2h0cwotMTk3IHBhc2NhbDE2IEdsb2JhbEZpeCh3b3JkKSBHbG9iYWxGaXgKLTE5OCBwYXNjYWwxNiBHbG9iYWxVbmZpeCh3b3JkKSBHbG9iYWxVbmZpeAorMTk3IHBhc2NhbDE2IEdsb2JhbEZpeCh3b3JkKSBHbG9iYWxGaXgxNgorMTk4IHBhc2NhbDE2IEdsb2JhbFVuZml4KHdvcmQpIEdsb2JhbFVuZml4MTYKIDE5OSBwYXNjYWwxNiBTZXRIYW5kbGVDb3VudCh3b3JkKSBTZXRIYW5kbGVDb3VudDE2CiAyMDAgcmV0dXJuIFZhbGlkYXRlRnJlZVNwYWNlcyAwIDAKIDIwMSBzdHViIFJlcGxhY2VJbnN0CmRpZmYgLS1naXQgYS9pZjE2MzIva2VybmVsMzIuc3BlYyBiL2lmMTYzMi9rZXJuZWwzMi5zcGVjCmluZGV4IGZhODU5ZTQuLjJjNTFiOGYgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9rZXJuZWwzMi5zcGVjCisrKyBiL2lmMTYzMi9rZXJuZWwzMi5zcGVjCkBAIC0yLDggKzIsOCBAQAogdHlwZQl3aW4zMgogYmFzZQkxCiAKLTAwMDAgc3R1YiBBZGRBdG9tQQotMDAwMSBzdHViIEFkZEF0b21XCiswMDAwIHN0ZGNhbGwgQWRkQXRvbUEocHRyKSBBZGRBdG9tMzJBCiswMDAxIHN0ZGNhbGwgQWRkQXRvbVcocHRyKSBBZGRBdG9tMzJXCiAwMDAyIHN0dWIgQWRkQ29uc29sZUFsaWFzQQogMDAwMyBzdHViIEFkZENvbnNvbGVBbGlhc1cKIDAwMDQgc3R1YiBBbGxvY0NvbnNvbGUKQEAgLTcxLDcgKzcxLDcgQEAKIDAwNjYgc3R1YiBEZWJ1Z0JyZWFrCiAwMDY3IHN0dWIgRGVmaW5lRG9zRGV2aWNlQQogMDA2OCBzdHViIERlZmluZURvc0RldmljZVcKLTAwNjkgc3R1YiBEZWxldGVBdG9tCiswMDY5IHN0ZGNhbGwgRGVsZXRlQXRvbShsb25nKSBEZWxldGVBdG9tMzIKIDAwNzAgc3RkY2FsbCBEZWxldGVDcml0aWNhbFNlY3Rpb24ocHRyKQlEZWxldGVDcml0aWNhbFNlY3Rpb24KIDAwNzEgc3RkY2FsbCBEZWxldGVGaWxlQShwdHIpIERlbGV0ZUZpbGUzMkEKIDAwNzIgc3RkY2FsbCBEZWxldGVGaWxlVyhwdHIpIERlbGV0ZUZpbGUzMlcKQEAgLTEwNSw4ICsxMDUsOCBAQAogMDEwMCBzdGRjYWxsIEV4aXRQcm9jZXNzKGxvbmcpIEV4aXRQcm9jZXNzCiAwMTAxIHN0dWIgRXhpdFRocmVhZAogMDEwMiBzdHViIEV4aXRWRE0KLTAxMDMgc3R1YiBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBCi0wMTA0IHN0dWIgRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzVworMDEwMyBzdGRjYWxsIEV4cGFuZEVudmlyb25tZW50U3RyaW5nc0EocHRyIHB0ciBsb25nKSBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MzMkEKKzAxMDQgc3RkY2FsbCBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NXKHB0ciBwdHIgbG9uZykgRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzMzJXCiAwMTA1IHN0dWIgRXhwdW5nZUNvbnNvbGVDb21tYW5kSGlzdG9yeUEKIDAxMDYgc3R1YiBFeHB1bmdlQ29uc29sZUNvbW1hbmRIaXN0b3J5VwogMDEwNyBzdHViIEV4dGVuZFZpcnR1YWxCdWZmZXIKQEAgLTExOSw4ICsxMTksOCBAQAogMDExNCBzdHViIEZpbGxDb25zb2xlT3V0cHV0QXR0cmlidXRlCiAwMTE1IHN0dWIgRmlsbENvbnNvbGVPdXRwdXRDaGFyYWN0ZXJBCiAwMTE2IHN0dWIgRmlsbENvbnNvbGVPdXRwdXRDaGFyYWN0ZXJXCi0wMTE3IHN0dWIgRmluZEF0b21BCi0wMTE4IHN0dWIgRmluZEF0b21XCiswMTE3IHN0ZGNhbGwgRmluZEF0b21BKHB0cikgRmluZEF0b20zMkEKKzAxMTggc3RkY2FsbCBGaW5kQXRvbVcocHRyKSBGaW5kQXRvbTMyVwogMDExOSBzdGRjYWxsIEZpbmRDbG9zZShsb25nKSBGaW5kQ2xvc2UzMgogMDEyMCBzdHViIEZpbmRDbG9zZUNoYW5nZU5vdGlmaWNhdGlvbgogMDEyMSBzdHViIEZpbmRGaXJzdENoYW5nZU5vdGlmaWNhdGlvbkEKQEAgLTE1MSw4ICsxNTEsOCBAQAogMDE0NiBzdHViIEZyZWVWaXJ0dWFsQnVmZmVyCiAwMTQ3IHN0dWIgR2VuZXJhdGVDb25zb2xlQ3RybEV2ZW50CiAwMTQ4ICAgIHN0ZGNhbGwgR2V0QUNQKCkgR2V0QUNQCi0wMTQ5IHN0dWIgR2V0QXRvbU5hbWVBCi0wMTUwIHN0dWIgR2V0QXRvbU5hbWVXCiswMTQ5IHN0ZGNhbGwgR2V0QXRvbU5hbWVBKGxvbmcgcHRyIGxvbmcpIEdldEF0b21OYW1lMzJBCiswMTUwIHN0ZGNhbGwgR2V0QXRvbU5hbWVXKGxvbmcgcHRyIGxvbmcpIEdldEF0b21OYW1lMzJXCiAwMTUxIHN0dWIgR2V0QmluYXJ5VHlwZQogMDE1MiBzdHViIEdldEJpbmFyeVR5cGVBCiAwMTUzIHN0dWIgR2V0QmluYXJ5VHlwZVcKQEAgLTMyMiw3ICszMjIsNyBAQAogMDMxNyBzdGRjYWxsIEdsb2JhbERlbGV0ZUF0b20obG9uZykgR2xvYmFsRGVsZXRlQXRvbQogMDMxOCBzdGRjYWxsIEdsb2JhbEZpbmRBdG9tQShwdHIpIEdsb2JhbEZpbmRBdG9tMzJBCiAwMzE5IHN0ZGNhbGwgR2xvYmFsRmluZEF0b21XKHB0cikgR2xvYmFsRmluZEF0b20zMlcKLTAzMjAgc3R1YiBHbG9iYWxGaXgKKzAzMjAgc3RkY2FsbCBHbG9iYWxGaXgobG9uZykgR2xvYmFsRml4MzIKIDAzMjEgc3RkY2FsbCBHbG9iYWxGbGFncyhsb25nKSBHbG9iYWxGbGFnczMyCiAwMzIyIHN0ZGNhbGwgR2xvYmFsRnJlZShsb25nKSBHbG9iYWxGcmVlMzIKIDAzMjMgc3RkY2FsbCBHbG9iYWxHZXRBdG9tTmFtZUEobG9uZyBwdHIgbG9uZykgR2xvYmFsR2V0QXRvbU5hbWUzMkEKQEAgLTMzMiwxMCArMzMyLDEwIEBACiAwMzI3IHN0ZGNhbGwgR2xvYmFsTWVtb3J5U3RhdHVzKHB0cikgR2xvYmFsTWVtb3J5U3RhdHVzCiAwMzI4IHN0ZGNhbGwgR2xvYmFsUmVBbGxvYyhsb25nIGxvbmcgbG9uZykgR2xvYmFsUmVBbGxvYzMyCiAwMzI5IHN0ZGNhbGwgR2xvYmFsU2l6ZShsb25nKSBHbG9iYWxTaXplMzIKLTAzMzAgc3R1YiBHbG9iYWxVbldpcmUKLTAzMzEgc3R1YiBHbG9iYWxVbmZpeAorMDMzMCBzdGRjYWxsIEdsb2JhbFVuV2lyZShsb25nKSBHbG9iYWxVbldpcmUzMgorMDMzMSBzdGRjYWxsIEdsb2JhbFVuZml4KGxvbmcpIEdsb2JhbFVuZml4MzIKIDAzMzIgc3RkY2FsbCBHbG9iYWxVbmxvY2sobG9uZykgR2xvYmFsVW5sb2NrMzIKLTAzMzMgc3R1YiBHbG9iYWxXaXJlCiswMzMzIHN0ZGNhbGwgR2xvYmFsV2lyZShsb25nKSBHbG9iYWxXaXJlMzIKIDAzMzQgc3RkY2FsbCBIZWFwQWxsb2MobG9uZyBsb25nIGxvbmcpIEhlYXBBbGxvYwogMDMzNSBzdGRjYWxsIEhlYXBDb21wYWN0KGxvbmcgbG9uZykgSGVhcENvbXBhY3QKIDAzMzYgc3RkY2FsbCBIZWFwQ3JlYXRlKGxvbmcgbG9uZyBsb25nKQlIZWFwQ3JlYXRlCkBAIC01NTQsNyArNTU0LDcgQEAKIDA1NDkgc3R1YiBWaXJ0dWFsQnVmZmVyRXhjZXB0aW9uSGFuZGxlcgogMDU1MCAgICBzdGRjYWxsIFZpcnR1YWxGcmVlKHB0ciBsb25nIGxvbmcpIFZpcnR1YWxGcmVlCiAwNTUxIHN0dWIgVmlydHVhbExvY2sKLTA1NTIgc3R1YiBWaXJ0dWFsUHJvdGVjdAorMDU1MiBzdGRjYWxsIFZpcnR1YWxQcm90ZWN0KHB0ciBsb25nIGxvbmcgcHRyKSBWaXJ0dWFsUHJvdGVjdAogMDU1MyBzdHViIFZpcnR1YWxQcm90ZWN0RXgKIDA1NTQgc3RkY2FsbCBWaXJ0dWFsUXVlcnkocHRyIHB0ciBsb25nKSBWaXJ0dWFsUXVlcnkKIDA1NTUgc3R1YiBWaXJ0dWFsUXVlcnlFeApAQCAtNjU2LDMgKzY1Niw2IEBACiAwNjUwIHN0dWIgUHJvY2VzczMyTmV4dAogMDY1MSBzdHViIFRocmVhZDMyRmlyc3QKIDA2NTIgc3R1YiBUaHJlYWQzMk5leHQKKzA2NTMgc3R1YiBSZWdpc3RlclNlcnZpY2VQcm9jZXNzCiswNjU0IHN0dWIgUXVldWVVc2VyQVBDCiswNjU1IHN0dWIgQ29udmVydFRvR2xvYmFsSGFuZGxlCmRpZmYgLS1naXQgYS9pZjE2MzIva2V5Ym9hcmQuc3BlYyBiL2lmMTYzMi9rZXlib2FyZC5zcGVjCmluZGV4IGUyM2QzY2MuLjVkMGNiOTEgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9rZXlib2FyZC5zcGVjCisrKyBiL2lmMTYzMi9rZXlib2FyZC5zcGVjCkBAIC0xNSw3ICsxNSw3IEBACiAxMjkgcGFzY2FsMTYgVmtLZXlTY2FuKGJ5dGUpIFZrS2V5U2NhbjE2CiAxMzAgcGFzY2FsMTYgR2V0S2V5Ym9hcmRUeXBlKGJ5dGUpIEdldEtleWJvYXJkVHlwZTE2CiAxMzEgcGFzY2FsMTYgTWFwVmlydHVhbEtleSh3b3JkIHdvcmQpIE1hcFZpcnR1YWxLZXkxNgotMTMyIHBhc2NhbDE2IEdldEtiQ29kZVBhZ2UoKSBHZXRLYkNvZGVQYWdlCisxMzIgcGFzY2FsMTYgR2V0S0JDb2RlUGFnZSgpIEdldEtCQ29kZVBhZ2UxNgogMTMzIHBhc2NhbDE2IEdldEtleU5hbWVUZXh0KGxvbmcgcHRyIHdvcmQpIEdldEtleU5hbWVUZXh0MTYKIDEzNCBwYXNjYWwxNiBBbnNpVG9PZW1CdWZmKHB0ciBwdHIgd29yZCkgQW5zaVRvT2VtQnVmZjE2CiAxMzUgcGFzY2FsMTYgT2VtVG9BbnNpQnVmZihwdHIgcHRyIHdvcmQpIE9lbVRvQW5zaUJ1ZmYxNgpkaWZmIC0tZ2l0IGEvaWYxNjMyL21wci5zcGVjIGIvaWYxNjMyL21wci5zcGVjCmluZGV4IGYwNDBkY2EuLjE1YTc1YTAgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9tcHIuc3BlYworKysgYi9pZjE2MzIvbXByLnNwZWMKQEAgLTgxLDMgKzgxLDUgQEAKIDAxMDAgc3R1YiBXTmV0VXNlQ29ubmVjdGlvblcKIDAxMDEgc3R1YiBXTmV0VmVyaWZ5UGFzc3dvcmRBCiAwMTAyIHN0dWIgV05ldFZlcmlmeVBhc3N3b3JkVyAKKyNhZGRpdGlvbnMKKzAxMDMgc3R1YiBXTmV0UmVzdG9yZUNvbm5lY3Rpb24KZGlmZiAtLWdpdCBhL2lmMTYzMi9udGRsbC5zcGVjIGIvaWYxNjMyL250ZGxsLnNwZWMKaW5kZXggNDUyNjFiNC4uMjIwOGU5MSAxMDA2NDQKLS0tIGEvaWYxNjMyL250ZGxsLnNwZWMKKysrIGIvaWYxNjMyL250ZGxsLnNwZWMKQEAgLTEyOCw3ICsxMjgsNyBAQAogMTI0IHN0dWIgTnRPcGVuRGlyZWN0b3J5T2JqZWN0CiAxMjUgc3R1YiBOdE9wZW5FdmVudAogMTI2IHN0dWIgTnRPcGVuRXZlbnRQYWlyCi0xMjcgc3R1YiBOdE9wZW5GaWxlCisxMjcgc3RkY2FsbCBOdE9wZW5GaWxlKHB0ciBsb25nIHB0ciBwdHIgbG9uZyBsb25nKSBOdE9wZW5GaWxlCiAxMjggc3R1YiBOdE9wZW5Jb0NvbXBsZXRpb24KIDEyOSBzdHViIE50T3BlbktleQogMTMwIHN0dWIgTnRPcGVuTXV0YW50CkBAIC0yNjEsNyArMjYxLDcgQEAKIDI1NyBzdHViIFJ0bEFjcXVpcmVSZXNvdXJjZVNoYXJlZAogMjU4IHN0dWIgUnRsQWRkQWNjZXNzQWxsb3dlZEFjZQogMjU5IHN0dWIgUnRsQWRkQWNjZXNzRGVuaWVkQWNlCi0yNjAgc3R1YiBSdGxBZGRBY2UKKzI2MCBzdGRjYWxsIFJ0bEFkZEFjZShwdHIgbG9uZyBsb25nIHB0ciBsb25nKSBSdGxBZGRBY2UKIDI2MSBzdHViIFJ0bEFkZEFjdGlvblRvUlhhY3QKIDI2MiBzdHViIFJ0bEFkZEF0dHJpYnV0ZUFjdGlvblRvUlhhY3QKIDI2MyBzdHViIFJ0bEFkZEF1ZGl0QWNjZXNzQWNlCkBAIC0zMDcsMTQgKzMwNywxNCBAQAogMzAzIHN0dWIgUnRsQ29weVNpZEFuZEF0dHJpYnV0ZXNBcnJheQogMzA0IHN0dWIgUnRsQ29weVN0cmluZwogMzA1IHN0dWIgUnRsQ29weVVuaWNvZGVTdHJpbmcKLTMwNiBzdHViIFJ0bENyZWF0ZUFjbAorMzA2IHN0ZGNhbGwgUnRsQ3JlYXRlQWNsKHB0ciBsb25nIGxvbmcpIFJ0bENyZWF0ZUFjbAogMzA3IHN0dWIgUnRsQ3JlYXRlQW5kU2V0U0QKIDMwOCBzdHViIFJ0bENyZWF0ZUVudmlyb25tZW50CiAzMDkgc3RkY2FsbCBSdGxDcmVhdGVIZWFwKGxvbmcgbG9uZyBsb25nKSBIZWFwQ3JlYXRlCiAzMTAgc3R1YiBSdGxDcmVhdGVQcm9jZXNzUGFyYW1ldGVycwogMzExIHN0dWIgUnRsQ3JlYXRlUXVlcnlEZWJ1Z0J1ZmZlcgogMzEyIHN0dWIgUnRsQ3JlYXRlUmVnaXN0cnlLZXkKLTMxMyBzdHViIFJ0bENyZWF0ZVNlY3VyaXR5RGVzY3JpcHRvcgorMzEzIHN0ZGNhbGwgUnRsQ3JlYXRlU2VjdXJpdHlEZXNjcmlwdG9yKHB0ciBsb25nKSBSdGxDcmVhdGVTZWN1cml0eURlc2NyaXB0b3IKIDMxNCBzdHViIFJ0bENyZWF0ZVRhZ0hlYXAKIDMxNSBzdHViIFJ0bENyZWF0ZVVuaWNvZGVTdHJpbmcKIDMxNiBzdHViIFJ0bENyZWF0ZVVuaWNvZGVTdHJpbmdGcm9tQXNjaWl6CkBAIC0zMzksNyArMzM5LDcgQEAKIDMzNSBzdHViIFJ0bERlc3Ryb3lRdWVyeURlYnVnQnVmZmVyCiAzMzYgc3R1YiBSdGxEZXRlcm1pbmVEb3NQYXRoTmFtZVR5cGVfVQogMzM3IHN0dWIgUnRsRG9lc0ZpbGVFeGlzdHNfVQotMzM4IHN0dWIgUnRsRG9zUGF0aE5hbWVUb050UGF0aE5hbWVfVQorMzM4IHN0ZGNhbGwgUnRsRG9zUGF0aE5hbWVUb050UGF0aE5hbWVfVShwdHIgcHRyIGxvbmcgbG9uZykgUnRsRG9zUGF0aE5hbWVUb050UGF0aE5hbWVfVQogMzM5IHN0dWIgUnRsRG9zU2VhcmNoUGF0aF9VCiAzNDAgc3R1YiBSdGxEdW1wUmVzb3VyY2UKIDM0MSBzdHViIFJ0bEVubGFyZ2VkSW50ZWdlck11bHRpcGx5CkBAIC0zNzEsNyArMzcxLDcgQEAKIDM2NyBzdHViIFJ0bEZpbmRNZXNzYWdlCiAzNjggc3R1YiBSdGxGaW5kU2V0Qml0cwogMzY5IHN0dWIgUnRsRmluZFNldEJpdHNBbmRDbGVhcgotMzcwIHN0dWIgUnRsRmlyc3RGcmVlQWNlCiszNzAgc3RkY2FsbCBSdGxGaXJzdEZyZWVBY2UocHRyIHB0cikgUnRsRmlyc3RGcmVlQWNlCiAzNzEgc3R1YiBSdGxGb3JtYXRDdXJyZW50VXNlcktleVBhdGgKIDM3MiBzdHViIFJ0bEZvcm1hdE1lc3NhZ2UKIDM3MyBzdHViIFJ0bEZyZWVBbnNpU3RyaW5nCkBAIC00MDAsNyArNDAwLDcgQEAKIDM5NiBzdHViIFJ0bEltYWdlRGlyZWN0b3J5RW50cnlUb0RhdGEKIDM5NyBzdHViIFJ0bEltYWdlTnRIZWFkZXIKIDM5OCBzdHViIFJ0bEltcGVyc29uYXRlU2VsZgotMzk5IHN0dWIgUnRsSW5pdEFuc2lTdHJpbmcKKzM5OSBzdGRjYWxsIFJ0bEluaXRBbnNpU3RyaW5nKHB0ciBwdHIpIFJ0bEluaXRBbnNpU3RyaW5nCiA0MDAgc3R1YiBSdGxJbml0Q29kZVBhZ2VUYWJsZQogNDAxIHN0dWIgUnRsSW5pdE5sc1RhYmxlcwogNDAyIHN0ZGNhbGwgUnRsSW5pdFN0cmluZyhwdHIgcHRyKSBSdGxJbml0U3RyaW5nCkBAIC00MzAsMTQgKzQzMCwxNCBAQAogNDI2IHN0ZGNhbGwgUnRsTGVhdmVDcml0aWNhbFNlY3Rpb24ocHRyKSBMZWF2ZUNyaXRpY2FsU2VjdGlvbgogNDI3IHN0ZGNhbGwgUnRsTGVuZ3RoUmVxdWlyZWRTaWQobG9uZykgUnRsTGVuZ3RoUmVxdWlyZWRTaWQKIDQyOCBzdHViIFJ0bExlbmd0aFNlY3VyaXR5RGVzY3JpcHRvcgotNDI5IHN0dWIgUnRsTGVuZ3RoU2lkCis0Mjkgc3RkY2FsbCBSdGxMZW5ndGhTaWQocHRyKSBSdGxMZW5ndGhTaWQKIDQzMCBzdHViIFJ0bExvY2FsVGltZVRvU3lzdGVtVGltZQogNDMxIHN0dWIgUnRsTG9ja0hlYXAKIDQzMiBzdHViIFJ0bExvb2t1cEVsZW1lbnRHZW5lcmljVGFibGUKIDQzMyBzdHViIFJ0bE1ha2VTZWxmUmVsYXRpdmVTRAogNDM0IHN0dWIgUnRsTWFwR2VuZXJpY01hc2sKIDQzNSBzdGRjYWxsIFJ0bE1vdmVNZW1vcnkocHRyIHB0ciBsb25nKSBSdGxNb3ZlTWVtb3J5Ci00MzYgc3R1YiBSdGxNdWx0aUJ5dGVUb1VuaWNvZGVOCis0MzYgc3RkY2FsbCBSdGxNdWx0aUJ5dGVUb1VuaWNvZGVOKHB0ciBsb25nIHB0ciBwdHIgbG9uZykgUnRsTXVsdGlCeXRlVG9Vbmljb2RlTgogNDM3IHN0dWIgUnRsTXVsdGlCeXRlVG9Vbmljb2RlU2l6ZQogNDM4IHN0dWIgUnRsTmV3SW5zdGFuY2VTZWN1cml0eU9iamVjdAogNDM5IHN0dWIgUnRsTmV3U2VjdXJpdHlHcmFudGVkQWNjZXNzCkBAIC00ODQsMTIgKzQ4NCwxMiBAQAogNDgwIHN0dWIgUnRsU2V0Qml0cwogNDgxIHN0dWIgUnRsU2V0Q3VycmVudERpcmVjdG9yeV9VCiA0ODIgc3R1YiBSdGxTZXRDdXJyZW50RW52aXJvbm1lbnQKLTQ4MyBzdHViIFJ0bFNldERhY2xTZWN1cml0eURlc2NyaXB0b3IKKzQ4MyBzdGRjYWxsIFJ0bFNldERhY2xTZWN1cml0eURlc2NyaXB0b3IocHRyIGxvbmcgcHRyIGxvbmcpIFJ0bFNldERhY2xTZWN1cml0eURlc2NyaXB0b3IKIDQ4NCBzdHViIFJ0bFNldEVudmlyb25tZW50VmFyaWFibGUKLTQ4NSBzdHViIFJ0bFNldEdyb3VwU2VjdXJpdHlEZXNjcmlwdG9yCis0ODUgc3RkY2FsbCBSdGxTZXRHcm91cFNlY3VyaXR5RGVzY3JpcHRvcihwdHIgcHRyIGxvbmcpIFJ0bFNldEdyb3VwU2VjdXJpdHlEZXNjcmlwdG9yCiA0ODYgc3R1YiBSdGxTZXRJbmZvcm1hdGlvbkFjbAotNDg3IHN0dWIgUnRsU2V0T3duZXJTZWN1cml0eURlc2NyaXB0b3IKLTQ4OCBzdHViIFJ0bFNldFNhY2xTZWN1cml0eURlc2NyaXB0b3IKKzQ4NyBzdGRjYWxsIFJ0bFNldE93bmVyU2VjdXJpdHlEZXNjcmlwdG9yKHB0ciBwdHIgbG9uZykgUnRsU2V0T3duZXJTZWN1cml0eURlc2NyaXB0b3IKKzQ4OCBzdGRjYWxsIFJ0bFNldFNhY2xTZWN1cml0eURlc2NyaXB0b3IocHRyIGxvbmcgcHRyIGxvbmcpIFJ0bFNldFNhY2xTZWN1cml0eURlc2NyaXB0b3IKIDQ4OSBzdHViIFJ0bFNldFNlY3VyaXR5T2JqZWN0CiA0OTAgc3R1YiBSdGxTZXRUaW1lWm9uZUluZm9ybWF0aW9uCiA0OTEgc3R1YiBSdGxTZXRVc2VyRmxhZ3NIZWFwCmRpZmYgLS1naXQgYS9pZjE2MzIvc291bmQuc3BlYyBiL2lmMTYzMi9zb3VuZC5zcGVjCmluZGV4IGEwYWI2MjQuLjhhOGUwYmYgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9zb3VuZC5zcGVjCisrKyBiL2lmMTYzMi9zb3VuZC5zcGVjCkBAIC0xLDIwICsxLDIwIEBACiBuYW1lCXNvdW5kCiB0eXBlCXdpbjE2CiAKLTEgIHBhc2NhbDE2IE9wZW5Tb3VuZCgpIE9wZW5Tb3VuZAorMSAgcGFzY2FsMTYgT3BlblNvdW5kKCkgT3BlblNvdW5kMTYKIDIgIHBhc2NhbDE2IENsb3NlU291bmQoKSBDbG9zZVNvdW5kCi0zICBwYXNjYWwxNiBTZXRWb2ljZVF1ZXVlU2l6ZSh3b3JkIHdvcmQpIFNldFZvaWNlUXVldWVTaXplCi00ICBwYXNjYWwxNiBTZXRWb2ljZU5vdGUod29yZCB3b3JkIHdvcmQgd29yZCkgU2V0Vm9pY2VOb3RlCi01ICBwYXNjYWwxNiBTZXRWb2ljZUFjY2VudCh3b3JkIHdvcmQgd29yZCB3b3JkIHdvcmQpIFNldFZvaWNlQWNjZW50Ci02ICBwYXNjYWwxNiBTZXRWb2ljZUVudmVsb3BlKHdvcmQgd29yZCB3b3JkKSBTZXRWb2ljZUVudmVsb3BlCi03ICBwYXNjYWwxNiBTZXRTb3VuZE5vaXNlKHdvcmQgd29yZCkgU2V0U291bmROb2lzZQotOCAgcGFzY2FsMTYgU2V0Vm9pY2VTb3VuZCh3b3JkIGxvbmcgd29yZCkgU2V0Vm9pY2VTb3VuZAotOSAgcGFzY2FsMTYgU3RhcnRTb3VuZCgpIFN0YXJ0U291bmQKLTEwIHBhc2NhbDE2IFN0b3BTb3VuZCgpIFN0b3BTb3VuZAotMTEgcGFzY2FsMTYgV2FpdFNvdW5kU3RhdGUod29yZCkgV2FpdFNvdW5kU3RhdGUKLTEyIHBhc2NhbDE2IFN5bmNBbGxWb2ljZXMoKSBTeW5jQWxsVm9pY2VzCi0xMyBwYXNjYWwxNiBDb3VudFZvaWNlTm90ZXMod29yZCkgQ291bnRWb2ljZU5vdGVzCi0xNCBwYXNjYWwgICBHZXRUaHJlc2hvbGRFdmVudCgpIEdldFRocmVzaG9sZEV2ZW50Ci0xNSBwYXNjYWwxNiBHZXRUaHJlc2hvbGRTdGF0dXMoKSBHZXRUaHJlc2hvbGRTdGF0dXMKLTE2IHBhc2NhbDE2IFNldFZvaWNlVGhyZXNob2xkKHdvcmQgd29yZCkgU2V0Vm9pY2VUaHJlc2hvbGQKKzMgIHBhc2NhbDE2IFNldFZvaWNlUXVldWVTaXplKHdvcmQgd29yZCkgU2V0Vm9pY2VRdWV1ZVNpemUxNgorNCAgcGFzY2FsMTYgU2V0Vm9pY2VOb3RlKHdvcmQgd29yZCB3b3JkIHdvcmQpIFNldFZvaWNlTm90ZTE2Cis1ICBwYXNjYWwxNiBTZXRWb2ljZUFjY2VudCh3b3JkIHdvcmQgd29yZCB3b3JkIHdvcmQpIFNldFZvaWNlQWNjZW50MTYKKzYgIHBhc2NhbDE2IFNldFZvaWNlRW52ZWxvcGUod29yZCB3b3JkIHdvcmQpIFNldFZvaWNlRW52ZWxvcGUxNgorNyAgcGFzY2FsMTYgU2V0U291bmROb2lzZSh3b3JkIHdvcmQpIFNldFNvdW5kTm9pc2UxNgorOCAgcGFzY2FsMTYgU2V0Vm9pY2VTb3VuZCh3b3JkIGxvbmcgd29yZCkgU2V0Vm9pY2VTb3VuZDE2Cis5ICBwYXNjYWwxNiBTdGFydFNvdW5kKCkgU3RhcnRTb3VuZDE2CisxMCBwYXNjYWwxNiBTdG9wU291bmQoKSBTdG9wU291bmQxNgorMTEgcGFzY2FsMTYgV2FpdFNvdW5kU3RhdGUod29yZCkgV2FpdFNvdW5kU3RhdGUxNgorMTIgcGFzY2FsMTYgU3luY0FsbFZvaWNlcygpIFN5bmNBbGxWb2ljZXMxNgorMTMgcGFzY2FsMTYgQ291bnRWb2ljZU5vdGVzKHdvcmQpIENvdW50Vm9pY2VOb3RlczE2CisxNCBwYXNjYWwgICBHZXRUaHJlc2hvbGRFdmVudCgpIEdldFRocmVzaG9sZEV2ZW50MTYKKzE1IHBhc2NhbDE2IEdldFRocmVzaG9sZFN0YXR1cygpIEdldFRocmVzaG9sZFN0YXR1czE2CisxNiBwYXNjYWwxNiBTZXRWb2ljZVRocmVzaG9sZCh3b3JkIHdvcmQpIFNldFZvaWNlVGhyZXNob2xkMTYKIDE3IHBhc2NhbDE2IERvQmVlcCgpIERvQmVlcApkaWZmIC0tZ2l0IGEvaWYxNjMyL3RodW5rLmMgYi9pZjE2MzIvdGh1bmsuYwppbmRleCAwMzI5OWQ3Li4xZDMzZTY3IDEwMDY0NAotLS0gYS9pZjE2MzIvdGh1bmsuYworKysgYi9pZjE2MzIvdGh1bmsuYwpAQCAtNDE4LDE5ICs0MTgsMjEgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIFRIVU5LX0VudW1SZXNvdXJjZU5hbWVzMzJBICAgKEtFUk5FTDMyLjg4KQogICovCi1CT09MMzIgVEhVTktfRW51bVJlc291cmNlTmFtZXMzMkEoIEhNT0RVTEUzMiBobW9kLExQQ1dTVFIgdHlwZSxFTlVNUkVTTkFNRVBST0MzMkEgZnVuYywgTE9ORyBsUGFyYW0gKQorQk9PTDMyIFRIVU5LX0VudW1SZXNvdXJjZU5hbWVzMzJBKCBITU9EVUxFMzIgaG1vZCwgTFBDU1RSIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOVU1SRVNOQU1FUFJPQzMyQSBmdW5jLCBMT05HIGxQYXJhbSApCiB7CiAgICAgREVDTF9USFVOSyggdGh1bmssIGZ1bmMsIENhbGxUbzMyXzQgKTsKLSAgICByZXR1cm4gRW51bVJlc291cmNlTmFtZXMzMkEoIGhtb2QsdHlwZSwoRU5VTVJFU05BTUVQUk9DMzJBKSZ0aHVuaywgbFBhcmFtICk7CisgICAgcmV0dXJuIEVudW1SZXNvdXJjZU5hbWVzMzJBKCBobW9kLHR5cGUsKEVOVU1SRVNOQU1FUFJPQzMyQSkmdGh1bmssbFBhcmFtICk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIFRIVU5LX0VudW1SZXNvdXJjZU5hbWVzMzJXICAgKEtFUk5FTDMyLjg5KQogICovCi1CT09MMzIgVEhVTktfRW51bVJlc291cmNlTmFtZXMzMlcoIEhNT0RVTEUzMiBobW9kLExQQ1dTVFIgdHlwZSxFTlVNUkVTTkFNRVBST0MzMlcgZnVuYywgTE9ORyBsUGFyYW0gKQorQk9PTDMyIFRIVU5LX0VudW1SZXNvdXJjZU5hbWVzMzJXKCBITU9EVUxFMzIgaG1vZCwgTFBDV1NUUiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlVNUkVTTkFNRVBST0MzMlcgZnVuYywgTE9ORyBsUGFyYW0gKQogewogICAgIERFQ0xfVEhVTksoIHRodW5rLCBmdW5jLCBDYWxsVG8zMl80ICk7Ci0gICAgcmV0dXJuIEVudW1SZXNvdXJjZU5hbWVzMzJXKCBobW9kLHR5cGUsKEVOVU1SRVNOQU1FUFJPQzMyVykmdGh1bmssIGxQYXJhbSApOworICAgIHJldHVybiBFbnVtUmVzb3VyY2VOYW1lczMyVyggaG1vZCx0eXBlLChFTlVNUkVTTkFNRVBST0MzMlcpJnRodW5rLCBsUGFyYW0pOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ2MSwxMCArNDYzLDQyIEBACiB7CiAgICAgREVDTF9USFVOSyggdGh1bmssIGZ1bmMsIENhbGxUbzE2X3dvcmRfd2x3ICk7CiAgICAgaWYgKCFmdW5jKQotICAgICAgICByZXR1cm4gR3JheVN0cmluZyggaGRjLCBoYnIsIE5VTEwsIGxQYXJhbSwgY2NoLCB4LCB5LCBjeCwgY3kgKTsKKyAgICAgICAgcmV0dXJuIEdyYXlTdHJpbmcxNiggaGRjLCBoYnIsIE5VTEwsIGxQYXJhbSwgY2NoLCB4LCB5LCBjeCwgY3kgKTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBHcmF5U3RyaW5nKCBoZGMsIGhiciwgKEdSQVlTVFJJTkdQUk9DMTYpJnRodW5rLCBsUGFyYW0sIGNjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIHksIGN4LCBjeSApOworICAgICAgICByZXR1cm4gR3JheVN0cmluZzE2KCBoZGMsIGhiciwgKEdSQVlTVFJJTkdQUk9DMTYpJnRodW5rLCBsUGFyYW0sIGNjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgeSwgY3gsIGN5ICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgVEhVTktfR3JheVN0cmluZzMyQSAgIChVU0VSMzIuMzE0KQorICovCitCT09MMzIgVEhVTktfR3JheVN0cmluZzMyQSggSERDMzIgaGRjLCBIQlJVU0gzMiBoYnIsIEdSQVlTVFJJTkdQUk9DMzIgZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUEFSQU0gbFBhcmFtLCBJTlQzMiBjY2gsIElOVDMyIHgsIElOVDMyIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UMzIgY3gsIElOVDMyIGN5ICkKK3sKKyAgICBERUNMX1RIVU5LKCB0aHVuaywgZnVuYywgQ2FsbFRvMzJfMyApOworICAgIGlmICghZnVuYykKKyAgICAgICAgcmV0dXJuIEdyYXlTdHJpbmczMkEoIGhkYywgaGJyLCBOVUxMLCBsUGFyYW0sIGNjaCwgeCwgeSwgY3gsIGN5ICk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gR3JheVN0cmluZzMyQSggaGRjLCBoYnIsIChHUkFZU1RSSU5HUFJPQzMyKSZ0aHVuaywgbFBhcmFtLCBjY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCB5LCBjeCwgY3kgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBUSFVOS19HcmF5U3RyaW5nMzJXICAgKFVTRVIzMi4zMTUpCisgKi8KK0JPT0wzMiBUSFVOS19HcmF5U3RyaW5nMzJXKCBIREMzMiBoZGMsIEhCUlVTSDMyIGhiciwgR1JBWVNUUklOR1BST0MzMiBmdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQQVJBTSBsUGFyYW0sIElOVDMyIGNjaCwgSU5UMzIgeCwgSU5UMzIgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQzMiBjeCwgSU5UMzIgY3kgKQoreworICAgIERFQ0xfVEhVTksoIHRodW5rLCBmdW5jLCBDYWxsVG8zMl8zICk7CisgICAgaWYgKCFmdW5jKQorICAgICAgICByZXR1cm4gR3JheVN0cmluZzMyVyggaGRjLCBoYnIsIE5VTEwsIGxQYXJhbSwgY2NoLCB4LCB5LCBjeCwgY3kgKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBHcmF5U3RyaW5nMzJXKCBoZGMsIGhiciwgKEdSQVlTVFJJTkdQUk9DMzIpJnRodW5rLCBsUGFyYW0sIGNjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIHksIGN4LCBjeSApOwogfQogCiAKZGlmZiAtLWdpdCBhL2lmMTYzMi91c2VyLnNwZWMgYi9pZjE2MzIvdXNlci5zcGVjCmluZGV4IDk0OTNlYWQuLjFiZmYxY2EgMTAwNjQ0Ci0tLSBhL2lmMTYzMi91c2VyLnNwZWMKKysrIGIvaWYxNjMyL3VzZXIuc3BlYwpAQCAtNywyMCArNywyMCBAQAogMyAgIHN0dWIgRW5hYmxlT0VNTGF5ZXIKIDQgICBzdHViIERpc2FibGVPRU1MYXllcgogNSAgIHBhc2NhbDE2IEluaXRBcHAod29yZCkgSW5pdEFwcAotNiAgIHBhc2NhbDE2IFBvc3RRdWl0TWVzc2FnZSh3b3JkKSBQb3N0UXVpdE1lc3NhZ2UKKzYgICBwYXNjYWwxNiBQb3N0UXVpdE1lc3NhZ2Uod29yZCkgUG9zdFF1aXRNZXNzYWdlMTYKIDcgICBwYXNjYWwxNiBFeGl0V2luZG93cyhsb25nIHdvcmQpIEV4aXRXaW5kb3dzMTYKIDEwICBwYXNjYWwxNiBTZXRUaW1lcih3b3JkIHdvcmQgd29yZCBzZWdwdHIpIFNldFRpbWVyMTYKIDExICBwYXNjYWwxNiBTZXRTeXN0ZW1UaW1lcih3b3JkIHdvcmQgd29yZCBzZWdwdHIpIFNldFN5c3RlbVRpbWVyMTYKIDEyICBwYXNjYWwxNiBLaWxsVGltZXIod29yZCB3b3JkKSBLaWxsVGltZXIxNgogMTMgIHBhc2NhbCAgIEdldFRpY2tDb3VudCgpIEdldFRpY2tDb3VudAogMTQgIHBhc2NhbCAgIEdldFRpbWVyUmVzb2x1dGlvbigpIEdldFRpbWVyUmVzb2x1dGlvbgotMTUgIHBhc2NhbCAgIEdldEN1cnJlbnRUaW1lKCkgR2V0Q3VycmVudFRpbWUKKzE1ICBwYXNjYWwgICBHZXRDdXJyZW50VGltZSgpIEdldEN1cnJlbnRUaW1lMTYKIDE2ICBwYXNjYWwxNiBDbGlwQ3Vyc29yKHB0cikgQ2xpcEN1cnNvcjE2CiAxNyAgcGFzY2FsMTYgR2V0Q3Vyc29yUG9zKHB0cikgR2V0Q3Vyc29yUG9zMTYKIDE4ICBwYXNjYWwxNiBTZXRDYXB0dXJlKHdvcmQpIFNldENhcHR1cmUxNgogMTkgIHBhc2NhbDE2IFJlbGVhc2VDYXB0dXJlKCkgUmVsZWFzZUNhcHR1cmUKLTIwICBwYXNjYWwxNiBTZXREb3VibGVDbGlja1RpbWUod29yZCkgU2V0RG91YmxlQ2xpY2tUaW1lCi0yMSAgcGFzY2FsMTYgR2V0RG91YmxlQ2xpY2tUaW1lKCkgR2V0RG91YmxlQ2xpY2tUaW1lCisyMCAgcGFzY2FsMTYgU2V0RG91YmxlQ2xpY2tUaW1lKHdvcmQpIFNldERvdWJsZUNsaWNrVGltZTE2CisyMSAgcGFzY2FsMTYgR2V0RG91YmxlQ2xpY2tUaW1lKCkgR2V0RG91YmxlQ2xpY2tUaW1lMTYKIDIyICBwYXNjYWwxNiBTZXRGb2N1cyh3b3JkKSBTZXRGb2N1czE2CiAyMyAgcGFzY2FsMTYgR2V0Rm9jdXMoKSBHZXRGb2N1czE2CiAyNCAgcGFzY2FsMTYgUmVtb3ZlUHJvcCh3b3JkIHB0cikgUmVtb3ZlUHJvcDE2CkBAIC00Myw4ICs0Myw4IEBACiA0MSAgcGFzY2FsMTYgQ3JlYXRlV2luZG93KHB0ciBwdHIgbG9uZyBzX3dvcmQgc193b3JkIHNfd29yZCBzX3dvcmQKIAkgICAgICAgICAgICAgICAgICB3b3JkIHdvcmQgd29yZCBzZWdwdHIpIENyZWF0ZVdpbmRvdzE2CiA0MiAgcGFzY2FsMTYgU2hvd1dpbmRvdyh3b3JkIHdvcmQpIFNob3dXaW5kb3cxNgotNDMgIHBhc2NhbDE2IENsb3NlV2luZG93KHdvcmQpIENsb3NlV2luZG93Ci00NCAgcGFzY2FsMTYgT3Blbkljb24od29yZCkgT3Blbkljb24KKzQzICBwYXNjYWwxNiBDbG9zZVdpbmRvdyh3b3JkKSBDbG9zZVdpbmRvdzE2Cis0NCAgcGFzY2FsMTYgT3Blbkljb24od29yZCkgT3Blbkljb24xNgogNDUgIHBhc2NhbDE2IEJyaW5nV2luZG93VG9Ub3Aod29yZCkgQnJpbmdXaW5kb3dUb1RvcDE2CiA0NiAgcGFzY2FsMTYgR2V0UGFyZW50KHdvcmQpIEdldFBhcmVudDE2CiA0NyAgcGFzY2FsMTYgSXNXaW5kb3cod29yZCkgSXNXaW5kb3cKQEAgLTUyLDcgKzUyLDcgQEAKIDQ5ICBwYXNjYWwxNiBJc1dpbmRvd1Zpc2libGUod29yZCkgSXNXaW5kb3dWaXNpYmxlMTYKIDUwICBwYXNjYWwxNiBGaW5kV2luZG93KHNlZ3B0ciBwdHIpIEZpbmRXaW5kb3cxNgogIzUxIEJFQVI1MQotNTIgIHBhc2NhbDE2IEFueVBvcHVwKCkgQW55UG9wdXAKKzUyICBwYXNjYWwxNiBBbnlQb3B1cCgpIEFueVBvcHVwMTYKIDUzICBwYXNjYWwxNiBEZXN0cm95V2luZG93KHdvcmQpIERlc3Ryb3lXaW5kb3cxNgogNTQgIHBhc2NhbDE2IEVudW1XaW5kb3dzKHNlZ3B0ciBsb25nKSBUSFVOS19FbnVtV2luZG93czE2CiA1NSAgcGFzY2FsMTYgRW51bUNoaWxkV2luZG93cyh3b3JkIHNlZ3B0ciBsb25nKSBUSFVOS19FbnVtQ2hpbGRXaW5kb3dzMTYKQEAgLTY5LDkgKzY5LDkgQEAKIDY2ICBwYXNjYWwxNiBHZXREQyh3b3JkKSBHZXREQzE2CiA2NyAgcGFzY2FsMTYgR2V0V2luZG93REMod29yZCkgR2V0V2luZG93REMxNgogNjggIHBhc2NhbDE2IFJlbGVhc2VEQyh3b3JkIHdvcmQpIFJlbGVhc2VEQzE2Ci02OSAgcGFzY2FsMTYgU2V0Q3Vyc29yKHdvcmQpIFNldEN1cnNvcgotNzAgIHBhc2NhbDE2IFNldEN1cnNvclBvcyh3b3JkIHdvcmQpIFNldEN1cnNvclBvcwotNzEgIHBhc2NhbDE2IFNob3dDdXJzb3Iod29yZCkgU2hvd0N1cnNvcgorNjkgIHBhc2NhbDE2IFNldEN1cnNvcih3b3JkKSBTZXRDdXJzb3IxNgorNzAgIHBhc2NhbDE2IFNldEN1cnNvclBvcyh3b3JkIHdvcmQpIFNldEN1cnNvclBvczE2Cis3MSAgcGFzY2FsMTYgU2hvd0N1cnNvcih3b3JkKSBTaG93Q3Vyc29yMTYKIDcyICBwYXNjYWwxNiBTZXRSZWN0KHB0ciBzX3dvcmQgc193b3JkIHNfd29yZCBzX3dvcmQpIFNldFJlY3QxNgogNzMgIHBhc2NhbDE2IFNldFJlY3RFbXB0eShwdHIpIFNldFJlY3RFbXB0eTE2CiA3NCAgcGFzY2FsMTYgQ29weVJlY3QocHRyIHB0cikgQ29weVJlY3QxNgpAQCAtODQsMTIgKzg0LDEyIEBACiA4MSAgcGFzY2FsMTYgRmlsbFJlY3Qod29yZCBwdHIgd29yZCkgRmlsbFJlY3QxNgogODIgIHBhc2NhbDE2IEludmVydFJlY3Qod29yZCBwdHIpIEludmVydFJlY3QxNgogODMgIHBhc2NhbDE2IEZyYW1lUmVjdCh3b3JkIHB0ciB3b3JkKSBGcmFtZVJlY3QxNgotODQgIHBhc2NhbDE2IERyYXdJY29uKHdvcmQgc193b3JkIHNfd29yZCB3b3JkKSBEcmF3SWNvbgorODQgIHBhc2NhbDE2IERyYXdJY29uKHdvcmQgc193b3JkIHNfd29yZCB3b3JkKSBEcmF3SWNvbjE2CiA4NSAgcGFzY2FsMTYgRHJhd1RleHQod29yZCBwdHIgc193b3JkIHB0ciB3b3JkKSBEcmF3VGV4dDE2CiA4NyAgcGFzY2FsMTYgRGlhbG9nQm94KHdvcmQgc2VncHRyIHdvcmQgc2VncHRyKSBEaWFsb2dCb3gxNgotODggIHBhc2NhbDE2IEVuZERpYWxvZyh3b3JkIHNfd29yZCkgRW5kRGlhbG9nCis4OCAgcGFzY2FsMTYgRW5kRGlhbG9nKHdvcmQgc193b3JkKSBFbmREaWFsb2cxNgogODkgIHBhc2NhbDE2IENyZWF0ZURpYWxvZyh3b3JkIHNlZ3B0ciB3b3JkIHNlZ3B0cikgQ3JlYXRlRGlhbG9nMTYKLTkwICBwYXNjYWwxNiBJc0RpYWxvZ01lc3NhZ2Uod29yZCBwdHIpIElzRGlhbG9nTWVzc2FnZQorOTAgIHBhc2NhbDE2IElzRGlhbG9nTWVzc2FnZSh3b3JkIHB0cikgSXNEaWFsb2dNZXNzYWdlMTYKIDkxICBwYXNjYWwxNiBHZXREbGdJdGVtKHdvcmQgd29yZCkgR2V0RGxnSXRlbTE2CiA5MiAgcGFzY2FsMTYgU2V0RGxnSXRlbVRleHQod29yZCB3b3JkIHNlZ3B0cikgU2V0RGxnSXRlbVRleHQxNgogOTMgIHBhc2NhbDE2IEdldERsZ0l0ZW1UZXh0KHdvcmQgd29yZCBzZWdwdHIgd29yZCkgR2V0RGxnSXRlbVRleHQxNgpAQCAtMTAzLDggKzEwMyw4IEBACiAxMDEgcGFzY2FsICAgU2VuZERsZ0l0ZW1NZXNzYWdlKHdvcmQgd29yZCB3b3JkIHdvcmQgbG9uZykgU2VuZERsZ0l0ZW1NZXNzYWdlMTYKIDEwMiBwYXNjYWwxNiBBZGp1c3RXaW5kb3dSZWN0KHB0ciBsb25nIHdvcmQpIEFkanVzdFdpbmRvd1JlY3QxNgogMTAzIHBhc2NhbDE2IE1hcERpYWxvZ1JlY3Qod29yZCBwdHIpIE1hcERpYWxvZ1JlY3QxNgotMTA0IHBhc2NhbDE2IE1lc3NhZ2VCZWVwKHdvcmQpIE1lc3NhZ2VCZWVwCi0xMDUgcGFzY2FsMTYgRmxhc2hXaW5kb3cod29yZCB3b3JkKSBGbGFzaFdpbmRvdworMTA0IHBhc2NhbDE2IE1lc3NhZ2VCZWVwKHdvcmQpIE1lc3NhZ2VCZWVwMTYKKzEwNSBwYXNjYWwxNiBGbGFzaFdpbmRvdyh3b3JkIHdvcmQpIEZsYXNoV2luZG93MTYKIDEwNiBwYXNjYWwxNiBHZXRLZXlTdGF0ZSh3b3JkKSBHZXRLZXlTdGF0ZTE2CiAxMDcgcGFzY2FsICAgRGVmV2luZG93UHJvYyh3b3JkIHdvcmQgd29yZCBsb25nKSBEZWZXaW5kb3dQcm9jMTYKIDEwOCBwYXNjYWwxNiBHZXRNZXNzYWdlKHNlZ3B0ciB3b3JkIHdvcmQgd29yZCkgR2V0TWVzc2FnZQpAQCAtMTEyLDggKzExMiw4IEBACiAxMTAgcGFzY2FsMTYgUG9zdE1lc3NhZ2Uod29yZCB3b3JkIHdvcmQgbG9uZykgUG9zdE1lc3NhZ2UKIDExMSBwYXNjYWwgICBTZW5kTWVzc2FnZSh3b3JkIHdvcmQgd29yZCBsb25nKSBTZW5kTWVzc2FnZTE2CiAxMTIgcGFzY2FsMTYgV2FpdE1lc3NhZ2UoKSBXYWl0TWVzc2FnZQotMTEzIHBhc2NhbDE2IFRyYW5zbGF0ZU1lc3NhZ2UocHRyKSBUcmFuc2xhdGVNZXNzYWdlCi0xMTQgcGFzY2FsICAgRGlzcGF0Y2hNZXNzYWdlKHB0cikgRGlzcGF0Y2hNZXNzYWdlCisxMTMgcGFzY2FsMTYgVHJhbnNsYXRlTWVzc2FnZShwdHIpIFRyYW5zbGF0ZU1lc3NhZ2UxNgorMTE0IHBhc2NhbCAgIERpc3BhdGNoTWVzc2FnZShwdHIpIERpc3BhdGNoTWVzc2FnZTE2CiAxMTUgcGFzY2FsMTYgUmVwbHlNZXNzYWdlKGxvbmcpIFJlcGx5TWVzc2FnZQogMTE2IHBhc2NhbDE2IFBvc3RBcHBNZXNzYWdlKHdvcmQgd29yZCB3b3JkIGxvbmcpIFBvc3RBcHBNZXNzYWdlMTYKIDExOCBwYXNjYWwxNiBSZWdpc3RlcldpbmRvd01lc3NhZ2Uoc2VncHRyKSBSZWdpc3RlcldpbmRvd01lc3NhZ2UxNgpAQCAtMTM2LDE4ICsxMzYsMTggQEAKIDEzNCBwYXNjYWwxNiBTZXRXaW5kb3dXb3JkKHdvcmQgc193b3JkIHdvcmQpIFNldFdpbmRvd1dvcmQKIDEzNSBwYXNjYWwgICBHZXRXaW5kb3dMb25nKHdvcmQgc193b3JkKSBHZXRXaW5kb3dMb25nMTYKIDEzNiBwYXNjYWwgICBTZXRXaW5kb3dMb25nKHdvcmQgc193b3JkIGxvbmcpIFNldFdpbmRvd0xvbmcxNgotMTM3IHBhc2NhbDE2IE9wZW5DbGlwYm9hcmQod29yZCkgT3BlbkNsaXBib2FyZAotMTM4IHBhc2NhbDE2IENsb3NlQ2xpcGJvYXJkKCkgQ2xvc2VDbGlwYm9hcmQKLTEzOSBwYXNjYWwxNiBFbXB0eUNsaXBib2FyZCgpIEVtcHR5Q2xpcGJvYXJkCi0xNDAgcGFzY2FsMTYgR2V0Q2xpcGJvYXJkT3duZXIoKSBHZXRDbGlwYm9hcmRPd25lcgorMTM3IHBhc2NhbDE2IE9wZW5DbGlwYm9hcmQod29yZCkgT3BlbkNsaXBib2FyZDE2CisxMzggcGFzY2FsMTYgQ2xvc2VDbGlwYm9hcmQoKSBDbG9zZUNsaXBib2FyZDE2CisxMzkgcGFzY2FsMTYgRW1wdHlDbGlwYm9hcmQoKSBFbXB0eUNsaXBib2FyZDE2CisxNDAgcGFzY2FsMTYgR2V0Q2xpcGJvYXJkT3duZXIoKSBHZXRDbGlwYm9hcmRPd25lcjE2CiAxNDEgcGFzY2FsMTYgU2V0Q2xpcGJvYXJkRGF0YSh3b3JkIHdvcmQpIFNldENsaXBib2FyZERhdGEKIDE0MiBwYXNjYWwxNiBHZXRDbGlwYm9hcmREYXRhKHdvcmQpIEdldENsaXBib2FyZERhdGEKLTE0MyBwYXNjYWwxNiBDb3VudENsaXBib2FyZEZvcm1hdHMoKSBDb3VudENsaXBib2FyZEZvcm1hdHMKLTE0NCBwYXNjYWwxNiBFbnVtQ2xpcGJvYXJkRm9ybWF0cyh3b3JkKSBFbnVtQ2xpcGJvYXJkRm9ybWF0cworMTQzIHBhc2NhbDE2IENvdW50Q2xpcGJvYXJkRm9ybWF0cygpIENvdW50Q2xpcGJvYXJkRm9ybWF0czE2CisxNDQgcGFzY2FsMTYgRW51bUNsaXBib2FyZEZvcm1hdHMod29yZCkgRW51bUNsaXBib2FyZEZvcm1hdHMxNgogMTQ1IHBhc2NhbDE2IFJlZ2lzdGVyQ2xpcGJvYXJkRm9ybWF0KHB0cikgUmVnaXN0ZXJDbGlwYm9hcmRGb3JtYXQxNgogMTQ2IHBhc2NhbDE2IEdldENsaXBib2FyZEZvcm1hdE5hbWUod29yZCBwdHIgc193b3JkKSBHZXRDbGlwYm9hcmRGb3JtYXROYW1lCi0xNDcgcGFzY2FsMTYgU2V0Q2xpcGJvYXJkVmlld2VyKHdvcmQpIFNldENsaXBib2FyZFZpZXdlcgotMTQ4IHBhc2NhbDE2IEdldENsaXBib2FyZFZpZXdlcigpIEdldENsaXBib2FyZFZpZXdlcgorMTQ3IHBhc2NhbDE2IFNldENsaXBib2FyZFZpZXdlcih3b3JkKSBTZXRDbGlwYm9hcmRWaWV3ZXIxNgorMTQ4IHBhc2NhbDE2IEdldENsaXBib2FyZFZpZXdlcigpIEdldENsaXBib2FyZFZpZXdlcjE2CiAxNDkgcGFzY2FsMTYgQ2hhbmdlQ2xpcGJvYXJkQ2hhaW4od29yZCBwdHIpIENoYW5nZUNsaXBib2FyZENoYWluMTYKIDE1MCBwYXNjYWwxNiBMb2FkTWVudSh3b3JkIHNlZ3B0cikgTG9hZE1lbnUxNgogMTUxIHBhc2NhbDE2IENyZWF0ZU1lbnUoKSBDcmVhdGVNZW51MTYKQEAgLTE2NSw4ICsxNjUsOCBAQAogMTYzIHBhc2NhbDE2IENyZWF0ZUNhcmV0KHdvcmQgd29yZCB3b3JkIHdvcmQpIENyZWF0ZUNhcmV0CiAxNjQgcGFzY2FsMTYgRGVzdHJveUNhcmV0KCkgRGVzdHJveUNhcmV0CiAxNjUgcGFzY2FsMTYgU2V0Q2FyZXRQb3Mod29yZCB3b3JkKSBTZXRDYXJldFBvcwotMTY2IHBhc2NhbDE2IEhpZGVDYXJldCh3b3JkKSBIaWRlQ2FyZXQKLTE2NyBwYXNjYWwxNiBTaG93Q2FyZXQod29yZCkgU2hvd0NhcmV0CisxNjYgcGFzY2FsMTYgSGlkZUNhcmV0KHdvcmQpIEhpZGVDYXJldDE2CisxNjcgcGFzY2FsMTYgU2hvd0NhcmV0KHdvcmQpIFNob3dDYXJldDE2CiAxNjggcGFzY2FsMTYgU2V0Q2FyZXRCbGlua1RpbWUod29yZCkgU2V0Q2FyZXRCbGlua1RpbWUKIDE2OSBwYXNjYWwxNiBHZXRDYXJldEJsaW5rVGltZSgpIEdldENhcmV0QmxpbmtUaW1lMTYKIDE3MCBwYXNjYWwxNiBBcnJhbmdlSWNvbmljV2luZG93cyh3b3JkKSBBcnJhbmdlSWNvbmljV2luZG93czE2CkBAIC0xNzgsMjYgKzE3OCwyNiBAQAogMTc2IHBhc2NhbDE2IExvYWRTdHJpbmcod29yZCB3b3JkIHB0ciBzX3dvcmQpIExvYWRTdHJpbmcxNgogMTc3IHBhc2NhbDE2IExvYWRBY2NlbGVyYXRvcnMod29yZCBzZWdwdHIpIExvYWRBY2NlbGVyYXRvcnMxNgogMTc4IHBhc2NhbDE2IFRyYW5zbGF0ZUFjY2VsZXJhdG9yKHdvcmQgd29yZCBwdHIpIFRyYW5zbGF0ZUFjY2VsZXJhdG9yMTYKLTE3OSBwYXNjYWwxNiBHZXRTeXN0ZW1NZXRyaWNzKHdvcmQpIEdldFN5c3RlbU1ldHJpY3MKLTE4MCBwYXNjYWwgICBHZXRTeXNDb2xvcih3b3JkKSBHZXRTeXNDb2xvcgotMTgxIHBhc2NhbDE2IFNldFN5c0NvbG9ycyh3b3JkIHB0ciBwdHIpIFNldFN5c0NvbG9ycworMTc5IHBhc2NhbDE2IEdldFN5c3RlbU1ldHJpY3Moc193b3JkKSBHZXRTeXN0ZW1NZXRyaWNzMTYKKzE4MCBwYXNjYWwgICBHZXRTeXNDb2xvcih3b3JkKSBHZXRTeXNDb2xvcjE2CisxODEgcGFzY2FsMTYgU2V0U3lzQ29sb3JzKHdvcmQgcHRyIHB0cikgU2V0U3lzQ29sb3JzMTYKIDE4MiBwYXNjYWwxNiBLaWxsU3lzdGVtVGltZXIod29yZCB3b3JkKSBLaWxsU3lzdGVtVGltZXIxNgogMTgzIHBhc2NhbDE2IEdldENhcmV0UG9zKHB0cikgR2V0Q2FyZXRQb3MxNgogMTg0IHN0dWIgUXVlcnlTZW5kTWVzc2FnZQogMTg1IHBhc2NhbDE2IEdyYXlTdHJpbmcod29yZCB3b3JkIHNlZ3B0ciBzZWdwdHIgc193b3JkIHNfd29yZCBzX3dvcmQgc193b3JkIHNfd29yZCkgVEhVTktfR3JheVN0cmluZzE2Ci0xODYgcGFzY2FsMTYgU3dhcE1vdXNlQnV0dG9uKHdvcmQpIFN3YXBNb3VzZUJ1dHRvbgorMTg2IHBhc2NhbDE2IFN3YXBNb3VzZUJ1dHRvbih3b3JkKSBTd2FwTW91c2VCdXR0b24xNgogMTg3IHBhc2NhbDE2IEVuZE1lbnUoKSBFbmRNZW51CiAxODggcGFzY2FsMTYgU2V0U3lzTW9kYWxXaW5kb3cod29yZCkgU2V0U3lzTW9kYWxXaW5kb3cxNgogMTg5IHBhc2NhbDE2IEdldFN5c01vZGFsV2luZG93KCkgR2V0U3lzTW9kYWxXaW5kb3cxNgogMTkwIHBhc2NhbDE2IEdldFVwZGF0ZVJlY3Qod29yZCBwdHIgd29yZCkgR2V0VXBkYXRlUmVjdDE2CiAxOTEgcGFzY2FsMTYgQ2hpbGRXaW5kb3dGcm9tUG9pbnQod29yZCBsb25nKSBDaGlsZFdpbmRvd0Zyb21Qb2ludDE2Ci0xOTIgcGFzY2FsMTYgSW5TZW5kTWVzc2FnZSgpIEluU2VuZE1lc3NhZ2UKLTE5MyBwYXNjYWwxNiBJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZSh3b3JkKSBJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZQorMTkyIHBhc2NhbDE2IEluU2VuZE1lc3NhZ2UoKSBJblNlbmRNZXNzYWdlMTYKKzE5MyBwYXNjYWwxNiBJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZSh3b3JkKSBJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZTE2CiAxOTQgcGFzY2FsMTYgRGxnRGlyU2VsZWN0Q29tYm9Cb3god29yZCBwdHIgd29yZCkgRGxnRGlyU2VsZWN0Q29tYm9Cb3gKIDE5NSBwYXNjYWwxNiBEbGdEaXJMaXN0Q29tYm9Cb3god29yZCBwdHIgd29yZCB3b3JkIHdvcmQpIERsZ0Rpckxpc3RDb21ib0JveDE2CiAxOTYgcGFzY2FsICAgVGFiYmVkVGV4dE91dCh3b3JkIHNfd29yZCBzX3dvcmQgcHRyIHNfd29yZCBzX3dvcmQgcHRyIHNfd29yZCkKLSAgICAgICAgICAgICBUYWJiZWRUZXh0T3V0Ci0xOTcgcGFzY2FsICAgR2V0VGFiYmVkVGV4dEV4dGVudCh3b3JkIHB0ciB3b3JkIHdvcmQgcHRyKSBHZXRUYWJiZWRUZXh0RXh0ZW50CisgICAgICAgICAgICAgVGFiYmVkVGV4dE91dDE2CisxOTcgcGFzY2FsICAgR2V0VGFiYmVkVGV4dEV4dGVudCh3b3JkIHB0ciB3b3JkIHdvcmQgcHRyKSBHZXRUYWJiZWRUZXh0RXh0ZW50MTYKIDE5OCBwYXNjYWwxNiBDYXNjYWRlQ2hpbGRXaW5kb3dzKHdvcmQgd29yZCkgQ2FzY2FkZUNoaWxkV2luZG93cwogMTk5IHBhc2NhbDE2IFRpbGVDaGlsZFdpbmRvd3Mod29yZCB3b3JkKSBUaWxlQ2hpbGRXaW5kb3dzCiAyMDAgcGFzY2FsMTYgT3BlbkNvbW0ocHRyIHdvcmQgd29yZCkgT3BlbkNvbW0KQEAgLTIzMyw3ICsyMzMsNyBAQAogMjMwIHBhc2NhbDE2IEdldE5leHRXaW5kb3cod29yZCB3b3JkKSBHZXROZXh0V2luZG93MTYKIDIzMSBzdHViIEdldFN5c3RlbURlYnVnU3RhdGUKIDIzMiBwYXNjYWwxNiBTZXRXaW5kb3dQb3Mod29yZCB3b3JkIHdvcmQgd29yZCB3b3JkIHdvcmQgd29yZCkgU2V0V2luZG93UG9zMTYKLTIzMyBwYXNjYWwxNiBTZXRQYXJlbnQod29yZCB3b3JkKSBTZXRQYXJlbnQKKzIzMyBwYXNjYWwxNiBTZXRQYXJlbnQod29yZCB3b3JkKSBTZXRQYXJlbnQxNgogMjM0IHBhc2NhbDE2IFVuaG9va1dpbmRvd3NIb29rKHNfd29yZCBzZWdwdHIpIFRIVU5LX1VuaG9va1dpbmRvd3NIb29rMTYKIDIzNSBwYXNjYWwgICBEZWZIb29rUHJvYyhzX3dvcmQgd29yZCBsb25nIHB0cikgRGVmSG9va1Byb2MxNgogMjM2IHBhc2NhbDE2IEdldENhcHR1cmUoKSBHZXRDYXB0dXJlMTYKQEAgLTI0OSw4ICsyNDksOCBAQAogMjQ0IHBhc2NhbDE2IEVxdWFsUmVjdChwdHIgcHRyKSBFcXVhbFJlY3QxNgogMjQ1IHN0dWIgRW5hYmxlQ29tbU5vdGlmaWNhdGlvbgogMjQ2IHN0dWIgRXhpdFdpbmRvd3NFeGVjCi0yNDcgcGFzY2FsMTYgR2V0Q3Vyc29yKCkgR2V0Q3Vyc29yCi0yNDggcGFzY2FsMTYgR2V0T3BlbkNsaXBib2FyZFdpbmRvdygpIEdldE9wZW5DbGlwYm9hcmRXaW5kb3cKKzI0NyBwYXNjYWwxNiBHZXRDdXJzb3IoKSBHZXRDdXJzb3IxNgorMjQ4IHBhc2NhbDE2IEdldE9wZW5DbGlwYm9hcmRXaW5kb3coKSBHZXRPcGVuQ2xpcGJvYXJkV2luZG93MTYKIDI0OSBwYXNjYWwxNiBHZXRBc3luY0tleVN0YXRlKHdvcmQpIEdldEFzeW5jS2V5U3RhdGUxNgogMjUwIHBhc2NhbDE2IEdldE1lbnVTdGF0ZSh3b3JkIHdvcmQgd29yZCkgR2V0TWVudVN0YXRlMTYKIDI1MSBwYXNjYWwgICBTZW5kRHJpdmVyTWVzc2FnZSh3b3JkIHdvcmQgbG9uZyBsb25nKSBTZW5kRHJpdmVyTWVzc2FnZQpAQCAtMjY4LDggKzI2OCw4IEBACiAyNjIgcGFzY2FsMTYgR2V0V2luZG93KHdvcmQgd29yZCkgR2V0V2luZG93MTYKIDI2MyBwYXNjYWwxNiBHZXRNZW51SXRlbUNvdW50KHdvcmQpIEdldE1lbnVJdGVtQ291bnQxNgogMjY0IHBhc2NhbDE2IEdldE1lbnVJdGVtSUQod29yZCB3b3JkKSBHZXRNZW51SXRlbUlEMTYKLTI2NSBwYXNjYWwxNiBTaG93T3duZWRQb3B1cHMod29yZCB3b3JkKSBTaG93T3duZWRQb3B1cHMKLTI2NiBwYXNjYWwxNiBTZXRNZXNzYWdlUXVldWUod29yZCkgU2V0TWVzc2FnZVF1ZXVlCisyNjUgcGFzY2FsMTYgU2hvd093bmVkUG9wdXBzKHdvcmQgd29yZCkgU2hvd093bmVkUG9wdXBzMTYKKzI2NiBwYXNjYWwxNiBTZXRNZXNzYWdlUXVldWUod29yZCkgU2V0TWVzc2FnZVF1ZXVlMTYKIDI2NyBwYXNjYWwxNiBTaG93U2Nyb2xsQmFyKHdvcmQgd29yZCB3b3JkKSBTaG93U2Nyb2xsQmFyMTYKIDI2OCBwYXNjYWwxNiBHbG9iYWxBZGRBdG9tKHNlZ3B0cikgR2xvYmFsQWRkQXRvbTE2CiAyNjkgcGFzY2FsMTYgR2xvYmFsRGVsZXRlQXRvbSh3b3JkKSBHbG9iYWxEZWxldGVBdG9tCkBAIC0yODUsMTIgKzI4NSwxMiBAQAogMjc5IHN0dWIgT2xkU2V0RGVza1BhdHRlcm4KIDI4MCBwYXNjYWwxNiBTZXRTeXN0ZW1NZW51KHdvcmQgd29yZCkgU2V0U3lzdGVtTWVudTE2CiAyODEgcGFzY2FsMTYgR2V0U3lzQ29sb3JCcnVzaCh3b3JkKSBHZXRTeXNDb2xvckJydXNoMTYKLTI4MiBwYXNjYWwxNiBTZWxlY3RQYWxldHRlKHdvcmQgd29yZCB3b3JkKSBTZWxlY3RQYWxldHRlCi0yODMgcGFzY2FsMTYgUmVhbGl6ZVBhbGV0dGUod29yZCkgUmVhbGl6ZVBhbGV0dGUKKzI4MiBwYXNjYWwxNiBTZWxlY3RQYWxldHRlKHdvcmQgd29yZCB3b3JkKSBTZWxlY3RQYWxldHRlMTYKKzI4MyBwYXNjYWwxNiBSZWFsaXplUGFsZXR0ZSh3b3JkKSBSZWFsaXplUGFsZXR0ZTE2CiAyODQgcGFzY2FsMTYgR2V0RnJlZVN5c3RlbVJlc291cmNlcyh3b3JkKSBHZXRGcmVlU3lzdGVtUmVzb3VyY2VzCiAyODUgcGFzY2FsMTYgU2V0RGVza1dhbGxQYXBlcihwdHIpIFNldERlc2tXYWxsUGFwZXIxNgogMjg2IHBhc2NhbDE2IEdldERlc2t0b3BXaW5kb3coKSBHZXREZXNrdG9wV2luZG93MTYKLTI4NyBwYXNjYWwxNiBHZXRMYXN0QWN0aXZlUG9wdXAod29yZCkgR2V0TGFzdEFjdGl2ZVBvcHVwCisyODcgcGFzY2FsMTYgR2V0TGFzdEFjdGl2ZVBvcHVwKHdvcmQpIEdldExhc3RBY3RpdmVQb3B1cDE2CiAyODggcGFzY2FsICAgR2V0TWVzc2FnZUV4dHJhSW5mbygpIEdldE1lc3NhZ2VFeHRyYUluZm8KICMyODkgS0VZQl9FVkVOVAogMjkwIHBhc2NhbDE2IFJlZHJhd1dpbmRvdyh3b3JkIHB0ciB3b3JkIHdvcmQpIFJlZHJhd1dpbmRvdzE2CkBAIC0zMTcsNyArMzE3LDcgQEAKIDMzMiBwYXNjYWwxNiBVc2VyWWllbGQoKSBVc2VyWWllbGQKIDMzMyBzdHViIElzVXNlcklkbGUKIDMzNCBwYXNjYWwgICBHZXRRdWV1ZVN0YXR1cyh3b3JkKSBHZXRRdWV1ZVN0YXR1cwotMzM1IHBhc2NhbDE2IEdldElucHV0U3RhdGUoKSBHZXRJbnB1dFN0YXRlCiszMzUgcGFzY2FsMTYgR2V0SW5wdXRTdGF0ZSgpIEdldElucHV0U3RhdGUxNgogMzM2IHN0dWIgTG9hZEN1cnNvckljb25IYW5kbGVyCiAzMzcgcGFzY2FsICAgR2V0TW91c2VFdmVudFByb2MoKSBHZXRNb3VzZUV2ZW50UHJvYwogIzM0MSBfRkZGRV9GQVJGUkFNRQpAQCAtMzU3LDggKzM1Nyw4IEBACiAgICAgICAgICAgICAgR2V0UHJpb3JpdHlDbGlwYm9hcmRGb3JtYXQKIDQwMyBwYXNjYWwxNiBVbnJlZ2lzdGVyQ2xhc3Moc2VncHRyIHdvcmQpIFVucmVnaXN0ZXJDbGFzczE2CiA0MDQgcGFzY2FsMTYgR2V0Q2xhc3NJbmZvKHdvcmQgc2VncHRyIHB0cikgR2V0Q2xhc3NJbmZvMTYKLTQwNiBwYXNjYWwxNiBDcmVhdGVDdXJzb3Iod29yZCB3b3JkIHdvcmQgd29yZCB3b3JkIHB0ciBwdHIpIENyZWF0ZUN1cnNvcgotNDA3IHBhc2NhbDE2IENyZWF0ZUljb24od29yZCB3b3JkIHdvcmQgd29yZCB3b3JkIHB0ciBwdHIpIENyZWF0ZUljb24KKzQwNiBwYXNjYWwxNiBDcmVhdGVDdXJzb3Iod29yZCB3b3JkIHdvcmQgd29yZCB3b3JkIHB0ciBwdHIpIENyZWF0ZUN1cnNvcjE2Cis0MDcgcGFzY2FsMTYgQ3JlYXRlSWNvbih3b3JkIHdvcmQgd29yZCB3b3JkIHdvcmQgcHRyIHB0cikgQ3JlYXRlSWNvbjE2CiA0MDggcGFzY2FsMTYgQ3JlYXRlQ3Vyc29ySWNvbkluZGlyZWN0KHdvcmQgcHRyIHB0ciBwdHIpCiAJICAgICBDcmVhdGVDdXJzb3JJY29uSW5kaXJlY3QKIDQwOSBzdHViIEluaXRUaHJlYWRJbnB1dApAQCAtMzk1LDIxICszOTUsMjEgQEAKIDQ0OCBzdHViIERyYXdBbmltYXRlZFJlY3RzCiA0NDkgc3R1YiBEcmF3U3RhdGUKIDQ1MCBzdHViIENyZWF0ZUljb25Gcm9tUmVzb3VyY2VFeAotNDUxIHBhc2NhbDE2IFRyYW5zbGF0ZU1ESVN5c0FjY2VsKHdvcmQgcHRyKSBUcmFuc2xhdGVNRElTeXNBY2NlbAorNDUxIHBhc2NhbDE2IFRyYW5zbGF0ZU1ESVN5c0FjY2VsKHdvcmQgcHRyKSBUcmFuc2xhdGVNRElTeXNBY2NlbDE2CiA0NTIgcGFzY2FsMTYgQ3JlYXRlV2luZG93RXgobG9uZyBwdHIgcHRyIGxvbmcgc193b3JkIHNfd29yZCBzX3dvcmQgc193b3JkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZCB3b3JkIHdvcmQgc2VncHRyKSBDcmVhdGVXaW5kb3dFeDE2CiA0NTQgcGFzY2FsMTYgQWRqdXN0V2luZG93UmVjdEV4KHB0ciBsb25nIHdvcmQgbG9uZykgQWRqdXN0V2luZG93UmVjdEV4MTYKIDQ1NSBwYXNjYWwxNiBHZXRJY29uSUQod29yZCBsb25nKSBHZXRJY29uSUQKIDQ1NiBwYXNjYWwxNiBMb2FkSWNvbkhhbmRsZXIod29yZCB3b3JkKSBMb2FkSWNvbkhhbmRsZXIKLTQ1NyBwYXNjYWwxNiBEZXN0cm95SWNvbih3b3JkKSBEZXN0cm95SWNvbgotNDU4IHBhc2NhbDE2IERlc3Ryb3lDdXJzb3Iod29yZCkgRGVzdHJveUN1cnNvcgorNDU3IHBhc2NhbDE2IERlc3Ryb3lJY29uKHdvcmQpIERlc3Ryb3lJY29uMTYKKzQ1OCBwYXNjYWwxNiBEZXN0cm95Q3Vyc29yKHdvcmQpIERlc3Ryb3lDdXJzb3IxNgogNDU5IHBhc2NhbCAgIER1bXBJY29uKHNlZ3B0ciBwdHIgcHRyIHB0cikgRHVtcEljb24KIDQ2MCBwYXNjYWwxNiBHZXRJbnRlcm5hbFdpbmRvd1Bvcyh3b3JkIHB0ciBwdHIpIEdldEludGVybmFsV2luZG93UG9zMTYKIDQ2MSBwYXNjYWwxNiBTZXRJbnRlcm5hbFdpbmRvd1Bvcyh3b3JkIHdvcmQgcHRyIHB0cikgU2V0SW50ZXJuYWxXaW5kb3dQb3MxNgogNDYyIHBhc2NhbDE2IENhbGNDaGlsZFNjcm9sbCh3b3JkIHdvcmQpIENhbGNDaGlsZFNjcm9sbAotNDYzIHBhc2NhbDE2IFNjcm9sbENoaWxkcmVuKHdvcmQgd29yZCB3b3JkIGxvbmcpIFNjcm9sbENoaWxkcmVuCis0NjMgcGFzY2FsMTYgU2Nyb2xsQ2hpbGRyZW4od29yZCB3b3JkIHdvcmQgbG9uZykgU2Nyb2xsQ2hpbGRyZW4xNgogNDY0IHBhc2NhbCAgIERyYWdPYmplY3Qod29yZCB3b3JkIHdvcmQgd29yZCB3b3JkIHdvcmQpIERyYWdPYmplY3QKLTQ2NSBwYXNjYWwxNiBEcmFnRGV0ZWN0KHdvcmQgbG9uZykgRHJhZ0RldGVjdAorNDY1IHBhc2NhbDE2IERyYWdEZXRlY3Qod29yZCBsb25nKSBEcmFnRGV0ZWN0MTYKIDQ2NiBwYXNjYWwxNiBEcmF3Rm9jdXNSZWN0KHdvcmQgcHRyKSBEcmF3Rm9jdXNSZWN0MTYKIDQ3MCBzdHViIFN0cmluZ0Z1bmMKIDQ3MSBwYXNjYWwxNiBsc3RyY21waShwdHIgcHRyKSBsc3RyY21waTE2CkBAIC00NjUsNyArNDY1LDYgQEAKIDUzMiBwYXNjYWwxNiBXTmV0R2V0UHJvcGVydHlUZXh0KHdvcmQgd29yZCB3b3JkIHB0ciB3b3JkKSBXTmV0R2V0UHJvcGVydHlUZXh0CiA1MzMgc3R1YiBXTmV0SW5pdGlhbGl6ZQogNTM0IHN0dWIgV05ldExvZ29uCi02Njkgc3R1YiBTZXRXaW5kb3dSZ24KIDYwMCBzdHViIEdldFNoZWxsV2luZG93CiA2MDEgc3R1YiBEb0hvdGtleVN0dWZmCiA2MDIgc3R1YiBTZXRDaGVja0N1cnNvclRpbWVyCmRpZmYgLS1naXQgYS9pZjE2MzIvdXNlcjMyLnNwZWMgYi9pZjE2MzIvdXNlcjMyLnNwZWMKaW5kZXggYmY3ZjEzMS4uMjBhYzIxNCAxMDA2NDQKLS0tIGEvaWYxNjMyL3VzZXIzMi5zcGVjCisrKyBiL2lmMTYzMi91c2VyMzIuc3BlYwpAQCAtNSw3ICs1LDcgQEAKIDAwMDAgc3R1YiBBY3RpdmF0ZUtleWJvYXJkTGF5b3V0CiAwMDAxIHN0ZGNhbGwgQWRqdXN0V2luZG93UmVjdChwdHIgbG9uZyBsb25nKSBBZGp1c3RXaW5kb3dSZWN0MzIKIDAwMDIgc3RkY2FsbCBBZGp1c3RXaW5kb3dSZWN0RXgocHRyIGxvbmcgbG9uZyBsb25nKSBBZGp1c3RXaW5kb3dSZWN0RXgzMgotMDAwMyBzdHViIEFueVBvcHVwCiswMDAzIHN0ZGNhbGwgQW55UG9wdXAoKSBBbnlQb3B1cDMyCiAwMDA0IHN0ZGNhbGwgQXBwZW5kTWVudUEobG9uZyBsb25nIGxvbmcgcHRyKSBBcHBlbmRNZW51MzJBCiAwMDA1IHN0ZGNhbGwgQXBwZW5kTWVudVcobG9uZyBsb25nIGxvbmcgcHRyKSBBcHBlbmRNZW51MzJXCiAwMDA2IHN0ZGNhbGwgQXJyYW5nZUljb25pY1dpbmRvd3MobG9uZykgQXJyYW5nZUljb25pY1dpbmRvd3MzMgpAQCAtNTUsMjAgKzU1LDIwIEBACiAwMDUwIHN0dWIgQ2xpZW50VGhyZWFkQ29ubmVjdAogMDA1MSBzdGRjYWxsIENsaWVudFRvU2NyZWVuKGxvbmcgcHRyKSBDbGllbnRUb1NjcmVlbjMyCiAwMDUyIHN0ZGNhbGwgQ2xpcEN1cnNvcihwdHIpIENsaXBDdXJzb3IzMgotMDA1MyBzdGRjYWxsIENsb3NlQ2xpcGJvYXJkKCkgQ2xvc2VDbGlwYm9hcmQKKzAwNTMgc3RkY2FsbCBDbG9zZUNsaXBib2FyZCgpIENsb3NlQ2xpcGJvYXJkMzIKIDAwNTQgc3R1YiBDbG9zZURlc2t0b3AKLTAwNTUgc3R1YiBDbG9zZVdpbmRvdworMDA1NSBzdGRjYWxsIENsb3NlV2luZG93KGxvbmcpIENsb3NlV2luZG93MzIKIDAwNTYgc3R1YiBDbG9zZVdpbmRvd1N0YXRpb24KIDAwNTcgc3R1YiBDb3B5QWNjZWxlcmF0b3JUYWJsZUEKIDAwNTggc3R1YiBDb3B5QWNjZWxlcmF0b3JUYWJsZVcKIDAwNTkgc3RkY2FsbCBDb3B5SWNvbihsb25nKSBDb3B5SWNvbjMyCiAwMDYwIHN0ZGNhbGwgQ29weUltYWdlKGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZykgQ29weUltYWdlMzIKIDAwNjEgc3RkY2FsbCBDb3B5UmVjdChwdHIgcHRyKSBDb3B5UmVjdDMyCi0wMDYyIHN0dWIgQ291bnRDbGlwYm9hcmRGb3JtYXRzCiswMDYyIHN0ZGNhbGwgQ291bnRDbGlwYm9hcmRGb3JtYXRzKCkgQ291bnRDbGlwYm9hcmRGb3JtYXRzMzIKIDAwNjMgc3R1YiBDcmVhdGVBY2NlbGVyYXRvclRhYmxlQQogMDA2NCBzdHViIENyZWF0ZUFjY2VsZXJhdG9yVGFibGVXCiAwMDY1IHN0ZGNhbGwgQ3JlYXRlQ2FyZXQobG9uZyBsb25nIGxvbmcgbG9uZykgQ3JlYXRlQ2FyZXQKLTAwNjYgc3R1YiBDcmVhdGVDdXJzb3IKKzAwNjYgc3RkY2FsbCBDcmVhdGVDdXJzb3IobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIHB0ciBwdHIpIENyZWF0ZUN1cnNvcjMyCiAwMDY3IHN0dWIgQ3JlYXRlRGVza3RvcEEKIDAwNjggc3R1YiBDcmVhdGVEZXNrdG9wVwogMDA2OSBzdGRjYWxsIENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW1BKGxvbmcgcHRyIGxvbmcgcHRyIGxvbmcpIENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW0zMkEKQEAgLTc2LDcgKzc2LDcgQEAKIDAwNzEgc3RkY2FsbCBDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtVyhsb25nIHB0ciBsb25nIHB0ciBsb25nKSBDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtMzJXCiAwMDcyIHN0ZGNhbGwgQ3JlYXRlRGlhbG9nUGFyYW1BKGxvbmcgcHRyIGxvbmcgcHRyIGxvbmcpIENyZWF0ZURpYWxvZ1BhcmFtMzJBCiAwMDczIHN0ZGNhbGwgQ3JlYXRlRGlhbG9nUGFyYW1XKGxvbmcgcHRyIGxvbmcgcHRyIGxvbmcpIENyZWF0ZURpYWxvZ1BhcmFtMzJXCi0wMDc0IHN0dWIgQ3JlYXRlSWNvbgorMDA3NCBzdGRjYWxsIENyZWF0ZUljb24obG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIHB0ciBwdHIpIENyZWF0ZUljb24zMgogMDA3NSBzdHViIENyZWF0ZUljb25Gcm9tUmVzb3VyY2UKIDAwNzYgc3R1YiBDcmVhdGVJY29uRnJvbVJlc291cmNlRXgKIDAwNzcgc3R1YiBDcmVhdGVJY29uSW5kaXJlY3QKQEAgLTkzLDE0ICs5MywxNCBAQAogMDA4NiBzdHViIERkZUFiYW5kb25UcmFuc2FjdGlvbgogMDA4NyBzdHViIERkZUFjY2Vzc0RhdGEKIDAwODggc3R1YiBEZGVBZGREYXRhCi0wMDg5IHN0dWIgRGRlQ2xpZW50VHJhbnNhY3Rpb24KKzAwODkgcmV0dXJuIERkZUNsaWVudFRyYW5zYWN0aW9uIDMyIDAKIDAwOTAgc3R1YiBEZGVDbXBTdHJpbmdIYW5kbGVzCi0wMDkxIHN0dWIgRGRlQ29ubmVjdAorMDA5MSByZXR1cm4gRGRlQ29ubmVjdCAxNiAwCiAwMDkyIHN0dWIgRGRlQ29ubmVjdExpc3QKIDAwOTMgc3R1YiBEZGVDcmVhdGVEYXRhSGFuZGxlCiAwMDk0IHJldHVybiBEZGVDcmVhdGVTdHJpbmdIYW5kbGVBIDEyIDAKLTAwOTUgc3R1YiBEZGVDcmVhdGVTdHJpbmdIYW5kbGVXCi0wMDk2IHN0dWIgRGRlRGlzY29ubmVjdAorMDA5NSByZXR1cm4gRGRlQ3JlYXRlU3RyaW5nSGFuZGxlVyAxMiAwCiswMDk2IHJldHVybiBEZGVEaXNjb25uZWN0IDQgMAogMDA5NyBzdHViIERkZURpc2Nvbm5lY3RMaXN0CiAwMDk4IHN0dWIgRGRlRW5hYmxlQ2FsbGJhY2sKIDAwOTkgc3R1YiBEZGVGcmVlRGF0YUhhbmRsZQpAQCAtMTEwLDcgKzExMCw3IEBACiAwMTAzIHN0dWIgRGRlR2V0UXVhbGl0eU9mU2VydmljZQogMDEwNCBzdHViIERkZUltcGVyc29uYXRlQ2xpZW50CiAwMTA1IHJldHVybiBEZGVJbml0aWFsaXplQSAxNiAwCi0wMTA2IHN0dWIgRGRlSW5pdGlhbGl6ZVcKKzAxMDYgcmV0dXJuIERkZUluaXRpYWxpemVXIDE2IDAKIDAxMDcgc3R1YiBEZGVLZWVwU3RyaW5nSGFuZGxlCiAwMTA4IHJldHVybiBEZGVOYW1lU2VydmljZSAxNiAwCiAwMTA5IHN0dWIgRGRlUG9zdEFkdmlzZQpAQCAtMTM1LDggKzEzNSw4IEBACiAwMTI4IHN0ZGNhbGwgRGVsZXRlTWVudShsb25nIGxvbmcgbG9uZykgRGVsZXRlTWVudTMyCiAwMTI5IHN0dWIgRGVzdHJveUFjY2VsZXJhdG9yVGFibGUKIDAxMzAgc3RkY2FsbCBEZXN0cm95Q2FyZXQoKSBEZXN0cm95Q2FyZXQKLTAxMzEgc3R1YiBEZXN0cm95Q3Vyc29yCi0wMTMyIHN0dWIgRGVzdHJveUljb24KKzAxMzEgc3RkY2FsbCBEZXN0cm95Q3Vyc29yKGxvbmcpIERlc3Ryb3lDdXJzb3IzMgorMDEzMiBzdGRjYWxsIERlc3Ryb3lJY29uKGxvbmcpIERlc3Ryb3lJY29uMzIKIDAxMzMgc3RkY2FsbCBEZXN0cm95TWVudShsb25nKSBEZXN0cm95TWVudTMyCiAwMTM0IHN0ZGNhbGwgRGVzdHJveVdpbmRvdyhsb25nKSBEZXN0cm95V2luZG93MzIKIDAxMzUgc3RkY2FsbCBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtQShsb25nIHB0ciBsb25nIHB0ciBsb25nKSBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtMzJBCkBAIC0xNDQsOCArMTQ0LDggQEAKIDAxMzcgc3RkY2FsbCBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtVyhsb25nIHB0ciBsb25nIHB0ciBsb25nKSBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtMzJXCiAwMTM4IHN0ZGNhbGwgRGlhbG9nQm94UGFyYW1BKGxvbmcgcHRyIGxvbmcgcHRyIGxvbmcpIERpYWxvZ0JveFBhcmFtMzJBCiAwMTM5IHN0ZGNhbGwgRGlhbG9nQm94UGFyYW1XKGxvbmcgcHRyIGxvbmcgcHRyIGxvbmcpIERpYWxvZ0JveFBhcmFtMzJXCi0wMTQwIHN0ZGNhbGwgRGlzcGF0Y2hNZXNzYWdlQShwdHIpIFVTRVIzMl9EaXNwYXRjaE1lc3NhZ2VBCi0wMTQxIHN0ZGNhbGwgRGlzcGF0Y2hNZXNzYWdlVyhwdHIpIFVTRVIzMl9EaXNwYXRjaE1lc3NhZ2VBCiswMTQwIHN0ZGNhbGwgRGlzcGF0Y2hNZXNzYWdlQShwdHIpIERpc3BhdGNoTWVzc2FnZTMyQQorMDE0MSBzdGRjYWxsIERpc3BhdGNoTWVzc2FnZVcocHRyKSBEaXNwYXRjaE1lc3NhZ2UzMlcKIDAxNDIgc3RkY2FsbCBEbGdEaXJMaXN0QShsb25nIHB0ciBsb25nIGxvbmcgbG9uZykgRGxnRGlyTGlzdDMyQQogMDE0MyBzdGRjYWxsIERsZ0Rpckxpc3RDb21ib0JveEEobG9uZyBwdHIgbG9uZyBsb25nIGxvbmcpIERsZ0Rpckxpc3RDb21ib0JveDMyQQogMDE0NCBzdGRjYWxsIERsZ0Rpckxpc3RDb21ib0JveFcobG9uZyBwdHIgbG9uZyBsb25nIGxvbmcpIERsZ0Rpckxpc3RDb21ib0JveDMyVwpAQCAtMTU0LDcgKzE1NCw3IEBACiAwMTQ3IHN0ZGNhbGwgRGxnRGlyU2VsZWN0Q29tYm9Cb3hFeFcobG9uZyBwdHIgbG9uZyBsb25nKSBEbGdEaXJTZWxlY3RDb21ib0JveEV4MzJXCiAwMTQ4IHN0ZGNhbGwgRGxnRGlyU2VsZWN0RXhBKGxvbmcgcHRyIGxvbmcgbG9uZykgRGxnRGlyU2VsZWN0RXgzMkEKIDAxNDkgc3RkY2FsbCBEbGdEaXJTZWxlY3RFeFcobG9uZyBwdHIgbG9uZyBsb25nKSBEbGdEaXJTZWxlY3RFeDMyVwotMDE1MCBzdHViIERyYWdEZXRlY3QKKzAxNTAgc3RkY2FsbCBEcmFnRGV0ZWN0KGxvbmcgbG9uZyBsb25nKSBEcmFnRGV0ZWN0MzIKIDAxNTEgc3R1YiBEcmFnT2JqZWN0CiAwMTUyIHN0dWIgRHJhd0FuaW1hdGVkUmVjdHMKIDAxNTMgc3R1YiBEcmF3Q2FwdGlvbgpAQCAtMTYyLDcgKzE2Miw3IEBACiAwMTU1IHN0ZGNhbGwgRHJhd0ZvY3VzUmVjdChsb25nIHB0cikgRHJhd0ZvY3VzUmVjdDMyCiAwMTU2IHN0dWIgRHJhd0ZyYW1lCiAwMTU3IHN0ZGNhbGwgRHJhd0ZyYW1lQ29udHJvbChsb25nIHB0ciBsb25nIGxvbmcpIERyYXdGcmFtZUNvbnRyb2wzMgotMDE1OCBzdGRjYWxsIERyYXdJY29uKGxvbmcgbG9uZyBsb25nIGxvbmcpIERyYXdJY29uCiswMTU4IHN0ZGNhbGwgRHJhd0ljb24obG9uZyBsb25nIGxvbmcgbG9uZykgRHJhd0ljb24zMgogMDE1OSBzdHViIERyYXdJY29uRXgKIDAxNjAgc3RkY2FsbCBEcmF3TWVudUJhcihsb25nKSBEcmF3TWVudUJhcjMyCiAwMTYxIHN0dWIgRHJhd1N0YXRlQQpAQCAtMTcyLDE3ICsxNzIsMTcgQEAKIDAxNjUgc3R1YiBEcmF3VGV4dEV4VwogMDE2NiBzdGRjYWxsIERyYXdUZXh0Vyhsb25nIHB0ciBsb25nIHB0ciBsb25nKSBEcmF3VGV4dDMyVwogMDE2NyBzdHViIEVkaXRXbmRQcm9jCi0wMTY4IHN0ZGNhbGwgRW1wdHlDbGlwYm9hcmQoKSBFbXB0eUNsaXBib2FyZAorMDE2OCBzdGRjYWxsIEVtcHR5Q2xpcGJvYXJkKCkgRW1wdHlDbGlwYm9hcmQzMgogMDE2OSBzdGRjYWxsIEVuYWJsZU1lbnVJdGVtKGxvbmcgbG9uZyBsb25nKSBFbmFibGVNZW51SXRlbTMyCiAwMTcwIHN0ZGNhbGwgRW5hYmxlU2Nyb2xsQmFyKGxvbmcgbG9uZyBsb25nKSBFbmFibGVTY3JvbGxCYXIzMgogMDE3MSBzdGRjYWxsIEVuYWJsZVdpbmRvdyhsb25nIGxvbmcpIEVuYWJsZVdpbmRvdzMyCiAwMTcyIHN0ZGNhbGwgRW5kRGVmZXJXaW5kb3dQb3MobG9uZykgRW5kRGVmZXJXaW5kb3dQb3MzMgotMDE3MyBzdGRjYWxsIEVuZERpYWxvZyhsb25nIGxvbmcpIEVuZERpYWxvZworMDE3MyBzdGRjYWxsIEVuZERpYWxvZyhsb25nIGxvbmcpIEVuZERpYWxvZzMyCiAwMTc0IHN0ZGNhbGwgRW5kTWVudSgpIEVuZE1lbnUKIDAxNzUgc3RkY2FsbCBFbmRQYWludChsb25nIHB0cikgRW5kUGFpbnQzMgogMDE3NiBzdHViIEVuZFRhc2sKIDAxNzcgc3RkY2FsbCBFbnVtQ2hpbGRXaW5kb3dzKGxvbmcgcHRyIGxvbmcpIFRIVU5LX0VudW1DaGlsZFdpbmRvd3MzMgotMDE3OCBzdHViIEVudW1DbGlwYm9hcmRGb3JtYXRzCiswMTc4IHN0ZGNhbGwgRW51bUNsaXBib2FyZEZvcm1hdHMobG9uZykgRW51bUNsaXBib2FyZEZvcm1hdHMzMgogMDE3OSBzdHViIEVudW1EZXNrdG9wc0EKIDAxODAgc3R1YiBFbnVtRGVza3RvcHNXCiAwMTgxIHN0dWIgRW51bURpc3BsYXlEZXZpY2VNb2Rlc0EKQEAgLTIwNSw3ICsyMDUsNyBAQAogMDE5OCBzdGRjYWxsIEZpbmRXaW5kb3dFeEEobG9uZyBsb25nIHB0ciBwdHIpIEZpbmRXaW5kb3dFeDMyQQogMDE5OSBzdGRjYWxsIEZpbmRXaW5kb3dFeFcobG9uZyBsb25nIHB0ciBwdHIpIEZpbmRXaW5kb3dFeDMyVwogMDIwMCBzdGRjYWxsIEZpbmRXaW5kb3dXKHB0ciBwdHIpIEZpbmRXaW5kb3czMlcKLTAyMDEgc3RkY2FsbCBGbGFzaFdpbmRvdyhsb25nIGxvbmcpIEZsYXNoV2luZG93CiswMjAxIHN0ZGNhbGwgRmxhc2hXaW5kb3cobG9uZyBsb25nKSBGbGFzaFdpbmRvdzMyCiAwMjAyIHN0ZGNhbGwgRnJhbWVSZWN0KGxvbmcgcHRyIGxvbmcpIEZyYW1lUmVjdDMyCiAwMjAzIHN0dWIgRnJlZURERWxQYXJhbQogMDIwNCBzdGRjYWxsIEdldEFjdGl2ZVdpbmRvdygpIEdldEFjdGl2ZVdpbmRvdzMyCkBAIC0yMjUsMTIgKzIyNSwxMiBAQAogMDIxOCBzdGRjYWxsIEdldENsYXNzV29yZChsb25nIGxvbmcpIEdldENsYXNzV29yZAogMDIxOSBzdGRjYWxsIEdldENsaWVudFJlY3QobG9uZyBsb25nKSBHZXRDbGllbnRSZWN0MzIKIDAyMjAgc3RkY2FsbCBHZXRDbGlwQ3Vyc29yKHB0cikgR2V0Q2xpcEN1cnNvcjMyCi0wMjIxIHN0dWIgR2V0Q2xpcGJvYXJkRGF0YQorMDIyMSBzdGRjYWxsIEdldENsaXBib2FyZERhdGEobG9uZykgR2V0Q2xpcGJvYXJkRGF0YQogMDIyMiBzdHViIEdldENsaXBib2FyZEZvcm1hdE5hbWVBCiAwMjIzIHN0dWIgR2V0Q2xpcGJvYXJkRm9ybWF0TmFtZVcKLTAyMjQgc3R1YiBHZXRDbGlwYm9hcmRPd25lcgotMDIyNSBzdGRjYWxsIEdldENsaXBib2FyZFZpZXdlcihsb25nKSBHZXRDbGlwYm9hcmRWaWV3ZXIKLTAyMjYgc3RkY2FsbCBHZXRDdXJzb3IoKSBHZXRDdXJzb3IKKzAyMjQgc3RkY2FsbCBHZXRDbGlwYm9hcmRPd25lcigpIEdldENsaXBib2FyZE93bmVyMzIKKzAyMjUgc3RkY2FsbCBHZXRDbGlwYm9hcmRWaWV3ZXIobG9uZykgR2V0Q2xpcGJvYXJkVmlld2VyMzIKKzAyMjYgc3RkY2FsbCBHZXRDdXJzb3IoKSBHZXRDdXJzb3IzMgogMDIyNyBzdHViIEdldEN1cnNvckluZm8KIDAyMjggc3RkY2FsbCBHZXRDdXJzb3JQb3MocHRyKSBHZXRDdXJzb3JQb3MzMgogMDIyOSBzdGRjYWxsIEdldERDKGxvbmcpIEdldERDMzIKQEAgLTI0MiwxNCArMjQyLDE0IEBACiAwMjM1IHN0ZGNhbGwgR2V0RGxnSXRlbUludChsb25nIGxvbmcgcHRyIGxvbmcpIEdldERsZ0l0ZW1JbnQzMgogMDIzNiBzdGRjYWxsIEdldERsZ0l0ZW1UZXh0QShsb25nIGxvbmcgcHRyIGxvbmcpIEdldERsZ0l0ZW1UZXh0MzJBCiAwMjM3IHN0ZGNhbGwgR2V0RGxnSXRlbVRleHRXKGxvbmcgbG9uZyBwdHIgbG9uZykgR2V0RGxnSXRlbVRleHQzMlcKLTAyMzggc3R1YiBHZXREb3VibGVDbGlja1RpbWUKKzAyMzggc3RkY2FsbCBHZXREb3VibGVDbGlja1RpbWUoKSBHZXREb3VibGVDbGlja1RpbWUzMgogMDIzOSBzdGRjYWxsIEdldEZvY3VzKCkgR2V0Rm9jdXMzMgogMDI0MCByZXR1cm4gR2V0Rm9yZWdyb3VuZFdpbmRvdyAwIDAJCSNGSVhNRQogMDI0MSBzdHViIEdldEljb25JbmZvCiAwMjQyIHN0dWIgR2V0SW5wdXREZXNrdG9wCi0wMjQzIHN0dWIgR2V0SW5wdXRTdGF0ZQorMDI0MyBzdGRjYWxsIEdldElucHV0U3RhdGUoKSBHZXRJbnB1dFN0YXRlMzIKIDAyNDQgc3RkY2FsbCBHZXRJbnRlcm5hbFdpbmRvd1Bvcyhsb25nIHB0ciBwdHIpIEdldEludGVybmFsV2luZG93UG9zMzIKLTAyNDUgc3R1YiBHZXRLQkNvZGVQYWdlCiswMjQ1IHN0ZGNhbGwgR2V0S0JDb2RlUGFnZSgpIEdldEtCQ29kZVBhZ2UzMgogMDI0NiBzdGRjYWxsIEdldEtleU5hbWVUZXh0QShsb25nIHB0ciBsb25nKSBHZXRLZXlOYW1lVGV4dDMyQQogMDI0NyBzdGRjYWxsIEdldEtleU5hbWVUZXh0Vyhsb25nIHB0ciBsb25nKSBHZXRLZXlOYW1lVGV4dDMyVwogMDI0OCBzdGRjYWxsIEdldEtleVN0YXRlKGxvbmcpIEdldEtleVN0YXRlMzIKQEAgLTI1OSw3ICsyNTksNyBAQAogMDI1MiBzdHViIEdldEtleWJvYXJkTGF5b3V0TmFtZVcKIDAyNTMgc3RkY2FsbCBHZXRLZXlib2FyZFN0YXRlKHB0cikgR2V0S2V5Ym9hcmRTdGF0ZQogMDI1NCBzdGRjYWxsIEdldEtleWJvYXJkVHlwZShsb25nKSBHZXRLZXlib2FyZFR5cGUzMgotMDI1NSBzdGRjYWxsIEdldExhc3RBY3RpdmVQb3B1cChsb25nKSBHZXRMYXN0QWN0aXZlUG9wdXAKKzAyNTUgc3RkY2FsbCBHZXRMYXN0QWN0aXZlUG9wdXAobG9uZykgR2V0TGFzdEFjdGl2ZVBvcHVwMzIKIDAyNTYgc3RkY2FsbCBHZXRNZW51KGxvbmcpIEdldE1lbnUzMgogMDI1NyBzdGRjYWxsIEdldE1lbnVDaGVja01hcmtEaW1lbnNpb25zKCkgR2V0TWVudUNoZWNrTWFya0RpbWVuc2lvbnMKIDAyNTggc3R1YiBHZXRNZW51Q29udGV4dEhlbHBJZApAQCAtMjc0LDEzICsyNzQsMTMgQEAKIDAyNjcgc3RkY2FsbCBHZXRNZW51U3RyaW5nQShsb25nIGxvbmcgcHRyIGxvbmcgbG9uZykgR2V0TWVudVN0cmluZzMyQQogMDI2OCBzdGRjYWxsIEdldE1lbnVTdHJpbmdXKGxvbmcgbG9uZyBwdHIgbG9uZyBsb25nKSBHZXRNZW51U3RyaW5nMzJXCiAwMjY5IHN0ZGNhbGwgR2V0TWVzc2FnZUEocHRyIGxvbmcgbG9uZyBsb25nKSBVU0VSMzJfR2V0TWVzc2FnZUEKLTAyNzAgc3R1YiBHZXRNZXNzYWdlRXh0cmFJbmZvCiswMjcwIHN0ZGNhbGwgR2V0TWVzc2FnZUV4dHJhSW5mbygpIEdldE1lc3NhZ2VFeHRyYUluZm8KIDAyNzEgc3RkY2FsbCBHZXRNZXNzYWdlUG9zKCkgR2V0TWVzc2FnZVBvcwotMDI3MiBzdHViIEdldE1lc3NhZ2VUaW1lCiswMjcyIHN0ZGNhbGwgR2V0TWVzc2FnZVRpbWUoKSBHZXRNZXNzYWdlVGltZQogMDI3MyBzdGRjYWxsIEdldE1lc3NhZ2VXKHB0ciBsb25nIGxvbmcgbG9uZykgVVNFUjMyX0dldE1lc3NhZ2VBCiAwMjc0IHN0ZGNhbGwgR2V0TmV4dERsZ0dyb3VwSXRlbShsb25nIGxvbmcgbG9uZykgR2V0TmV4dERsZ0dyb3VwSXRlbTMyCiAwMjc1IHN0ZGNhbGwgR2V0TmV4dERsZ1RhYkl0ZW0obG9uZyBsb25nIGxvbmcpIEdldE5leHREbGdUYWJJdGVtMzIKLTAyNzYgc3R1YiBHZXRPcGVuQ2xpcGJvYXJkV2luZG93CiswMjc2IHN0ZGNhbGwgR2V0T3BlbkNsaXBib2FyZFdpbmRvdygpIEdldE9wZW5DbGlwYm9hcmRXaW5kb3czMgogMDI3NyBzdGRjYWxsIEdldFBhcmVudChsb25nKSBHZXRQYXJlbnQzMgogMDI3OCBzdHViIEdldFByaW9yaXR5Q2xpcGJvYXJkRm9ybWF0CiAwMjc5IHN0dWIgR2V0UHJvY2Vzc1dpbmRvd1N0YXRpb24KQEAgLTI5MiwxMiArMjkyLDEyIEBACiAwMjg1IHN0ZGNhbGwgR2V0U2Nyb2xsUmFuZ2UobG9uZyBsb25nIHB0ciBwdHIpIEdldFNjcm9sbFJhbmdlMzIKIDAyODYgcmV0dXJuIEdldFNoZWxsV2luZG93IDAgMAogMDI4NyBzdGRjYWxsIEdldFN1Yk1lbnUobG9uZyBsb25nKSBHZXRTdWJNZW51MzIKLTAyODggc3RkY2FsbCBHZXRTeXNDb2xvcihsb25nKSBHZXRTeXNDb2xvcgorMDI4OCBzdGRjYWxsIEdldFN5c0NvbG9yKGxvbmcpIEdldFN5c0NvbG9yMzIKIDAyODkgc3RkY2FsbCBHZXRTeXNDb2xvckJydXNoKGxvbmcpIEdldFN5c0NvbG9yQnJ1c2gzMgogMDI5MCBzdGRjYWxsIEdldFN5c3RlbU1lbnUobG9uZyBsb25nKSBHZXRTeXN0ZW1NZW51MzIKLTAyOTEgc3RkY2FsbCBHZXRTeXN0ZW1NZXRyaWNzKGxvbmcpIEdldFN5c3RlbU1ldHJpY3MKLTAyOTIgc3RkY2FsbCBHZXRUYWJiZWRUZXh0RXh0ZW50QShsb25nIHB0ciBsb25nIGxvbmcgcHRyKSBHZXRUYWJiZWRUZXh0RXh0ZW50Ci0wMjkzIHN0dWIgR2V0VGFiYmVkVGV4dEV4dGVudFcKKzAyOTEgc3RkY2FsbCBHZXRTeXN0ZW1NZXRyaWNzKGxvbmcpIEdldFN5c3RlbU1ldHJpY3MzMgorMDI5MiBzdGRjYWxsIEdldFRhYmJlZFRleHRFeHRlbnRBKGxvbmcgcHRyIGxvbmcgbG9uZyBwdHIpIEdldFRhYmJlZFRleHRFeHRlbnQzMkEKKzAyOTMgc3RkY2FsbCBHZXRUYWJiZWRUZXh0RXh0ZW50Vyhsb25nIHB0ciBsb25nIGxvbmcgcHRyKSBHZXRUYWJiZWRUZXh0RXh0ZW50MzJXCiAwMjk0IHN0dWIgR2V0VGhyZWFkRGVza3RvcAogMDI5NSBzdGRjYWxsIEdldFRvcFdpbmRvdyhsb25nKSBHZXRUb3BXaW5kb3czMgogMDI5NiBzdGRjYWxsIEdldFVwZGF0ZVJlY3QobG9uZyBwdHIgbG9uZykgR2V0VXBkYXRlUmVjdDMyCkBAIC0zMTgsMTIgKzMxOCwxMiBAQAogMDMxMSBzdGRjYWxsIEdldFdpbmRvd1RleHRXKGxvbmcgcHRyIGxvbmcpIEdldFdpbmRvd1RleHQzMlcKIDAzMTIgc3RkY2FsbCBHZXRXaW5kb3dUaHJlYWRQcm9jZXNzSWQobG9uZyBwdHIpIEdldFdpbmRvd1RocmVhZFByb2Nlc3NJZAogMDMxMyBzdGRjYWxsIEdldFdpbmRvd1dvcmQobG9uZyBsb25nKSBHZXRXaW5kb3dXb3JkCi0wMzE0IHN0dWIgR3JheVN0cmluZ0EKLTAzMTUgc3R1YiBHcmF5U3RyaW5nVwotMDMxNiBzdGRjYWxsIEhpZGVDYXJldChsb25nKSBIaWRlQ2FyZXQKKzAzMTQgc3RkY2FsbCBHcmF5U3RyaW5nQShsb25nIGxvbmcgcHRyIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nKSBUSFVOS19HcmF5U3RyaW5nMzJBCiswMzE1IHN0ZGNhbGwgR3JheVN0cmluZ1cobG9uZyBsb25nIHB0ciBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZykgVEhVTktfR3JheVN0cmluZzMyVworMDMxNiBzdGRjYWxsIEhpZGVDYXJldChsb25nKSBIaWRlQ2FyZXQzMgogMDMxNyBzdGRjYWxsIEhpbGl0ZU1lbnVJdGVtKGxvbmcgbG9uZyBsb25nIGxvbmcpIEhpbGl0ZU1lbnVJdGVtMzIKIDAzMTggc3R1YiBJbXBlcnNvbmF0ZURkZUNsaWVudFdpbmRvdwotMDMxOSBzdHViIEluU2VuZE1lc3NhZ2UKKzAzMTkgc3RkY2FsbCBJblNlbmRNZXNzYWdlKCkgSW5TZW5kTWVzc2FnZTMyCiAwMzIwIHN0ZGNhbGwgSW5mbGF0ZVJlY3QocHRyIGxvbmcgbG9uZykgSW5mbGF0ZVJlY3QzMgogMDMyMSBzdGRjYWxsIEluc2VydE1lbnVBKGxvbmcgbG9uZyBsb25nIGxvbmcgcHRyKSBJbnNlcnRNZW51MzJBCiAwMzIyIHN0dWIgSW5zZXJ0TWVudUl0ZW1BCkBAIC0zNDMsNyArMzQzLDcgQEAKIDAzMzYgc3RkY2FsbCBJc0NoYXJVcHBlckEobG9uZykgSXNDaGFyVXBwZXIzMkEKIDAzMzcgc3RkY2FsbCBJc0NoYXJVcHBlclcobG9uZykgSXNDaGFyVXBwZXIzMlcKIDAzMzggc3RkY2FsbCBJc0NoaWxkKGxvbmcgbG9uZykgSXNDaGlsZDMyCi0wMzM5IHN0ZGNhbGwgSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUobG9uZykgSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUKKzAzMzkgc3RkY2FsbCBJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZShsb25nKSBJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZTMyCiAwMzQwIHN0dWIgSXNEaWFsb2dNZXNzYWdlCiAwMzQxIHN0ZGNhbGwgSXNEaWFsb2dNZXNzYWdlQShsb25nIHB0cikgSXNEaWFsb2dNZXNzYWdlMzJBCiAwMzQyIHN0ZGNhbGwgSXNEaWFsb2dNZXNzYWdlVyhsb25nIHB0cikgSXNEaWFsb2dNZXNzYWdlMzJXCkBAIC0zOTMsNyArMzkzLDcgQEAKIDAzODYgc3R1YiBNZW51SXRlbUZyb21Qb2ludAogMDM4NyBzdHViIE1lbnVXaW5kb3dQcm9jQQogMDM4OCBzdHViIE1lbnVXaW5kb3dQcm9jVwotMDM4OSBzdGRjYWxsIE1lc3NhZ2VCZWVwKGxvbmcpIE1lc3NhZ2VCZWVwCiswMzg5IHN0ZGNhbGwgTWVzc2FnZUJlZXAobG9uZykgTWVzc2FnZUJlZXAzMgogMDM5MCBzdGRjYWxsIE1lc3NhZ2VCb3hBKGxvbmcgcHRyIHB0ciBsb25nKSBNZXNzYWdlQm94MzJBCiAwMzkxIHN0ZGNhbGwgTWVzc2FnZUJveEV4QShsb25nIHB0ciBwdHIgbG9uZyBsb25nKSBNZXNzYWdlQm94RXgzMkEKIDAzOTIgc3RkY2FsbCBNZXNzYWdlQm94RXhXKGxvbmcgcHRyIHB0ciBsb25nIGxvbmcpIE1lc3NhZ2VCb3hFeDMyVwpAQCAtNDEwLDEwICs0MTAsMTAgQEAKIDA0MDMgc3RkY2FsbCBPZW1Ub0NoYXJCdWZmVyhwdHIgcHRyIGxvbmcpIE9lbVRvQ2hhckJ1ZmYzMlcKIDA0MDQgc3RkY2FsbCBPZW1Ub0NoYXJXKHB0ciBwdHIpIE9lbVRvQ2hhcjMyVwogMDQwNSBzdGRjYWxsIE9mZnNldFJlY3QocHRyIGxvbmcgbG9uZykgT2Zmc2V0UmVjdDMyCi0wNDA2IHN0ZGNhbGwgT3BlbkNsaXBib2FyZChsb25nKSBPcGVuQ2xpcGJvYXJkCiswNDA2IHN0ZGNhbGwgT3BlbkNsaXBib2FyZChsb25nKSBPcGVuQ2xpcGJvYXJkMzIKIDA0MDcgc3R1YiBPcGVuRGVza3RvcEEKIDA0MDggc3R1YiBPcGVuRGVza3RvcFcKLTA0MDkgc3R1YiBPcGVuSWNvbgorMDQwOSBzdGRjYWxsIE9wZW5JY29uKGxvbmcpIE9wZW5JY29uMzIKIDA0MTAgc3R1YiBPcGVuSW5wdXREZXNrdG9wCiAwNDExIHN0dWIgT3BlbldpbmRvd1N0YXRpb25BCiAwNDEyIHN0dWIgT3BlbldpbmRvd1N0YXRpb25XCkBAIC00MjQsNyArNDI0LDcgQEAKIDA0MTcgc3R1YiBQbGF5U291bmRFdmVudAogMDQxOCBzdGRjYWxsIFBvc3RNZXNzYWdlQShsb25nIGxvbmcgbG9uZyBsb25nKSBQb3N0TWVzc2FnZQogMDQxOSBzdGRjYWxsIFBvc3RNZXNzYWdlVyhsb25nIGxvbmcgbG9uZyBsb25nKSBQb3N0TWVzc2FnZQotMDQyMCBzdGRjYWxsIFBvc3RRdWl0TWVzc2FnZShsb25nKSBQb3N0UXVpdE1lc3NhZ2UKKzA0MjAgc3RkY2FsbCBQb3N0UXVpdE1lc3NhZ2UobG9uZykgUG9zdFF1aXRNZXNzYWdlMzIKIDA0MjEgc3R1YiBQb3N0VGhyZWFkTWVzc2FnZUEKIDA0MjIgc3R1YiBQb3N0VGhyZWFkTWVzc2FnZVcKIDA0MjMgc3RkY2FsbCBQdEluUmVjdChwdHIgbG9uZyBsb25nKSBQdEluUmVjdDMyCkBAIC00NTEsNyArNDUxLDcgQEAKIDA0NDQgc3R1YiBSZXNldERpc3BsYXkKIDA0NDUgc3R1YiBSZXVzZURERWxQYXJhbQogMDQ0NiBzdGRjYWxsIFNjcmVlblRvQ2xpZW50KGxvbmcgcHRyKSBTY3JlZW5Ub0NsaWVudDMyCi0wNDQ3IHN0dWIgU2Nyb2xsQ2hpbGRyZW4KKzA0NDcgc3RkY2FsbCBTY3JvbGxDaGlsZHJlbihsb25nIGxvbmcgbG9uZyBsb25nKSBTY3JvbGxDaGlsZHJlbjMyCiAwNDQ4IHN0ZGNhbGwgU2Nyb2xsREMobG9uZyBsb25nIGxvbmcgcHRyIHB0ciBsb25nIHB0cikgU2Nyb2xsREMzMgogMDQ0OSBzdGRjYWxsIFNjcm9sbFdpbmRvdyhsb25nIGxvbmcgbG9uZyBwdHIgcHRyKSBTY3JvbGxXaW5kb3czMgogMDQ1MCBzdGRjYWxsIFNjcm9sbFdpbmRvd0V4KGxvbmcgbG9uZyBsb25nIHB0ciBwdHIgbG9uZyBwdHIgbG9uZykgU2Nyb2xsV2luZG93RXgzMgpAQCAtNDczLDE3ICs0NzMsMTcgQEAKIDA0NjYgc3RkY2FsbCBTZXRDbGFzc0xvbmdBKGxvbmcgbG9uZyBsb25nKSBTZXRDbGFzc0xvbmczMkEKIDA0Njcgc3RkY2FsbCBTZXRDbGFzc0xvbmdXKGxvbmcgbG9uZyBsb25nKSBTZXRDbGFzc0xvbmczMlcKIDA0Njggc3RkY2FsbCBTZXRDbGFzc1dvcmQobG9uZyBsb25nIGxvbmcpIFNldENsYXNzV29yZAotMDQ2OSBzdHViIFNldENsaXBib2FyZERhdGEKLTA0NzAgc3RkY2FsbCBTZXRDbGlwYm9hcmRWaWV3ZXIobG9uZykgU2V0Q2xpcGJvYXJkVmlld2VyCi0wNDcxIAlzdGRjYWxsIFNldEN1cnNvcihsb25nKSBTZXRDdXJzb3IKKzA0Njkgc3RkY2FsbCBTZXRDbGlwYm9hcmREYXRhKGxvbmcgbG9uZykgU2V0Q2xpcGJvYXJkRGF0YQorMDQ3MCBzdGRjYWxsIFNldENsaXBib2FyZFZpZXdlcihsb25nKSBTZXRDbGlwYm9hcmRWaWV3ZXIzMgorMDQ3MSBzdGRjYWxsIFNldEN1cnNvcihsb25nKSBTZXRDdXJzb3IzMgogMDQ3MiBzdHViIFNldEN1cnNvckNvbnRlbnRzCi0wNDczIHN0dWIgU2V0Q3Vyc29yUG9zCiswNDczIHN0ZGNhbGwgU2V0Q3Vyc29yUG9zKGxvbmcgbG9uZykgU2V0Q3Vyc29yUG9zMzIKIDA0NzQgc3R1YiBTZXREZWJ1Z0Vycm9yTGV2ZWwKIDA0NzUgc3RkY2FsbCBTZXREZXNrV2FsbFBhcGVyKHB0cikgU2V0RGVza1dhbGxQYXBlcjMyCiAwNDc2IHN0ZGNhbGwgU2V0RGxnSXRlbUludChsb25nIGxvbmcgbG9uZyBsb25nKSBTZXREbGdJdGVtSW50MzIKIDA0Nzcgc3RkY2FsbCBTZXREbGdJdGVtVGV4dEEobG9uZyBsb25nIHB0cikgU2V0RGxnSXRlbVRleHQzMkEKIDA0Nzggc3RkY2FsbCBTZXREbGdJdGVtVGV4dFcobG9uZyBsb25nIHB0cikgU2V0RGxnSXRlbVRleHQzMlcKLTA0Nzkgc3R1YiBTZXREb3VibGVDbGlja1RpbWUKKzA0Nzkgc3RkY2FsbCBTZXREb3VibGVDbGlja1RpbWUobG9uZykgU2V0RG91YmxlQ2xpY2tUaW1lMzIKIDA0ODAgc3RkY2FsbCBTZXRGb2N1cyhsb25nKSBTZXRGb2N1czMyCiAwNDgxIHJldHVybiBTZXRGb3JlZ3JvdW5kV2luZG93IDQgMAogMDQ4MiBzdGRjYWxsIFNldEludGVybmFsV2luZG93UG9zKGxvbmcgbG9uZyBwdHIgcHRyKSBTZXRJbnRlcm5hbFdpbmRvd1BvczMyCkBAIC00OTcsOCArNDk3LDggQEAKIDA0OTAgc3R1YiBTZXRNZW51SXRlbUluZm9BCiAwNDkxIHN0dWIgU2V0TWVudUl0ZW1JbmZvVwogMDQ5MiBzdHViIFNldE1lc3NhZ2VFeHRyYUluZm8KLTA0OTMgc3RkY2FsbCAgU2V0TWVzc2FnZVF1ZXVlKGxvbmcpIFNldE1lc3NhZ2VRdWV1ZQotMDQ5NCBzdGRjYWxsIFNldFBhcmVudChsb25nIGxvbmcpIFNldFBhcmVudAorMDQ5MyBzdGRjYWxsIFNldE1lc3NhZ2VRdWV1ZShsb25nKSBTZXRNZXNzYWdlUXVldWUzMgorMDQ5NCBzdGRjYWxsIFNldFBhcmVudChsb25nIGxvbmcpIFNldFBhcmVudDMyCiAwNDk1IHN0dWIgU2V0UHJvY2Vzc1dpbmRvd1N0YXRpb24KIDA0OTYgc3RkY2FsbCBTZXRQcm9wQShsb25nIHB0ciBsb25nKSBTZXRQcm9wMzJBCiAwNDk3IHN0ZGNhbGwgU2V0UHJvcFcobG9uZyBwdHIgbG9uZykgU2V0UHJvcDMyVwpAQCAtNTA4LDcgKzUwOCw3IEBACiAwNTAxIHN0ZGNhbGwgU2V0U2Nyb2xsUG9zKGxvbmcgbG9uZyBsb25nIGxvbmcpIFNldFNjcm9sbFBvczMyCiAwNTAyIHN0ZGNhbGwgU2V0U2Nyb2xsUmFuZ2UobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nKSBTZXRTY3JvbGxSYW5nZTMyCiAwNTAzIHN0dWIgU2V0U2hlbGxXaW5kb3cKLTA1MDQgc3R1YiBTZXRTeXNDb2xvcnMKKzA1MDQgc3RkY2FsbCBTZXRTeXNDb2xvcnMobG9uZyBwdHIgcHRyKSBTZXRTeXNDb2xvcnMzMgogMDUwNSBzdHViIFNldFN5c0NvbG9yc1RlbXAKIDA1MDYgc3R1YiBTZXRTeXN0ZW1DdXJzb3IKIDA1MDcgc3RkY2FsbCBTZXRTeXN0ZW1NZW51KGxvbmcgbG9uZykgU2V0U3lzdGVtTWVudTMyCkBAIC01MzIsMjQgKzUzMiwyNCBAQAogMDUyNSBzdGRjYWxsIFNldFdpbmRvd3NIb29rRXhBKGxvbmcgbG9uZyBsb25nIGxvbmcpIFNldFdpbmRvd3NIb29rRXgzMkEKIDA1MjYgc3RkY2FsbCBTZXRXaW5kb3dzSG9va0V4Vyhsb25nIGxvbmcgbG9uZyBsb25nKSBTZXRXaW5kb3dzSG9va0V4MzJXCiAwNTI3IHN0ZGNhbGwgU2V0V2luZG93c0hvb2tXKGxvbmcgbG9uZyBsb25nIGxvbmcpIFNldFdpbmRvd3NIb29rMzJXCi0wNTI4IHN0ZGNhbGwgU2hvd0NhcmV0KGxvbmcpIFNob3dDYXJldAotMDUyOSBzdGRjYWxsIFNob3dDdXJzb3IobG9uZykgU2hvd0N1cnNvcgotMDUzMCBzdHViIFNob3dPd25lZFBvcHVwcworMDUyOCBzdGRjYWxsIFNob3dDYXJldChsb25nKSBTaG93Q2FyZXQzMgorMDUyOSBzdGRjYWxsIFNob3dDdXJzb3IobG9uZykgU2hvd0N1cnNvcjMyCiswNTMwIHN0ZGNhbGwgU2hvd093bmVkUG9wdXBzKGxvbmcgbG9uZykgU2hvd093bmVkUG9wdXBzMzIKIDA1MzEgc3RkY2FsbCBTaG93U2Nyb2xsQmFyKGxvbmcgbG9uZyBsb25nKSBTaG93U2Nyb2xsQmFyMzIKIDA1MzIgc3R1YiBTaG93U3RhcnRHbGFzcwogMDUzMyBzdGRjYWxsIFNob3dXaW5kb3cobG9uZyBsb25nKSBTaG93V2luZG93MzIKIDA1MzQgc3R1YiBTaG93V2luZG93QXN5bmMKIDA1MzUgc3RkY2FsbCBTdWJ0cmFjdFJlY3QocHRyIHB0ciBwdHIpIFN1YnRyYWN0UmVjdDMyCi0wNTM2IHN0ZGNhbGwgU3dhcE1vdXNlQnV0dG9uKGxvbmcpIFN3YXBNb3VzZUJ1dHRvbgorMDUzNiBzdGRjYWxsIFN3YXBNb3VzZUJ1dHRvbihsb25nKSBTd2FwTW91c2VCdXR0b24zMgogMDUzNyBzdHViIFN3aXRjaERlc2t0b3AKIDA1Mzggc3R1YiBTd2l0Y2hUb1RoaXNXaW5kb3cKIDA1Mzkgc3RkY2FsbCBTeXN0ZW1QYXJhbWV0ZXJzSW5mb0EobG9uZyBsb25nIHB0ciBsb25nKSBTeXN0ZW1QYXJhbWV0ZXJzSW5mbzMyQQogMDU0MCBzdGRjYWxsIFN5c3RlbVBhcmFtZXRlcnNJbmZvVyhsb25nIGxvbmcgcHRyIGxvbmcpIFN5c3RlbVBhcmFtZXRlcnNJbmZvMzJXCi0wNTQxIHN0dWIgVGFiYmVkVGV4dE91dEEKLTA1NDIgc3R1YiBUYWJiZWRUZXh0T3V0VworMDU0MSBzdGRjYWxsIFRhYmJlZFRleHRPdXRBKGxvbmcgbG9uZyBsb25nIHB0ciBsb25nIGxvbmcgcHRyIGxvbmcpIFRhYmJlZFRleHRPdXQzMkEKKzA1NDIgc3RkY2FsbCBUYWJiZWRUZXh0T3V0Vyhsb25nIGxvbmcgbG9uZyBwdHIgbG9uZyBsb25nIHB0ciBsb25nKSBUYWJiZWRUZXh0T3V0MzJXCiAwNTQzIHN0dWIgVGlsZUNoaWxkV2luZG93cwogMDU0NCBzdHViIFRpbGVXaW5kb3dzCi0wNTQ1IHN0ZGNhbGwgVG9Bc2NpaTMyKGxvbmcgbG9uZyBwdHIgcHRyIGxvbmcpIFRvQXNjaWkzMgorMDU0NSBzdGRjYWxsIFRvQXNjaWkobG9uZyBsb25nIHB0ciBwdHIgbG9uZykgVG9Bc2NpaTMyCiAwNTQ2IHN0dWIgVG9Bc2NpaUV4CiAwNTQ3IHN0dWIgVG9Vbmljb2RlCiAwNTQ4IHN0ZGNhbGwgVHJhY2tQb3B1cE1lbnUobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgcHRyKSBUcmFja1BvcHVwTWVudTMyCkBAIC01NTgsOCArNTU4LDggQEAKIDA1NTEgc3RkY2FsbCBUcmFuc2xhdGVBY2NlbGVyYXRvckEobG9uZyBsb25nIHB0cikgVHJhbnNsYXRlQWNjZWxlcmF0b3IzMgogMDU1MiBzdGRjYWxsIFRyYW5zbGF0ZUFjY2VsZXJhdG9yVyhsb25nIGxvbmcgcHRyKSBUcmFuc2xhdGVBY2NlbGVyYXRvcjMyCiAwNTUzIHN0dWIgVHJhbnNsYXRlQ2hhcnNldEluZm8KLTA1NTQgc3R1YiBUcmFuc2xhdGVNRElTeXNBY2NlbAotMDU1NSBzdGRjYWxsIFRyYW5zbGF0ZU1lc3NhZ2UocHRyKSBVU0VSMzJfVHJhbnNsYXRlTWVzc2FnZQorMDU1NCBzdGRjYWxsIFRyYW5zbGF0ZU1ESVN5c0FjY2VsKGxvbmcgcHRyKSBUcmFuc2xhdGVNRElTeXNBY2NlbDMyCiswNTU1IHN0ZGNhbGwgVHJhbnNsYXRlTWVzc2FnZShwdHIpIFRyYW5zbGF0ZU1lc3NhZ2UzMgogMDU1NiBzdGRjYWxsIFVuaG9va1dpbmRvd3NIb29rKGxvbmcgcHRyKSBVbmhvb2tXaW5kb3dzSG9vazMyCiAwNTU3IHN0ZGNhbGwgVW5ob29rV2luZG93c0hvb2tFeChsb25nKSBVbmhvb2tXaW5kb3dzSG9va0V4MzIKIDA1NTggc3RkY2FsbCBVbmlvblJlY3QocHRyIHB0ciBwdHIpIFVuaW9uUmVjdDMyCkBAIC01ODEsNyArNTgxLDcgQEAKIDA1NzQgc3R1YiBWa0tleVNjYW5FeFcKIDA1NzUgc3RkY2FsbCBWa0tleVNjYW5XKGxvbmcpIFZrS2V5U2NhbjMyVwogMDU3NiBzdHViIFdhaXRGb3JJbnB1dElkbGUKLTA1Nzcgc3R1YiBXYWl0TWVzc2FnZQorMDU3NyBzdGRjYWxsIFdhaXRNZXNzYWdlKCkgV2FpdE1lc3NhZ2UKIDA1Nzggc3RkY2FsbCBXaW5IZWxwQShsb25nIHB0ciBsb25nIGxvbmcpIFdpbkhlbHAzMkEKIDA1Nzkgc3RkY2FsbCBXaW5IZWxwVyhsb25nIHB0ciBsb25nIGxvbmcpIFdpbkhlbHAzMlcKIDA1ODAgc3RkY2FsbCBXaW5kb3dGcm9tREMobG9uZykgV2luZG93RnJvbURDMzIKQEAgLTU5NCwxMiArNTk0LDEyIEBACiAwNTg3IHN0ZGNhbGwgd3ZzcHJpbnRmVyhwdHIgcHRyIHB0cikgd3ZzcHJpbnRmMzJXCiAjbGF0ZSBhZGRpdGlvbnMKIDA1ODggc3R1YiBDaGFuZ2VEaXNwbGF5U2V0dGluZ3NBCi0wNTg4IHN0dWIgQ2hhbmdlRGlzcGxheVNldHRpbmdzVwotMDU4OCBzdHViIEVudW1EZXNrdG9wV2luZG93cwotMDU4OCBzdHViIEVudW1EaXNwbGF5U2V0dGluZ3NBCi0wNTg4IHN0dWIgRW51bURpc3BsYXlTZXR0aW5nc1cKLTA1ODggc3R1YiBHZXRXaW5kb3dSZ24KLTA1ODggc3R1YiBNYXBWaXJ0dWFsS2V5RXhXCi0wNTg4IHN0dWIgUmVnaXN0ZXJTZXJ2aWNlc1Byb2Nlc3MKLTA1ODggc3R1YiBTZXRXaW5kb3dSZ24KLTA1ODggc3R1YiBUb1VuaWNvZGVFeAorMDU4OSBzdHViIENoYW5nZURpc3BsYXlTZXR0aW5nc1cKKzA1OTAgc3R1YiBFbnVtRGVza3RvcFdpbmRvd3MKKzA1OTEgc3R1YiBFbnVtRGlzcGxheVNldHRpbmdzQQorMDU5MiBzdHViIEVudW1EaXNwbGF5U2V0dGluZ3NXCiswNTkzIHN0dWIgR2V0V2luZG93UmduCiswNTk0IHN0dWIgTWFwVmlydHVhbEtleUV4VworMDU5NSBzdHViIFJlZ2lzdGVyU2VydmljZXNQcm9jZXNzCiswNTk2IHN0dWIgU2V0V2luZG93UmduCiswNTk3IHN0dWIgVG9Vbmljb2RlRXgKZGlmZiAtLWdpdCBhL2lmMTYzMi93c29jazMyLnNwZWMgYi9pZjE2MzIvd3NvY2szMi5zcGVjCmluZGV4IDg1MDNjM2QuLmY4Njg2OTAgMTAwNjQ0Ci0tLSBhL2lmMTYzMi93c29jazMyLnNwZWMKKysrIGIvaWYxNjMyL3dzb2NrMzIuc3BlYwpAQCAtOSwxNCArOSwxNCBAQAogMDA1IHN0dWIgZ2V0cGVlcm5hbWUKIDAwNiBzdHViIGdldHNvY2tuYW1lCiAwMDcgc3R1YiBnZXRzb2Nrb3B0Ci0wMDggc3RkY2FsbCBodG9ubChsb25nKSBodG9ubAotMDA5IHN0ZGNhbGwgaHRvbnMobG9uZykgaHRvbnMKKzAwOCBzdGRjYWxsIGh0b25sKGxvbmcpIFdJTlNPQ0tfaHRvbmwKKzAwOSBzdGRjYWxsIGh0b25zKGxvbmcpIFdJTlNPQ0tfaHRvbnMKIDAxMCBzdGRjYWxsIGluZXRfYWRkcihwdHIpIGluZXRfYWRkcgogMDExIHN0ZGNhbGwgaW5ldF9udG9hKHB0cikgaW5ldF9udG9hCiAwMTIgc3R1YiBpb2N0bHNvY2tldAogMDEzIHN0dWIgbGlzdGVuCi0wMTQgc3R1YiBudG9obAotMDE1IHN0ZGNhbGwgbnRvaHMobG9uZykgbnRvaHMKKzAxNCBzdGRjYWxsIG50b2hsKGxvbmcpIFdJTlNPQ0tfbnRvaGwKKzAxNSBzdGRjYWxsIG50b2hzKGxvbmcpIFdJTlNPQ0tfbnRvaHMKIDAxNiBzdHViIHJlY3YKIDAxNyBzdHViIHJlY3Zmcm9tCiAwMTggc3R1YiBzZWxlY3QKQEAgLTI0LDcgKzI0LDcgQEAKIDAyMCBzdHViIHNlbmR0bwogMDIxIHN0dWIgc2V0c29ja29wdAogMDIyIHN0dWIgc2h1dGRvd24KLTAyMyBzdHViIHNvY2tldAorMDIzIHN0ZGNhbGwgc29ja2V0KGxvbmcgbG9uZyBsb25nKSBXSU5TT0NLX3NvY2tldAogMDUxIHN0ZGNhbGwgZ2V0aG9zdGJ5YWRkcihwdHIgbG9uZyBsb25nKSBnZXRob3N0YnlhZGRyCiAwNTIgc3RkY2FsbCBnZXRob3N0YnluYW1lKHB0cikgZ2V0aG9zdGJ5bmFtZQogMDUzIHN0dWIgZ2V0cHJvdG9ieW5hbWUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY2xpcGJvYXJkLmggYi9pbmNsdWRlL2NsaXBib2FyZC5oCmluZGV4IDE3Y2MzNDAuLjM0ZjNiY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY2xpcGJvYXJkLmgKKysrIGIvaW5jbHVkZS9jbGlwYm9hcmQuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgX19XSU5FX0NMSVBCT0FSRF9ICiAKIHZvaWQgQ0xJUEJPQVJEX1JlYWRTZWxlY3Rpb24oV2luZG93IHcsQXRvbSBwcm9wKTsKLXZvaWQgQ0xJUEJPQVJEX1JlbGVhc2VTZWxlY3Rpb24oV2luZG93IHcsSFdORCBod25kKTsKK3ZvaWQgQ0xJUEJPQVJEX1JlbGVhc2VTZWxlY3Rpb24oV2luZG93IHcsSFdORDMyIGh3bmQpOwogdm9pZCBDTElQQk9BUkRfRGlzT3duKFdORCogcFduZCk7CiBCT09MIENMSVBCT0FSRF9Jc1ByZXNlbnQoV09SRCB3Rm9ybWF0KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb2xvci5oIGIvaW5jbHVkZS9jb2xvci5oCmluZGV4IDhlYWRhOTYuLjFiZDI2OWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29sb3IuaAorKysgYi9pbmNsdWRlL2NvbG9yLmgKQEAgLTEzLDE4ICsxMywxOSBAQAogI2RlZmluZSBQQ19TWVNfUkVTRVJWRUQgMHg0MAkJLyogc3lzdGVtIHBhbGVudHJ5IGlzIG5vdCB0byBiZSBtYXBwZWQgdG8gKi8KICNkZWZpbmUgUENfU1lTX01BUFBFRCAgIDB4MTAJCS8qIGxvZ2ljYWwgcGFsZW50cnkgaXMgYSBkaXJlY3QgYWxpYXMgZm9yIHN5c3RlbSBwYWxlbnRyeSAqLwogCi1leHRlcm4gSFBBTEVUVEUxNiAJQ09MT1JfSW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkCQlDT0xPUl9DbGVhbnVwKHZvaWQpOwotZXh0ZXJuIENPTE9SUkVGCQlDT0xPUl9Ub0xvZ2ljYWwoaW50IHBpeGVsKTsKLWV4dGVybiBpbnQgCQlDT0xPUl9Ub1BoeXNpY2FsKCBEQyAqZGMsIENPTE9SUkVGIGNvbG9yICk7Ci1leHRlcm4gaW50IAkJQ09MT1JfU2V0TWFwcGluZyggUEFMRVRURU9CSiogcGFsLCBCT09MMzIgbWFwT25seSApOwotZXh0ZXJuIEJPT0wzMiAJCUNPTE9SX0lzU29saWQoIENPTE9SUkVGIGNvbG9yICk7Ci1leHRlcm4gQ29sb3JtYXAJCUNPTE9SX0dldENvbG9ybWFwKCk7Ci1leHRlcm4gVUlOVDE2CQlDT0xPUl9HZXRTeXN0ZW1QYWxldHRlU2l6ZSgpOwotZXh0ZXJuIFVJTlQxNgkJQ09MT1JfR2V0U3lzdGVtUGFsZXR0ZUZsYWdzKCk7CitleHRlcm4gSFBBTEVUVEUxNiBDT0xPUl9Jbml0KHZvaWQpOworZXh0ZXJuIHZvaWQJICBDT0xPUl9DbGVhbnVwKHZvaWQpOworZXh0ZXJuIENPTE9SUkVGCSAgQ09MT1JfVG9Mb2dpY2FsKGludCBwaXhlbCk7CitleHRlcm4gaW50IAkgIENPTE9SX1RvUGh5c2ljYWwoIERDICpkYywgQ09MT1JSRUYgY29sb3IgKTsKK2V4dGVybiBpbnQgCSAgQ09MT1JfU2V0TWFwcGluZyggUEFMRVRURU9CSiogcGFsLCBCT09MMzIgbWFwT25seSApOworZXh0ZXJuIEJPT0wzMiAJICBDT0xPUl9Jc1NvbGlkKCBDT0xPUlJFRiBjb2xvciApOworZXh0ZXJuIENvbG9ybWFwCSAgQ09MT1JfR2V0Q29sb3JtYXAoKTsKK2V4dGVybiBVSU5UMTYJICBDT0xPUl9HZXRTeXN0ZW1QYWxldHRlU2l6ZSgpOworZXh0ZXJuIFVJTlQxNgkgIENPTE9SX0dldFN5c3RlbVBhbGV0dGVGbGFncygpOwogCi1leHRlcm4gQ09MT1JSRUYJCUNPTE9SX0xvb2t1cE5lYXJlc3RDb2xvciggUEFMRVRURUVOVFJZKiwgaW50LCBDT0xPUlJFRiApOwotZXh0ZXJuIGludAkJQ09MT1JfUGFsZXR0ZUxvb2t1cFBpeGVsKCBQQUxFVFRFRU5UUlkqLCBpbnQsIGludCogLCBDT0xPUlJFRiwgQk9PTDMyICk7CitleHRlcm4gQ09MT1JSRUYJICBDT0xPUl9Mb29rdXBOZWFyZXN0Q29sb3IoIFBBTEVUVEVFTlRSWSosIGludCwgQ09MT1JSRUYgKTsKK2V4dGVybiBpbnQgICAgICAgIENPTE9SX1BhbGV0dGVMb29rdXBQaXhlbCggUEFMRVRURUVOVFJZKiwgaW50LCBpbnQqICwgQ09MT1JSRUYsIEJPT0wzMiApOworZXh0ZXJuIENPTE9SUkVGICAgQ09MT1JfR2V0U3lzdGVtUGFsZXR0ZUVudHJ5KFVJTlQzMik7CiAKIGV4dGVybiBpbnQgCUNPTE9SX21hcEVHQVBpeGVsWzE2XTsKIGV4dGVybiBpbnQqIAlDT0xPUl9QYWxldHRlVG9QaXhlbDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tYm8uaCBiL2luY2x1ZGUvY29tYm8uaAppbmRleCA3ZDc0Nzc2Li42NDUxMWU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbWJvLmgKKysrIGIvaW5jbHVkZS9jb21iby5oCkBAIC03LDE1ICs3LDE1IEBACiAgIFdORCoJICB3bmRTZWxmOwogICBEV09SRCAgIGR3U3R5bGU7CiAgIERXT1JEICAgZHdTdGF0ZTsKLSAgSFdORCAgICBoV25kRWRpdDsKLSAgSFdORCAgICBoV25kTEJveDsKKyAgSFdORDE2ICBoV25kRWRpdDsKKyAgSFdORDE2ICBoV25kTEJveDsKICAgV09SRCAgICBMQm94VG9wOwotICBCT09MICAgIERyb3BEb3duVmlzaWJsZTsKKyAgQk9PTDE2ICBEcm9wRG93blZpc2libGU7CiAgIHNob3J0ICAgTGFzdFNlbDsKICAgUkVDVDE2ICBSZWN0RWRpdDsKICAgUkVDVDE2ICBSZWN0QnV0dG9uOwotICBCT09MICAgIGJSZWRyYXdGbGFnOworICBCT09MMTYgIGJSZWRyYXdGbGFnOwogfSBIRUFEQ09NQk8sKkxQSEVBRENPTUJPOwogCi1MUkVTVUxUIENvbWJvQm94V25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKLUxSRVNVTFQgQ29tYm9MQm94V25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKK0xSRVNVTFQgQ29tYm9Cb3hXbmRQcm9jKEhXTkQxNiBod25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CitMUkVTVUxUIENvbWJvTEJveFduZFByb2MoSFdORDE2IGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbWRsZy5oIGIvaW5jbHVkZS9jb21tZGxnLmgKaW5kZXggZTdhOGVhYi4uMTc2MTk5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb21tZGxnLmgKKysrIGIvaW5jbHVkZS9jb21tZGxnLmgKQEAgLTQ5LDcgKzQ5LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURXT1JECQlsU3RydWN0U2l6ZTsKLQlIV05ECQlod25kT3duZXI7CisJSFdORDE2CQlod25kT3duZXI7CiAJSElOU1RBTkNFMTYJaEluc3RhbmNlOwogCVNFR1BUUgkgICAgICAgIGxwc3RyRmlsdGVyOwogCVNFR1BUUiAgICAgICAgICBscHN0ckN1c3RvbUZpbHRlcjsKQEAgLTc0LDggKzc0LDggQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURXT1JECQlsU3RydWN0U2l6ZTsKLQlIV05ECQlod25kT3duZXI7Ci0JSFdORAkJaEluc3RhbmNlOworCUhXTkQxNgkJaHduZE93bmVyOworCUhXTkQxNgkJaEluc3RhbmNlOwogCUNPTE9SUkVGCXJnYlJlc3VsdDsKIAlDT0xPUlJFRiAgICAgICAqbHBDdXN0Q29sb3JzOwogCURXT1JEIAkJRmxhZ3M7CkBAIC05NSw3ICs5NSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKIAlEV09SRAkJbFN0cnVjdFNpemU7IAkJCS8qIHNpemUgb2YgdGhpcyBzdHJ1Y3QgMHgyMCAqLwotCUhXTkQJCWh3bmRPd25lcjsgCQkJCS8qIGhhbmRsZSB0byBvd25lcidzIHdpbmRvdyAqLworCUhXTkQxNgkJaHduZE93bmVyOyAJCQkJLyogaGFuZGxlIHRvIG93bmVyJ3Mgd2luZG93ICovCiAJSElOU1RBTkNFMTYJaEluc3RhbmNlOyAJCQkJLyogaW5zdGFuY2UgaGFuZGxlIG9mLkVYRSB0aGF0ICAqLwogCQkJCQkJCQkJCS8qCWNvbnRhaW5zIGN1c3QuIGRsZy4gdGVtcGxhdGUgKi8KIAlEV09SRAkJRmxhZ3M7ICAgICAgICAgICAgICAgICAgLyogb25lIG9yIG1vcmUgb2YgdGhlIEZSXz8/ICovCkBAIC0xMzIsNyArMTMyLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURXT1JECQkJbFN0cnVjdFNpemU7Ci0JSFdORAkJCWh3bmRPd25lcjsgICAgICAgICAgLyogY2FsbGVyJ3Mgd2luZG93IGhhbmRsZSAgICovCisJSFdORDE2CQkJaHduZE93bmVyOyAgICAgICAgICAvKiBjYWxsZXIncyB3aW5kb3cgaGFuZGxlICAgKi8KIAlIREMxNiAgICAgICAgICAJICAgICAgICBoREM7ICAgICAgICAgICAgICAgIC8qIHByaW50ZXIgREMvSUMgb3IgTlVMTCAgICAqLwogCVNFR1BUUiAgICAgICAgICAgICAgICAgIGxwTG9nRm9udDsgICAgICAgICAgLyogcHRyLiB0byBhIExPR0ZPTlQgc3RydWN0ICovCiAJc2hvcnQJCQlpUG9pbnRTaXplOyAgICAgICAgIC8qIDEwICogc2l6ZSBpbiBwb2ludHMgb2Ygc2VsZWN0ZWQgZm9udCAqLwpAQCAtMjA1LDcgKzIwNSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKIAlEV09SRCAJCWxTdHJ1Y3RTaXplOwotCUhXTkQgCQlod25kT3duZXI7CisJSFdORDE2IAkJaHduZE93bmVyOwogCUhHTE9CQUwxNiAgICAgICBoRGV2TW9kZTsKIAlIR0xPQkFMMTYgICAgICAgaERldk5hbWVzOwogCUhEQzE2CSAgICAgICAJaERDOwpAQCAtMjg1LDE0ICsyODUsMTQgQEAKIEhXTkQxNiBSZXBsYWNlVGV4dCggU0VHUFRSIGZpbmQpOwogQk9PTCAgQ2hvb3NlRm9udChMUENIT09TRUZPTlQgbHBDaEZvbnQpOwogCi1MUkVTVUxUIEZpbGVPcGVuRGxnUHJvYyhIV05EIGhXbmQsIFVJTlQgd01zZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKLUxSRVNVTFQgRmlsZVNhdmVEbGdQcm9jKEhXTkQgaFduZCwgVUlOVCB3TXNnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOwotTFJFU1VMVCBDb2xvckRsZ1Byb2MoSFdORCBoV25kLCBVSU5UIHdNc2csIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7Ci1MUkVTVUxUIEZpbmRUZXh0RGxnUHJvYyhIV05EIGhXbmQsIFVJTlQgd01zZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKLUxSRVNVTFQgUmVwbGFjZVRleHREbGdQcm9jKEhXTkQgaFduZCwgVUlOVCB3TXNnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOwotTFJFU1VMVCBQcmludERsZ1Byb2MoSFdORCBoV25kLCBVSU5UIHdNc2csIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7Ci1MUkVTVUxUIFByaW50U2V0dXBEbGdQcm9jKEhXTkQgaFduZCwgVUlOVCB3TXNnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOwotTFJFU1VMVCBGb3JtYXRDaGFyRGxnUHJvYyhIV05EIGhXbmQsIFVJTlQgd01zZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKK0xSRVNVTFQgRmlsZU9wZW5EbGdQcm9jKEhXTkQxNiBoV25kLCBVSU5UIHdNc2csIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CitMUkVTVUxUIEZpbGVTYXZlRGxnUHJvYyhIV05EMTYgaFduZCwgVUlOVCB3TXNnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOworTFJFU1VMVCBDb2xvckRsZ1Byb2MoSFdORDE2IGhXbmQsIFVJTlQgd01zZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKK0xSRVNVTFQgRmluZFRleHREbGdQcm9jKEhXTkQxNiBoV25kLCBVSU5UIHdNc2csIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CitMUkVTVUxUIFJlcGxhY2VUZXh0RGxnUHJvYyhIV05EMTYgaFduZCwgVUlOVCB3TXNnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOworTFJFU1VMVCBQcmludERsZ1Byb2MoSFdORDE2IGhXbmQsIFVJTlQgd01zZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKK0xSRVNVTFQgUHJpbnRTZXR1cERsZ1Byb2MoSFdORDE2IGhXbmQsIFVJTlQgd01zZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKK0xSRVNVTFQgRm9ybWF0Q2hhckRsZ1Byb2MoSFdORDE2IGhXbmQsIFVJTlQgd01zZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RkZV9wcm9jLmggYi9pbmNsdWRlL2RkZV9wcm9jLmgKaW5kZXggMjkzOTdkNy4uODQ2OTdjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kZGVfcHJvYy5oCisrKyBiL2luY2x1ZGUvZGRlX3Byb2MuaApAQCAtMzQsNyArMzQsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgV09SRCAgcHJvY19pZHg7CQkvKiBpbmRleCBpbnRvIHdpbmUncyBwcm9jZXNzIHRhYmxlICAqLwotICAgIEhXTkQgIHduZDsJCQkvKiBXaW5kb3cgb24gdGhlIGxvY2FsIHByb2NjZXNzICovCisgICAgSFdORDE2ICB3bmQ7CQkvKiBXaW5kb3cgb24gdGhlIGxvY2FsIHByb2NjZXNzICovCiB9IFdORF9EQVRBOwogZXh0ZXJuIGVudW0gc3RvcF93YWl0X29wIHN0b3Bfd2FpdF9vcDsKIGV4dGVybiBpbnQgaGFkX1NJR1VTUjI7CkBAIC01MSwxMiArNTEsMTIgQEAKIHZvaWQgZGRlX3duZF9zZXR1cCgpOwkJICAgLyogc2V0dXAgRGF0YSBzdHJ1Y3R1cmUgb2YgRERFIHdpbmRvd3MgKi8KIAogLyogU2VuZCBhY2suIHRvIGhuZCBpbmRpY2F0aW5nIHRoYXQgcG9zdGVkL3NlbnQgbXNnLiBnb3QgdG8gZGVzdGluYXRpb24qLwotdm9pZCBkZGVfcHJvY19zZW5kX2FjayhIV05EIHduZCwgQk9PTCB2YWwpOwordm9pZCBkZGVfcHJvY19zZW5kX2FjayhIV05EMTYgd25kLCBCT09MIHZhbCk7CiBCT09MIERERV9Qb3N0TWVzc2FnZSggTVNHMTYgKm1zZyk7CiBCT09MIERERV9TZW5kTWVzc2FnZSggTVNHMTYgKm1zZyk7CiBpbnQgRERFX0dldFJlbW90ZU1lc3NhZ2UoKTsKLXZvaWQgRERFX0Rlc3Ryb3lXaW5kb3coSFdORCBod25kKTsgLyogZGVsZXRlIERERSBpbmZvIHJlZ2FyZGluZyBod25kICovCi12b2lkIERERV9UZXN0RERFKEhXTkQgaHduZCk7CSAgIC8qIGRvIHdlIGhhdmUgZGRlIGhhbmRsaW5nIGluIHRoZSB3aW5kb3cgPyovCit2b2lkIERERV9EZXN0cm95V2luZG93KEhXTkQxNiBod25kKTsgLyogZGVsZXRlIERERSBpbmZvIHJlZ2FyZGluZyBod25kICovCit2b2lkIERERV9UZXN0RERFKEhXTkQxNiBod25kKTsJICAgLyogZG8gd2UgaGF2ZSBkZGUgaGFuZGxpbmcgaW4gdGhlIHdpbmRvdyA/Ki8KIAogI2VuZGlmICAvKiBDT05GSUdfSVBDICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZGVidWcuaCBiL2luY2x1ZGUvZGVidWcuaAppbmRleCAxNGJjOWQwLi43ZGMwMzMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RlYnVnLmgKKysrIGIvaW5jbHVkZS9kZWJ1Zy5oCkBAIC03Myw3ICs3Myw2IEBACiAjdW5kZWYgREVCVUdfU0VORE1TRwogI3VuZGVmIERFQlVHX1NITQogI3VuZGVmIERFQlVHX1NUUkVTUwotI3VuZGVmIERFQlVHX1NZU0NPTE9SCiAjdW5kZWYgREVCVUdfVEFTSwogI3VuZGVmIERFQlVHX1RFWFQKICN1bmRlZiBERUJVR19USU1FUgpAQCAtMTU0LDcgKzE1Myw2IEBACiAjZGVmaW5lIERFQlVHX1NFTkRNU0cKICNkZWZpbmUgREVCVUdfU0hNCiAjZGVmaW5lIERFQlVHX1NUUkVTUwotI2RlZmluZSBERUJVR19TWVNDT0xPUgogI2RlZmluZSBERUJVR19UQVNLCiAjZGVmaW5lIERFQlVHX1RFWFQKICNkZWZpbmUgREVCVUdfVElNRVIKQEAgLTUwNSwxMSArNTAzLDYgQEAKICNlbHNlCiAgICAgMCwKICNlbmRpZgotI2lmZGVmIERFQlVHX1NZU0NPTE9SCi0gICAgMSwKLSNlbHNlCi0gICAgMCwKLSNlbmRpZgogI2lmZGVmIERFQlVHX1RBU0sKICAgICAxLAogI2Vsc2UKQEAgLTE0MzksMjEgKzE0MzIsOCBAQAogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCi0jZGVmaW5lIGRwcmludGZfc3lzY29sb3IgaWYoIWRlYnVnX21zZ19lbmFibGVkWzY3XSkgOyBlbHNlIGZwcmludGYKLSNkZWZpbmUgZGVidWdnaW5nX3N5c2NvbG9yIGRlYnVnX21zZ19lbmFibGVkWzY3XQotI2Vsc2UKLSNpZmRlZiBERUJVR19TWVNDT0xPUgotI2RlZmluZSBkcHJpbnRmX3N5c2NvbG9yIGZwcmludGYKLSNkZWZpbmUgZGVidWdnaW5nX3N5c2NvbG9yIDEKLSNlbHNlCi0jZGVmaW5lIGRwcmludGZfc3lzY29sb3Igd2hpbGUoMCkgZnByaW50ZgotI2RlZmluZSBkZWJ1Z2dpbmdfc3lzY29sb3IgMAotI2VuZGlmCi0jZW5kaWYKLQotI2lmZGVmIERFQlVHX1JVTlRJTUUKLSNkZWZpbmUgZHByaW50Zl90YXNrIGlmKCFkZWJ1Z19tc2dfZW5hYmxlZFs2OF0pIDsgZWxzZSBmcHJpbnRmCi0jZGVmaW5lIGRlYnVnZ2luZ190YXNrIGRlYnVnX21zZ19lbmFibGVkWzY4XQorI2RlZmluZSBkcHJpbnRmX3Rhc2sgaWYoIWRlYnVnX21zZ19lbmFibGVkWzY3XSkgOyBlbHNlIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3Rhc2sgZGVidWdfbXNnX2VuYWJsZWRbNjddCiAjZWxzZQogI2lmZGVmIERFQlVHX1RBU0sKICNkZWZpbmUgZHByaW50Zl90YXNrIGZwcmludGYKQEAgLTE0NjUsOCArMTQ0NSw4IEBACiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKLSNkZWZpbmUgZHByaW50Zl90ZXh0IGlmKCFkZWJ1Z19tc2dfZW5hYmxlZFs2OV0pIDsgZWxzZSBmcHJpbnRmCi0jZGVmaW5lIGRlYnVnZ2luZ190ZXh0IGRlYnVnX21zZ19lbmFibGVkWzY5XQorI2RlZmluZSBkcHJpbnRmX3RleHQgaWYoIWRlYnVnX21zZ19lbmFibGVkWzY4XSkgOyBlbHNlIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3RleHQgZGVidWdfbXNnX2VuYWJsZWRbNjhdCiAjZWxzZQogI2lmZGVmIERFQlVHX1RFWFQKICNkZWZpbmUgZHByaW50Zl90ZXh0IGZwcmludGYKQEAgLTE0NzgsOCArMTQ1OCw4IEBACiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKLSNkZWZpbmUgZHByaW50Zl90aW1lciBpZighZGVidWdfbXNnX2VuYWJsZWRbNzBdKSA7IGVsc2UgZnByaW50ZgotI2RlZmluZSBkZWJ1Z2dpbmdfdGltZXIgZGVidWdfbXNnX2VuYWJsZWRbNzBdCisjZGVmaW5lIGRwcmludGZfdGltZXIgaWYoIWRlYnVnX21zZ19lbmFibGVkWzY5XSkgOyBlbHNlIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3RpbWVyIGRlYnVnX21zZ19lbmFibGVkWzY5XQogI2Vsc2UKICNpZmRlZiBERUJVR19USU1FUgogI2RlZmluZSBkcHJpbnRmX3RpbWVyIGZwcmludGYKQEAgLTE0OTEsOCArMTQ3MSw4IEBACiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKLSNkZWZpbmUgZHByaW50Zl90b29saGVscCBpZighZGVidWdfbXNnX2VuYWJsZWRbNzFdKSA7IGVsc2UgZnByaW50ZgotI2RlZmluZSBkZWJ1Z2dpbmdfdG9vbGhlbHAgZGVidWdfbXNnX2VuYWJsZWRbNzFdCisjZGVmaW5lIGRwcmludGZfdG9vbGhlbHAgaWYoIWRlYnVnX21zZ19lbmFibGVkWzcwXSkgOyBlbHNlIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3Rvb2xoZWxwIGRlYnVnX21zZ19lbmFibGVkWzcwXQogI2Vsc2UKICNpZmRlZiBERUJVR19UT09MSEVMUAogI2RlZmluZSBkcHJpbnRmX3Rvb2xoZWxwIGZwcmludGYKQEAgLTE1MDQsOCArMTQ4NCw4IEBACiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKLSNkZWZpbmUgZHByaW50Zl92ZXIgaWYoIWRlYnVnX21zZ19lbmFibGVkWzcyXSkgOyBlbHNlIGZwcmludGYKLSNkZWZpbmUgZGVidWdnaW5nX3ZlciBkZWJ1Z19tc2dfZW5hYmxlZFs3Ml0KKyNkZWZpbmUgZHByaW50Zl92ZXIgaWYoIWRlYnVnX21zZ19lbmFibGVkWzcxXSkgOyBlbHNlIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3ZlciBkZWJ1Z19tc2dfZW5hYmxlZFs3MV0KICNlbHNlCiAjaWZkZWYgREVCVUdfVkVSCiAjZGVmaW5lIGRwcmludGZfdmVyIGZwcmludGYKQEAgLTE1MTcsOCArMTQ5Nyw4IEBACiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKLSNkZWZpbmUgZHByaW50Zl92eGQgaWYoIWRlYnVnX21zZ19lbmFibGVkWzczXSkgOyBlbHNlIGZwcmludGYKLSNkZWZpbmUgZGVidWdnaW5nX3Z4ZCBkZWJ1Z19tc2dfZW5hYmxlZFs3M10KKyNkZWZpbmUgZHByaW50Zl92eGQgaWYoIWRlYnVnX21zZ19lbmFibGVkWzcyXSkgOyBlbHNlIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3Z4ZCBkZWJ1Z19tc2dfZW5hYmxlZFs3Ml0KICNlbHNlCiAjaWZkZWYgREVCVUdfVlhECiAjZGVmaW5lIGRwcmludGZfdnhkIGZwcmludGYKQEAgLTE1MzAsOCArMTUxMCw4IEBACiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKLSNkZWZpbmUgZHByaW50Zl93aW4gaWYoIWRlYnVnX21zZ19lbmFibGVkWzc0XSkgOyBlbHNlIGZwcmludGYKLSNkZWZpbmUgZGVidWdnaW5nX3dpbiBkZWJ1Z19tc2dfZW5hYmxlZFs3NF0KKyNkZWZpbmUgZHByaW50Zl93aW4gaWYoIWRlYnVnX21zZ19lbmFibGVkWzczXSkgOyBlbHNlIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3dpbiBkZWJ1Z19tc2dfZW5hYmxlZFs3M10KICNlbHNlCiAjaWZkZWYgREVCVUdfV0lOCiAjZGVmaW5lIGRwcmludGZfd2luIGZwcmludGYKQEAgLTE1NDMsOCArMTUyMyw4IEBACiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKLSNkZWZpbmUgZHByaW50Zl93aW4xNmRydiBpZighZGVidWdfbXNnX2VuYWJsZWRbNzVdKSA7IGVsc2UgZnByaW50ZgotI2RlZmluZSBkZWJ1Z2dpbmdfd2luMTZkcnYgZGVidWdfbXNnX2VuYWJsZWRbNzVdCisjZGVmaW5lIGRwcmludGZfd2luMTZkcnYgaWYoIWRlYnVnX21zZ19lbmFibGVkWzc0XSkgOyBlbHNlIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3dpbjE2ZHJ2IGRlYnVnX21zZ19lbmFibGVkWzc0XQogI2Vsc2UKICNpZmRlZiBERUJVR19XSU4xNkRSVgogI2RlZmluZSBkcHJpbnRmX3dpbjE2ZHJ2IGZwcmludGYKQEAgLTE1NTYsOCArMTUzNiw4IEBACiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKLSNkZWZpbmUgZHByaW50Zl93aW4zMiBpZighZGVidWdfbXNnX2VuYWJsZWRbNzZdKSA7IGVsc2UgZnByaW50ZgotI2RlZmluZSBkZWJ1Z2dpbmdfd2luMzIgZGVidWdfbXNnX2VuYWJsZWRbNzZdCisjZGVmaW5lIGRwcmludGZfd2luMzIgaWYoIWRlYnVnX21zZ19lbmFibGVkWzc1XSkgOyBlbHNlIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3dpbjMyIGRlYnVnX21zZ19lbmFibGVkWzc1XQogI2Vsc2UKICNpZmRlZiBERUJVR19XSU4zMgogI2RlZmluZSBkcHJpbnRmX3dpbjMyIGZwcmludGYKQEAgLTE1NjksOCArMTU0OSw4IEBACiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKLSNkZWZpbmUgZHByaW50Zl93aW5zb2NrIGlmKCFkZWJ1Z19tc2dfZW5hYmxlZFs3N10pIDsgZWxzZSBmcHJpbnRmCi0jZGVmaW5lIGRlYnVnZ2luZ193aW5zb2NrIGRlYnVnX21zZ19lbmFibGVkWzc3XQorI2RlZmluZSBkcHJpbnRmX3dpbnNvY2sgaWYoIWRlYnVnX21zZ19lbmFibGVkWzc2XSkgOyBlbHNlIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3dpbnNvY2sgZGVidWdfbXNnX2VuYWJsZWRbNzZdCiAjZWxzZQogI2lmZGVmIERFQlVHX1dJTlNPQ0sKICNkZWZpbmUgZHByaW50Zl93aW5zb2NrIGZwcmludGYKQEAgLTE2NTIsNyArMTYzMiw2IEBACiAgICAgInNlbmRtc2ciLAogICAgICJzaG0iLAogICAgICJzdHJlc3MiLAotICAgICJzeXNjb2xvciIsCiAgICAgInRhc2siLAogICAgICJ0ZXh0IiwKICAgICAidGltZXIiLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ob29rLmggYi9pbmNsdWRlL2hvb2suaAppbmRleCBiOWVhMDU2Li5mM2ZmZDU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2hvb2suaAorKysgYi9pbmNsdWRlL2hvb2suaApAQCAtOSwxMiArOSwyOSBAQAogCiAjaW5jbHVkZSAid2luZG93cy5oIgogCi0jZGVmaW5lIEhPT0tfV0lOMTYJMHgwCi0jZGVmaW5lIEhPT0tfV0lOMzJBCTB4MQotI2RlZmluZSBIT09LX1dJTjMyVwkweDIKKyNkZWZpbmUgSE9PS19XSU4xNgkweDAwCisjZGVmaW5lIEhPT0tfV0lOMzJBCTB4MDEKKyNkZWZpbmUgSE9PS19XSU4zMlcJMHgwMgorI2RlZmluZSBIT09LX0lOVVNFCTB4ODAKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExQQVJBTSAgIGxQYXJhbTsKKyAgIFdQQVJBTTE2IHdQYXJhbTsKKyAgIFVJTlQxNiAgIG1lc3NhZ2U7CisgICBIV05EMTYgICBod25kOworfSBDV1BTVFJVQ1QxNiwgKkxQQ1dQU1RSVUNUMTY7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIExQQVJBTSAgICAgICAgbFBhcmFtOworICBXUEFSQU0zMiAgICAgIHdQYXJhbTsKKyAgVUlOVDMyICAgICAgICBtZXNzYWdlOworICBIV05EMzIgICAgICAgIGh3bmQ7Cit9IENXUFNUUlVDVDMyLCAqTFBDV1BTVFJVQ1QzMjsKIAogLyogaG9vayB0eXBlIG1hc2sgKi8KLSNkZWZpbmUgSE9PS19NQVBUWVBFICgzKQorI2RlZmluZSBIT09LX01BUFRZUEUgKEhPT0tfV0lOMTYgfCBIT09LX1dJTjMyQSB8IEhPT0tfV0lOMzJXKQogCiBleHRlcm4gSE9PS1BST0MxNiBIT09LX0dldFByb2MxNiggSEhPT0sgaGhvb2sgKTsKIGV4dGVybiBCT09MMzIgSE9PS19Jc0hvb2tlZCggSU5UMTYgaWQgKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlzdGJveC5oIGIvaW5jbHVkZS9saXN0Ym94LmgKaW5kZXggZWJlZTgxMy4uZDNmOTdhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saXN0Ym94LmgKKysrIGIvaW5jbHVkZS9saXN0Ym94LmgKQEAgLTI0LDkgKzI0LDkgQEAKIAlXT1JEICAgIERyYXdDdGxUeXBlOwogICAgICAgICBXT1JEICAgIEN0bElEOwogCUxQTElTVFNUUlVDVCBscEZpcnN0OwotCUhXTkQJaFNlbGY7CisJSFdORDE2CWhTZWxmOwogCURXT1JEICAgZHdTdHlsZTsgICAgICAvKiBhZGRlZCBmb3IgQ09NQk9MQk9YIHN0eWxlIGZha2luZyAqLwotCUhXTkQgICAgaFBhcmVudDsKKwlIV05EMTYgIGhQYXJlbnQ7CiAJSEZPTlQxNiBoRm9udDsKIAlCT09MICAgIGJSZWRyYXdGbGFnOwogICAgICAgICBCT09MICAgIEhhc1N0cmluZ3M7CkBAIC0zOSw3ICszOSw3IEBACiB9IEhFQURMSVNULCpMUEhFQURMSVNUOwogCiAvKiBzaGFyZWQgY29kZSBiZXR3ZWVuIGxpc3Rib3ggYW5kIGNvbWJvIGNvbnRyb2xzICovCi1leHRlcm4gdm9pZCBDcmVhdGVMaXN0Qm94U3RydWN0KEhXTkQgaHduZCwgV09SRCBDdGxUeXBlLCBMT05HIHN0eWxlcywgSFdORCBwYXJlbnQpOworZXh0ZXJuIHZvaWQgQ3JlYXRlTGlzdEJveFN0cnVjdChIV05EMTYgaHduZCwgV09SRCBDdGxUeXBlLCBMT05HIHN0eWxlcywgSFdORDE2IHBhcmVudCk7CiBleHRlcm4gdm9pZCBEZXN0cm95TGlzdEJveFN0cnVjdChMUEhFQURMSVNUIGxwaGwpOwogCiBleHRlcm4gdm9pZCBMaXN0Qm94U2VuZE5vdGlmaWNhdGlvbihMUEhFQURMSVNUIGxwaGwsIFdPUkQgY29kZSk7CkBAIC02NCw3ICs2NCw3IEBACiBleHRlcm4gaW50IExpc3RCb3hTZXRJdGVtSGVpZ2h0KExQSEVBRExJU1QgbHBobCwgV09SRCB3SW5kZXgsIGxvbmcgaGVpZ2h0KTsKIGV4dGVybiBpbnQgTGlzdEJveEZpbmROZXh0TWF0Y2goTFBIRUFETElTVCBscGhsLCBXT1JEIHdDaGFyKTsKIAotZXh0ZXJuIHZvaWQgTGlzdEJveERyYXdJdGVtIChIV05EIGh3bmQsIExQSEVBRExJU1QgbHBobCwgSERDMTYgaGRjLAorZXh0ZXJuIHZvaWQgTGlzdEJveERyYXdJdGVtIChIV05EMTYgaHduZCwgTFBIRUFETElTVCBscGhsLCBIREMxNiBoZGMsCiAJCQkgICAgIExQTElTVFNUUlVDVCBscGxzLCBSRUNUMTYgKnJlY3QsIFdPUkQgaXRlbUFjdGlvbiwKIAkJCSAgICAgV09SRCBpdGVtU3RhdGUpOwogZXh0ZXJuIGludCBMaXN0Qm94RmluZE1vdXNlKExQSEVBRExJU1QgbHBobCwgaW50IFgsIGludCBZKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWRpLmggYi9pbmNsdWRlL21kaS5oCmluZGV4IDVkYjc1YjYuLmVlNjE3MWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWRpLmgKKysrIGIvaW5jbHVkZS9tZGkuaApAQCAtMjAsMjcgKzIwLDI3IEBACiAKICNkZWZpbmUgV01fTURJQ0FMQ0NISUxEU0NST0xMICAgMHgxMEFDIC8qIHRoaXMgaXMgZXhhY3RseSB3aGF0IFdpbmRvd3MgdXNlcyAqLwogCi1leHRlcm4gTFJFU1VMVCBNRElDbGllbnRXbmRQcm9jKEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCAKK2V4dGVybiBMUkVTVUxUIE1ESUNsaWVudFduZFByb2MoSFdORDE2IGh3bmQsIFVJTlQgbWVzc2FnZSwgCiAJCQkJV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsgLyogbWRpLmMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgdGFnTURJV0NMCiB7Ci0gIEhXTkQJCSAJIGhDaGlsZDsKKyAgSFdORDE2CSAJIGhDaGlsZDsKICAgc3RydWN0IHRhZ01ESVdDTAkqcHJldjsKIH0gTURJV0NMOwogCiB0eXBlZGVmIHN0cnVjdCAKIHsKICAgICBXT1JEICAgCW5BY3RpdmVDaGlsZHJlbjsKLSAgICBIV05EICAgCWh3bmRDaGlsZE1heGltaXplZDsKLSAgICBIV05EICAgCWh3bmRBY3RpdmVDaGlsZDsKKyAgICBIV05EMTYgICAJaHduZENoaWxkTWF4aW1pemVkOworICAgIEhXTkQxNiAgIAlod25kQWN0aXZlQ2hpbGQ7CiAgICAgSE1FTlUxNiAgCWhXaW5kb3dNZW51OwogICAgIFdPUkQgICAJaWRGaXJzdENoaWxkOwogICAgIFdPUkQJblRvdGFsQ3JlYXRlZDsKICAgICBMUFNUUiAJZnJhbWVUaXRsZTsKICAgICBXT1JEICAgCXNiTmVlZFVwZGF0ZTsKICAgICBXT1JEICAgCXNiUmVjYWxjOwotICAgIEhXTkQgICAJc2VsZjsKKyAgICBIV05EMTYgICAJc2VsZjsKIH0gTURJQ0xJRU5USU5GTzsKIAogI2VuZGlmIC8qIF9fV0lORV9NRElfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9taXNjZW11LmggYi9pbmNsdWRlL21pc2NlbXUuaAppbmRleCAwNGU1MjNhLi41MzI2ODFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL21pc2NlbXUuaAorKysgYi9pbmNsdWRlL21pc2NlbXUuaApAQCAtMTEsMTYgKzExLDE5IEBACiAjaW5jbHVkZSAid2lubnQuaCIKIAogICAvKiBtaXNjZW11L2Rvc21lbS5jICovCi1leHRlcm4gQk9PTDMyIERPU01FTV9Jbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgRE9TTUVNX1RpY2sodm9pZCk7Ci1leHRlcm4gdm9pZCBET1NNRU1fRmlsbEJpb3NTZWdtZW50KHZvaWQpOwotZXh0ZXJuIHZvaWQgRE9TTUVNX0luaXRNZW1vcnlIYW5kbGluZygpOwotZXh0ZXJuIExQVk9JRCBET1NNRU1fUmVhbE1vZGUyTGluZWFyKERXT1JEKTsKLWV4dGVybiBXT1JEIERPU01FTV9BbGxvY1NlbGVjdG9yKFdPUkQpOwogZXh0ZXJuIEhBTkRMRTE2IERPU01FTV9CaW9zU2VnOwotZXh0ZXJuIGNoYXIgKkRPU01FTV9kb3NtZW07CiBleHRlcm4gRFdPUkQgRE9TTUVNX0NvbGxhdGVUYWJsZTsKIAorZXh0ZXJuIEJPT0wzMiBET1NNRU1fSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkICAgRE9TTUVNX0luaXRFeHBvcnRzKEhNT0RVTEUxNik7CitleHRlcm4gdm9pZCAgIERPU01FTV9UaWNrKHZvaWQpOworZXh0ZXJuIFdPUkQgICBET1NNRU1fQWxsb2NTZWxlY3RvcihXT1JEKTsKK2V4dGVybiBMUFZPSUQgRE9TTUVNX0dldEJsb2NrKFVJTlQzMiBzaXplLCBVSU5UMTYqIHApOworZXh0ZXJuIEJPT0wzMiBET1NNRU1fRnJlZUJsb2NrKHZvaWQqIHB0cik7CitleHRlcm4gTFBWT0lEIERPU01FTV9NYXBSZWFsVG9MaW5lYXIoRFdPUkQpOyAvKiByZWFsLW1vZGUgdG8gbGluZWFyICovCitleHRlcm4gTFBWT0lEIERPU01FTV9NYXBEb3NUb0xpbmVhcihVSU5UMzIpOyAvKiBsaW5lYXIgRE9TIHRvIFdpbmUgKi8KK2V4dGVybiBVSU5UMzIgRE9TTUVNX01hcExpbmVhclRvRG9zKExQVk9JRCk7IC8qIGxpbmVhciBXaW5lIHRvIERPUyAqLworCiAvKiBtaXNjZW11L2ludGVycnVwdHMuYyAqLwogZXh0ZXJuIEJPT0wzMiBJTlRfSW5pdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tbXN5c3RlbS5oIGIvaW5jbHVkZS9tbXN5c3RlbS5oCmluZGV4IGNkMWM5YjcuLjRmOTYwMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbW1zeXN0ZW0uaAorKysgYi9pbmNsdWRlL21tc3lzdGVtLmgKQEAgLTUwNiw3ICs1MDYsNyBAQAogVUlOVCBqb3lHZXRQb3MoVUlOVCB1Sm95SUQsIEpPWUlORk8gKiBscEluZm8pOwogVUlOVCBqb3lHZXRUaHJlc2hvbGQoVUlOVCB1Sm95SUQsIFVJTlQgKiBscHVUaHJlc2hvbGQpOwogVUlOVCBqb3lSZWxlYXNlQ2FwdHVyZShVSU5UIHVKb3lJRCk7Ci1VSU5UIGpveVNldENhcHR1cmUoSFdORCBod25kLCBVSU5UIHVKb3lJRCwgVUlOVCB1UGVyaW9kLAorVUlOVCBqb3lTZXRDYXB0dXJlKEhXTkQxNiBod25kLCBVSU5UIHVKb3lJRCwgVUlOVCB1UGVyaW9kLAogICAgIEJPT0wgYkNoYW5nZWQpOwogVUlOVCBqb3lTZXRUaHJlc2hvbGQoVUlOVCB1Sm95SUQsIFVJTlQgdVRocmVzaG9sZCk7CiAKQEAgLTY1Miw3ICs2NTIsNyBAQAogRFdPUkQgbWNpU2VuZENvbW1hbmQgKFVJTlQgdURldmljZUlELCBVSU5UIHVNZXNzYWdlLAogICAgIERXT1JEIGR3UGFyYW0xLCBEV09SRCBkd1BhcmFtMik7CiBEV09SRCBtY2lTZW5kU3RyaW5nIChMUENTVFIgbHBzdHJDb21tYW5kLAotICAgIExQU1RSIGxwc3RyUmV0dXJuU3RyaW5nLCBVSU5UIHVSZXR1cm5MZW5ndGgsIEhXTkQgaHduZENhbGxiYWNrKTsKKyAgICBMUFNUUiBscHN0clJldHVyblN0cmluZywgVUlOVCB1UmV0dXJuTGVuZ3RoLCBIV05EMTYgaHduZENhbGxiYWNrKTsKIFVJTlQgbWNpR2V0RGV2aWNlSUQgKExQQ1NUUiBscHN0ck5hbWUpOwogVUlOVCBtY2lHZXREZXZpY2VJREZyb21FbGVtZW50SUQgKERXT1JEIGR3RWxlbWVudElELAogICAgIExQQ1NUUiBscHN0clR5cGUpOwpAQCAtOTg0LDcgKzk4NCw3IEBACiAJRFdPUkQgICBkd0NhbGxiYWNrOwogCWludCAgICAgblZpcnRLZXk7CiAJVUlOVCAgICB3UmVzZXJ2ZWQwOwotCUhXTkQgICAgaHduZEJyZWFrOworCUhXTkQxNiAgaHduZEJyZWFrOwogCVVJTlQgICAgd1Jlc2VydmVkMTsKIH0gTUNJX0JSRUFLX1BBUk1TLCAqTFBNQ0lfQlJFQUtfUEFSTVM7CiAKQEAgLTEyMTksNyArMTIxOSw3IEBACiAJTFBDU1RSICBscHN0ckVsZW1lbnROYW1lOwogCUxQQ1NUUiAgbHBzdHJBbGlhczsKIAlEV09SRCAgIGR3U3R5bGU7Ci0JSFdORCAgICBoV25kUGFyZW50OworCUhXTkQxNiAgaFduZFBhcmVudDsKIAlVSU5UICAgIHdSZXNlcnZlZDE7CiB9IE1DSV9BTklNX09QRU5fUEFSTVMsICpMUE1DSV9BTklNX09QRU5fUEFSTVM7CiAKQEAgLTEyMzcsNyArMTIzNyw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKIAlEV09SRCAgIGR3Q2FsbGJhY2s7Ci0JSFdORCAgICBoV25kOworCUhXTkQxNiAgaFduZDsKIAlVSU5UICAgIHdSZXNlcnZlZDE7CiAJVUlOVCAgICBuQ21kU2hvdzsKIAlVSU5UICAgIHdSZXNlcnZlZDI7CkBAIC0xMjk5LDEzICsxMjk5LDEzIEBACiAJTFBDU1RSICBscHN0ckVsZW1lbnROYW1lOwogCUxQQ1NUUiAgbHBzdHJBbGlhczsKIAlEV09SRCAgIGR3U3R5bGU7Ci0JSFdORCAgICBoV25kUGFyZW50OworCUhXTkQxNiAgaFduZFBhcmVudDsKIAlVSU5UICAgIHdSZXNlcnZlZDE7CiB9IE1DSV9PVkxZX09QRU5fUEFSTVMsICpMUE1DSV9PVkxZX09QRU5fUEFSTVM7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAlEV09SRCAgIGR3Q2FsbGJhY2s7Ci0JSFdORCAgICBoV25kOworCUhXTkQxNiAgaFduZDsKIAlVSU5UICAgIHdSZXNlcnZlZDE7CiAJVUlOVCAgICBuQ21kU2hvdzsKIAlVSU5UICAgIHdSZXNlcnZlZDI7CkBAIC0xNTEzLDcgKzE1MTMsNyBAQAogRFdPUkQgbWNpR2V0RHJpdmVyRGF0YShVSU5UIHVEZXZpY2VJRCk7CiBCT09MICBtY2lTZXREcml2ZXJEYXRhKFVJTlQgdURldmljZUlELCBEV09SRCBkd0RhdGEpOwogVUlOVCAgbWNpRHJpdmVyWWllbGQoVUlOVCB1RGV2aWNlSUQpOwotQk9PTCAgbWNpRHJpdmVyTm90aWZ5KEhXTkQgaHduZENhbGxiYWNrLCBVSU5UIHVEZXZpY2VJRCwKK0JPT0wgIG1jaURyaXZlck5vdGlmeShIV05EMTYgaHduZENhbGxiYWNrLCBVSU5UIHVEZXZpY2VJRCwKICAgICBVSU5UIHVTdGF0dXMpOwogVUlOVCAgbWNpTG9hZENvbW1hbmRSZXNvdXJjZShISU5TVEFOQ0UxNiBoSW5zdGFuY2UsCiAgICAgTFBDU1RSIGxwUmVzTmFtZSwgVUlOVCB1VHlwZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL250ZGxsLmggYi9pbmNsdWRlL250ZGxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIwNDI1ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbnRkbGwuaApAQCAtMCwwICsxLDE1MiBAQAorI2lmbmRlZiBfX1dJTkVfTlRETExfSAorI2RlZmluZSBfX1dJTkVfTlRETExfSAorLyogbnRkbGwuaCAKKyAqCisgKiBjb250YWlucyBOVCBpbnRlcm5hbCBkZWZpbmVzIHRoYXQgZG9uJ3Qgc2hvdyBvbiB0aGUgV2luMzIgQVBJIGxldmVsCisgKgorICogQ29weXJpZ2h0IDE5OTcgTWFyY3VzIE1laXNzbmVyCisgKi8KKworLyogYXNzdW1lcyB3aW5kb3dzLmggYWxyZWFkeSBpbmNsdWRlZCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIFNlY3VyaXR5IElkcyBvZiBOVCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJQllURQlWYWx1ZVs2XTsKK30gU0lEX0lERU5USUZJRVJfQVVUSE9SSVRZLCpMUFNJRF9JREVOVElGSUVSX0FVVEhPUklUWTsKKwordHlwZWRlZiBzdHJ1Y3QgX1NJRCB7CisJQllURQlSZXZpc2lvbjsKKwlCWVRFCVN1YkF1dGhvcml0eUNvdW50OworCVNJRF9JREVOVElGSUVSX0FVVEhPUklUWQlJZGVudGlmaWVyQXV0aG9yaXR5OworCURXT1JECVN1YkF1dGhvcml0eVsxXTsJLyogbW9yZSB0aGFuIG9uZSAqLworfSBTSUQsKkxQU0lEOworCisjZGVmaW5lCVNJRF9SRVZJU0lPTgkJCSgxKQkvKiBDdXJyZW50IHJldmlzaW9uICovCisjZGVmaW5lCVNJRF9NQVhfU1VCX0FVVEhPUklUSUVTCQkoMTUpCS8qIGN1cnJlbnQgbWF4IHN1YmF1dGhzICovCisjZGVmaW5lCVNJRF9SRUNPTU1FTkRFRF9TVUJfQVVUSE9SSVRJRVMJKDEpCS8qIHJlY29tbWVuZGVkIHN1YmF1dGhzICovCisKKy8qIEFDTHMgb2YgTlQgKi8KKworI2RlZmluZQlBQ0xfUkVWSVNJT04JMgorCisjZGVmaW5lCUFDTF9SRVZJU0lPTjEJMQorI2RlZmluZQlBQ0xfUkVWSVNJT04yCTIKKwordHlwZWRlZiBzdHJ1Y3QgX0FDTCB7CisJQllURQlBY2xSZXZpc2lvbjsKKwlCWVRFCVNiejE7CisJV09SRAlBY2xTaXplOworCVdPUkQJQWNlQ291bnQ7CisJV09SRAlTYnoyOworfSBBQ0wsKkxQQUNMOworCisvKiBBQ0VzLCBkaXJlY3RseSBzdGFydGluZyBhZnRlciBhbiBBQ0wgKi8KK3R5cGVkZWYgc3RydWN0IF9BQ0VfSEVBREVSIHsKKwlCWVRFCUFjZVR5cGU7CisJQllURQlBY2VGbGFnczsKKwlXT1JECUFjZVNpemU7Cit9IEFDRV9IRUFERVIsKkxQQUNFX0hFQURFUjsKKworLyogQWNlVHlwZSAqLworI2RlZmluZQlBQ0NFU1NfQUxMT1dFRF9BQ0VfVFlQRQkJMAorI2RlZmluZQlBQ0NFU1NfREVOSUVEX0FDRV9UWVBFCQkxCisjZGVmaW5lCVNZU1RFTV9BVURJVF9BQ0VfVFlQRQkJMgorI2RlZmluZQlTWVNURU1fQUxBUk1fQUNFX1RZUEUJCTMKKworLyogaW5oZXJpdCBBY2VGbGFncyAqLworI2RlZmluZQlPQkpFQ1RfSU5IRVJJVF9BQ0UJCTB4MDEKKyNkZWZpbmUJQ09OVEFJTkVSX0lOSEVSSVRfQUNFCQkweDAyCisjZGVmaW5lCU5PX1BST1BBR0FURV9JTkhFUklUX0FDRQkweDA0CisjZGVmaW5lCUlOSEVSSVRfT05MWV9BQ0UJCTB4MDgKKyNkZWZpbmUJVkFMSURfSU5IRVJJVF9GTEFHUwkJMHgwRgorCisvKiBBY2VGbGFncyBtYXNrIGZvciB3aGF0IGV2ZW50cyB3ZSAoc2hvdWxkKSBhdWRpdCAqLworI2RlZmluZQlTVUNDRVNTRlVMX0FDQ0VTU19BQ0VfRkxBRwkweDQwCisjZGVmaW5lCUZBSUxFRF9BQ0NFU1NfQUNFX0ZMQUcJCTB4ODAKKworLyogZGlmZmVyZW50IEFDRXMgZGVwZW5kaW5nIG9uIEFjZVR5cGUgCisgKiBTaWRTdGFydCBtYXJrcyB0aGUgYmVnaW4gb2YgYSBTSUQKKyAqIHNvIHRoZSB0aGluZyBmaW5hbGx5IGxvb2tzIGxpa2UgdGhpczoKKyAqIDA6IEFDRV9IRUFERVIKKyAqIDQ6IEFDQ0VTU19NQVNLCisgKiA4Li4uIDogU0lECisgKi8KK3R5cGVkZWYgc3RydWN0IF9BQ0NFU1NfQUxMT1dFRF9BQ0UgeworCUFDRV9IRUFERVIJSGVhZGVyOworCURXT1JECQlNYXNrOworCURXT1JECQlTaWRTdGFydDsKK30gQUNDRVNTX0FMTE9XRURfQUNFLCpMUEFDQ0VTU19BTExPV0VEX0FDRTsKKwordHlwZWRlZiBzdHJ1Y3QgX0FDQ0VTU19ERU5JRURfQUNFIHsKKwlBQ0VfSEVBREVSCUhlYWRlcjsKKwlEV09SRAkJTWFzazsKKwlEV09SRAkJU2lkU3RhcnQ7Cit9IEFDQ0VTU19ERU5JRURfQUNFLCpMUEFDQ0VTU19ERU5JRURfQUNFOworCit0eXBlZGVmIHN0cnVjdCBfU1lTVEVNX0FVRElUX0FDRSB7CisJQUNFX0hFQURFUglIZWFkZXI7CisJRFdPUkQJCU1hc2s7CisJRFdPUkQJCVNpZFN0YXJ0OworfSBTWVNURU1fQVVESVRfQUNFLCpMUFNZU1RFTV9BVURJVF9BQ0U7CisKK3R5cGVkZWYgc3RydWN0IF9TWVNURU1fQUxBUk1fQUNFIHsKKwlBQ0VfSEVBREVSCUhlYWRlcjsKKwlEV09SRAkJTWFzazsKKwlEV09SRAkJU2lkU3RhcnQ7Cit9IFNZU1RFTV9BTEFSTV9BQ0UsKkxQU1lTVEVNX0FMQVJNX0FDRTsKKworI2RlZmluZQlTRUNVUklUWV9ERVNDUklQVE9SX1JFVklTSU9OCTEKKyNkZWZpbmUJU0VDVVJJVFlfREVTQ1JJUFRPUl9SRVZJU0lPTjEJMQorCit0eXBlZGVmIFdPUkQgU0VDVVJJVFlfREVTQ1JJUFRPUl9DT05UUk9MOworCisjZGVmaW5lCVNFX09XTkVSX0RFRkFVTFRFRAkweDAwMDEKKyNkZWZpbmUJU0VfR1JPVVBfREVGQVVMVEVECTB4MDAwMgorI2RlZmluZQlTRV9EQUNMX1BSRVNFTlQJCTB4MDAwNAorI2RlZmluZQlTRV9EQUNMX0RFRkFVTFRFRAkweDAwMDgKKyNkZWZpbmUJU0VfU0FDTF9QUkVTRU5UCQkweDAwMTAKKyNkZWZpbmUJU0VfU0FDTF9ERUZBVUxURUQJMHgwMDIwCisjZGVmaW5lCVNFX1NFTEZfUkVMQVRJVkUJMHg4MDAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwlCWVRFCVJldmlzaW9uOworCUJZVEUJU2J6MTsKKwlTRUNVUklUWV9ERVNDUklQVE9SX0NPTlRST0wgQ29udHJvbDsKKwlMUFNJRAlPd25lcjsKKwlMUFNJRAlHcm91cDsKKwlMUEFDTAlTYWNsOworCUxQQUNMCURhY2w7Cit9IFNFQ1VSSVRZX0RFU0NSSVBUT1IsKkxQU0VDVVJJVFlfREVTQ1JJUFRPUjsKKworLyogTlQgbG93bGV2ZWwgU3RyaW5ncyAoaGFuZGxlZCBieSBSdGwqIGZ1bmN0aW9ucyBpbiBOVERMTCkKKyAqIElmIHRoZXkgYXJlIHplcm8gdGVybWluYXRlZCwgTGVuZ3RoIGRvZXMgbm90IGluY2x1ZGUgdGhlIHRlcm1pbmF0aW5nIDAuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX1NUUklORyB7CisJVUlOVDE2CUxlbmd0aDsKKwlVSU5UMTYJTWF4aW11bUxlbmd0aDsKKwlMUFNUUglCdWZmZXI7Cit9IFNUUklORywqTFBTVFJJTkcsQU5TSV9TVFJJTkcsKkxQQU5TSV9TVFJJTkc7CisKK3R5cGVkZWYgc3RydWN0IF9DU1RSSU5HIHsKKwlVSU5UMTYJTGVuZ3RoOworCVVJTlQxNglNYXhpbXVtTGVuZ3RoOworCUxQQ1NUUglCdWZmZXI7Cit9IENTVFJJTkcsKkxQQ1NUUklORzsKKwordHlwZWRlZiBzdHJ1Y3QgX1VOSUNPREVfU1RSSU5HIHsKKwlVSU5UMTYJTGVuZ3RoOwkJLyogYnl0ZXMgKi8KKwlVSU5UMTYJTWF4aW11bUxlbmd0aDsJLyogYnl0ZXMgKi8KKwlMUFdTVFIJQnVmZmVyOworfSBVTklDT0RFX1NUUklORywqTFBVTklDT0RFX1NUUklORzsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmICAvKiBfX1dJTkVfTlRETExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vbGUuaCBiL2luY2x1ZGUvb2xlLmgKaW5kZXggZGY5YWUxYS4uZmRmZjU3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vbGUuaAorKysgYi9pbmNsdWRlL29sZS5oCkBAIC0yMjIsNyArMjIyLDcgQEAKIAlPTEVTVEFUVVMJKCpFcXVhbCkoTFBPTEVPQkpFQ1QsTFBPTEVPQkpFQ1QpOwogCU9MRVNUQVRVUwkoKkNvcHlUb0NsaXBCb2FyZCkoTFBPTEVPQkpFQ1QpOwogCU9MRVNUQVRVUwkoKkRyYXcpKExQT0xFT0JKRUNULEhEQzE2LExQUkVDVDE2LExQUkVDVDE2LEhEQzE2KTsKLQlPTEVTVEFUVVMJKCpBY3RpdmF0ZSkoTFBPTEVPQkpFQ1QsVUlOVCxCT09MLEJPT0wsSFdORCxMUFJFQ1QxNik7CisJT0xFU1RBVFVTCSgqQWN0aXZhdGUpKExQT0xFT0JKRUNULFVJTlQsQk9PTCxCT09MLEhXTkQxNixMUFJFQ1QxNik7CiAJT0xFU1RBVFVTCSgqRXhlY3V0ZSkoTFBPTEVPQkpFQ1QsSEdMT0JBTDE2LFVJTlQpOwogCU9MRVNUQVRVUwkoKkNsb3NlKShMUE9MRU9CSkVDVCk7CiAJT0xFU1RBVFVTCSgqVXBkYXRlKShMUE9MRU9CSkVDVCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL29wdGlvbnMuaCBiL2luY2x1ZGUvb3B0aW9ucy5oCmluZGV4IDZmY2Y1NzAuLjQyMWYzZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3B0aW9ucy5oCisrKyBiL2luY2x1ZGUvb3B0aW9ucy5oCkBAIC0yMiw3ICsyMiw4IEBACiAgICAgTEFOR19DeiwgIC8qIEN6ZWNoICovCiAgICAgTEFOR19FbywgIC8qIEVzcGVyYW50byAqLwogICAgIExBTkdfSXQsICAvKiBJdGFsaWFuICovCi0gICAgTEFOR19LbyAgIC8qIEtvcmVhbiAqLworICAgIExBTkdfS28sICAvKiBLb3JlYW4gKi8KKyAgICBMQU5HX0h1ICAgLyogSHVuZ2FyaWFuICovCiB9IFdJTkVfTEFOR1VBR0U7CiAKIHR5cGVkZWYgc3RydWN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL3N0YXRpYy5oIGIvaW5jbHVkZS9zdGF0aWMuaAppbmRleCAwZGQ2MjRlLi5jNjY0Y2M0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3N0YXRpYy5oCisrKyBiL2luY2x1ZGUvc3RhdGljLmgKQEAgLTE3LDYgKzE3LDYgQEAKICAgICBISUNPTjE2ICBoSWNvbjsgICAvKiBJY29uIGhhbmRsZSBmb3IgU1NfSUNPTiBjb250cm9scyAqLyAKIH0gU1RBVElDSU5GTzsKIAotZXh0ZXJuIExSRVNVTFQgU3RhdGljV25kUHJvYyhIV05EIGhXbmQsVUlOVCB1TXNnLFdQQVJBTTE2IHdQYXJhbSxMUEFSQU0gbFBhcmFtICk7CitleHRlcm4gTFJFU1VMVCBTdGF0aWNXbmRQcm9jKEhXTkQxNiBoV25kLFVJTlQgdU1zZyxXUEFSQU0xNiB3UGFyYW0sTFBBUkFNIGxQYXJhbSApOwogCiAjZW5kaWYgIC8qIF9fV0lORV9TVEFUSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdGRkZWJ1Zy5oIGIvaW5jbHVkZS9zdGRkZWJ1Zy5oCmluZGV4IDhmNzE5MGIuLmQwOWYyNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc3RkZGVidWcuaAorKysgYi9pbmNsdWRlL3N0ZGRlYnVnLmgKQEAgLTE0Myw3ICsxNDMsNiBAQAogI3VuZGVmIERFQlVHX1NFTkRNU0cKICN1bmRlZiBERUJVR19TSE0KICN1bmRlZiBERUJVR19TVFJFU1MKLSN1bmRlZiBERUJVR19TWVNDT0xPUgogI3VuZGVmIERFQlVHX1RBU0sKICN1bmRlZiBERUJVR19URVhUCiAjdW5kZWYgREVCVUdfVElNRVIKQEAgLTIyNCw3ICsyMjMsNiBAQAogI2RlZmluZSBERUJVR19TRU5ETVNHCiAjZGVmaW5lIERFQlVHX1NITQogI2RlZmluZSBERUJVR19TVFJFU1MKLSNkZWZpbmUgREVCVUdfU1lTQ09MT1IKICNkZWZpbmUgREVCVUdfVEFTSwogI2RlZmluZSBERUJVR19URVhUCiAjZGVmaW5lIERFQlVHX1RJTUVSCmRpZmYgLS1naXQgYS9pbmNsdWRlL3dpbi5oIGIvaW5jbHVkZS93aW4uaAppbmRleCBiOGI3NzhhLi4wMTc5MjQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3dpbi5oCisrKyBiL2luY2x1ZGUvd2luLmgKQEAgLTU3LDcgKzU3LDcgQEAKICAgICBzdHJ1Y3QgdGFnRENFICpkY2U7ICAgICAgICAgICAvKiBXaW5kb3cgRENFIChpZiBDU19PV05EQyBvciBDU19DTEFTU0RDKSAqLwogICAgIEhHTE9CQUwxNiAgICAgIGhtZW1UYXNrUTsgICAgIC8qIFRhc2sgcXVldWUgZ2xvYmFsIG1lbW9yeSBoYW5kbGUgKi8KICAgICBIUkdOMTYgICAgICAgICBocmduVXBkYXRlOyAgICAvKiBVcGRhdGUgcmVnaW9uICovCi0gICAgSFdORDE2ICAgICAgICAgaHduZExhc3RBY3RpdmU7LyogTGFzdCBhY3RpdmUgcG9wdXAgaHduZCAqLworICAgIEhXTkQzMiAgICAgICAgIGh3bmRMYXN0QWN0aXZlOy8qIExhc3QgYWN0aXZlIHBvcHVwIGh3bmQgKi8KICAgICBEV09SRCAgICAgICAgICBkd1N0eWxlOyAgICAgICAvKiBXaW5kb3cgc3R5bGUgKGZyb20gQ3JlYXRlV2luZG93KSAqLwogICAgIERXT1JEICAgICAgICAgIGR3RXhTdHlsZTsgICAgIC8qIEV4dGVuZGVkIHN0eWxlIChmcm9tIENyZWF0ZVdpbmRvd0V4KSAqLwogICAgIFVJTlQxNiAgICAgICAgIHdJRG1lbnU7ICAgICAgIC8qIElEIG9yIGhtZW51IChmcm9tIENyZWF0ZVdpbmRvdykgKi8KQEAgLTc5LDcgKzc5LDggQEAKICNkZWZpbmUgV0lOX05DQUNUSVZBVEVEICAgICAgICAweDAwODAgLyogbGFzdCBXTV9OQ0FDVElWQVRFIHdhcyBwb3NpdGl2ZSAqLwogI2RlZmluZSBXSU5fTUFOQUdFRCAgICAgICAgICAgIDB4MDEwMCAvKiBXaW5kb3cgbWFuYWdlZCBieSB0aGUgWCB3bSAqLwogI2RlZmluZSBXSU5fSVNESUFMT0cgICAgICAgICAgIDB4MDIwMCAvKiBXaW5kb3cgaXMgYSBkaWFsb2cgKi8KLSNkZWZpbmUgV0lOX1NBVkVVTkRFUl9PVkVSUklERSAweDA0MDAKKyNkZWZpbmUgV0lOX0lTV0lOMzIgICAgICAgICAgICAweDA0MDAgLyogVW5kZXJzdGFuZHMgV2luMzIgbWVzc2FnZXMgKi8KKyNkZWZpbmUgV0lOX1NBVkVVTkRFUl9PVkVSUklERSAweDA4MDAKIAogICAvKiBXaW5kb3cgZnVuY3Rpb25zICovCiBleHRlcm4gV05EICpXSU5fRmluZFduZFB0ciggSFdORDMyIGh3bmQgKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvd2luYmFzZS5oIGIvaW5jbHVkZS93aW5iYXNlLmgKaW5kZXggOTE5MTI0Zi4uNDVjZTc1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS93aW5iYXNlLmgKKysrIGIvaW5jbHVkZS93aW5iYXNlLmgKQEAgLTUzLDExICs1MywxNCBAQAogI2RlZmluZQlTVEFUVVNfQlVGRkVSX09WRVJGTE9XICAgICAgICAgICAweDgwMDAwMDA1CiAjZGVmaW5lIFNUQVRVU19BQ0NFU1NfVklPTEFUSU9OICAgICAgICAgIDB4QzAwMDAwMDUgICAgCiAjZGVmaW5lIFNUQVRVU19JTl9QQUdFX0VSUk9SICAgICAgICAgICAgIDB4QzAwMDAwMDYgICAgCisjZGVmaW5lIFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUiAgICAgICAgIDB4QzAwMDAwMEQKICNkZWZpbmUgU1RBVFVTX05PX01FTU9SWSAgICAgICAgICAgICAgICAgMHhDMDAwMDAxNyAgICAKICNkZWZpbmUgU1RBVFVTX0lMTEVHQUxfSU5TVFJVQ1RJT04gICAgICAgMHhDMDAwMDAxRCAgICAKICNkZWZpbmUJU1RBVFVTX0JVRkZFUl9UT09fU01BTEwgICAgICAgICAgMHhDMDAwMDAyMwogI2RlZmluZSBTVEFUVVNfTk9OQ09OVElOVUFCTEVfRVhDRVBUSU9OICAweEMwMDAwMDI1ICAgIAogI2RlZmluZSBTVEFUVVNfSU5WQUxJRF9ESVNQT1NJVElPTiAgICAgICAweEMwMDAwMDI2ICAgIAorI2RlZmluZQlTVEFUVVNfVU5LTk9XTl9SRVZJU0lPTiAgICAgICAgICAweEMwMDAwMDU4CisjZGVmaW5lCVNUQVRVU19JTlZBTElEX1NFQ1VSSVRZX0RFU0NSICAgIDB4QzAwMDAwNzkKICNkZWZpbmUgU1RBVFVTX0FSUkFZX0JPVU5EU19FWENFRURFRCAgICAgMHhDMDAwMDA4QyAgICAKICNkZWZpbmUgU1RBVFVTX0ZMT0FUX0RFTk9STUFMX09QRVJBTkQgICAgMHhDMDAwMDA4RCAgICAKICNkZWZpbmUgU1RBVFVTX0ZMT0FUX0RJVklERV9CWV9aRVJPICAgICAgMHhDMDAwMDA4RSAgICAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvd2luZG93cy5oIGIvaW5jbHVkZS93aW5kb3dzLmgKaW5kZXggMzM4YmYxMy4uM2JjOTUwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS93aW5kb3dzLmgKKysrIGIvaW5jbHVkZS93aW5kb3dzLmgKQEAgLTIzOSw2ICsyMzksMTEgQEAKICNkZWZpbmUgTURJVElMRV9IT1JJWk9OVEFMICAxCiAjZGVmaW5lIE1ESVNfQUxMQ0hJTERTVFlMRVMgMHgwMDAxCiAKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBEV09SRCAgIHN0eWxlT2xkOworICAgIERXT1JEICAgc3R5bGVOZXc7Cit9IFNUWUxFU1RSVUNULCAqTFBTVFlMRVNUUlVDVDsKKwogICAvKiBPZmZzZXRzIGZvciBHZXRXaW5kb3dMb25nKCkgYW5kIEdldFdpbmRvd1dvcmQoKSAqLwogI2RlZmluZSBHV0xfVVNFUkRBVEEgICAgICAgICgtMjEpCiAjZGVmaW5lIEdXTF9FWFNUWUxFICAgICAgICAgKC0yMCkKQEAgLTI0NDQsMTMgKzI0NDksMjggQEAKICNkZWZpbmUgV01fT1RIRVJXSU5ET1dERVNUUk9ZRUQJMHgwMDNkCiAjZGVmaW5lIFdNX0FDVElWQVRFU0hFTExXSU5ET1cJMHgwMDNlCiAKLSNkZWZpbmUgV01fQ09NUEFDVElORwkgICAgMHgwMDQxCisjZGVmaW5lIFdNX0NPTVBBQ1RJTkcJCTB4MDA0MQogCi0jZGVmaW5lIFdNX0NPTU1OT1RJRlkJICAgIDB4MDA0NAotI2RlZmluZSBXTV9XSU5ET1dQT1NDSEFOR0lORyAweDAwNDYKLSNkZWZpbmUgV01fV0lORE9XUE9TQ0hBTkdFRCAgMHgwMDQ3Ci0jZGVmaW5lIFdNX1BPV0VSCSAgICAweDAwNDgKKyNkZWZpbmUgV01fQ09NTU5PVElGWQkJMHgwMDQ0CisjZGVmaW5lIFdNX1dJTkRPV1BPU0NIQU5HSU5HIAkweDAwNDYKKyNkZWZpbmUgV01fV0lORE9XUE9TQ0hBTkdFRCAJMHgwMDQ3CisjZGVmaW5lIFdNX1BPV0VSCQkweDAwNDgKIAorICAvKiBXaW4zMiA0LjAgbWVzc2FnZXMgKi8KKyNkZWZpbmUgV01fQ09QWURBVEEJCTB4MDA0YQorI2RlZmluZSBXTV9DQU5DRUxKT1VSTkFMCTB4MDA0YgorI2RlZmluZSBXTV9OT1RJRlkJCTB4MDA0ZQorI2RlZmluZSBXTV9IRUxQCQkJMHgwMDUzCisjZGVmaW5lIFdNX05PVElGWUZPUk1BVAkJMHgwMDU1CisKKyNkZWZpbmUgV01fQ09OVEVYVE1FTlUJCTB4MDA3YgorI2RlZmluZSBXTV9TVFlMRUNIQU5HSU5HIAkweDAwN2MKKyNkZWZpbmUgV01fU1RZTEVDSEFOR0VECQkweDAwN2QKKworI2RlZmluZSBXTV9HRVRJQ09OCQkweDAwN2YKKyNkZWZpbmUgV01fU0VUSUNPTgkJMHgwMDgwCisKKyAgLyogTm9uLWNsaWVudCBzeXN0ZW0gbWVzc2FnZXMgKi8KICNkZWZpbmUgV01fTkNDUkVBVEUgICAgICAgICAweDAwODEKICNkZWZpbmUgV01fTkNERVNUUk9ZICAgICAgICAweDAwODIKICNkZWZpbmUgV01fTkNDQUxDU0laRSAgICAgICAweDAwODMKQEAgLTI1MzQsNiArMjU1NCwxMiBAQAogI2RlZmluZSBXTV9FWElUTUVOVUxPT1AgICAgIDB4MDIxMgogI2RlZmluZSBXTV9ORVhUTUVOVQkgICAgMHgwMjEzCiAKKyAgLyogV2luMzIgNC4wIG1lc3NhZ2VzICovCisjZGVmaW5lIFdNX1NJWklORwkgICAgMHgwMjE0CisjZGVmaW5lIFdNX0NBUFRVUkVDSEFOR0VEICAgMHgwMjE1CisjZGVmaW5lIFdNX01PVklORwkgICAgMHgwMjE2CisKKyAgLyogTURJIG1lc3NhZ2VzICovCiAjZGVmaW5lIFdNX01ESUNSRUFURQkgICAgMHgwMjIwCiAjZGVmaW5lIFdNX01ESURFU1RST1kJICAgIDB4MDIyMQogI2RlZmluZSBXTV9NRElBQ1RJVkFURQkgICAgMHgwMjIyCkBAIC0yNTQ0LDYgKzI1NzAsOCBAQAogI2RlZmluZSBXTV9NRElDQVNDQURFCSAgICAweDAyMjcKICNkZWZpbmUgV01fTURJSUNPTkFSUkFOR0UgICAweDAyMjgKICNkZWZpbmUgV01fTURJR0VUQUNUSVZFICAgICAweDAyMjkKKworICAvKiBEJkQgbWVzc2FnZXMgKi8KICNkZWZpbmUgV01fRFJPUE9CSkVDVAkgICAgMHgwMjJBCiAjZGVmaW5lIFdNX1FVRVJZRFJPUE9CSkVDVCAgMHgwMjJCCiAjZGVmaW5lIFdNX0JFR0lORFJBRwkgICAgMHgwMjJDCkBAIC0yNTc0LDYgKzI2MDIsMTAgQEAKICNkZWZpbmUgV01fUVVFUllORVdQQUxFVFRFICAgMHgwMzBGCiAjZGVmaW5lIFdNX1BBTEVUVEVJU0NIQU5HSU5HIDB4MDMxMAogI2RlZmluZSBXTV9QQUxFVFRFQ0hBTkdFRCAgICAweDAzMTEKKyNkZWZpbmUgV01fSE9US0VZCSAgICAgMHgwMzEyCisKKyNkZWZpbmUgV01fUFJJTlQgICAgICAgICAgICAgMHgwMzE3CisjZGVmaW5lIFdNX1BSSU5UQ0xJRU5UICAgICAgIDB4MDMxOAogCiAjZGVmaW5lIFdNX0NPQUxFU0NFX0ZJUlNUICAgIDB4MDM5MAogI2RlZmluZSBXTV9DT0FMRVNDRV9MQVNUICAgICAweDAzOUYKQEAgLTI2NjksNyArMjcwMSw3IEBACiAjZGVmaW5lIFNXUF9OT1NFTkRDSEFOR0lORyAgMHgwNDAwCiAjZGVmaW5lIFNXUF9ERUZFUkVSQVNFICAgICAgMHgyMDAwCiAKLSNkZWZpbmUgSFdORF9CUk9BRENBU1QJICAgICgoSFdORCkweGZmZmYpCisjZGVmaW5lIEhXTkRfQlJPQURDQVNUICAgICAgKChIV05EMzIpMHhmZmZmKQogCiAvKiBTZXRXaW5kb3dQb3MoKSBod25kSW5zZXJ0QWZ0ZXIgZmllbGQgdmFsdWVzICovCiAjZGVmaW5lIEhXTkRfVE9QICAgICAgICAgICAgKChIV05EMzIpMCkKQEAgLTQwMzUsNiArNDA2NywxOCBAQAogLyogV2luMzItc3BlY2lmaWMgc3RydWN0dXJlcyAqLwogCiB0eXBlZGVmIHN0cnVjdCB7CisgICAgRFdPUkQgZHdEYXRhOworICAgIERXT1JEIGNiRGF0YTsKKyAgICBMUFZPSUQgbHBEYXRhOworfSBDT1BZREFUQVNUUlVDVCwgKlBDT1BZREFUQVNUUlVDVCwgKkxQQ09QWURBVEFTVFJVQ1Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBITUVOVTMyIGhtZW51SW47CisgICAgSE1FTlUzMiBobWVudU5leHQ7CisgICAgSFdORDMyICBod25kTmV4dDsKK30gTURJTkVYVE1FTlUsICpQTURJTkVYVE1FTlUsICpMUE1ESU5FWFRNRU5VOworCit0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgIFdPUkQgd1llYXI7CiAgICAgICAgIFdPUkQgd01vbnRoOwogICAgICAgICBXT1JEIHdEYXlPZldlZWs7CkBAIC00MTg5LDYgKzQyMzMsMTcgQEAKICNkZWZpbmUgRklMRV9BVFRSSUJVVEVfWEFDVElPTl9XUklURSAgICAweDA0MDAKICNkZWZpbmUgRklMRV9BVFRSSUJVVEVfQ09NUFJFU1NFRCAgICAgICAweDA4MDAKIAorLyogRmlsZSBhbGlnbm1lbnRzIChOVCkgKi8KKyNkZWZpbmUJRklMRV9CWVRFX0FMSUdOTUVOVAkJMHgwMDAwMDAwMAorI2RlZmluZQlGSUxFX1dPUkRfQUxJR05NRU5UCQkweDAwMDAwMDAxCisjZGVmaW5lCUZJTEVfTE9OR19BTElHTk1FTlQJCTB4MDAwMDAwMDMKKyNkZWZpbmUJRklMRV9RVUFEX0FMSUdOTUVOVAkJMHgwMDAwMDAwNworI2RlZmluZQlGSUxFX09DVEFfQUxJR05NRU5UCQkweDAwMDAwMDBmCisjZGVmaW5lCUZJTEVfMzJfQllURV9BTElHTk1FTlQJCTB4MDAwMDAwMWYKKyNkZWZpbmUJRklMRV82NF9CWVRFX0FMSUdOTUVOVAkJMHgwMDAwMDAzZgorI2RlZmluZQlGSUxFXzEyOF9CWVRFX0FMSUdOTUVOVAkJMHgwMDAwMDA3ZgorI2RlZmluZQlGSUxFXzI1Nl9CWVRFX0FMSUdOTUVOVAkJMHgwMDAwMDBmZgorI2RlZmluZQlGSUxFXzUxMl9CWVRFX0FMSUdOTUVOVAkJMHgwMDAwMDFmZgogCiAvKiBXaW5IZWxwIGludGVybmFsIHN0cnVjdHVyZSAqLwogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtNDQ4Nyw0NSArNDU0Miw2IEBACiBERUNMX1dJTkVMSUJfVFlQRV9BVyhTRVJWSUNFX1RBQkxFX0VOVFJZKTsKIERFQ0xfV0lORUxJQl9UWVBFX0FXKExQU0VSVklDRV9UQUJMRV9FTlRSWSk7CiAKLS8qIFNlY3VyaXR5IElkcyBvZiBOVCAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JQllURQlWYWx1ZVs2XTsKLX0gU0lEX0lERU5USUZJRVJfQVVUSE9SSVRZLCpMUFNJRF9JREVOVElGSUVSX0FVVEhPUklUWTsKLQotdHlwZWRlZiBzdHJ1Y3QgX1NJRCB7Ci0JQllURQlSZXZpc2lvbjsKLQlCWVRFCVN1YkF1dGhvcml0eUNvdW50OwotCVNJRF9JREVOVElGSUVSX0FVVEhPUklUWQlJZGVudGlmaWVyQXV0aG9yaXR5OwotCURXT1JECVN1YkF1dGhvcml0eVsxXTsJLyogbW9yZSB0aGFuIG9uZSAqLwotfSBTSUQsKkxQU0lEOwotCi0jZGVmaW5lCVNJRF9SRVZJU0lPTgkJCSgxKQkvKiBDdXJyZW50IHJldmlzaW9uICovCi0jZGVmaW5lCVNJRF9NQVhfU1VCX0FVVEhPUklUSUVTCQkoMTUpCS8qIGN1cnJlbnQgbWF4IHN1YmF1dGhzICovCi0jZGVmaW5lCVNJRF9SRUNPTU1FTkRFRF9TVUJfQVVUSE9SSVRJRVMJKDEpCS8qIHJlY29tbWVuZGVkIHN1YmF1dGhzICovCi0KLS8qIE5UIGxvd2xldmVsIFN0cmluZ3MgKGhhbmRsZWQgYnkgUnRsKiBmdW5jdGlvbnMgaW4gTlRETEwpCi0gKiBJZiB0aGV5IGFyZSB6ZXJvIHRlcm1pbmF0ZWQsIExlbmd0aCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB0ZXJtaW5hdGluZyAwLgotICovCi0KLXR5cGVkZWYgc3RydWN0IF9TVFJJTkcgewotCVVJTlQxNglMZW5ndGg7Ci0JVUlOVDE2CU1heGltdW1MZW5ndGg7Ci0JTFBTVFIJQnVmZmVyOwotfSBTVFJJTkcsKkxQU1RSSU5HLEFOU0lfU1RSSU5HLCpMUEFOU0lfU1RSSU5HOwotCi10eXBlZGVmIHN0cnVjdCBfQ1NUUklORyB7Ci0JVUlOVDE2CUxlbmd0aDsKLQlVSU5UMTYJTWF4aW11bUxlbmd0aDsKLQlMUENTVFIJQnVmZmVyOwotfSBDU1RSSU5HLCpMUENTVFJJTkc7Ci0KLXR5cGVkZWYgc3RydWN0IF9VTklDT0RFX1NUUklORyB7Ci0JVUlOVDE2CUxlbmd0aDsJCS8qIGJ5dGVzICovCi0JVUlOVDE2CU1heGltdW1MZW5ndGg7CS8qIGJ5dGVzICovCi0JTFBXU1RSCUJ1ZmZlcjsKLX0gVU5JQ09ERV9TVFJJTkcsKkxQVU5JQ09ERV9TVFJJTkc7Ci0KIC8qIHtHLFN9ZXRQcmlvcml0eUNsYXNzICovCiAjZGVmaW5lCU5PUk1BTF9QUklPUklUWV9DTEFTUwkweDAwMDAwMDIwCiAjZGVmaW5lCUlETEVfUFJJT1JJVFlfQ0xBU1MJMHgwMDAwMDA0MApAQCAtNDY1MSwxNCArNDY2NywxNyBAQAogV09SRCAgICAgICBBbGxvY0RTdG9DU0FsaWFzKFdPUkQpOwogV09SRCAgICAgICBBbGxvY1NlbGVjdG9yKFdPUkQpOwogV09SRCAgICAgICBBbGxvY1NlbGVjdG9yQXJyYXkoV09SRCk7CitWT0lEICAgICAgIENhbGNDaGlsZFNjcm9sbChIV05EMTYsV09SRCk7CiBJTlQxNiAgICAgIENhdGNoKExQQ0FUQ0hCVUYpOwogV09SRCAgICAgICBDaGFuZ2VTZWxlY3RvcihXT1JELFdPUkQpOwogSU5UMTYgICAgICBDbG9zZUNvbW0oSU5UMTYpOworSEdMT0JBTDE2ICBDcmVhdGVDdXJzb3JJY29uSW5kaXJlY3QoSElOU1RBTkNFMTYsQ1VSU09SSUNPTklORk8qLExQQ1ZPSUQsTFBDVk9JRCk7CiBCT09MMTYgICAgIERDSG9vayhIREMxNixXT1JELERXT1JELExQQVJBTSk7CiBWT0lEICAgICAgIERpcmVjdGVkWWllbGQoSFRBU0sxNik7CiBIR0xPQkFMMTYgIERpcmVjdFJlc0FsbG9jKEhJTlNUQU5DRTE2LFdPUkQsVUlOVDE2KTsKIEJPT0wxNiAgICAgRGxnRGlyU2VsZWN0KEhXTkQxNixMUFNUUixJTlQxNik7CiBCT09MMTYgICAgIERsZ0RpclNlbGVjdENvbWJvQm94KEhXTkQxNixMUFNUUixJTlQxNik7CitEV09SRCAgICAgIER1bXBJY29uKFNFR1BUUixXT1JEKixTRUdQVFIqLFNFR1BUUiopOwogQk9PTDE2ICAgICBFbmFibGVIYXJkd2FyZUlucHV0KEJPT0wxNik7CiBJTlQxNiAgICAgIEV4Y2x1ZGVWaXNSZWN0KEhEQzE2LElOVDE2LElOVDE2LElOVDE2LElOVDE2KTsKIEhBTkRMRTE2ICAgRmFyR2V0T3duZXIoSEdMT0JBTDE2KTsKQEAgLTQ2NjcsMTIgKzQ2ODYsMTUgQEAKIFZPSUQgICAgICAgRmlsbFdpbmRvdyhIV05EMTYsSFdORDE2LEhEQzE2LEhCUlVTSDE2KTsKIElOVDE2ICAgICAgRmx1c2hDb21tKElOVDE2LElOVDE2KTsKIFdPUkQgICAgICAgRnJlZVNlbGVjdG9yKFdPUkQpOworVUlOVDE2ICAgICBHRElSZWFsaXplUGFsZXR0ZShIREMxNik7CitIUEFMRVRURTE2IEdESVNlbGVjdFBhbGV0dGUoSERDMTYsSFBBTEVUVEUxNixXT1JEKTsKIEhBTkRMRTE2ICAgR2V0QXRvbUhhbmRsZShBVE9NKTsKIERXT1JEICAgICAgR2V0Qml0bWFwRGltZW5zaW9uKEhCSVRNQVAxNik7CiBEV09SRCAgICAgIEdldEJydXNoT3JnKEhEQzE2KTsKIEhBTkRMRTE2ICAgR2V0Q29kZUhhbmRsZShGQVJQUk9DMTYpOwogSU5UMTYgICAgICBHZXRDb21tRXJyb3IoSU5UMTYsTFBDT01TVEFUKTsKIFVJTlQxNiAgICAgR2V0Q29tbUV2ZW50TWFzayhJTlQxNixVSU5UMTYpOworSEJSVVNIMTYgICBHZXRDb250cm9sQnJ1c2goSFdORDE2LEhEQzE2LFVJTlQxNik7CiBWT0lEICAgICAgIEdldENvZGVJbmZvKEZBUlBST0MxNixMUFZPSUQpOwogSEFORExFMTYgICBHZXRDdXJyZW50UERCKHZvaWQpOwogRFdPUkQgICAgICBHZXRDdXJyZW50UG9zaXRpb24oSERDMTYpOwpAQCAtNDY4MSwxMCArNDcwMywxMyBAQAogRFdPUkQgICAgICBHZXREQ09yZyhIREMxNik7CiBIREMxNiAgICAgIEdldERDU3RhdGUoSERDMTYpOwogSFdORDE2ICAgICBHZXREZXNrdG9wSHduZCh2b2lkKTsKK1NFR1BUUiAgICAgR2V0RE9TRW52aXJvbm1lbnQodm9pZCk7CiBITU9EVUxFMTYgIEdldEV4ZVB0cihIQU5ETEUxNik7CiBXT1JEICAgICAgIEdldEV4ZVZlcnNpb24odm9pZCk7CitEV09SRCAgICAgIEdldEhlYXBTcGFjZXMoSE1PRFVMRTE2KTsKIElOVDE2ICAgICAgR2V0S2JDb2RlUGFnZShWT0lEKTsKIElOVDE2ICAgICAgR2V0SW5zdGFuY2VEYXRhKEhJTlNUQU5DRTE2LFdPUkQsSU5UMTYpOworSEdMT0JBTDE2ICBHZXRNZXRhRmlsZUJpdHMoSE1FVEFGSUxFMTYpOwogQk9PTDE2ICAgICBHZXRNb2R1bGVOYW1lKEhJTlNUQU5DRTE2LExQU1RSLElOVDE2KTsKIEZBUlBST0MxNiAgR2V0TW91c2VFdmVudFByb2Modm9pZCk7CiBVSU5UMTYgICAgIEdldE51bVRhc2tzKHZvaWQpOwpAQCAtNDY5Miw5ICs0NzE3LDExIEBACiBEV09SRCAgICAgIEdldFNlbGVjdG9yTGltaXQoV09SRCk7CiBISU5TVEFOQ0UxNiBHZXRUYXNrRFModm9pZCk7CiBIUVVFVUUxNiAgIEdldFRhc2tRdWV1ZShIVEFTSzE2KTsKK0JZVEUgICAgICAgR2V0VGVtcERyaXZlKEJZVEUpOwogRFdPUkQgICAgICBHZXRUZXh0RXh0ZW50KEhEQzE2LExQQ1NUUixJTlQxNik7CiBEV09SRCAgICAgIEdldFZpZXdwb3J0RXh0KEhEQzE2KTsKIERXT1JEICAgICAgR2V0Vmlld3BvcnRPcmcoSERDMTYpOworQk9PTDE2ICAgICBHZXRXaW5EZWJ1Z0luZm8oTFBXSU5ERUJVR0lORk8sVUlOVDE2KTsKIERXT1JEICAgICAgR2V0V2luZG93RXh0KEhEQzE2KTsKIERXT1JEICAgICAgR2V0V2luZG93T3JnKEhEQzE2KTsKIERXT1JEICAgICAgR2V0V2luRmxhZ3Modm9pZCk7CkBAIC00NzA5LDExICs0NzM2LDE0IEBACiBJTlQxNiAgICAgIEluaXRBcHAoSElOU1RBTkNFMTYpOwogSFJHTjE2ICAgICBJbnF1aXJlVmlzUmduKEhEQzE2KTsKIElOVDE2ICAgICAgSW50ZXJzZWN0VmlzUmVjdChIREMxNixJTlQxNixJTlQxNixJTlQxNixJTlQxNik7CitCT09MMTYgICAgIElzRENDdXJyZW50UGFsZXR0ZShIREMxNik7CiBCT09MMTYgICAgIElzR0RJT2JqZWN0KEhHRElPQkoxNik7CiBCT09MMTYgICAgIElzU2hhcmVkU2VsZWN0b3IoSEFORExFMTYpOwogQk9PTDE2ICAgICBJc1Rhc2soSFRBU0sxNik7CiBIVEFTSzE2ICAgIElzVGFza0xvY2tlZCh2b2lkKTsKK0JPT0wxNiAgICAgSXNWYWxpZE1ldGFGaWxlKEhNRVRBRklMRTE2KTsKIEJPT0wxNiAgICAgTG9jYWxJbml0KEhBTkRMRTE2LFdPUkQsV09SRCk7CitGQVJQUk9DMTYgIExvY2FsTm90aWZ5KEZBUlBST0MxNik7CiBIVEFTSzE2ICAgIExvY2tDdXJyZW50VGFzayhCT09MMTYpOwogSE1FTlUxNiAgICBMb29rdXBNZW51SGFuZGxlKEhNRU5VMTYsSU5UMTYpOwogRFdPUkQgICAgICBNb3ZlVG8oSERDMTYsSU5UMTYsSU5UMTYpOwpAQCAtNDcyNiw2ICs0NzU2LDcgQEAKIFZPSUQgICAgICAgUG9zdEV2ZW50KEhUQVNLMTYpOwogV09SRCAgICAgICBQcmVzdG9DaGFuZ29TZWxlY3RvcihXT1JELFdPUkQpOwogSU5UMTYgICAgICBSZWFkQ29tbShJTlQxNixMUFNUUixJTlQxNik7CitVSU5UMTYgICAgIFJlYWxpemVEZWZhdWx0UGFsZXR0ZShIREMxNik7CiBJTlQxNiAgICAgIFJlc3RvcmVWaXNSZ24oSERDMTYpOwogSFJHTjE2ICAgICBTYXZlVmlzUmduKEhEQzE2KTsKIERXT1JEICAgICAgU2NhbGVWaWV3cG9ydEV4dChIREMxNixJTlQxNixJTlQxNixJTlQxNixJTlQxNik7CkBAIC00NzM5LDcgKzQ3NzAsMTAgQEAKIERXT1JEICAgICAgU2V0RENPcmcoSERDMTYsSU5UMTYsSU5UMTYpOwogVk9JRCAgICAgICBTZXREQ1N0YXRlKEhEQzE2LEhEQzE2KTsKIEJPT0wxNiAgICAgU2V0RGVza1BhdHRlcm4odm9pZCk7CitXT1JEICAgICAgIFNldEhvb2tGbGFncyhIREMxNixXT1JEKTsKK0hNRVRBRklMRTE2IFNldE1ldGFGaWxlQml0cyhIR0xPQkFMMTYpOwogVk9JRCAgICAgICBTZXRQcmlvcml0eShIVEFTSzE2LElOVDE2KTsKK0ZBUlBST0MxNiAgU2V0UmVzb3VyY2VIYW5kbGVyKEhJTlNUQU5DRTE2LExQU1RSLEZBUlBST0MxNik7CiBXT1JEICAgICAgIFNldFNlbGVjdG9yQmFzZShXT1JELERXT1JEKTsKIFdPUkQgICAgICAgU2V0U2VsZWN0b3JMaW1pdChXT1JELERXT1JEKTsKIExPTkcgICAgICAgU2V0U3dhcEFyZWFTaXplKFdPUkQpOwpAQCAtNDc0Nyw2ICs0NzgxLDcgQEAKIEZBUlBST0MxNiAgU2V0VGFza1NpZ25hbFByb2MoSFRBU0sxNixGQVJQUk9DMTYpOwogRFdPUkQgICAgICBTZXRWaWV3cG9ydEV4dChIREMxNixJTlQxNixJTlQxNik7CiBEV09SRCAgICAgIFNldFZpZXdwb3J0T3JnKEhEQzE2LElOVDE2LElOVDE2KTsKK0JPT0wxNiAgICAgU2V0V2luRGVidWdJbmZvKExQV0lOREVCVUdJTkZPKTsKIERXT1JEICAgICAgU2V0V2luZG93RXh0KEhEQzE2LElOVDE2LElOVDE2KTsKIERXT1JEICAgICAgU2V0V2luZG93T3JnKEhEQzE2LElOVDE2LElOVDE2KTsKIFZPSUQgICAgICAgU3dpdGNoU3RhY2tCYWNrKHZvaWQpOwpAQCAtNDc5Nyw2ICs0ODMyLDkgQEAKIEJPT0wzMiAgICAgRW51bVRocmVhZFdpbmRvd3MoRFdPUkQsV05ERU5VTVBST0MzMixMUEFSQU0pOwogdm9pZCAgICAgICBFeGl0UHJvY2VzcyhEV09SRCk7CiBCT09MMzIgICAgIEV4aXRXaW5kb3dzRXgoVUlOVDMyLERXT1JEKTsKK0RXT1JEICAgICAgRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzMzJBKExQQ1NUUixMUFNUUixEV09SRCk7CitEV09SRCAgICAgIEV4cGFuZEVudmlyb25tZW50U3RyaW5nczMyVyhMUENXU1RSLExQV1NUUixEV09SRCk7CisjZGVmaW5lICAgIEV4cGFuZEVudmlyb25tZW50U3RyaW5ncyBXSU5FTElCX05BTUVfQVcoRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzKQogQk9PTDMyICAgICBGaWxlVGltZVRvRG9zRGF0ZVRpbWUoY29uc3QgRklMRVRJTUUqLExQV09SRCxMUFdPUkQpOwogQk9PTDMyICAgICBGaWxlVGltZVRvTG9jYWxGaWxlVGltZShjb25zdCBGSUxFVElNRSosTFBGSUxFVElNRSk7CiBCT09MMzIgICAgIEZpbGVUaW1lVG9TeXN0ZW1UaW1lKGNvbnN0IEZJTEVUSU1FKixMUFNZU1RFTVRJTUUpOwpAQCAtNDkzNCwxMiArNDk3MiwxMiBAQAogCiAvKiBEZWNsYXJhdGlvbnMgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSB0aGUgc2FtZSBpbiBXaW4xNiBhbmQgV2luMzIgKi8KIAorVk9JRCAgICAgICBDbG9zZVNvdW5kKFZPSUQpOwogSEJJVE1BUDE2ICBDcmVhdGVCaXRtYXAoSU5UMzIsSU5UMzIsVUlOVDMyLFVJTlQzMixMUENWT0lEKTsKIEJPT0wxNiAgICAgQ3JlYXRlQ2FyZXQoSFdORDMyLEhCSVRNQVAzMixJTlQzMixJTlQzMik7CiBIQklUTUFQMTYgIENyZWF0ZUNvbXBhdGlibGVCaXRtYXAoSERDMzIsSU5UMzIsSU5UMzIpOwogSEJJVE1BUDE2ICBDcmVhdGVEaXNjYXJkYWJsZUJpdG1hcChIREMzMixJTlQzMixJTlQzMik7CiBCT09MMTYgICAgIERlc3Ryb3lDYXJldCh2b2lkKTsKLUJPT0wxNiAgICAgRW5kRGlhbG9nKEhXTkQzMixJTlQzMik7CiBJTlQxNiAgICAgIEV4Y2x1ZGVVcGRhdGVSZ24oSERDMzIsSFdORDMyKTsKIERXT1JEICAgICAgR2V0QXBwQ29tcGF0RmxhZ3MoSFRBU0szMik7CiBMT05HICAgICAgIEdldEJpdG1hcEJpdHMoSEJJVE1BUDMyLExPTkcsTFBWT0lEKTsKQEAgLTQ5NDgsMTUgKzQ5ODYsMTYgQEAKIFZPSUQgICAgICAgR2V0S2V5Ym9hcmRTdGF0ZShMUEJZVEUpOwogRFdPUkQgICAgICBHZXRMYXN0RXJyb3Iodm9pZCk7CiBEV09SRCAgICAgIEdldE1lbnVDaGVja01hcmtEaW1lbnNpb25zKHZvaWQpOwotQ09MT1JSRUYgICBHZXRTeXNDb2xvcihJTlQzMik7CitMT05HICAgICAgIEdldE1lc3NhZ2VFeHRyYUluZm8odm9pZCk7CitEV09SRCAgICAgIEdldE1lc3NhZ2VQb3Modm9pZCk7CitMT05HICAgICAgIEdldE1lc3NhZ2VUaW1lKHZvaWQpOwogRFdPUkQgICAgICBHZXRUaWNrQ291bnQodm9pZCk7CiBJTlQxNiAgICAgIEdldFVwZGF0ZVJnbihIV05EMzIsSFJHTjMyLEJPT0wzMik7CiBXT1JEICAgICAgIEdldFdpbmRvd1dvcmQoSFdORDMyLElOVDMyKTsKLUJPT0wxNiAgICAgSGlkZUNhcmV0KEhXTkQzMik7CitBVE9NICAgICAgIEdsb2JhbERlbGV0ZUF0b20oQVRPTSk7CiBCT09MMTYgICAgIElzV2luZG93KEhXTkQzMik7CiBWT0lEICAgICAgIExaRG9uZSh2b2lkKTsKIERXT1JEICAgICAgT2VtS2V5U2NhbihXT1JEKTsKLVVJTlQxNiAgICAgUmVhbGl6ZVBhbGV0dGUoSERDMzIpOwogRFdPUkQgICAgICBSZWdDbG9zZUtleShIS0VZKTsKIERXT1JEICAgICAgUmVnRmx1c2hLZXkoSEtFWSk7CiBWT0lEICAgICAgIFJlbGVhc2VDYXB0dXJlKHZvaWQpOwpAQCAtNDk3MCwxNCArNTAwOSwxOCBAQAogVk9JRCAgICAgICBTZXRSZWN0UmduKEhSR04zMixJTlQzMixJTlQzMixJTlQzMixJTlQzMik7CiBDT0xPUlJFRiAgIFNldFRleHRDb2xvcihIREMzMixDT0xPUlJFRik7CiBXT1JEICAgICAgIFNldFdpbmRvd1dvcmQoSFdORDMyLElOVDMyLFdPUkQpOwotQk9PTDE2ICAgICBTaG93Q2FyZXQoSFdORDMyKTsKIFZPSUQgICAgICAgVXBkYXRlV2luZG93KEhXTkQzMik7CitWT0lEICAgICAgIFdhaXRNZXNzYWdlKFZPSUQpOwogCiAvKiBEZWNsYXJhdGlvbnMgZm9yIGZ1bmN0aW9ucyB0aGF0IGNoYW5nZSBiZXR3ZWVuIFdpbjE2IGFuZCBXaW4zMiAqLwogCiBJTlQxNiAgICAgIEFjY2Vzc1Jlc291cmNlMTYoSElOU1RBTkNFMTYsSFJTUkMxNik7CiBJTlQzMiAgICAgIEFjY2Vzc1Jlc291cmNlMzIoSElOU1RBTkNFMzIsSFJTUkMzMik7CiAjZGVmaW5lICAgIEFjY2Vzc1Jlc291cmNlIFdJTkVMSUJfTkFNRShBY2Nlc3NSZXNvdXJjZSkKK0FUT00gICAgICAgQWRkQXRvbTE2KFNFR1BUUik7CitBVE9NICAgICAgIEFkZEF0b20zMkEoTFBDU1RSKTsKK0FUT00gICAgICAgQWRkQXRvbTMyVyhMUENXU1RSKTsKKyNkZWZpbmUgICAgQWRkQXRvbSBXSU5FTElCX05BTUVfQVcoQWRkQXRvbSkKIEJPT0wxNiAgICAgQWRqdXN0V2luZG93UmVjdDE2KExQUkVDVDE2LERXT1JELEJPT0wxNik7CiBCT09MMzIgICAgIEFkanVzdFdpbmRvd1JlY3QzMihMUFJFQ1QzMixEV09SRCxCT09MMzIpOwogI2RlZmluZSAgICBBZGp1c3RXaW5kb3dSZWN0IFdJTkVMSUJfTkFNRShBZGp1c3RXaW5kb3dSZWN0KQpAQCAtNDk4Nyw2ICs1MDMwLDkgQEAKIEhHTE9CQUwxNiAgQWxsb2NSZXNvdXJjZTE2KEhJTlNUQU5DRTE2LEhSU1JDMTYsRFdPUkQpOwogSEdMT0JBTDMyICBBbGxvY1Jlc291cmNlMzIoSElOU1RBTkNFMzIsSFJTUkMzMixEV09SRCk7CiAjZGVmaW5lICAgIEFsbG9jUmVzb3VyY2UgV0lORUxJQl9OQU1FKEFsbG9jUmVzb3VyY2UpCitCT09MMTYgICAgIEFuaW1hdGVQYWxldHRlMTYoSFBBTEVUVEUxNixVSU5UMTYsVUlOVDE2LExQUEFMRVRURUVOVFJZKTsKK0JPT0wzMiAgICAgQW5pbWF0ZVBhbGV0dGUzMihIUEFMRVRURTMyLFVJTlQzMixVSU5UMzIsTFBQQUxFVFRFRU5UUlkpOworI2RlZmluZSAgICBBbmltYXRlUGFsZXR0ZSBXSU5FTElCX05BTUUoQW5pbWF0ZVBhbGV0dGUpCiBTRUdQVFIgICAgIEFuc2lMb3dlcjE2KFNFR1BUUik7CiAjZGVmaW5lICAgIEFuc2lMb3dlcjMyQSBDaGFyTG93ZXIzMkEKICNkZWZpbmUgICAgQW5zaUxvd2VyMzJXIENoYXJMb3dlcjMyVwpAQCAtNTAxOSw2ICs1MDY1LDkgQEAKICNkZWZpbmUgICAgQW5zaVVwcGVyQnVmZjMyQSBDaGFyVXBwZXJCdWZmMzJBCiAjZGVmaW5lICAgIEFuc2lVcHBlckJ1ZmYzMlcgQ2hhclVwcGVyQnVmZjMyVwogI2RlZmluZSAgICBBbnNpVXBwZXJCdWZmIFdJTkVMSUJfTkFNRV9BVyhBbnNpVXBwZXJCdWZmKQorQk9PTDE2ICAgICBBbnlQb3B1cDE2KHZvaWQpOworQk9PTDMyICAgICBBbnlQb3B1cDMyKHZvaWQpOworI2RlZmluZSAgICBBbnlQb3B1cCBXSU5FTElCX05BTUUoQW55UG9wdXApCiBCT09MMTYgICAgIEFwcGVuZE1lbnUxNihITUVOVTE2LFVJTlQxNixVSU5UMTYsU0VHUFRSKTsKIEJPT0wzMiAgICAgQXBwZW5kTWVudTMyQShITUVOVTMyLFVJTlQzMixVSU5UMzIsTFBDU1RSKTsKIEJPT0wzMiAgICAgQXBwZW5kTWVudTMyVyhITUVOVTMyLFVJTlQzMixVSU5UMzIsTFBDV1NUUik7CkBAIC01MDQ4LDYgKzUwOTcsMTAgQEAKIEJPT0wzMiAgICAgQnVpbGRDb21tRENCQW5kVGltZW91dHMzMkEoTFBDU1RSLExQRENCMzIsTFBDT01NVElNRU9VVFMpOwogQk9PTDMyICAgICBCdWlsZENvbW1EQ0JBbmRUaW1lb3V0czMyVyhMUENXU1RSLExQRENCMzIsTFBDT01NVElNRU9VVFMpOwogI2RlZmluZSAgICBCdWlsZENvbW1EQ0JBbmRUaW1lb3V0cyBXSU5FTElCX05BTUVfQVcoQnVpbGRDb21tRENCQW5kVGltZW91dHMpCitCT09MMTYgICAgIENhbGxNc2dGaWx0ZXIxNihTRUdQVFIsSU5UMTYpOworQk9PTDMyICAgICBDYWxsTXNnRmlsdGVyMzJBKExQTVNHMzIsSU5UMzIpOworQk9PTDMyICAgICBDYWxsTXNnRmlsdGVyMzJXKExQTVNHMzIsSU5UMzIpOworI2RlZmluZSAgICBDYWxsTXNnRmlsdGVyIFdJTkVMSUJfTkFNRV9BVyhDYWxsTXNnRmlsdGVyKQogTFJFU1VMVCAgICBDYWxsTmV4dEhvb2tFeDE2KEhIT09LLElOVDE2LFdQQVJBTTE2LExQQVJBTSk7CiBMUkVTVUxUICAgIENhbGxOZXh0SG9va0V4MzIoSEhPT0ssSU5UMzIsV1BBUkFNMzIsTFBBUkFNKTsKICNkZWZpbmUgICAgQ2FsbE5leHRIb29rRXggV0lORUxJQl9OQU1FKENhbGxOZXh0SG9va0V4KQpAQCAtNTExNiw5ICs1MTY5LDE1IEBACiBCT09MMTYgICAgIENsaXBDdXJzb3IxNihjb25zdCBSRUNUMTYqKTsKIEJPT0wzMiAgICAgQ2xpcEN1cnNvcjMyKGNvbnN0IFJFQ1QzMiopOwogI2RlZmluZSAgICBDbGlwQ3Vyc29yIFdJTkVMSUJfTkFNRShDbGlwQ3Vyc29yKQorQk9PTDE2ICAgICBDbG9zZUNsaXBib2FyZDE2KHZvaWQpOworQk9PTDMyICAgICBDbG9zZUNsaXBib2FyZDMyKHZvaWQpOworI2RlZmluZSAgICBDbG9zZUNsaXBib2FyZCBXSU5FTElCX05BTUUoQ2xvc2VDbGlwYm9hcmQpCiBITUVUQUZJTEUxNiBDbG9zZU1ldGFGaWxlMTYoSERDMTYpOwogSE1FVEFGSUxFMzIgQ2xvc2VNZXRhRmlsZTMyKEhEQzMyKTsKICNkZWZpbmUgICAgQ2xvc2VNZXRhRmlsZSBXSU5FTElCX05BTUUoQ2xvc2VNZXRhRmlsZSkKK0JPT0wxNiAgICAgQ2xvc2VXaW5kb3cxNihIV05EMTYpOworQk9PTDMyICAgICBDbG9zZVdpbmRvdzMyKEhXTkQzMik7CisjZGVmaW5lICAgIENsb3NlV2luZG93IFdJTkVMSUJfTkFNRShDbG9zZVdpbmRvdykKIElOVDE2ICAgICAgQ29tYmluZVJnbjE2KEhSR04xNixIUkdOMTYsSFJHTjE2LElOVDE2KTsKIElOVDMyICAgICAgQ29tYmluZVJnbjMyKEhSR04zMixIUkdOMzIsSFJHTjMyLElOVDMyKTsKICNkZWZpbmUgICAgQ29tYmluZVJnbiBXSU5FTElCX05BTUUoQ29tYmluZVJnbikKQEAgLTUxMzUsOSArNTE5NCwxOSBAQAogTE9ORyAgICAgICBDb3B5TFpGaWxlMTYoSEZJTEUxNixIRklMRTE2KTsKIExPTkcgICAgICAgQ29weUxaRmlsZTMyKEhGSUxFMzIsSEZJTEUzMik7CiAjZGVmaW5lICAgIENvcHlMWkZpbGUgV0lORUxJQl9OQU1FKENvcHlMWkZpbGUpCitITUVUQUZJTEUxNiBDb3B5TWV0YUZpbGUxNihITUVUQUZJTEUxNixMUENTVFIpOworSE1FVEFGSUxFMzIgQ29weU1ldGFGaWxlMzJBKEhNRVRBRklMRTMyLExQQ1NUUik7CitITUVUQUZJTEUzMiBDb3B5TWV0YUZpbGUzMlcoSE1FVEFGSUxFMzIsTFBDV1NUUik7CisjZGVmaW5lICAgIENvcHlNZXRhRmlsZSBXSU5FTElCX05BTUVfQVcoQ29weU1ldGFGaWxlKQogQk9PTDE2ICAgICBDb3B5UmVjdDE2KFJFQ1QxNiosY29uc3QgUkVDVDE2Kik7CiBCT09MMzIgICAgIENvcHlSZWN0MzIoUkVDVDMyKixjb25zdCBSRUNUMzIqKTsKICNkZWZpbmUgICAgQ29weVJlY3QgV0lORUxJQl9OQU1FKENvcHlSZWN0KQorSU5UMTYgICAgICBDb3VudENsaXBib2FyZEZvcm1hdHMxNih2b2lkKTsKK0lOVDMyICAgICAgQ291bnRDbGlwYm9hcmRGb3JtYXRzMzIodm9pZCk7CisjZGVmaW5lICAgIENvdW50Q2xpcGJvYXJkRm9ybWF0cyBXSU5FTElCX05BTUUoQ291bnRDbGlwYm9hcmRGb3JtYXRzKQorSU5UMTYgICAgICBDb3VudFZvaWNlTm90ZXMxNihJTlQxNik7CitEV09SRCAgICAgIENvdW50Vm9pY2VOb3RlczMyKERXT1JEKTsKKyNkZWZpbmUgICAgQ291bnRWb2ljZU5vdGVzIFdJTkVMSUJfTkFNRShDb3VudFZvaWNlTm90ZXMpCiBIQklUTUFQMTYgIENyZWF0ZUJpdG1hcEluZGlyZWN0MTYoY29uc3QgQklUTUFQMTYqKTsKIEhCSVRNQVAzMiAgQ3JlYXRlQml0bWFwSW5kaXJlY3QzMihjb25zdCBCSVRNQVAzMiopOwogI2RlZmluZSAgICBDcmVhdGVCaXRtYXBJbmRpcmVjdCBXSU5FTElCX05BTUUoQ3JlYXRlQml0bWFwSW5kaXJlY3QpCkBAIC01MTQ3LDYgKzUyMTYsOSBAQAogSERDMTYgICAgICBDcmVhdGVDb21wYXRpYmxlREMxNihIREMxNik7CiBIREMzMiAgICAgIENyZWF0ZUNvbXBhdGlibGVEQzMyKEhEQzMyKTsKICNkZWZpbmUgICAgQ3JlYXRlQ29tcGF0aWJsZURDIFdJTkVMSUJfTkFNRShDcmVhdGVDb21wYXRpYmxlREMpCitIQ1VSU09SMTYgIENyZWF0ZUN1cnNvcjE2KEhJTlNUQU5DRTE2LElOVDE2LElOVDE2LElOVDE2LElOVDE2LExQQ1ZPSUQsTFBDVk9JRCk7CitIQ1VSU09SMzIgIENyZWF0ZUN1cnNvcjMyKEhJTlNUQU5DRTMyLElOVDMyLElOVDMyLElOVDMyLElOVDMyLExQQ1ZPSUQsTFBDVk9JRCk7CisjZGVmaW5lICAgIENyZWF0ZUN1cnNvciBXSU5FTElCX05BTUUoQ3JlYXRlQ3Vyc29yKQogSERDMTYgICAgICBDcmVhdGVEQzE2KExQQ1NUUixMUENTVFIsTFBDU1RSLGNvbnN0IERFVk1PREUxNiopOwogSERDMzIgICAgICBDcmVhdGVEQzMyQShMUENTVFIsTFBDU1RSLExQQ1NUUixjb25zdCBERVZNT0RFMzJBKik7CiBIREMzMiAgICAgIENyZWF0ZURDMzJXKExQQ1dTVFIsTFBDV1NUUixMUENXU1RSLGNvbnN0IERFVk1PREUzMlcqKTsKQEAgLTUyMDcsNiArNTI3OSw5IEBACiBIREMzMiAgICAgIENyZWF0ZUlDMzJBKExQQ1NUUixMUENTVFIsTFBDU1RSLGNvbnN0IERFVk1PREUzMkEqKTsKIEhEQzMyICAgICAgQ3JlYXRlSUMzMlcoTFBDV1NUUixMUENXU1RSLExQQ1dTVFIsY29uc3QgREVWTU9ERTMyVyopOwogI2RlZmluZSAgICBDcmVhdGVJQyBXSU5FTElCX05BTUVfQVcoQ3JlYXRlSUMpCitISUNPTjE2ICAgIENyZWF0ZUljb24xNihISU5TVEFOQ0UxNixJTlQxNixJTlQxNixCWVRFLEJZVEUsTFBDVk9JRCxMUENWT0lEKTsKK0hJQ09OMzIgICAgQ3JlYXRlSWNvbjMyKEhJTlNUQU5DRTMyLElOVDMyLElOVDMyLEJZVEUsQllURSxMUENWT0lELExQQ1ZPSUQpOworI2RlZmluZSAgICBDcmVhdGVJY29uIFdJTkVMSUJfTkFNRShDcmVhdGVJY29uKQogSE1FTlUxNiAgICBDcmVhdGVNZW51MTYodm9pZCk7CiBITUVOVTMyICAgIENyZWF0ZU1lbnUzMih2b2lkKTsKICNkZWZpbmUgICAgQ3JlYXRlTWVudSBXSU5FTElCX05BTUUoQ3JlYXRlTWVudSkKQEAgLTUyMTQsNiArNTI4OSw5IEBACiBIREMzMiAgICAgIENyZWF0ZU1ldGFGaWxlMzJBKExQQ1NUUik7CiBIREMzMiAgICAgIENyZWF0ZU1ldGFGaWxlMzJXKExQQ1dTVFIpOwogI2RlZmluZSAgICBDcmVhdGVNZXRhRmlsZSBXSU5FTElCX05BTUVfQVcoQ3JlYXRlTWV0YUZpbGUpCitIUEFMRVRURTE2IENyZWF0ZVBhbGV0dGUxNihjb25zdCBMT0dQQUxFVFRFKik7CitIUEFMRVRURTMyIENyZWF0ZVBhbGV0dGUzMihjb25zdCBMT0dQQUxFVFRFKik7CisjZGVmaW5lICAgIENyZWF0ZVBhbGV0dGUgV0lORUxJQl9OQU1FKENyZWF0ZVBhbGV0dGUpCiBIQlJVU0gxNiAgIENyZWF0ZVBhdHRlcm5CcnVzaDE2KEhCSVRNQVAxNik7CiBIQlJVU0gzMiAgIENyZWF0ZVBhdHRlcm5CcnVzaDMyKEhCSVRNQVAzMik7CiAjZGVmaW5lICAgIENyZWF0ZVBhdHRlcm5CcnVzaCBXSU5FTElCX05BTUUoQ3JlYXRlUGF0dGVybkJydXNoKQpAQCAtNTI4MSw2ICs1MzU5LDkgQEAKIExSRVNVTFQgICAgRGVmV2luZG93UHJvYzMyQShIV05EMzIsVUlOVDMyLFdQQVJBTTMyLExQQVJBTSk7CiBMUkVTVUxUICAgIERlZldpbmRvd1Byb2MzMlcoSFdORDMyLFVJTlQzMixXUEFSQU0zMixMUEFSQU0pOwogI2RlZmluZSAgICBEZWZXaW5kb3dQcm9jIFdJTkVMSUJfTkFNRV9BVyhEZWZXaW5kb3dQcm9jKQorQVRPTSAgICAgICBEZWxldGVBdG9tMTYoQVRPTSk7CitBVE9NICAgICAgIERlbGV0ZUF0b20zMihBVE9NKTsKKyNkZWZpbmUgICAgRGVsZXRlQXRvbSBXSU5FTElCX05BTUUoRGVsZXRlQXRvbSkKIEJPT0wxNiAgICAgRGVsZXRlREMxNihIREMxNik7CiBCT09MMzIgICAgIERlbGV0ZURDMzIoSERDMzIpOwogI2RlZmluZSAgICBEZWxldGVEQyBXSU5FTElCX05BTUUoRGVsZXRlREMpCkBAIC01Mjk3LDYgKzUzNzgsMTIgQEAKIEJPT0wxNiAgICAgRGVsZXRlT2JqZWN0MTYoSEdESU9CSjE2KTsKIEJPT0wzMiAgICAgRGVsZXRlT2JqZWN0MzIoSEdESU9CSjMyKTsKICNkZWZpbmUgICAgRGVsZXRlT2JqZWN0IFdJTkVMSUJfTkFNRShEZWxldGVPYmplY3QpCitCT09MMTYgICAgIERlc3Ryb3lDdXJzb3IxNihIQ1VSU09SMTYpOworQk9PTDMyICAgICBEZXN0cm95Q3Vyc29yMzIoSENVUlNPUjMyKTsKKyNkZWZpbmUgICAgRGVzdHJveUN1cnNvciBXSU5FTElCX05BTUUoRGVzdHJveUN1cnNvcikKK0JPT0wxNiAgICAgRGVzdHJveUljb24xNihISUNPTjE2KTsKK0JPT0wzMiAgICAgRGVzdHJveUljb24zMihISUNPTjMyKTsKKyNkZWZpbmUgICAgRGVzdHJveUljb24gV0lORUxJQl9OQU1FKERlc3Ryb3lJY29uKQogQk9PTDE2ICAgICBEZXN0cm95TWVudTE2KEhNRU5VMTYpOwogQk9PTDMyICAgICBEZXN0cm95TWVudTMyKEhNRU5VMzIpOwogI2RlZmluZSAgICBEZXN0cm95TWVudSBXSU5FTElCX05BTUUoRGVzdHJveU1lbnUpCkBAIC01MzIzLDYgKzU0MTAsMTAgQEAKIElOVDMyICAgICAgRGlhbG9nQm94UGFyYW0zMkEoSElOU1RBTkNFMzIsTFBDU1RSLEhXTkQzMixETEdQUk9DMzIsTFBBUkFNKTsKIElOVDMyICAgICAgRGlhbG9nQm94UGFyYW0zMlcoSElOU1RBTkNFMzIsTFBDV1NUUixIV05EMzIsRExHUFJPQzMyLExQQVJBTSk7CiAjZGVmaW5lICAgIERpYWxvZ0JveFBhcmFtIFdJTkVMSUJfTkFNRV9BVyhEaWFsb2dCb3hQYXJhbSkKK0xPTkcgICAgICAgRGlzcGF0Y2hNZXNzYWdlMTYoY29uc3QgTVNHMTYqKTsKK0xPTkcgICAgICAgRGlzcGF0Y2hNZXNzYWdlMzJBKGNvbnN0IE1TRzMyKik7CitMT05HICAgICAgIERpc3BhdGNoTWVzc2FnZTMyVyhjb25zdCBNU0czMiopOworI2RlZmluZSAgICBEaXNwYXRjaE1lc3NhZ2UgV0lORUxJQl9OQU1FX0FXKERpc3BhdGNoTWVzc2FnZSkKIElOVDE2ICAgICAgRGxnRGlyTGlzdDE2KEhXTkQxNixMUENTVFIsSU5UMTYsSU5UMTYsVUlOVDE2KTsKIElOVDMyICAgICAgRGxnRGlyTGlzdDMyQShIV05EMzIsTFBDU1RSLElOVDMyLElOVDMyLFVJTlQzMik7CiBJTlQzMiAgICAgIERsZ0Rpckxpc3QzMlcoSFdORDMyLExQQ1dTVFIsSU5UMzIsSU5UMzIsVUlOVDMyKTsKQEAgLTUzNDIsNiArNTQzMyw5IEBACiBCT09MMTYgICAgIERQdG9MUDE2KEhEQzE2LExQUE9JTlQxNixJTlQxNik7CiBCT09MMzIgICAgIERQdG9MUDMyKEhEQzMyLExQUE9JTlQzMixJTlQzMik7CiAjZGVmaW5lICAgIERQdG9MUCBXSU5FTElCX05BTUUoRFB0b0xQKQorQk9PTDE2ICAgICBEcmFnRGV0ZWN0MTYoSFdORDE2LFBPSU5UMTYpOworQk9PTDMyICAgICBEcmFnRGV0ZWN0MzIoSFdORDMyLFBPSU5UMzIpOworI2RlZmluZSAgICBEcmFnRGV0ZWN0IFdJTkVMSUJfTkFNRShEcmFnRGV0ZWN0KQogQk9PTDE2ICAgICBEcmF3RWRnZTE2KEhEQzE2LExQUkVDVDE2LFVJTlQxNixVSU5UMTYpOwogQk9PTDMyICAgICBEcmF3RWRnZTMyKEhEQzMyLExQUkVDVDMyLFVJTlQzMixVSU5UMzIpOwogI2RlZmluZSAgICBEcmF3RWRnZSBXSU5FTElCX05BTUUoRHJhd0VkZ2UpCkBAIC01MzUxLDYgKzU0NDUsOSBAQAogQk9PTDE2ICAgICBEcmF3RnJhbWVDb250cm9sMTYoSERDMTYsTFBSRUNUMTYsVUlOVDE2LFVJTlQxNik7CiBCT09MMzIgICAgIERyYXdGcmFtZUNvbnRyb2wzMihIREMzMixMUFJFQ1QzMixVSU5UMzIsVUlOVDMyKTsKICNkZWZpbmUgICAgRHJhd0ZyYW1lQ29udHJvbCBXSU5FTElCX05BTUUoRHJhd0ZyYW1lQ29udHJvbCkKK0JPT0wxNiAgICAgRHJhd0ljb24xNihIREMxNixJTlQxNixJTlQxNixISUNPTjE2KTsKK0JPT0wzMiAgICAgRHJhd0ljb24zMihIREMzMixJTlQzMixJTlQzMixISUNPTjMyKTsKKyNkZWZpbmUgICAgRHJhd0ljb24gV0lORUxJQl9OQU1FKERyYXdJY29uKQogVk9JRCAgICAgICBEcmF3TWVudUJhcjE2KEhXTkQxNik7CiBCT09MMzIgICAgIERyYXdNZW51QmFyMzIoSFdORDMyKTsKICNkZWZpbmUgICAgRHJhd01lbnVCYXIgV0lORUxJQl9OQU1FKERyYXdNZW51QmFyKQpAQCAtNTM2MSw2ICs1NDU4LDkgQEAKIEJPT0wxNiAgICAgRWxsaXBzZTE2KEhEQzE2LElOVDE2LElOVDE2LElOVDE2LElOVDE2KTsKIEJPT0wzMiAgICAgRWxsaXBzZTMyKEhEQzMyLElOVDMyLElOVDMyLElOVDMyLElOVDMyKTsKICNkZWZpbmUgICAgRWxsaXBzZSBXSU5FTElCX05BTUUoRWxsaXBzZSkKK0JPT0wxNiAgICAgRW1wdHlDbGlwYm9hcmQxNih2b2lkKTsKK0JPT0wzMiAgICAgRW1wdHlDbGlwYm9hcmQzMih2b2lkKTsKKyNkZWZpbmUgICAgRW1wdHlDbGlwYm9hcmQgV0lORUxJQl9OQU1FKEVtcHR5Q2xpcGJvYXJkKQogQk9PTDE2ICAgICBFbmFibGVNZW51SXRlbTE2KEhNRU5VMTYsVUlOVDE2LFVJTlQxNik7CiBCT09MMzIgICAgIEVuYWJsZU1lbnVJdGVtMzIoSE1FTlUzMixVSU5UMzIsVUlOVDMyKTsKICNkZWZpbmUgICAgRW5hYmxlTWVudUl0ZW0gV0lORUxJQl9OQU1FKEVuYWJsZU1lbnVJdGVtKQpAQCAtNTM3MywxMiArNTQ3MywxOCBAQAogQk9PTDE2ICAgICBFbmREZWZlcldpbmRvd1BvczE2KEhEV1AxNik7CiBCT09MMzIgICAgIEVuZERlZmVyV2luZG93UG9zMzIoSERXUDMyKTsKICNkZWZpbmUgICAgRW5kRGVmZXJXaW5kb3dQb3MgV0lORUxJQl9OQU1FKEVuZERlZmVyV2luZG93UG9zKQorQk9PTDE2ICAgICBFbmREaWFsb2cxNihIV05EMTYsSU5UMTYpOworQk9PTDMyICAgICBFbmREaWFsb2czMihIV05EMzIsSU5UMzIpOworI2RlZmluZSAgICBFbmREaWFsb2cgV0lORUxJQl9OQU1FKEVuZERpYWxvZykKIEJPT0wxNiAgICAgRW5kUGFpbnQxNihIV05EMTYsY29uc3QgUEFJTlRTVFJVQ1QxNiopOwogQk9PTDMyICAgICBFbmRQYWludDMyKEhXTkQzMixjb25zdCBQQUlOVFNUUlVDVDMyKik7CiAjZGVmaW5lICAgIEVuZFBhaW50IFdJTkVMSUJfTkFNRShFbmRQYWludCkKIEJPT0wxNiAgICAgRW51bUNoaWxkV2luZG93czE2KEhXTkQxNixXTkRFTlVNUFJPQzE2LExQQVJBTSk7CiBCT09MMzIgICAgIEVudW1DaGlsZFdpbmRvd3MzMihIV05EMzIsV05ERU5VTVBST0MzMixMUEFSQU0pOwogI2RlZmluZSAgICBFbnVtQ2hpbGRXaW5kb3dzIFdJTkVMSUJfTkFNRShFbnVtQ2hpbGRXaW5kb3dzKQorVUlOVDE2ICAgICBFbnVtQ2xpcGJvYXJkRm9ybWF0czE2KFVJTlQxNik7CitVSU5UMzIgICAgIEVudW1DbGlwYm9hcmRGb3JtYXRzMzIoVUlOVDMyKTsKKyNkZWZpbmUgICAgRW51bUNsaXBib2FyZEZvcm1hdHMgV0lORUxJQl9OQU1FKEVudW1DbGlwYm9hcmRGb3JtYXRzKQogSU5UMTYgICAgICBFbnVtRm9udEZhbWlsaWVzMTYoSERDMTYsTFBDU1RSLEZPTlRFTlVNUFJPQzE2LExQQVJBTSk7CiBJTlQzMiAgICAgIEVudW1Gb250RmFtaWxpZXMzMkEoSERDMzIsTFBDU1RSLEZPTlRFTlVNUFJPQzMyQSxMUEFSQU0pOwogSU5UMzIgICAgICBFbnVtRm9udEZhbWlsaWVzMzJXKEhEQzMyLExQQ1dTVFIsRk9OVEVOVU1QUk9DMzJXLExQQVJBTSk7CkBAIC01NDQwLDYgKzU1NDYsMTAgQEAKIEJPT0wxNiAgICAgRmlsbFJnbjE2KEhEQzE2LEhSR04xNixIQlJVU0gxNik7CiBCT09MMzIgICAgIEZpbGxSZ24zMihIREMzMixIUkdOMzIsSEJSVVNIMzIpOwogI2RlZmluZSAgICBGaWxsUmduIFdJTkVMSUJfTkFNRShGaWxsUmduKQorQVRPTSAgICAgICBGaW5kQXRvbTE2KFNFR1BUUik7CitBVE9NICAgICAgIEZpbmRBdG9tMzJBKExQQ1NUUik7CitBVE9NICAgICAgIEZpbmRBdG9tMzJXKExQQ1dTVFIpOworI2RlZmluZSAgICBGaW5kQXRvbSBXSU5FTElCX05BTUVfQVcoRmluZEF0b20pCiBCT09MMTYgICAgIEZpbmRDbG9zZTE2KEhBTkRMRTE2KTsKIEJPT0wzMiAgICAgRmluZENsb3NlMzIoSEFORExFMzIpOwogI2RlZmluZSAgICBGaW5kQ2xvc2UgV0lORUxJQl9OQU1FKEZpbmRDbG9zZSkKQEAgLTU0NjMsNiArNTU3Myw5IEBACiBIV05EMzIgICAgIEZpbmRXaW5kb3dFeDMyQShIV05EMzIsSFdORDMyLExQQ1NUUixMUENTVFIpOwogSFdORDMyICAgICBGaW5kV2luZG93RXgzMlcoSFdORDMyLEhXTkQzMixMUENXU1RSLExQQ1dTVFIpOwogI2RlZmluZSAgICBGaW5kV2luZG93RXggV0lORUxJQl9OQU1FX0FXKEZpbmRXaW5kb3dFeCkKK0JPT0wxNiAgICAgRmxhc2hXaW5kb3cxNihIV05EMTYsQk9PTDE2KTsKK0JPT0wzMiAgICAgRmxhc2hXaW5kb3czMihIV05EMzIsQk9PTDMyKTsKKyNkZWZpbmUgICAgRmxhc2hXaW5kb3cgV0lORUxJQl9OQU1FKEZsYXNoV2luZG93KQogQk9PTDE2ICAgICBGbG9vZEZpbGwxNihIREMxNixJTlQxNixJTlQxNixDT0xPUlJFRik7CiBCT09MMzIgICAgIEZsb29kRmlsbDMyKEhEQzMyLElOVDMyLElOVDMyLENPTE9SUkVGKTsKICNkZWZpbmUgICAgRmxvb2RGaWxsIFdJTkVMSUJfTkFNRShGbG9vZEZpbGwpCkBAIC01NDg3LDYgKzU2MDAsMTAgQEAKIFdPUkQgICAgICAgR2V0QXN5bmNLZXlTdGF0ZTE2KElOVDE2KTsKIFdPUkQgICAgICAgR2V0QXN5bmNLZXlTdGF0ZTMyKElOVDMyKTsKICNkZWZpbmUgICAgR2V0QXN5bmNLZXlTdGF0ZSBXSU5FTElCX05BTUUoR2V0QXN5bmNLZXlTdGF0ZSkKK1VJTlQxNiAgICAgR2V0QXRvbU5hbWUxNihBVE9NLExQU1RSLElOVDE2KTsKK1VJTlQzMiAgICAgR2V0QXRvbU5hbWUzMkEoQVRPTSxMUFNUUixJTlQzMik7CitVSU5UMzIgICAgIEdldEF0b21OYW1lMzJXKEFUT00sTFBXU1RSLElOVDMyKTsKKyNkZWZpbmUgICAgR2V0QXRvbU5hbWUgV0lORUxJQl9OQU1FX0FXKEdldEF0b21OYW1lKQogQk9PTDE2ICAgICBHZXRCaXRtYXBEaW1lbnNpb25FeDE2KEhCSVRNQVAxNixMUFNJWkUxNik7CiBCT09MMzIgICAgIEdldEJpdG1hcERpbWVuc2lvbkV4MzIoSEJJVE1BUDMyLExQU0laRTMyKTsKICNkZWZpbmUgICAgR2V0Qml0bWFwRGltZW5zaW9uRXggV0lORUxJQl9OQU1FKEdldEJpdG1hcERpbWVuc2lvbkV4KQpAQCAtNTUzNSw2ICs1NjUyLDEyIEBACiB2b2lkICAgICAgIEdldENsaWVudFJlY3QxNihIV05EMTYsTFBSRUNUMTYpOwogdm9pZCAgICAgICBHZXRDbGllbnRSZWN0MzIoSFdORDMyLExQUkVDVDMyKTsKICNkZWZpbmUgICAgR2V0Q2xpZW50UmVjdCBXSU5FTElCX05BTUUoR2V0Q2xpZW50UmVjdCkKK0hXTkQxNiAgICAgR2V0Q2xpcGJvYXJkT3duZXIxNih2b2lkKTsKK0hXTkQzMiAgICAgR2V0Q2xpcGJvYXJkT3duZXIzMih2b2lkKTsKKyNkZWZpbmUgICAgR2V0Q2xpcGJvYXJkT3duZXIgV0lORUxJQl9OQU1FKEdldENsaXBib2FyZE93bmVyKQorSFdORDE2ICAgICBHZXRDbGlwYm9hcmRWaWV3ZXIxNih2b2lkKTsKK0hXTkQzMiAgICAgR2V0Q2xpcGJvYXJkVmlld2VyMzIodm9pZCk7CisjZGVmaW5lICAgIEdldENsaXBib2FyZFZpZXdlciBXSU5FTElCX05BTUUoR2V0Q2xpcGJvYXJkVmlld2VyKQogSU5UMTYgICAgICBHZXRDbGlwQm94MTYoSERDMTYsTFBSRUNUMTYpOwogSU5UMzIgICAgICBHZXRDbGlwQm94MzIoSERDMzIsTFBSRUNUMzIpOwogI2RlZmluZSAgICBHZXRDbGlwQm94IFdJTkVMSUJfTkFNRShHZXRDbGlwQm94KQpAQCAtNTU1NCw2ICs1Njc3LDEyIEBACiBCT09MMTYgICAgIEdldEN1cnJlbnRQb3NpdGlvbkV4MTYoSERDMTYsTFBQT0lOVDE2KTsKIEJPT0wzMiAgICAgR2V0Q3VycmVudFBvc2l0aW9uRXgzMihIREMzMixMUFBPSU5UMzIpOwogI2RlZmluZSAgICBHZXRDdXJyZW50UG9zaXRpb25FeCBXSU5FTElCX05BTUUoR2V0Q3VycmVudFBvc2l0aW9uRXgpCitEV09SRCAgICAgIEdldEN1cnJlbnRUaW1lMTYodm9pZCk7CisjZGVmaW5lICAgIEdldEN1cnJlbnRUaW1lMzIoKSBHZXRUaWNrQ291bnQoKQorI2RlZmluZSAgICBHZXRDdXJyZW50VGltZSBXSU5FTElCX05BTUUoR2V0Q3VycmVudFRpbWUpCitIQ1VSU09SMTYgIEdldEN1cnNvcjE2KHZvaWQpOworSENVUlNPUjMyICBHZXRDdXJzb3IzMih2b2lkKTsKKyNkZWZpbmUgICAgR2V0Q3Vyc29yIFdJTkVMSUJfTkFNRShHZXRDdXJzb3IpCiB2b2lkICAgICAgIEdldEN1cnNvclBvczE2KExQUE9JTlQxNik7CiB2b2lkICAgICAgIEdldEN1cnNvclBvczMyKExQUE9JTlQzMik7CiAjZGVmaW5lICAgIEdldEN1cnNvclBvcyBXSU5FTElCX05BTUUoR2V0Q3Vyc29yUG9zKQpAQCAtNTU2Niw2ICs1Njk1LDkgQEAKIEhXTkQxNiAgICAgR2V0RGVza3RvcFdpbmRvdzE2KHZvaWQpOwogSFdORDMyICAgICBHZXREZXNrdG9wV2luZG93MzIodm9pZCk7CiAjZGVmaW5lICAgIEdldERlc2t0b3BXaW5kb3cgV0lORUxJQl9OQU1FKEdldERlc2t0b3BXaW5kb3cpCitJTlQxNiAgICAgIEdldERldmljZUNhcHMxNihIREMxNixJTlQxNik7CitJTlQzMiAgICAgIEdldERldmljZUNhcHMzMihIREMzMixJTlQzMik7CisjZGVmaW5lICAgIEdldERldmljZUNhcHMgV0lORUxJQl9OQU1FKEdldERldmljZUNhcHMpCiBJTlQxNiAgICAgIEdldERJQml0czE2KEhEQzE2LEhCSVRNQVAxNixVSU5UMTYsVUlOVDE2LExQU1RSLExQQklUTUFQSU5GTyxVSU5UMTYpOwogSU5UMzIgICAgICBHZXRESUJpdHMzMihIREMzMixIQklUTUFQMzIsVUlOVDMyLFVJTlQzMixMUFNUUixMUEJJVE1BUElORk8sVUlOVDMyKTsKICNkZWZpbmUgICAgR2V0RElCaXRzIFdJTkVMSUJfTkFNRShHZXRESUJpdHMpCkBAIC01NTg2LDYgKzU3MTgsOSBAQAogSU5UMzIgICAgICBHZXREbGdJdGVtVGV4dDMyQShIV05EMzIsSU5UMzIsTFBTVFIsVUlOVDMyKTsKIElOVDMyICAgICAgR2V0RGxnSXRlbVRleHQzMlcoSFdORDMyLElOVDMyLExQV1NUUixVSU5UMzIpOwogI2RlZmluZSAgICBHZXREbGdJdGVtVGV4dCBXSU5FTElCX05BTUVfQVcoR2V0RGxnSXRlbVRleHQpCitVSU5UMTYgICAgIEdldERvdWJsZUNsaWNrVGltZTE2KHZvaWQpOworVUlOVDMyICAgICBHZXREb3VibGVDbGlja1RpbWUzMih2b2lkKTsKKyNkZWZpbmUgICAgR2V0RG91YmxlQ2xpY2tUaW1lIFdJTkVMSUJfTkFNRShHZXREb3VibGVDbGlja1RpbWUpCiBVSU5UMTYgICAgIEdldERyaXZlVHlwZTE2KFVJTlQxNik7IC8qIHllcywgdGhlIGFyZ3VtZW50cyBkaWZmZXIgKi8KIFVJTlQzMiAgICAgR2V0RHJpdmVUeXBlMzJBKExQQ1NUUik7CiBVSU5UMzIgICAgIEdldERyaXZlVHlwZTMyVyhMUENXU1RSKTsKQEAgLTU2MDksOSArNTc0NCwxOCBAQAogSFdORDE2ICAgICBHZXRGb2N1czE2KHZvaWQpOwogSFdORDMyICAgICBHZXRGb2N1czMyKHZvaWQpOwogI2RlZmluZSAgICBHZXRGb2N1cyBXSU5FTElCX05BTUUoR2V0Rm9jdXMpCitEV09SRCAgICAgIEdldEZyZWVTcGFjZTE2KFVJTlQxNik7CisjZGVmaW5lICAgIEdldEZyZWVTcGFjZTMyKHcpICgweDEwMDAwMEwpCisjZGVmaW5lICAgIEdldEZyZWVTcGFjZSBXSU5FTElCX05BTUUoR2V0RnJlZVNwYWNlKQorQk9PTDE2ICAgICBHZXRJbnB1dFN0YXRlMTYodm9pZCk7CitCT09MMzIgICAgIEdldElucHV0U3RhdGUzMih2b2lkKTsKKyNkZWZpbmUgICAgR2V0SW5wdXRTdGF0ZSBXSU5FTElCX05BTUUoR2V0SW5wdXRTdGF0ZSkKIFVJTlQxNiAgICAgR2V0SW50ZXJuYWxXaW5kb3dQb3MxNihIV05EMTYsTFBSRUNUMTYsTFBQT0lOVDE2KTsKIFVJTlQzMiAgICAgR2V0SW50ZXJuYWxXaW5kb3dQb3MzMihIV05EMzIsTFBSRUNUMzIsTFBQT0lOVDMyKTsKICNkZWZpbmUgICAgR2V0SW50ZXJuYWxXaW5kb3dQb3MgV0lORUxJQl9OQU1FKEdldEludGVybmFsV2luZG93UG9zKQorSU5UMTYgICAgICBHZXRLQkNvZGVQYWdlMTYodm9pZCk7CitVSU5UMzIgICAgIEdldEtCQ29kZVBhZ2UzMih2b2lkKTsKKyNkZWZpbmUgICAgR2V0S0JDb2RlUGFnZSBXSU5FTElCX05BTUUoR2V0S0JDb2RlUGFnZSkKIElOVDE2ICAgICAgR2V0S2V5Ym9hcmRUeXBlMTYoSU5UMTYpOwogSU5UMzIgICAgICBHZXRLZXlib2FyZFR5cGUzMihJTlQzMik7CiAjZGVmaW5lICAgIEdldEtleWJvYXJkVHlwZSBXSU5FTElCX05BTUUoR2V0S2V5Ym9hcmRUeXBlKQpAQCAtNTYyMiw2ICs1NzY2LDkgQEAKIFdPUkQgICAgICAgR2V0S2V5U3RhdGUxNihJTlQxNik7CiBXT1JEICAgICAgIEdldEtleVN0YXRlMzIoSU5UMzIpOwogI2RlZmluZSAgICBHZXRLZXlTdGF0ZSBXSU5FTElCX05BTUUoR2V0S2V5U3RhdGUpCitIV05EMTYgICAgIEdldExhc3RBY3RpdmVQb3B1cDE2KEhXTkQxNik7CitIV05EMzIgICAgIEdldExhc3RBY3RpdmVQb3B1cDMyKEhXTkQzMik7CisjZGVmaW5lICAgIEdldExhc3RBY3RpdmVQb3B1cCBXSU5FTElCX05BTUUoR2V0TGFzdEFjdGl2ZVBvcHVwKQogVUlOVDMyICAgICBHZXRMb2dpY2FsRHJpdmVTdHJpbmdzMzJBKFVJTlQzMixMUFNUUik7CiBVSU5UMzIgICAgIEdldExvZ2ljYWxEcml2ZVN0cmluZ3MzMlcoVUlOVDMyLExQV1NUUik7CiAjZGVmaW5lICAgIEdldExvZ2ljYWxEcml2ZVN0cmluZ3MgV0lORUxJQl9OQU1FX0FXKEdldExvZ2ljYWxEcml2ZVN0cmluZ3MpCkBAIC01NjQ0LDEwICs1NzkxLDIwIEBACiBJTlQzMiAgICAgIEdldE1lbnVTdHJpbmczMkEoSE1FTlUzMixVSU5UMzIsTFBTVFIsSU5UMzIsVUlOVDMyKTsKIElOVDMyICAgICAgR2V0TWVudVN0cmluZzMyVyhITUVOVTMyLFVJTlQzMixMUFdTVFIsSU5UMzIsVUlOVDMyKTsKICNkZWZpbmUgICAgR2V0TWVudVN0cmluZyBXSU5FTElCX05BTUVfQVcoR2V0TWVudVN0cmluZykKK0hNRVRBRklMRTE2IEdldE1ldGFGaWxlMTYoTFBDU1RSKTsKK0hNRVRBRklMRTMyIEdldE1ldGFGaWxlMzJBKExQQ1NUUik7CitITUVUQUZJTEUzMiBHZXRNZXRhRmlsZTMyVyhMUENXU1RSKTsKKyNkZWZpbmUgICAgR2V0TWV0YUZpbGUgV0lORUxJQl9OQU1FX0FXKEdldE1ldGFGaWxlKQogSU5UMTYgICAgICBHZXRNb2R1bGVGaWxlTmFtZTE2KEhJTlNUQU5DRTE2LExQU1RSLElOVDE2KTsKIERXT1JEICAgICAgR2V0TW9kdWxlRmlsZU5hbWUzMkEoSE1PRFVMRTMyLExQU1RSLERXT1JEKTsKIERXT1JEICAgICAgR2V0TW9kdWxlRmlsZU5hbWUzMlcoSE1PRFVMRTMyLExQV1NUUixEV09SRCk7CiAjZGVmaW5lICAgIEdldE1vZHVsZUZpbGVOYW1lIFdJTkVMSUJfTkFNRV9BVyhHZXRNb2R1bGVGaWxlTmFtZSkKK0RXT1JEICAgICAgR2V0TmVhcmVzdENvbG9yMTYoSERDMTYsRFdPUkQpOworRFdPUkQgICAgICBHZXROZWFyZXN0Q29sb3IzMihIREMzMixEV09SRCk7CisjZGVmaW5lICAgIEdldE5lYXJlc3RDb2xvciBXSU5FTElCX05BTUUoR2V0TmVhcmVzdENvbG9yKQorVUlOVDE2ICAgICBHZXROZWFyZXN0UGFsZXR0ZUluZGV4MTYoSFBBTEVUVEUxNixDT0xPUlJFRik7CitVSU5UMzIgICAgIEdldE5lYXJlc3RQYWxldHRlSW5kZXgzMihIUEFMRVRURTMyLENPTE9SUkVGKTsKKyNkZWZpbmUgICAgR2V0TmVhcmVzdFBhbGV0dGVJbmRleCBXSU5FTElCX05BTUUoR2V0TmVhcmVzdFBhbGV0dGVJbmRleCkKIEhXTkQxNiAgICAgR2V0TmV4dERsZ0dyb3VwSXRlbTE2KEhXTkQxNixIV05EMTYsQk9PTDE2KTsKIEhXTkQzMiAgICAgR2V0TmV4dERsZ0dyb3VwSXRlbTMyKEhXTkQzMixIV05EMzIsQk9PTDMyKTsKICNkZWZpbmUgICAgR2V0TmV4dERsZ0dyb3VwSXRlbSBXSU5FTElCX05BTUUoR2V0TmV4dERsZ0dyb3VwSXRlbSkKQEAgLTU2NjEsNiArNTgxOCwxMiBAQAogSU5UMzIgICAgICBHZXRPYmplY3QzMkEoSEFORExFMzIsSU5UMzIsTFBWT0lEKTsKIElOVDMyICAgICAgR2V0T2JqZWN0MzJXKEhBTkRMRTMyLElOVDMyLExQVk9JRCk7CiAjZGVmaW5lICAgIEdldE9iamVjdCBXSU5FTElCX05BTUVfQVcoR2V0T2JqZWN0KQorSFdORDE2ICAgICBHZXRPcGVuQ2xpcGJvYXJkV2luZG93MTYodm9pZCk7CitIV05EMzIgICAgIEdldE9wZW5DbGlwYm9hcmRXaW5kb3czMih2b2lkKTsKKyNkZWZpbmUgICAgR2V0T3BlbkNsaXBib2FyZFdpbmRvdyBXSU5FTElCX05BTUUoR2V0T3BlbkNsaXBib2FyZFdpbmRvdykKK1VJTlQxNiAgICAgR2V0UGFsZXR0ZUVudHJpZXMxNihIUEFMRVRURTE2LFVJTlQxNixVSU5UMTYsTFBQQUxFVFRFRU5UUlkpOworVUlOVDMyICAgICBHZXRQYWxldHRlRW50cmllczMyKEhQQUxFVFRFMzIsVUlOVDMyLFVJTlQzMixMUFBBTEVUVEVFTlRSWSk7CisjZGVmaW5lICAgIEdldFBhbGV0dGVFbnRyaWVzIFdJTkVMSUJfTkFNRShHZXRQYWxldHRlRW50cmllcykKIEhXTkQxNiAgICAgR2V0UGFyZW50MTYoSFdORDE2KTsKIEhXTkQzMiAgICAgR2V0UGFyZW50MzIoSFdORDMyKTsKICNkZWZpbmUgICAgR2V0UGFyZW50IFdJTkVMSUJfTkFNRShHZXRQYXJlbnQpCkBAIC01NzIwLDYgKzU4ODMsOSBAQAogSE1FTlUxNiAgICBHZXRTdWJNZW51MTYoSE1FTlUxNixJTlQxNik7CiBITUVOVTMyICAgIEdldFN1Yk1lbnUzMihITUVOVTMyLElOVDMyKTsKICNkZWZpbmUgICAgR2V0U3ViTWVudSBXSU5FTElCX05BTUUoR2V0U3ViTWVudSkKK0NPTE9SUkVGICAgR2V0U3lzQ29sb3IxNihJTlQxNik7CitDT0xPUlJFRiAgIEdldFN5c0NvbG9yMzIoSU5UMzIpOworI2RlZmluZSAgICBHZXRTeXNDb2xvciBXSU5FTElCX05BTUUoR2V0U3lzQ29sb3IpCiBIQlJVU0gxNiAgIEdldFN5c0NvbG9yQnJ1c2gxNihJTlQxNik7CiBIQlJVU0gzMiAgIEdldFN5c0NvbG9yQnJ1c2gzMihJTlQzMik7CiAjZGVmaW5lICAgIEdldFN5c0NvbG9yQnJ1c2ggV0lORUxJQl9OQU1FKEdldFN5c0NvbG9yQnJ1c2gpCkBAIC01NzMzLDYgKzU4OTksMTkgQEAKIEhNRU5VMTYgICAgR2V0U3lzdGVtTWVudTE2KEhXTkQxNixCT09MMTYpOwogSE1FTlUzMiAgICBHZXRTeXN0ZW1NZW51MzIoSFdORDMyLEJPT0wzMik7CiAjZGVmaW5lICAgIEdldFN5c3RlbU1lbnUgV0lORUxJQl9OQU1FKEdldFN5c3RlbU1lbnUpCitJTlQxNiAgICAgIEdldFN5c3RlbU1ldHJpY3MxNihJTlQxNik7CitJTlQzMiAgICAgIEdldFN5c3RlbU1ldHJpY3MzMihJTlQzMik7CisjZGVmaW5lICAgIEdldFN5c3RlbU1ldHJpY3MgV0lORUxJQl9OQU1FKEdldFN5c3RlbU1ldHJpY3MpCitVSU5UMTYgICAgIEdldFN5c3RlbVBhbGV0dGVFbnRyaWVzMTYoSERDMTYsVUlOVDE2LFVJTlQxNixMUFBBTEVUVEVFTlRSWSk7CitVSU5UMzIgICAgIEdldFN5c3RlbVBhbGV0dGVFbnRyaWVzMzIoSERDMzIsVUlOVDMyLFVJTlQzMixMUFBBTEVUVEVFTlRSWSk7CisjZGVmaW5lICAgIEdldFN5c3RlbVBhbGV0dGVFbnRyaWVzIFdJTkVMSUJfTkFNRShHZXRTeXN0ZW1QYWxldHRlRW50cmllcykKK1VJTlQxNiAgICAgR2V0U3lzdGVtUGFsZXR0ZVVzZTE2KEhEQzE2KTsKK1VJTlQzMiAgICAgR2V0U3lzdGVtUGFsZXR0ZVVzZTMyKEhEQzMyKTsKKyNkZWZpbmUgICAgR2V0U3lzdGVtUGFsZXR0ZVVzZSBXSU5FTElCX05BTUUoR2V0U3lzdGVtUGFsZXR0ZVVzZSkKK0RXT1JEICAgICAgR2V0VGFiYmVkVGV4dEV4dGVudDE2KEhEQzE2LExQQ1NUUixJTlQxNixJTlQxNixjb25zdCBJTlQxNiopOworRFdPUkQgICAgICBHZXRUYWJiZWRUZXh0RXh0ZW50MzJBKEhEQzMyLExQQ1NUUixJTlQzMixJTlQzMixjb25zdCBJTlQzMiopOworRFdPUkQgICAgICBHZXRUYWJiZWRUZXh0RXh0ZW50MzJXKEhEQzMyLExQQ1dTVFIsSU5UMzIsSU5UMzIsY29uc3QgSU5UMzIqKTsKKyNkZWZpbmUgICAgR2V0VGFiYmVkVGV4dEV4dGVudCBXSU5FTElCX05BTUVfQVcoR2V0VGFiYmVkVGV4dEV4dGVudCkKIFVJTlQxNiAgICAgR2V0VGVtcEZpbGVOYW1lMTYoQllURSxMUENTVFIsVUlOVDE2LExQU1RSKTsKIFVJTlQzMiAgICAgR2V0VGVtcEZpbGVOYW1lMzJBKExQQ1NUUixMUENTVFIsVUlOVDMyLExQU1RSKTsKIFVJTlQzMiAgICAgR2V0VGVtcEZpbGVOYW1lMzJXKExQQ1dTVFIsTFBDV1NUUixVSU5UMzIsTFBXU1RSKTsKQEAgLTU3NjEsNiArNTk0MCwxMiBAQAogQk9PTDMyICAgICBHZXRUZXh0TWV0cmljczMyQShIREMzMixMUFRFWFRNRVRSSUMzMkEpOwogQk9PTDMyICAgICBHZXRUZXh0TWV0cmljczMyVyhIREMzMixMUFRFWFRNRVRSSUMzMlcpOwogI2RlZmluZSAgICBHZXRUZXh0TWV0cmljcyBXSU5FTElCX05BTUVfQVcoR2V0VGV4dE1ldHJpY3MpCitMUElOVDE2ICAgIEdldFRocmVzaG9sZEV2ZW50MTYodm9pZCk7CitMUERXT1JEICAgIEdldFRocmVzaG9sZEV2ZW50MzIodm9pZCk7CisjZGVmaW5lICAgIEdldFRocmVzaG9sZEV2ZW50IFdJTkVMSUJfTkFNRShHZXRUaHJlc2hvbGRFdmVudCkKK0lOVDE2ICAgICAgR2V0VGhyZXNob2xkU3RhdHVzMTYodm9pZCk7CitEV09SRCAgICAgIEdldFRocmVzaG9sZFN0YXR1czMyKHZvaWQpOworI2RlZmluZSAgICBHZXRUaHJlc2hvbGRTdGF0dXMgV0lORUxJQl9OQU1FKEdldFRocmVzaG9sZFN0YXR1cykKIEhXTkQxNiAgICAgR2V0VG9wV2luZG93MTYoSFdORDE2KTsKIEhXTkQzMiAgICAgR2V0VG9wV2luZG93MzIoSFdORDMyKTsKICNkZWZpbmUgICAgR2V0VG9wV2luZG93IFdJTkVMSUJfTkFNRShHZXRUb3BXaW5kb3cpCkBAIC01ODQzLDYgKzYwMjgsOSBAQAogRFdPUkQgICAgICBHbG9iYWxIYW5kbGUxNihXT1JEKTsKIEhHTE9CQUwzMiAgR2xvYmFsSGFuZGxlMzIoTFBDVk9JRCk7CiAjZGVmaW5lICAgIEdsb2JhbEhhbmRsZSBXSU5FTElCX05BTUUoR2xvYmFsSGFuZGxlKQorVk9JRCAgICAgICBHbG9iYWxGaXgxNihIR0xPQkFMMTYpOworVk9JRCAgICAgICBHbG9iYWxGaXgzMihIR0xPQkFMMzIpOworI2RlZmluZSAgICBHbG9iYWxGaXggV0lORUxJQl9OQU1FKEdsb2JhbEZpeCkKIExQVk9JRCAgICAgR2xvYmFsTG9jazE2KEhHTE9CQUwxNik7CiBMUFZPSUQgICAgIEdsb2JhbExvY2szMihIR0xPQkFMMzIpOwogI2RlZmluZSAgICBHbG9iYWxMb2NrIFdJTkVMSUJfTkFNRShHbG9iYWxMb2NrKQpAQCAtNTg1MiwxNSArNjA0MCw0MCBAQAogRFdPUkQgICAgICBHbG9iYWxTaXplMTYoSEdMT0JBTDE2KTsKIERXT1JEICAgICAgR2xvYmFsU2l6ZTMyKEhHTE9CQUwzMik7CiAjZGVmaW5lICAgIEdsb2JhbFNpemUgV0lORUxJQl9OQU1FKEdsb2JhbFNpemUpCitWT0lEICAgICAgIEdsb2JhbFVuZml4MTYoSEdMT0JBTDE2KTsKK1ZPSUQgICAgICAgR2xvYmFsVW5maXgzMihIR0xPQkFMMzIpOworI2RlZmluZSAgICBHbG9iYWxVbmZpeCBXSU5FTElCX05BTUUoR2xvYmFsVW5maXgpCiBCT09MMTYgICAgIEdsb2JhbFVubG9jazE2KEhHTE9CQUwxNik7CiBCT09MMzIgICAgIEdsb2JhbFVubG9jazMyKEhHTE9CQUwzMik7CiAjZGVmaW5lICAgIEdsb2JhbFVubG9jayBXSU5FTElCX05BTUUoR2xvYmFsVW5sb2NrKQorQk9PTDE2ICAgICBHbG9iYWxVbldpcmUxNihIR0xPQkFMMTYpOworQk9PTDMyICAgICBHbG9iYWxVbldpcmUzMihIR0xPQkFMMzIpOworI2RlZmluZSAgICBHbG9iYWxVbldpcmUgV0lORUxJQl9OQU1FKEdsb2JhbFVuV2lyZSkKK1NFR1BUUiAgICAgR2xvYmFsV2lyZTE2KEhHTE9CQUwxNik7CitMUFZPSUQgICAgIEdsb2JhbFdpcmUzMihIR0xPQkFMMzIpOworI2RlZmluZSAgICBHbG9iYWxXaXJlIFdJTkVMSUJfTkFNRShHbG9iYWxXaXJlKQorQk9PTDE2ICAgICBHcmF5U3RyaW5nMTYoSERDMTYsSEJSVVNIMTYsR1JBWVNUUklOR1BST0MxNixMUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICBJTlQxNixJTlQxNixJTlQxNixJTlQxNixJTlQxNik7CitCT09MMzIgICAgIEdyYXlTdHJpbmczMkEoSERDMzIsSEJSVVNIMzIsR1JBWVNUUklOR1BST0MzMixMUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgSU5UMzIsSU5UMzIsSU5UMzIsSU5UMzIsSU5UMzIpOworQk9PTDMyICAgICBHcmF5U3RyaW5nMzJXKEhEQzMyLEhCUlVTSDMyLEdSQVlTVFJJTkdQUk9DMzIsTFBBUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgIElOVDMyLElOVDMyLElOVDMyLElOVDMyLElOVDMyKTsKKyNkZWZpbmUgICAgR3JheVN0cmluZyBXSU5FTElCX05BTUVfQVcoR3JheVN0cmluZykKK0JPT0wxNiAgICAgSGlkZUNhcmV0MTYoSFdORDE2KTsKK0JPT0wzMiAgICAgSGlkZUNhcmV0MzIoSFdORDMyKTsKKyNkZWZpbmUgICAgSGlkZUNhcmV0IFdJTkVMSUJfTkFNRShIaWRlQ2FyZXQpCiBCT09MMTYgICAgIEhpbGl0ZU1lbnVJdGVtMTYoSFdORDE2LEhNRU5VMTYsVUlOVDE2LFVJTlQxNik7CiBCT09MMzIgICAgIEhpbGl0ZU1lbnVJdGVtMzIoSFdORDMyLEhNRU5VMzIsVUlOVDMyLFVJTlQzMik7CiAjZGVmaW5lICAgIEhpbGl0ZU1lbnVJdGVtIFdJTkVMSUJfTkFNRShIaWxpdGVNZW51SXRlbSkKIHZvaWQgICAgICAgSW5mbGF0ZVJlY3QxNihMUFJFQ1QxNixJTlQxNixJTlQxNik7CiB2b2lkICAgICAgIEluZmxhdGVSZWN0MzIoTFBSRUNUMzIsSU5UMzIsSU5UMzIpOwogI2RlZmluZSAgICBJbmZsYXRlUmVjdCBXSU5FTElCX05BTUUoSW5mbGF0ZVJlY3QpCitXT1JEICAgICAgIEluaXRBdG9tVGFibGUxNihXT1JEKTsKK0JPT0wzMiAgICAgSW5pdEF0b21UYWJsZTMyKERXT1JEKTsKKyNkZWZpbmUgICAgSW5pdEF0b21UYWJsZSBXSU5FTElCX05BTUUoSW5pdEF0b21UYWJsZSkKK0JPT0wxNiAgICAgSW5TZW5kTWVzc2FnZTE2KHZvaWQpOworQk9PTDMyICAgICBJblNlbmRNZXNzYWdlMzIodm9pZCk7CisjZGVmaW5lICAgIEluU2VuZE1lc3NhZ2UgV0lORUxJQl9OQU1FKEluU2VuZE1lc3NhZ2UpCiBCT09MMTYgICAgIEluc2VydE1lbnUxNihITUVOVTE2LFVJTlQxNixVSU5UMTYsVUlOVDE2LFNFR1BUUik7CiBCT09MMzIgICAgIEluc2VydE1lbnUzMkEoSE1FTlUzMixVSU5UMzIsVUlOVDMyLFVJTlQzMixMUENTVFIpOwogQk9PTDMyICAgICBJbnNlcnRNZW51MzJXKEhNRU5VMzIsVUlOVDMyLFVJTlQzMixVSU5UMzIsTFBDV1NUUik7CkBAIC01OTIxLDkgKzYxMzQsMTYgQEAKIEJPT0wxNiAgICAgSXNDaGlsZDE2KEhXTkQxNixIV05EMTYpOwogQk9PTDMyICAgICBJc0NoaWxkMzIoSFdORDMyLEhXTkQzMik7CiAjZGVmaW5lICAgIElzQ2hpbGQgV0lORUxJQl9OQU1FKElzQ2hpbGQpCitCT09MMTYgICAgIElzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlMTYoVUlOVDE2KTsKK0JPT0wzMiAgICAgSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUzMihVSU5UMzIpOworI2RlZmluZSAgICBJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZSBXSU5FTElCX05BTUUoSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUpCiBCT09MMTYgICAgIElzREJDU0xlYWRCeXRlMTYoQllURSk7CiBCT09MMzIgICAgIElzREJDU0xlYWRCeXRlMzIoQllURSk7CiAjZGVmaW5lICAgIElzREJDU0xlYWRCeXRlIFdJTkVMSUJfTkFNRShJc0RCQ1NMZWFkQnl0ZSkKK0JPT0wxNiAgICAgSXNEaWFsb2dNZXNzYWdlMTYoSFdORDE2LExQTVNHMTYpOworQk9PTDMyICAgICBJc0RpYWxvZ01lc3NhZ2UzMkEoSFdORDMyLExQTVNHMzIpOworQk9PTDMyICAgICBJc0RpYWxvZ01lc3NhZ2UzMlcoSFdORDMyLExQTVNHMzIpOworI2RlZmluZSAgICBJc0RpYWxvZ01lc3NhZ2UgV0lORUxJQl9OQU1FKElzRGlhbG9nTWVzc2FnZSkKIFVJTlQxNiAgICAgSXNEbGdCdXR0b25DaGVja2VkMTYoSFdORDE2LFVJTlQxNik7CiBVSU5UMzIgICAgIElzRGxnQnV0dG9uQ2hlY2tlZDMyKEhXTkQzMixVSU5UMzIpOwogI2RlZmluZSAgICBJc0RsZ0J1dHRvbkNoZWNrZWQgV0lORUxJQl9OQU1FKElzRGxnQnV0dG9uQ2hlY2tlZCkKQEAgLTYwMzYsNyArNjI1Niw3IEBACiBMUFZPSUQgICAgIExvY2tSZXNvdXJjZTMyKEhHTE9CQUwzMik7CiAjZGVmaW5lICAgIExvY2tSZXNvdXJjZSBXSU5FTElCX05BTUUoTG9ja1Jlc291cmNlKQogSEdMT0JBTDE2ICBMb2NrU2VnbWVudDE2KEhHTE9CQUwxNik7Ci0jZGVmaW5lICAgIExvY2tTZWdtZW50MzIoaGFuZGxlKSBHbG9iYWxGaXgoKEhBTkRMRTMyKShoYW5kbGUpKQorI2RlZmluZSAgICBMb2NrU2VnbWVudDMyKGhhbmRsZSkgR2xvYmFsRml4MzIoKEhBTkRMRTMyKShoYW5kbGUpKQogI2RlZmluZSAgICBMb2NrU2VnbWVudCBXSU5FTElCX05BTUUoTG9ja1NlZ21lbnQpCiBCT09MMTYgICAgIExQdG9EUDE2KEhEQzE2LExQUE9JTlQxNixJTlQxNik7CiBCT09MMzIgICAgIExQdG9EUDMyKEhEQzMyLExQUE9JTlQzMixJTlQzMik7CkBAIC02MDY2LDYgKzYyODYsOSBAQAogdm9pZCAgICAgICBNYXBXaW5kb3dQb2ludHMxNihIV05EMTYsSFdORDE2LExQUE9JTlQxNixVSU5UMTYpOwogdm9pZCAgICAgICBNYXBXaW5kb3dQb2ludHMzMihIV05EMzIsSFdORDMyLExQUE9JTlQzMixVSU5UMzIpOwogI2RlZmluZSAgICBNYXBXaW5kb3dQb2ludHMgV0lORUxJQl9OQU1FKE1hcFdpbmRvd1BvaW50cykKK1ZPSUQgICAgICAgTWVzc2FnZUJlZXAxNihVSU5UMTYpOworQk9PTDMyICAgICBNZXNzYWdlQmVlcDMyKFVJTlQzMik7CisjZGVmaW5lICAgIE1lc3NhZ2VCZWVwIFdJTkVMSUJfTkFNRShNZXNzYWdlQmVlcCkKIElOVDE2ICAgICAgTWVzc2FnZUJveDE2KEhXTkQxNixMUENTVFIsTFBDU1RSLFVJTlQxNik7CiBJTlQzMiAgICAgIE1lc3NhZ2VCb3gzMkEoSFdORDMyLExQQ1NUUixMUENTVFIsVUlOVDMyKTsKIElOVDMyICAgICAgTWVzc2FnZUJveDMyVyhIV05EMzIsTFBDV1NUUixMUENXU1RSLFVJTlQzMik7CkBAIC02MTEyLDkgKzYzMzUsMTggQEAKIEJPT0wxNiAgICAgT2Zmc2V0V2luZG93T3JnRXgxNihIREMxNixJTlQxNixJTlQxNixMUFBPSU5UMTYpOwogQk9PTDMyICAgICBPZmZzZXRXaW5kb3dPcmdFeDMyKEhEQzMyLElOVDMyLElOVDMyLExQUE9JTlQzMik7CiAjZGVmaW5lICAgIE9mZnNldFdpbmRvd09yZ0V4IFdJTkVMSUJfTkFNRShPZmZzZXRXaW5kb3dPcmdFeCkKK0JPT0wxNiAgICAgT3BlbkNsaXBib2FyZDE2KEhXTkQxNik7CitCT09MMzIgICAgIE9wZW5DbGlwYm9hcmQzMihIV05EMzIpOworI2RlZmluZSAgICBPcGVuQ2xpcGJvYXJkIFdJTkVMSUJfTkFNRShPcGVuQ2xpcGJvYXJkKQogSEZJTEUxNiAgICBPcGVuRmlsZTE2KExQQ1NUUixPRlNUUlVDVCosVUlOVDE2KTsKIEhGSUxFMzIgICAgT3BlbkZpbGUzMihMUENTVFIsT0ZTVFJVQ1QqLFVJTlQzMik7CiAjZGVmaW5lICAgIE9wZW5GaWxlIFdJTkVMSUJfTkFNRShPcGVuRmlsZSkKK0JPT0wxNiAgICAgT3Blbkljb24xNihIV05EMTYpOworQk9PTDMyICAgICBPcGVuSWNvbjMyKEhXTkQzMik7CisjZGVmaW5lICAgIE9wZW5JY29uIFdJTkVMSUJfTkFNRShPcGVuSWNvbikKK0lOVDE2ICAgICAgT3BlblNvdW5kMTYodm9pZCk7CitWT0lEICAgICAgIE9wZW5Tb3VuZDMyKHZvaWQpOworI2RlZmluZSAgICBPcGVuU291bmQgV0lORUxJQl9OQU1FKE9wZW5Tb3VuZCkKIEJPT0wxNiAgICAgUGFpbnRSZ24xNihIREMxNixIUkdOMTYpOwogQk9PTDMyICAgICBQYWludFJnbjMyKEhEQzMyLEhSR04zMik7CiAjZGVmaW5lICAgIFBhaW50UmduIFdJTkVMSUJfTkFNRShQYWludFJnbikKQEAgLTYxMjgsNiArNjM2MCw5IEBACiBCT09MMTYgICAgIFBpZTE2KEhEQzE2LElOVDE2LElOVDE2LElOVDE2LElOVDE2LElOVDE2LElOVDE2LElOVDE2LElOVDE2KTsKIEJPT0wzMiAgICAgUGllMzIoSERDMzIsSU5UMzIsSU5UMzIsSU5UMzIsSU5UMzIsSU5UMzIsSU5UMzIsSU5UMzIsSU5UMzIpOwogI2RlZmluZSAgICBQaWUgV0lORUxJQl9OQU1FKFBpZSkKK0JPT0wxNiAgICAgUGxheU1ldGFGaWxlMTYoSERDMTYsSE1FVEFGSUxFMTYpOworQk9PTDMyICAgICBQbGF5TWV0YUZpbGUzMihIREMzMixITUVUQUZJTEUzMik7CisjZGVmaW5lICAgIFBsYXlNZXRhRmlsZSBXSU5FTElCX05BTUUoUGxheU1ldGFGaWxlKQogQk9PTDE2ICAgICBQb2x5UG9seWdvbjE2KEhEQzE2LExQUE9JTlQxNixMUElOVDE2LFVJTlQxNik7CiBCT09MMzIgICAgIFBvbHlQb2x5Z29uMzIoSERDMzIsTFBQT0lOVDMyLExQSU5UMzIsVUlOVDMyKTsKICNkZWZpbmUgICAgUG9seVBvbHlnb24gV0lORUxJQl9OQU1FKFBvbHlQb2x5Z29uKQpAQCAtNjE0Myw2ICs2Mzc4LDkgQEAKICNkZWZpbmUgICAgUG9zdEFwcE1lc3NhZ2UzMlcodGhyZWFkLG1zZyx3cGFyYW0sbHBhcmFtKSBcCiAgICAgICAgICAgIFBvc3RUaHJlYWRNZXNzYWdlMzJXKChEV09SRCkodGhyZWFkKSxtc2csd3BhcmFtLGxwYXJhbSkKICNkZWZpbmUgICAgUG9zdEFwcE1lc3NhZ2UgV0lORUxJQl9OQU1FX0FXKFBvc3RBcHBNZXNzYWdlKQordm9pZCAgICAgICBQb3N0UXVpdE1lc3NhZ2UxNihJTlQxNik7Cit2b2lkICAgICAgIFBvc3RRdWl0TWVzc2FnZTMyKElOVDMyKTsKKyNkZWZpbmUgICAgUG9zdFF1aXRNZXNzYWdlIFdJTkVMSUJfTkFNRShQb3N0UXVpdE1lc3NhZ2UpCiBCT09MMTYgICAgIFB0SW5SZWN0MTYoY29uc3QgUkVDVDE2KixQT0lOVDE2KTsKIEJPT0wzMiAgICAgUHRJblJlY3QzMihjb25zdCBSRUNUMzIqLFBPSU5UMzIpOwogI2RlZmluZSAgICBQdEluUmVjdCBXSU5FTElCX05BTUUoUHRJblJlY3QpCkBAIC02MTUyLDYgKzYzOTAsOSBAQAogQk9PTDE2ICAgICBQdFZpc2libGUxNihIREMxNixJTlQxNixJTlQxNik7CiBCT09MMzIgICAgIFB0VmlzaWJsZTMyKEhEQzMyLElOVDMyLElOVDMyKTsKICNkZWZpbmUgICAgUHRWaXNpYmxlIFdJTkVMSUJfTkFNRShQdFZpc2libGUpCitVSU5UMTYgICAgIFJlYWxpemVQYWxldHRlMTYoSERDMTYpOworVUlOVDMyICAgICBSZWFsaXplUGFsZXR0ZTMyKEhEQzMyKTsKKyNkZWZpbmUgICAgUmVhbGl6ZVBhbGV0dGUgV0lORUxJQl9OQU1FKFJlYWxpemVQYWxldHRlKQogQk9PTDE2ICAgICBSZWN0YW5nbGUxNihIREMxNixJTlQxNixJTlQxNixJTlQxNixJTlQxNik7CiBCT09MMzIgICAgIFJlY3RhbmdsZTMyKEhEQzMyLElOVDMyLElOVDMyLElOVDMyLElOVDMyKTsKICNkZWZpbmUgICAgUmVjdGFuZ2xlIFdJTkVMSUJfTkFNRShSZWN0YW5nbGUpCkBAIC02MjM4LDYgKzY0NzksOSBAQAogSERDMzIgICAgICBSZXNldERDMzJBKEhEQzMyLGNvbnN0IERFVk1PREUzMkEgKik7CiBIREMzMiAgICAgIFJlc2V0REMzMlcoSERDMzIsY29uc3QgREVWTU9ERTMyVyAqKTsKICNkZWZpbmUgICAgUmVzZXREQyBXSU5FTElCX05BTUVfQVcoUmVzZXREQykKK0JPT0wxNiAgICAgUmVzaXplUGFsZXR0ZTE2KEhQQUxFVFRFMTYsVUlOVDE2KTsKK0JPT0wzMiAgICAgUmVzaXplUGFsZXR0ZTMyKEhQQUxFVFRFMzIsVUlOVDMyKTsKKyNkZWZpbmUgICAgUmVzaXplUGFsZXR0ZSBXSU5FTElCX05BTUUoUmVzaXplUGFsZXR0ZSkKIEJPT0wxNiAgICAgUmVzdG9yZURDMTYoSERDMTYsSU5UMTYpOwogQk9PTDMyICAgICBSZXN0b3JlREMzMihIREMzMixJTlQzMik7CiAjZGVmaW5lICAgIFJlc3RvcmVEQyBXSU5FTElCX05BTUUoUmVzdG9yZURDKQpAQCAtNjI1Niw2ICs2NTAwLDkgQEAKIHZvaWQgICAgICAgU2NyZWVuVG9DbGllbnQxNihIV05EMTYsTFBQT0lOVDE2KTsKIHZvaWQgICAgICAgU2NyZWVuVG9DbGllbnQzMihIV05EMzIsTFBQT0lOVDMyKTsKICNkZWZpbmUgICAgU2NyZWVuVG9DbGllbnQgV0lORUxJQl9OQU1FKFNjcmVlblRvQ2xpZW50KQorVk9JRCAgICAgICBTY3JvbGxDaGlsZHJlbjE2KEhXTkQxNixVSU5UMTYsV1BBUkFNMTYsTFBBUkFNKTsKK1ZPSUQgICAgICAgU2Nyb2xsQ2hpbGRyZW4zMihIV05EMzIsVUlOVDMyLFdQQVJBTTMyLExQQVJBTSk7CisjZGVmaW5lICAgIFNjcm9sbENoaWxkcmVuIFdJTkVMSUJfTkFNRShTY3JvbGxDaGlsZHJlbikKIEJPT0wxNiAgICAgU2Nyb2xsREMxNihIREMxNixJTlQxNixJTlQxNixjb25zdCBSRUNUMTYqLGNvbnN0IFJFQ1QxNiosCiAgICAgICAgICAgICAgICAgICAgICAgSFJHTjE2LExQUkVDVDE2KTsKIEJPT0wzMiAgICAgU2Nyb2xsREMzMihIREMzMixJTlQzMixJTlQzMixjb25zdCBSRUNUMzIqLGNvbnN0IFJFQ1QzMiosCkBAIC02Mjc1LDYgKzY1MjIsOSBAQAogSEdESU9CSjE2ICBTZWxlY3RPYmplY3QxNihIREMxNixIR0RJT0JKMTYpOwogSEdESU9CSjMyICBTZWxlY3RPYmplY3QzMihIREMzMixIR0RJT0JKMzIpOwogI2RlZmluZSAgICBTZWxlY3RPYmplY3QgV0lORUxJQl9OQU1FKFNlbGVjdE9iamVjdCkKK0hQQUxFVFRFMTYgU2VsZWN0UGFsZXR0ZTE2KEhEQzE2LEhQQUxFVFRFMTYsQk9PTDE2KTsKK0hQQUxFVFRFMzIgU2VsZWN0UGFsZXR0ZTMyKEhEQzMyLEhQQUxFVFRFMzIsQk9PTDMyKTsKKyNkZWZpbmUgICAgU2VsZWN0UGFsZXR0ZSBXSU5FTElCX05BTUUoU2VsZWN0UGFsZXR0ZSkKIExSRVNVTFQgICAgU2VuZERsZ0l0ZW1NZXNzYWdlMTYoSFdORDE2LElOVDE2LFVJTlQxNixXUEFSQU0xNixMUEFSQU0pOwogTFJFU1VMVCAgICBTZW5kRGxnSXRlbU1lc3NhZ2UzMkEoSFdORDMyLElOVDMyLFVJTlQzMixXUEFSQU0zMixMUEFSQU0pOwogTFJFU1VMVCAgICBTZW5kRGxnSXRlbU1lc3NhZ2UzMlcoSFdORDMyLElOVDMyLFVJTlQzMixXUEFSQU0zMixMUEFSQU0pOwpAQCAtNjI5OSw2ICs2NTQ5LDkgQEAKIExPTkcgICAgICAgU2V0Q2xhc3NMb25nMzJBKEhXTkQzMixJTlQzMixMT05HKTsKIExPTkcgICAgICAgU2V0Q2xhc3NMb25nMzJXKEhXTkQzMixJTlQzMixMT05HKTsKICNkZWZpbmUgICAgU2V0Q2xhc3NMb25nIFdJTkVMSUJfTkFNRV9BVyhTZXRDbGFzc0xvbmcpCitIV05EMTYgICAgIFNldENsaXBib2FyZFZpZXdlcjE2KEhXTkQxNik7CitIV05EMzIgICAgIFNldENsaXBib2FyZFZpZXdlcjMyKEhXTkQzMik7CisjZGVmaW5lICAgIFNldENsaXBib2FyZFZpZXdlciBXSU5FTElCX05BTUUoU2V0Q2xpcGJvYXJkVmlld2VyKQogSU5UMTYgICAgICBTZXRDb21tQnJlYWsxNihJTlQxNik7CiBCT09MMzIgICAgIFNldENvbW1CcmVhazMyKElOVDMyKTsKICNkZWZpbmUgICAgU2V0Q29tbUJyZWFrIFdJTkVMSUJfTkFNRShTZXRDb21tQnJlYWspCkBAIC02MzA5LDYgKzY1NjIsMTIgQEAKIEJPT0wzMiAgICAgU2V0Q3VycmVudERpcmVjdG9yeTMyQShMUENTVFIpOwogQk9PTDMyICAgICBTZXRDdXJyZW50RGlyZWN0b3J5MzJXKExQQ1dTVFIpOwogI2RlZmluZSAgICBTZXRDdXJyZW50RGlyZWN0b3J5IFdJTkVMSUJfTkFNRV9BVyhTZXRDdXJyZW50RGlyZWN0b3J5KQorSENVUlNPUjE2ICBTZXRDdXJzb3IxNihIQ1VSU09SMTYpOworSENVUlNPUjMyICBTZXRDdXJzb3IzMihIQ1VSU09SMzIpOworI2RlZmluZSAgICBTZXRDdXJzb3IgV0lORUxJQl9OQU1FKFNldEN1cnNvcikKK3ZvaWQgICAgICAgU2V0Q3Vyc29yUG9zMTYoSU5UMTYsSU5UMTYpOworQk9PTDMyICAgICBTZXRDdXJzb3JQb3MzMihJTlQzMixJTlQzMik7CisjZGVmaW5lICAgIFNldEN1cnNvclBvcyBXSU5FTElCX05BTUUoU2V0Q3Vyc29yUG9zKQogQk9PTDE2ICAgICBTZXREZXNrV2FsbFBhcGVyMTYoTFBDU1RSKTsKIEJPT0wzMiAgICAgU2V0RGVza1dhbGxQYXBlcjMyKExQQ1NUUik7CiAjZGVmaW5lICAgIFNldERlc2tXYWxsUGFwZXIgV0lORUxJQl9OQU1FKFNldERlc2tXYWxsUGFwZXIpCkBAIC02MzI3LDYgKzY1ODYsOSBAQAogdm9pZCAgICAgICBTZXREbGdJdGVtVGV4dDMyQShIV05EMzIsSU5UMzIsTFBDU1RSKTsKIHZvaWQgICAgICAgU2V0RGxnSXRlbVRleHQzMlcoSFdORDMyLElOVDMyLExQQ1dTVFIpOwogI2RlZmluZSAgICBTZXREbGdJdGVtVGV4dCBXSU5FTElCX05BTUVfQVcoU2V0RGxnSXRlbVRleHQpCitWT0lEICAgICAgIFNldERvdWJsZUNsaWNrVGltZTE2KFVJTlQxNik7CitCT09MMzIgICAgIFNldERvdWJsZUNsaWNrVGltZTMyKFVJTlQzMik7CisjZGVmaW5lICAgIFNldERvdWJsZUNsaWNrVGltZSBXSU5FTElCX05BTUUoU2V0RG91YmxlQ2xpY2tUaW1lKQogVUlOVDE2ICAgICBTZXRFcnJvck1vZGUxNihVSU5UMTYpOwogVUlOVDMyICAgICBTZXRFcnJvck1vZGUzMihVSU5UMzIpOwogI2RlZmluZSAgICBTZXRFcnJvck1vZGUgV0lORUxJQl9OQU1FKFNldEVycm9yTW9kZSkKQEAgLTYzNDYsMTIgKzY2MDgsMjQgQEAKIElOVDE2ICAgICAgU2V0TWFwTW9kZTE2KEhEQzE2LElOVDE2KTsKIElOVDMyICAgICAgU2V0TWFwTW9kZTMyKEhEQzMyLElOVDMyKTsKICNkZWZpbmUgICAgU2V0TWFwTW9kZSBXSU5FTElCX05BTUUoU2V0TWFwTW9kZSkKK0RXT1JEICAgICAgU2V0TWFwcGVyRmxhZ3MxNihIREMxNixEV09SRCk7CitEV09SRCAgICAgIFNldE1hcHBlckZsYWdzMzIoSERDMzIsRFdPUkQpOworI2RlZmluZSAgICBTZXRNYXBwZXJGbGFncyBXSU5FTElCX05BTUUoU2V0TWFwcGVyRmxhZ3MpCiBCT09MMTYgICAgIFNldE1lbnUxNihIV05EMTYsSE1FTlUxNik7CiBCT09MMzIgICAgIFNldE1lbnUzMihIV05EMzIsSE1FTlUzMik7CiAjZGVmaW5lICAgIFNldE1lbnUgV0lORUxJQl9OQU1FKFNldE1lbnUpCiBCT09MMTYgICAgIFNldE1lbnVJdGVtQml0bWFwczE2KEhNRU5VMTYsVUlOVDE2LFVJTlQxNixIQklUTUFQMTYsSEJJVE1BUDE2KTsKIEJPT0wzMiAgICAgU2V0TWVudUl0ZW1CaXRtYXBzMzIoSE1FTlUzMixVSU5UMzIsVUlOVDMyLEhCSVRNQVAzMixIQklUTUFQMzIpOwogI2RlZmluZSAgICBTZXRNZW51SXRlbUJpdG1hcHMgV0lORUxJQl9OQU1FKFNldE1lbnVJdGVtQml0bWFwcykKK0JPT0wxNiAgICAgU2V0TWVzc2FnZVF1ZXVlMTYoSU5UMTYpOworQk9PTDMyICAgICBTZXRNZXNzYWdlUXVldWUzMihJTlQzMik7CisjZGVmaW5lICAgIFNldE1lc3NhZ2VRdWV1ZSBXSU5FTElCX05BTUUoU2V0TWVzc2FnZVF1ZXVlKQorVUlOVDE2ICAgICBTZXRQYWxldHRlRW50cmllczE2KEhQQUxFVFRFMTYsVUlOVDE2LFVJTlQxNixMUFBBTEVUVEVFTlRSWSk7CitVSU5UMzIgICAgIFNldFBhbGV0dGVFbnRyaWVzMzIoSFBBTEVUVEUzMixVSU5UMzIsVUlOVDMyLExQUEFMRVRURUVOVFJZKTsKKyNkZWZpbmUgICAgU2V0UGFsZXR0ZUVudHJpZXMgV0lORUxJQl9OQU1FKFNldFBhbGV0dGVFbnRyaWVzKQorSFdORDE2ICAgICBTZXRQYXJlbnQxNihIV05EMTYsSFdORDE2KTsKK0hXTkQzMiAgICAgU2V0UGFyZW50MzIoSFdORDMyLEhXTkQzMik7CisjZGVmaW5lICAgIFNldFBhcmVudCBXSU5FTElCX05BTUUoU2V0UGFyZW50KQogQ09MT1JSRUYgICBTZXRQaXhlbDE2KEhEQzE2LElOVDE2LElOVDE2LENPTE9SUkVGKTsKIENPTE9SUkVGICAgU2V0UGl4ZWwzMihIREMzMixJTlQzMixJTlQzMixDT0xPUlJFRik7CiAjZGVmaW5lICAgIFNldFBpeGVsIFdJTkVMSUJfTkFNRShTZXRQaXhlbCkKQEAgLTYzODMsMTggKzY2NTcsMjcgQEAKIHZvaWQgICAgICAgU2V0U2Nyb2xsUmFuZ2UxNihIV05EMTYsSU5UMTYsSU5UMTYsSU5UMTYsQk9PTDE2KTsKIEJPT0wzMiAgICAgU2V0U2Nyb2xsUmFuZ2UzMihIV05EMzIsSU5UMzIsSU5UMzIsSU5UMzIsQk9PTDMyKTsKICNkZWZpbmUgICAgU2V0U2Nyb2xsUmFuZ2UgV0lORUxJQl9OQU1FKFNldFNjcm9sbFJhbmdlKQorSU5UMTYgICAgICBTZXRTb3VuZE5vaXNlMTYoSU5UMTYsSU5UMTYpOworRFdPUkQgICAgICBTZXRTb3VuZE5vaXNlMzIoRFdPUkQsRFdPUkQpOworI2RlZmluZSAgICBTZXRTb3VuZE5vaXNlIFdJTkVMSUJfTkFNRShTZXRTb3VuZE5vaXNlKQogSU5UMTYgICAgICBTZXRTdHJldGNoQmx0TW9kZTE2KEhEQzE2LElOVDE2KTsKIElOVDMyICAgICAgU2V0U3RyZXRjaEJsdE1vZGUzMihIREMzMixJTlQzMik7CiAjZGVmaW5lICAgIFNldFN0cmV0Y2hCbHRNb2RlIFdJTkVMSUJfTkFNRShTZXRTdHJldGNoQmx0TW9kZSkKK1ZPSUQgICAgICAgU2V0U3lzQ29sb3JzMTYoSU5UMTYsY29uc3QgSU5UMTYqLGNvbnN0IENPTE9SUkVGKik7CitCT09MMzIgICAgIFNldFN5c0NvbG9yczMyKElOVDMyLGNvbnN0IElOVDMyKixjb25zdCBDT0xPUlJFRiopOworI2RlZmluZSAgICBTZXRTeXNDb2xvcnMgV0lORUxJQl9OQU1FKFNldFN5c0NvbG9ycykKIEhXTkQxNiAgICAgU2V0U3lzTW9kYWxXaW5kb3cxNihIV05EMTYpOwogI2RlZmluZSAgICBTZXRTeXNNb2RhbFdpbmRvdzMyKGh3bmQpICgoSFdORDMyKTApCiAjZGVmaW5lICAgIFNldFN5c01vZGFsV2luZG93IFdJTkVMSUJfTkFNRShTZXRTeXNNb2RhbFdpbmRvdykKLVVJTlQxNiAgICAgU2V0U3lzdGVtVGltZXIxNihIV05EMTYsVUlOVDE2LFVJTlQxNixUSU1FUlBST0MxNik7Ci1VSU5UMzIgICAgIFNldFN5c3RlbVRpbWVyMzIoSFdORDMyLFVJTlQzMixVSU5UMzIsVElNRVJQUk9DMzIpOwotI2RlZmluZSAgICBTZXRTeXN0ZW1UaW1lciBXSU5FTElCX05BTUUoU2V0U3lzdGVtVGltZXIpCiBCT09MMTYgICAgIFNldFN5c3RlbU1lbnUxNihIV05EMTYsSE1FTlUxNik7CiBCT09MMzIgICAgIFNldFN5c3RlbU1lbnUzMihIV05EMzIsSE1FTlUzMik7CiAjZGVmaW5lICAgIFNldFN5c3RlbU1lbnUgV0lORUxJQl9OQU1FKFNldFN5c3RlbU1lbnUpCitVSU5UMTYgICAgIFNldFN5c3RlbVBhbGV0dGVVc2UxNihIREMxNixVSU5UMTYpOworVUlOVDMyICAgICBTZXRTeXN0ZW1QYWxldHRlVXNlMzIoSERDMzIsVUlOVDMyKTsKKyNkZWZpbmUgICAgU2V0U3lzdGVtUGFsZXR0ZVVzZSBXSU5FTElCX05BTUUoU2V0U3lzdGVtUGFsZXR0ZVVzZSkKK1VJTlQxNiAgICAgU2V0U3lzdGVtVGltZXIxNihIV05EMTYsVUlOVDE2LFVJTlQxNixUSU1FUlBST0MxNik7CitVSU5UMzIgICAgIFNldFN5c3RlbVRpbWVyMzIoSFdORDMyLFVJTlQzMixVSU5UMzIsVElNRVJQUk9DMzIpOworI2RlZmluZSAgICBTZXRTeXN0ZW1UaW1lciBXSU5FTElCX05BTUUoU2V0U3lzdGVtVGltZXIpCiBVSU5UMTYgICAgIFNldFRleHRBbGlnbjE2KEhEQzE2LFVJTlQxNik7CiBVSU5UMzIgICAgIFNldFRleHRBbGlnbjMyKEhEQzMyLFVJTlQzMik7CiAjZGVmaW5lICAgIFNldFRleHRBbGlnbiBXSU5FTElCX05BTUUoU2V0VGV4dEFsaWduKQpAQCAtNjQxMyw2ICs2Njk2LDI0IEBACiBCT09MMTYgICAgIFNldFZpZXdwb3J0T3JnRXgxNihIREMxNixJTlQxNixJTlQxNixMUFBPSU5UMTYpOwogQk9PTDMyICAgICBTZXRWaWV3cG9ydE9yZ0V4MzIoSERDMzIsSU5UMzIsSU5UMzIsTFBQT0lOVDMyKTsKICNkZWZpbmUgICAgU2V0Vmlld3BvcnRPcmdFeCBXSU5FTElCX05BTUUoU2V0Vmlld3BvcnRPcmdFeCkKK0lOVDE2ICAgICAgU2V0Vm9pY2VBY2NlbnQxNihJTlQxNixJTlQxNixJTlQxNixJTlQxNixJTlQxNik7CitEV09SRCAgICAgIFNldFZvaWNlQWNjZW50MzIoRFdPUkQsRFdPUkQsRFdPUkQsRFdPUkQsRFdPUkQpOworI2RlZmluZSAgICBTZXRWb2ljZUFjY2VudCBXSU5FTElCX05BTUUoU2V0Vm9pY2VBY2NlbnQpCitJTlQxNiAgICAgIFNldFZvaWNlRW52ZWxvcGUxNihJTlQxNixJTlQxNixJTlQxNik7CitEV09SRCAgICAgIFNldFZvaWNlRW52ZWxvcGUzMihEV09SRCxEV09SRCxEV09SRCk7CisjZGVmaW5lICAgIFNldFZvaWNlRW52ZWxvcGUgV0lORUxJQl9OQU1FKFNldFZvaWNlRW52ZWxvcGUpCitJTlQxNiAgICAgIFNldFZvaWNlTm90ZTE2KElOVDE2LElOVDE2LElOVDE2LElOVDE2KTsKK0RXT1JEICAgICAgU2V0Vm9pY2VOb3RlMzIoRFdPUkQsRFdPUkQsRFdPUkQsRFdPUkQpOworI2RlZmluZSAgICBTZXRWb2ljZU5vdGUgV0lORUxJQl9OQU1FKFNldFZvaWNlTm90ZSkKK0lOVDE2ICAgICAgU2V0Vm9pY2VRdWV1ZVNpemUxNihJTlQxNixJTlQxNik7CitEV09SRCAgICAgIFNldFZvaWNlUXVldWVTaXplMzIoRFdPUkQsRFdPUkQpOworI2RlZmluZSAgICBTZXRWb2ljZVF1ZXVlU2l6ZSBXSU5FTElCX05BTUUoU2V0Vm9pY2VRdWV1ZVNpemUpCitJTlQxNiAgICAgIFNldFZvaWNlU291bmQxNihJTlQxNixEV09SRCxJTlQxNik7CitEV09SRCAgICAgIFNldFZvaWNlU291bmQzMihEV09SRCxEV09SRCxEV09SRCk7CisjZGVmaW5lICAgIFNldFZvaWNlU291bmQgV0lORUxJQl9OQU1FKFNldFZvaWNlU291bmQpCitJTlQxNiAgICAgIFNldFZvaWNlVGhyZXNob2xkMTYoSU5UMTYsSU5UMTYpOworRFdPUkQgICAgICBTZXRWb2ljZVRocmVzaG9sZDMyKERXT1JELERXT1JEKTsKKyNkZWZpbmUgICAgU2V0Vm9pY2VUaHJlc2hvbGQgV0lORUxJQl9OQU1FKFNldFZvaWNlVGhyZXNob2xkKQogQk9PTDE2ICAgICBTZXRXaW5kb3dFeHRFeDE2KEhEQzE2LElOVDE2LElOVDE2LExQU0laRTE2KTsKIEJPT0wzMiAgICAgU2V0V2luZG93RXh0RXgzMihIREMzMixJTlQzMixJTlQzMixMUFNJWkUzMik7CiAjZGVmaW5lICAgIFNldFdpbmRvd0V4dEV4IFdJTkVMSUJfTkFNRShTZXRXaW5kb3dFeHRFeCkKQEAgLTY0NDUsMTUgKzY3NDYsMzAgQEAKIEJPT0wzMiAgICAgU2hlbGxBYm91dDMyQShIV05EMzIsTFBDU1RSLExQQ1NUUixISUNPTjMyKTsKIEJPT0wzMiAgICAgU2hlbGxBYm91dDMyVyhIV05EMzIsTFBDV1NUUixMUENXU1RSLEhJQ09OMzIpOwogI2RlZmluZSAgICBTaGVsbEFib3V0IFdJTkVMSUJfTkFNRV9BVyhTaGVsbEFib3V0KQorQk9PTDE2ICAgICBTaG93Q2FyZXQxNihIV05EMTYpOworQk9PTDMyICAgICBTaG93Q2FyZXQzMihIV05EMzIpOworI2RlZmluZSAgICBTaG93Q2FyZXQgV0lORUxJQl9OQU1FKFNob3dDYXJldCkKK0lOVDE2ICAgICAgU2hvd0N1cnNvcjE2KEJPT0wxNik7CitJTlQzMiAgICAgIFNob3dDdXJzb3IzMihCT09MMzIpOworI2RlZmluZSAgICBTaG93Q3Vyc29yIFdJTkVMSUJfTkFNRShTaG93Q3Vyc29yKQogdm9pZCAgICAgICBTaG93U2Nyb2xsQmFyMTYoSFdORDE2LElOVDE2LEJPT0wxNik7CiBCT09MMzIgICAgIFNob3dTY3JvbGxCYXIzMihIV05EMzIsSU5UMzIsQk9PTDMyKTsKICNkZWZpbmUgICAgU2hvd1Njcm9sbEJhciBXSU5FTElCX05BTUUoU2hvd1Njcm9sbEJhcikKK1ZPSUQgICAgICAgU2hvd093bmVkUG9wdXBzMTYoSFdORDE2LEJPT0wxNik7CitCT09MMzIgICAgIFNob3dPd25lZFBvcHVwczMyKEhXTkQzMixCT09MMzIpOworI2RlZmluZSAgICBTaG93T3duZWRQb3B1cHMgV0lORUxJQl9OQU1FKFNob3dPd25lZFBvcHVwcykKIEJPT0wxNiAgICAgU2hvd1dpbmRvdzE2KEhXTkQxNixJTlQxNik7CiBCT09MMzIgICAgIFNob3dXaW5kb3czMihIV05EMzIsSU5UMzIpOwogI2RlZmluZSAgICBTaG93V2luZG93IFdJTkVMSUJfTkFNRShTaG93V2luZG93KQogRFdPUkQgICAgICBTaXplb2ZSZXNvdXJjZTE2KEhNT0RVTEUxNixIUlNSQzE2KTsKIERXT1JEICAgICAgU2l6ZW9mUmVzb3VyY2UzMihITU9EVUxFMzIsSFJTUkMzMik7CiAjZGVmaW5lICAgIFNpemVvZlJlc291cmNlIFdJTkVMSUJfTkFNRShTaXplb2ZSZXNvdXJjZSkKK0lOVDE2ICAgICAgU3RhcnRTb3VuZDE2KHZvaWQpOworVk9JRCAgICAgICBTdGFydFNvdW5kMzIodm9pZCk7CisjZGVmaW5lICAgIFN0YXJ0U291bmQgV0lORUxJQl9OQU1FKFN0YXJ0U291bmQpCitJTlQxNiAgICAgIFN0b3BTb3VuZDE2KHZvaWQpOworVk9JRCAgICAgICBTdG9wU291bmQzMih2b2lkKTsKKyNkZWZpbmUgICAgU3RvcFNvdW5kIFdJTkVMSUJfTkFNRShTdG9wU291bmQpCiBCT09MMTYgICAgIFN0cmV0Y2hCbHQxNihIREMxNixJTlQxNixJTlQxNixJTlQxNixJTlQxNixIREMxNixJTlQxNixJTlQxNiwKICAgICAgICAgICAgICAgICAgICAgICAgIElOVDE2LElOVDE2LERXT1JEKTsKIEJPT0wzMiAgICAgU3RyZXRjaEJsdDMyKEhEQzMyLElOVDMyLElOVDMyLElOVDMyLElOVDMyLEhEQzMyLElOVDMyLElOVDMyLApAQCAtNjQ2NywxMCArNjc4MywyMCBAQAogQk9PTDE2ICAgICBTdWJ0cmFjdFJlY3QxNihMUFJFQ1QxNixjb25zdCBSRUNUMTYqLGNvbnN0IFJFQ1QxNiopOwogQk9PTDMyICAgICBTdWJ0cmFjdFJlY3QzMihMUFJFQ1QzMixjb25zdCBSRUNUMzIqLGNvbnN0IFJFQ1QzMiopOwogI2RlZmluZSAgICBTdWJ0cmFjdFJlY3QgV0lORUxJQl9OQU1FKFN1YnRyYWN0UmVjdCkKK0JPT0wxNiAgICAgU3dhcE1vdXNlQnV0dG9uMTYoQk9PTDE2KTsKK0JPT0wzMiAgICAgU3dhcE1vdXNlQnV0dG9uMzIoQk9PTDMyKTsKKyNkZWZpbmUgICAgU3dhcE1vdXNlQnV0dG9uIFdJTkVMSUJfTkFNRShTd2FwTW91c2VCdXR0b24pCitJTlQxNiAgICAgIFN5bmNBbGxWb2ljZXMxNih2b2lkKTsKK0RXT1JEICAgICAgU3luY0FsbFZvaWNlczMyKHZvaWQpOworI2RlZmluZSAgICBTeW5jQWxsVm9pY2VzIFdJTkVMSUJfTkFNRShTeW5jQWxsVm9pY2VzKQogQk9PTDE2ICAgICBTeXN0ZW1QYXJhbWV0ZXJzSW5mbzE2KFVJTlQxNixVSU5UMTYsTFBWT0lELFVJTlQxNik7CiBCT09MMzIgICAgIFN5c3RlbVBhcmFtZXRlcnNJbmZvMzJBKFVJTlQzMixVSU5UMzIsTFBWT0lELFVJTlQzMik7CiBCT09MMzIgICAgIFN5c3RlbVBhcmFtZXRlcnNJbmZvMzJXKFVJTlQzMixVSU5UMzIsTFBWT0lELFVJTlQzMik7CiAjZGVmaW5lICAgIFN5c3RlbVBhcmFtZXRlcnNJbmZvIFdJTkVMSUJfTkFNRV9BVyhTeXN0ZW1QYXJhbWV0ZXJzSW5mbykKK0xPTkcgICAgICAgVGFiYmVkVGV4dE91dDE2KEhEQzE2LElOVDE2LElOVDE2LExQQ1NUUixJTlQxNixJTlQxNixjb25zdCBJTlQxNiosSU5UMTYpOworTE9ORyAgICAgICBUYWJiZWRUZXh0T3V0MzJBKEhEQzMyLElOVDMyLElOVDMyLExQQ1NUUixJTlQzMixJTlQzMixjb25zdCBJTlQzMiosSU5UMzIpOworTE9ORyAgICAgICBUYWJiZWRUZXh0T3V0MzJXKEhEQzMyLElOVDMyLElOVDMyLExQQ1dTVFIsSU5UMzIsSU5UMzIsY29uc3QgSU5UMzIqLElOVDMyKTsKKyNkZWZpbmUgICAgVGFiYmVkVGV4dE91dCBXSU5FTElCX05BTUVfQVcoVGFiYmVkVGV4dE91dCkKIEJPT0wxNiAgICAgVGV4dE91dDE2KEhEQzE2LElOVDE2LElOVDE2LExQQ1NUUixJTlQxNik7CiBCT09MMzIgICAgIFRleHRPdXQzMkEoSERDMzIsSU5UMzIsSU5UMzIsTFBDU1RSLElOVDMyKTsKIEJPT0wzMiAgICAgVGV4dE91dDMyVyhIREMzMixJTlQzMixJTlQzMixMUENXU1RSLElOVDMyKTsKQEAgLTY0ODQsNiArNjgxMCwxMiBAQAogSU5UMTYgICAgICBUcmFuc2xhdGVBY2NlbGVyYXRvcjE2KEhXTkQxNixIQUNDRUwxNixMUE1TRzE2KTsKIElOVDMyICAgICAgVHJhbnNsYXRlQWNjZWxlcmF0b3IzMihIV05EMzIsSEFDQ0VMMzIsTFBNU0czMik7CiAjZGVmaW5lICAgIFRyYW5zbGF0ZUFjY2VsZXJhdG9yIFdJTkVMSUJfTkFNRShUcmFuc2xhdGVBY2NlbGVyYXRvcikKK0JPT0wxNiAgICAgVHJhbnNsYXRlTURJU3lzQWNjZWwxNihIV05EMTYsTFBNU0cxNik7CitCT09MMzIgICAgIFRyYW5zbGF0ZU1ESVN5c0FjY2VsMzIoSFdORDMyLExQTVNHMzIpOworI2RlZmluZSAgICBUcmFuc2xhdGVNRElTeXNBY2NlbCBXSU5FTElCX05BTUUoVHJhbnNsYXRlTURJU3lzQWNjZWwpCitCT09MMTYgICAgIFRyYW5zbGF0ZU1lc3NhZ2UxNihjb25zdCBNU0cxNiopOworQk9PTDMyICAgICBUcmFuc2xhdGVNZXNzYWdlMzIoY29uc3QgTVNHMzIqKTsKKyNkZWZpbmUgICAgVHJhbnNsYXRlTWVzc2FnZSBXSU5FTElCX05BTUUoVHJhbnNsYXRlTWVzc2FnZSkKIElOVDE2ICAgICAgVHJhbnNtaXRDb21tQ2hhcjE2KElOVDE2LENIQVIpOwogQk9PTDMyICAgICBUcmFuc21pdENvbW1DaGFyMzIoSU5UMzIsQ0hBUik7CiAjZGVmaW5lICAgIFRyYW5zbWl0Q29tbUNoYXIgV0lORUxJQl9OQU1FKFRyYW5zbWl0Q29tbUNoYXIpCkBAIC02NTMyLDYgKzY4NjQsOSBAQAogV09SRCAgICAgICBWa0tleVNjYW4zMkEoQ0hBUik7CiBXT1JEICAgICAgIFZrS2V5U2NhbjMyVyhXQ0hBUik7CiAjZGVmaW5lICAgIFZrS2V5U2NhbiBXSU5FTElCX05BTUVfQVcoVmtLZXlTY2FuKQorSU5UMTYgICAgICBXYWl0U291bmRTdGF0ZTE2KElOVDE2KTsKK0RXT1JEICAgICAgV2FpdFNvdW5kU3RhdGUzMihEV09SRCk7CisjZGVmaW5lICAgIFdhaXRTb3VuZFN0YXRlIFdJTkVMSUJfTkFNRShXYWl0U291bmRTdGF0ZSkKIEhXTkQxNiAgICAgV2luZG93RnJvbURDMTYoSERDMTYpOwogSFdORDMyICAgICBXaW5kb3dGcm9tREMzMihIREMzMik7CiAjZGVmaW5lICAgIFdpbmRvd0Zyb21EQyBXSU5FTElCX05BTUUoV2luZG93RnJvbURDKQpAQCAtNjY0NywxNSArNjk4Miw0MSBAQAogdHlwZWRlZiBJTlQzMiBJTlQ7CiB0eXBlZGVmIFVJTlQzMiBVSU5UOwogdHlwZWRlZiBCT09MMzIgQk9PTDsKLXR5cGVkZWYgSEFORExFMzIgSFdORDsKICMgZWxzZSAgLyogV0lORUxJQjMyICovCiB0eXBlZGVmIElOVDE2IElOVDsKIHR5cGVkZWYgVUlOVDE2IFVJTlQ7CiB0eXBlZGVmIEJPT0wxNiBCT09MOwotdHlwZWRlZiBIQU5ETEUxNiBIV05EOwogIyBlbmRpZiAgLyogV0lORUxJQjMyICovCiAjZW5kaWYgIC8qIF9fV0lORV9fICovCiAKK0lOVCAgICAgICAgQWRkRm9udFJlc291cmNlKExQQ1NUUik7CitpbnQgICAgICAgIENvbnZlcnRSZXF1ZXN0KEhXTkQxNixMUEtBTkpJU1RSVUNUKTsKK0RXT1JEICAgICAgRHJhZ09iamVjdChIV05EMTYsIEhXTkQxNiwgV09SRCwgSEFORExFMTYsIFdPUkQsIEhDVVJTT1IxNik7CitCT09MICAgICAgIEVudW1NZXRhRmlsZShIREMxNixITUVUQUZJTEUxNixNRkVOVU1QUk9DMTYsTFBBUkFNKTsKK0hJQ09OMTYgICAgRXh0cmFjdEljb24oSElOU1RBTkNFMTYsTFBDU1RSLFdPUkQpOworSElOU1RBTkNFMTYgRmluZEV4ZWN1dGFibGUoTFBDU1RSLExQQ1NUUixMUFNUUik7Cit2b2lkICAgICAgIEZyZWVMaWJyYXJ5KEhJTlNUQU5DRTE2KTsKK0hBTkRMRTE2ICAgR2V0Q2xpcGJvYXJkRGF0YShXT1JEKTsKK2ludCAgICAgICAgR2V0Q2xpcGJvYXJkRm9ybWF0TmFtZShXT1JELExQU1RSLHNob3J0KTsKK2ludCAgICAgICAgR2V0RW52aXJvbm1lbnQoTFBTVFIsTFBTVFIsV09SRCk7CitpbnQgICAgICAgIEdldEtlcm5pbmdQYWlycyhIREMxNixpbnQsTFBLRVJOSU5HUEFJUjE2KTsKK0JPT0wgICAgICAgR2V0TWVzc2FnZShTRUdQVFIsSFdORDE2LFVJTlQsVUlOVCk7CitITU9EVUxFMTYgIEdldE1vZHVsZUhhbmRsZShMUENTVFIpOworSU5UMTYgICAgICBHZXRNb2R1bGVVc2FnZShISU5TVEFOQ0UxNik7CitpbnQgICAgICAgIEdldFByaW9yaXR5Q2xpcGJvYXJkRm9ybWF0KFdPUkQqLHNob3J0KTsKK0RXT1JEICAgICAgR2V0UXVldWVTdGF0dXMoVUlOVCk7CitCT09MICAgICAgIEdldFJhc3Rlcml6ZXJDYXBzKExQUkFTVEVSSVpFUl9TVEFUVVMsVUlOVCk7CitISU5TVEFOQ0UxNiBMb2FkTW9kdWxlKExQQ1NUUixMUFZPSUQpOwordm9pZCAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyhMUENTVFIpOwordm9pZCAgICAgICBQbGF5TWV0YUZpbGVSZWNvcmQoSERDMTYsTFBIQU5ETEVUQUJMRTE2LExQTUVUQVJFQ09SRCxXT1JEKTsKK0JPT0wgICAgICAgUG9zdE1lc3NhZ2UoSFdORDE2LFdPUkQsV09SRCxMT05HKTsKK0JPT0wgICAgICAgUmVtb3ZlRm9udFJlc291cmNlKExQU1RSKTsKK3ZvaWQgICAgICAgUmVwbHlNZXNzYWdlKExSRVNVTFQpOworSEFORExFMTYgICBTZXRDbGlwYm9hcmREYXRhKFdPUkQsSEFORExFMTYpOworaW50ICAgICAgICBTZXRFbnZpcm9ubWVudChMUENTVFIsTFBDU1RSLFdPUkQpOworSElOU1RBTkNFMTYgU2hlbGxFeGVjdXRlKEhXTkQxNixMUENTVFIsTFBDU1RSLExQU1RSLExQQ1NUUixJTlQpOworaW50ICAgICAgICBVcGRhdGVDb2xvcnMoSERDMTYpOworCiAvKiBDYWxsYmFjayBmdW5jdGlvbiBwb2ludGVycyB0eXBlcy4gKi8KIAogI2lmZGVmIFdJTkVMSUIKQEAgLTY2NjYsMTYwICs3MDI3LDYgQEAKIHR5cGVkZWYgU0VHUFRSIEVESVRXT1JEQlJFQUtQUk9DOwogI2VuZGlmCiAKLUFUT00gICAgICAgQWRkQXRvbShTRUdQVFIpOwotSU5UICAgICAgICBBZGRGb250UmVzb3VyY2UoTFBDU1RSKTsKLUJPT0wgICAgICAgQW5pbWF0ZVBhbGV0dGUoSFBBTEVUVEUxNixVSU5ULFVJTlQsTFBQQUxFVFRFRU5UUlkpOwotQk9PTCAgICAgICBBbnlQb3B1cCh2b2lkKTsKLXZvaWQgICAgICAgQ2FsY0NoaWxkU2Nyb2xsKEhXTkQsV09SRCk7Ci1CT09MICAgICAgIENhbGxNc2dGaWx0ZXIoU0VHUFRSLElOVCk7Ci1CT09MICAgICAgIENsb3NlQ2xpcGJvYXJkKHZvaWQpOwotdm9pZCAgICAgICBDbG9zZVNvdW5kKHZvaWQpOwotQk9PTCAgICAgICBDbG9zZVdpbmRvdyhIV05EKTsKLWludCAgICAgICAgQ29udmVydFJlcXVlc3QoSFdORCxMUEtBTkpJU1RSVUNUKTsKLUhNRVRBRklMRTE2IENvcHlNZXRhRmlsZShITUVUQUZJTEUxNixMUENTVFIpOwotSU5UICAgICAgICBDb3VudENsaXBib2FyZEZvcm1hdHModm9pZCk7Ci1JTlQgICAgICAgIENvdW50Vm9pY2VOb3RlcyhJTlQpOwotSENVUlNPUjE2ICBDcmVhdGVDdXJzb3IoSElOU1RBTkNFMTYsSU5ULElOVCxJTlQsSU5ULGNvbnN0IEJZVEUqLGNvbnN0IEJZVEUqKTsKLUhHTE9CQUwxNiAgQ3JlYXRlQ3Vyc29ySWNvbkluZGlyZWN0KEhJTlNUQU5DRTE2LENVUlNPUklDT05JTkZPKixjb25zdCBCWVRFKixjb25zdCBCWVRFKik7Ci1ISUNPTjE2ICAgIENyZWF0ZUljb24oSElOU1RBTkNFMTYsSU5ULElOVCxCWVRFLEJZVEUsY29uc3QgQllURSosY29uc3QgQllURSopOwotSFBBTEVUVEUxNiBDcmVhdGVQYWxldHRlKGNvbnN0IExPR1BBTEVUVEUqKTsKLUFUT00gICAgICAgRGVsZXRlQXRvbShBVE9NKTsKLUJPT0wgICAgICAgRGVzdHJveUN1cnNvcihIQ1VSU09SMTYpOwotQk9PTCAgICAgICBEZXN0cm95SWNvbihISUNPTjE2KTsKLUxPTkcgICAgICAgRGlzcGF0Y2hNZXNzYWdlKGNvbnN0IE1TRzE2Kik7Ci1CT09MMTYgICAgIERyYWdEZXRlY3QoSFdORDE2LFBPSU5UMTYpOwotRFdPUkQgICAgICBEcmFnT2JqZWN0KEhXTkQsIEhXTkQsIFdPUkQsIEhBTkRMRTE2LCBXT1JELCBIQ1VSU09SMTYpOwotQk9PTCAgICAgICBEcmF3SWNvbihIREMxNixJTlQsSU5ULEhJQ09OMTYpOwotRFdPUkQgICAgICBEdW1wSWNvbihTRUdQVFIsV09SRCosU0VHUFRSKixTRUdQVFIqKTsKLUJPT0wgICAgICAgRW1wdHlDbGlwYm9hcmQodm9pZCk7Ci1VSU5UMTYgICAgIEVudW1DbGlwYm9hcmRGb3JtYXRzKFVJTlQxNik7Ci1CT09MICAgICAgIEVudW1NZXRhRmlsZShIREMxNixITUVUQUZJTEUxNixNRkVOVU1QUk9DMTYsTFBBUkFNKTsKLUhJQ09OMTYgICAgRXh0cmFjdEljb24oSElOU1RBTkNFMTYsTFBDU1RSLFdPUkQpOwotdm9pZCAgICAgICBGYXRhbEV4aXQoaW50KTsKLUFUT00gICAgICAgRmluZEF0b20oU0VHUFRSKTsKLUhJTlNUQU5DRTE2IEZpbmRFeGVjdXRhYmxlKExQQ1NUUixMUENTVFIsTFBTVFIpOwotQk9PTCAgICAgICBGbGFzaFdpbmRvdyhIV05ELEJPT0wpOwotdm9pZCAgICAgICBGcmVlTGlicmFyeShISU5TVEFOQ0UxNik7Ci1VSU5UICAgICAgIEdESVJlYWxpemVQYWxldHRlKEhEQzE2KTsKLUhQQUxFVFRFMTYgR0RJU2VsZWN0UGFsZXR0ZShIREMxNixIUEFMRVRURTE2LFdPUkQpOwotRFdPUkQgICAgICBHZXRBc3BlY3RSYXRpb0ZpbHRlcihIREMxNik7Ci1XT1JEICAgICAgIEdldEF0b21OYW1lKEFUT00sTFBTVFIsc2hvcnQpOwotSEFORExFMTYgICBHZXRDbGlwYm9hcmREYXRhKFdPUkQpOwotaW50ICAgICAgICBHZXRDbGlwYm9hcmRGb3JtYXROYW1lKFdPUkQsTFBTVFIsc2hvcnQpOwotSFdORCAgICAgICBHZXRDbGlwYm9hcmRPd25lcih2b2lkKTsKLUhXTkQgICAgICAgR2V0Q2xpcGJvYXJkVmlld2VyKHZvaWQpOwotSEJSVVNIMTYgICBHZXRDb250cm9sQnJ1c2goSFdORCxIREMxNixXT1JEKTsKLURXT1JEICAgICAgR2V0Q3VycmVudFRpbWUodm9pZCk7Ci1IQ1VSU09SMTYgIEdldEN1cnNvcih2b2lkKTsKLVNFR1BUUiAgICAgR2V0RE9TRW52aXJvbm1lbnQodm9pZCk7Ci1pbnQgICAgICAgIEdldERldmljZUNhcHMoSERDMTYsV09SRCk7Ci1XT1JEICAgICAgIEdldERvdWJsZUNsaWNrVGltZSh2b2lkKTsKLWludCAgICAgICAgR2V0RW52aXJvbm1lbnQoTFBTVFIsTFBTVFIsV09SRCk7Ci1EV09SRCAgICAgIEdldEZyZWVTcGFjZShVSU5UMTYpOwotRFdPUkQgICAgICBHZXRIZWFwU3BhY2VzKEhNT0RVTEUxNik7Ci1CT09MICAgICAgIEdldElucHV0U3RhdGUodm9pZCk7Ci1pbnQgICAgICAgIEdldEtCQ29kZVBhZ2Uodm9pZCk7Ci1pbnQgICAgICAgIEdldEtlcm5pbmdQYWlycyhIREMxNixpbnQsTFBLRVJOSU5HUEFJUjE2KTsKLUhXTkQgICAgICAgR2V0TGFzdEFjdGl2ZVBvcHVwKEhXTkQpOwotQk9PTCAgICAgICBHZXRNZXNzYWdlKFNFR1BUUixIV05ELFVJTlQsVUlOVCk7Ci1MT05HICAgICAgIEdldE1lc3NhZ2VFeHRyYUluZm8odm9pZCk7Ci1EV09SRCAgICAgIEdldE1lc3NhZ2VQb3Modm9pZCk7Ci1MT05HICAgICAgIEdldE1lc3NhZ2VUaW1lKHZvaWQpOwotSE1FVEFGSUxFMTYgR2V0TWV0YUZpbGUoTFBTVFIpOwotSEdMT0JBTDE2ICBHZXRNZXRhRmlsZUJpdHMoSE1FVEFGSUxFMTYpOwotSE1PRFVMRTE2ICBHZXRNb2R1bGVIYW5kbGUoTFBDU1RSKTsKLUlOVDE2ICAgICAgR2V0TW9kdWxlVXNhZ2UoSElOU1RBTkNFMTYpOwotRFdPUkQgICAgICBHZXROZWFyZXN0Q29sb3IoSERDMTYsRFdPUkQpOwotV09SRCAgICAgICBHZXROZWFyZXN0UGFsZXR0ZUluZGV4KEhQQUxFVFRFMTYsRFdPUkQpOwotSFdORCAgICAgICBHZXRPcGVuQ2xpcGJvYXJkV2luZG93KHZvaWQpOwotV09SRCAgICAgICBHZXRQYWxldHRlRW50cmllcyhIUEFMRVRURTE2LFdPUkQsV09SRCxMUFBBTEVUVEVFTlRSWSk7Ci1pbnQgICAgICAgIEdldFByaW9yaXR5Q2xpcGJvYXJkRm9ybWF0KFdPUkQqLHNob3J0KTsKLURXT1JEICAgICAgR2V0UXVldWVTdGF0dXMoVUlOVCk7Ci1CT09MICAgICAgIEdldFJhc3Rlcml6ZXJDYXBzKExQUkFTVEVSSVpFUl9TVEFUVVMsVUlOVCk7Ci1pbnQgICAgICAgIEdldFN5c3RlbU1ldHJpY3MoV09SRCk7Ci1XT1JEICAgICAgIEdldFN5c3RlbVBhbGV0dGVFbnRyaWVzKEhEQzE2LFdPUkQsV09SRCxMUFBBTEVUVEVFTlRSWSk7Ci1XT1JEICAgICAgIEdldFN5c3RlbVBhbGV0dGVVc2UoSERDMTYpOwotRFdPUkQgICAgICBHZXRUYWJiZWRUZXh0RXh0ZW50KEhEQzE2LExQU1RSLGludCxpbnQsTFBJTlQxNik7Ci1CWVRFICAgICAgIEdldFRlbXBEcml2ZShCWVRFKTsKLUxQSU5UMTYgICAgR2V0VGhyZXNob2xkRXZlbnQodm9pZCk7Ci1pbnQgICAgICAgIEdldFRocmVzaG9sZFN0YXR1cyh2b2lkKTsKLUJPT0wgICAgICAgR2V0V2luRGVidWdJbmZvKExQV0lOREVCVUdJTkZPLFVJTlQpOwotQVRPTSAgICAgICBHbG9iYWxEZWxldGVBdG9tKEFUT00pOwotdm9pZCAgICAgICBHbG9iYWxGaXgoSEdMT0JBTDE2KTsKLUJPT0wxNiAgICAgR2xvYmFsVW5XaXJlKEhHTE9CQUwxNik7Ci12b2lkICAgICAgIEdsb2JhbFVuZml4KEhHTE9CQUwxNik7Ci1TRUdQVFIgICAgIEdsb2JhbFdpcmUoSEdMT0JBTDE2KTsKLUJPT0wgICAgICAgR3JheVN0cmluZyhIREMxNixIQlJVU0gxNixHUkFZU1RSSU5HUFJPQzE2LExQQVJBTSxJTlQsSU5ULElOVCxJTlQsSU5UKTsKLUJPT0wgICAgICAgSW5TZW5kTWVzc2FnZSh2b2lkKTsKLVdPUkQgICAgICAgSW5pdEF0b21UYWJsZShXT1JEKTsKLUJPT0wgICAgICAgSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUoV09SRCk7Ci1CT09MMTYgICAgIElzRGlhbG9nTWVzc2FnZShIV05EMTYsTFBNU0cxNik7Ci1CT09MICAgICAgIElzVmFsaWRNZXRhRmlsZShITUVUQUZJTEUxNik7Ci1ISU5TVEFOQ0UxNiBMb2FkTW9kdWxlKExQQ1NUUixMUFZPSUQpOwotRkFSUFJPQzE2ICBMb2NhbE5vdGlmeShGQVJQUk9DMTYpOwotdm9pZCAgICAgICBNZXNzYWdlQmVlcChXT1JEKTsKLUJPT0wgICAgICAgT3BlbkNsaXBib2FyZChIV05EKTsKLUJPT0wgICAgICAgT3Blbkljb24oSFdORCk7Ci1pbnQgICAgICAgIE9wZW5Tb3VuZCh2b2lkKTsKLXZvaWQgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTFBDU1RSKTsKLUJPT0wgICAgICAgUGxheU1ldGFGaWxlKEhEQzE2LEhNRVRBRklMRTE2KTsKLXZvaWQgICAgICAgUGxheU1ldGFGaWxlUmVjb3JkKEhEQzE2LExQSEFORExFVEFCTEUxNixMUE1FVEFSRUNPUkQsV09SRCk7Ci1CT09MICAgICAgIFBvc3RNZXNzYWdlKEhXTkQsV09SRCxXT1JELExPTkcpOwotdm9pZCAgICAgICBQb3N0UXVpdE1lc3NhZ2UoSU5UKTsKLXZvaWQgICAgICAgUHJvZkNsZWFyKHZvaWQpOwotdm9pZCAgICAgICBQcm9mRmluaXNoKHZvaWQpOwotdm9pZCAgICAgICBQcm9mRmx1c2godm9pZCk7Ci1pbnQgICAgICAgIFByb2ZJbnNDaGsodm9pZCk7Ci12b2lkICAgICAgIFByb2ZTYW1wUmF0ZShpbnQsaW50KTsKLXZvaWQgICAgICAgUHJvZlNldHVwKGludCxpbnQpOwotdm9pZCAgICAgICBQcm9mU3RhcnQodm9pZCk7Ci12b2lkICAgICAgIFByb2ZTdG9wKHZvaWQpOwotV09SRCAgICAgICBSZWFsaXplRGVmYXVsdFBhbGV0dGUoSERDMTYpOwotQk9PTCAgICAgICBSZW1vdmVGb250UmVzb3VyY2UoTFBTVFIpOwotdm9pZCAgICAgICBSZXBseU1lc3NhZ2UoTFJFU1VMVCk7Ci1CT09MICAgICAgIFJlc2l6ZVBhbGV0dGUoSFBBTEVUVEUxNixVSU5UKTsKLXZvaWQgICAgICAgU2Nyb2xsQ2hpbGRyZW4oSFdORCxVSU5ULFdQQVJBTTE2LExQQVJBTSk7Ci1IUEFMRVRURTE2IFNlbGVjdFBhbGV0dGUoSERDMTYsSFBBTEVUVEUxNixCT09MKTsKLUhBTkRMRTE2ICAgU2V0Q2xpcGJvYXJkRGF0YShXT1JELEhBTkRMRTE2KTsKLUhXTkQgICAgICAgU2V0Q2xpcGJvYXJkVmlld2VyKEhXTkQpOwotdm9pZCAgICAgICBTZXRDb252ZXJ0SG9vayhCT09MKTsKLUJPT0wgICAgICAgU2V0Q29udmVydFBhcmFtcyhpbnQsaW50KTsKLUhDVVJTT1IxNiAgU2V0Q3Vyc29yKEhDVVJTT1IxNik7Ci12b2lkICAgICAgIFNldEN1cnNvclBvcyhzaG9ydCxzaG9ydCk7Ci12b2lkICAgICAgIFNldERvdWJsZUNsaWNrVGltZShXT1JEKTsKLWludCAgICAgICAgU2V0RW52aXJvbm1lbnQoTFBDU1RSLExQQ1NUUixXT1JEKTsKLVdPUkQgICAgICAgU2V0SG9va0ZsYWdzKEhEQzE2LFdPUkQpOwotRFdPUkQgICAgICBTZXRNYXBwZXJGbGFncyhIREMxNixEV09SRCk7Ci1CT09MICAgICAgIFNldE1lc3NhZ2VRdWV1ZShpbnQpOwotSE1FVEFGSUxFMTYgU2V0TWV0YUZpbGVCaXRzKEhHTE9CQUwxNik7Ci1XT1JEICAgICAgIFNldFBhbGV0dGVFbnRyaWVzKEhQQUxFVFRFMTYsV09SRCxXT1JELExQUEFMRVRURUVOVFJZKTsKLUhXTkQgICAgICAgU2V0UGFyZW50KEhXTkQsSFdORCk7Ci1GQVJQUk9DMTYgIFNldFJlc291cmNlSGFuZGxlcihISU5TVEFOQ0UxNixMUFNUUixGQVJQUk9DMTYpOwotaW50ICAgICAgICBTZXRTb3VuZE5vaXNlKGludCxpbnQpOwotdm9pZCAgICAgICBTZXRTeXNDb2xvcnMoaW50LExQSU5UMTYsQ09MT1JSRUYqKTsKLVdPUkQgICAgICAgU2V0U3lzdGVtUGFsZXR0ZVVzZShIREMxNixXT1JEKTsKLWludCAgICAgICAgU2V0Vm9pY2VBY2NlbnQoaW50LGludCxpbnQsaW50LGludCk7Ci1pbnQgICAgICAgIFNldFZvaWNlRW52ZWxvcGUoaW50LGludCxpbnQpOwotaW50ICAgICAgICBTZXRWb2ljZU5vdGUoaW50LGludCxpbnQsaW50KTsKLWludCAgICAgICAgU2V0Vm9pY2VRdWV1ZVNpemUoaW50LGludCk7Ci1pbnQgICAgICAgIFNldFZvaWNlU291bmQoaW50LExPTkcsaW50KTsKLWludCAgICAgICAgU2V0Vm9pY2VUaHJlc2hvbGQoaW50LGludCk7Ci1CT09MICAgICAgIFNldFdpbkRlYnVnSW5mbyhMUFdJTkRFQlVHSU5GTyk7Ci1ISU5TVEFOQ0UxNiBTaGVsbEV4ZWN1dGUoSFdORCxMUENTVFIsTFBDU1RSLExQU1RSLExQQ1NUUixJTlQpOwotaW50ICAgICAgICBTaG93Q3Vyc29yKEJPT0wpOwotdm9pZCAgICAgICBTaG93T3duZWRQb3B1cHMoSFdORCxCT09MKTsKLWludCAgICAgICAgU3RhcnRTb3VuZCh2b2lkKTsKLWludCAgICAgICAgU3RvcFNvdW5kKHZvaWQpOwotQk9PTCAgICAgICBTd2FwTW91c2VCdXR0b24oQk9PTCk7Ci12b2lkICAgICAgIFN3YXBSZWNvcmRpbmcoV09SRCk7Ci1pbnQgICAgICAgIFN5bmNBbGxWb2ljZXModm9pZCk7Ci1MT05HICAgICAgIFRhYmJlZFRleHRPdXQoSERDMTYsc2hvcnQsc2hvcnQsTFBTVFIsc2hvcnQsc2hvcnQsTFBJTlQxNixzaG9ydCk7Ci1CT09MICAgICAgIFRyYW5zbGF0ZU1ESVN5c0FjY2VsKEhXTkQsTFBNU0cxNik7Ci1CT09MICAgICAgIFRyYW5zbGF0ZU1lc3NhZ2UoTFBNU0cxNik7Ci1pbnQgICAgICAgIFVwZGF0ZUNvbG9ycyhIREMxNik7Ci12b2lkICAgICAgIFdhaXRNZXNzYWdlKHZvaWQpOwotaW50ICAgICAgICBXYWl0U291bmRTdGF0ZShpbnQpOwotCiAjZW5kaWYgIC8qIE5PX1RSQU5TSVRJT05fVFlQRVMgKi8KIAogI2RlZmluZSBXSU5FTElCX1VOSU1QKHgpIGZwcmludGYgKHN0ZGVyciwgIldpbmVMaWI6IFVuaW1wbGVtZW50ZWQgJXNcbiIsIHgpCmRpZmYgLS1naXQgYS9saWJyYXJ5L21pc2NzdHVicy5jIGIvbGlicmFyeS9taXNjc3R1YnMuYwppbmRleCBhOTk4NmE0Li5lNjE3N2VlIDEwMDY0NAotLS0gYS9saWJyYXJ5L21pc2NzdHVicy5jCisrKyBiL2xpYnJhcnkvbWlzY3N0dWJzLmMKQEAgLTQ1LDE4ICs0NSwxOCBAQAogICB9CiB9CiAKLWV4dGVybiBMUkVTVUxUIENvbG9yRGxnUHJvYyhIV05ELFVJTlQsV1BBUkFNMTYsTFBBUkFNKTsKLWV4dGVybiBMUkVTVUxUIENvbWJvQm94V25kUHJvYyhIV05ELFVJTlQsV1BBUkFNMTYsTFBBUkFNKTsKLWV4dGVybiBMUkVTVUxUIENvbWJvTEJveFduZFByb2MoSFdORCxVSU5ULFdQQVJBTTE2LExQQVJBTSk7Ci1leHRlcm4gTFJFU1VMVCBGaWxlT3BlbkRsZ1Byb2MoSFdORCxVSU5ULFdQQVJBTTE2LExQQVJBTSk7Ci1leHRlcm4gTFJFU1VMVCBGaWxlU2F2ZURsZ1Byb2MoSFdORCxVSU5ULFdQQVJBTTE2LExQQVJBTSk7Ci1leHRlcm4gTFJFU1VMVCBGaW5kVGV4dERsZ1Byb2MoSFdORCxVSU5ULFdQQVJBTTE2LExQQVJBTSk7Ci1leHRlcm4gTFJFU1VMVCBNRElDbGllbnRXbmRQcm9jKEhXTkQsVUlOVCxXUEFSQU0xNixMUEFSQU0pOwotZXh0ZXJuIExSRVNVTFQgUHJpbnREbGdQcm9jKEhXTkQsVUlOVCxXUEFSQU0xNixMUEFSQU0pOwotZXh0ZXJuIExSRVNVTFQgUHJpbnRTZXR1cERsZ1Byb2MoSFdORCxVSU5ULFdQQVJBTTE2LExQQVJBTSk7Ci1leHRlcm4gTFJFU1VMVCBSZXBsYWNlVGV4dERsZ1Byb2MoSFdORCxVSU5ULFdQQVJBTTE2LExQQVJBTSk7Ci1leHRlcm4gTFJFU1VMVCBTY3JvbGxCYXJXbmRQcm9jKEhXTkQsVUlOVCxXUEFSQU0xNixMUEFSQU0pOwotZXh0ZXJuIExSRVNVTFQgU3RhdGljV25kUHJvYyhIV05ELFVJTlQsV1BBUkFNMTYsTFBBUkFNKTsKK2V4dGVybiBMUkVTVUxUIENvbG9yRGxnUHJvYyhIV05EMTYsVUlOVCxXUEFSQU0xNixMUEFSQU0pOworZXh0ZXJuIExSRVNVTFQgQ29tYm9Cb3hXbmRQcm9jKEhXTkQxNixVSU5ULFdQQVJBTTE2LExQQVJBTSk7CitleHRlcm4gTFJFU1VMVCBDb21ib0xCb3hXbmRQcm9jKEhXTkQxNixVSU5ULFdQQVJBTTE2LExQQVJBTSk7CitleHRlcm4gTFJFU1VMVCBGaWxlT3BlbkRsZ1Byb2MoSFdORDE2LFVJTlQsV1BBUkFNMTYsTFBBUkFNKTsKK2V4dGVybiBMUkVTVUxUIEZpbGVTYXZlRGxnUHJvYyhIV05EMTYsVUlOVCxXUEFSQU0xNixMUEFSQU0pOworZXh0ZXJuIExSRVNVTFQgRmluZFRleHREbGdQcm9jKEhXTkQxNixVSU5ULFdQQVJBTTE2LExQQVJBTSk7CitleHRlcm4gTFJFU1VMVCBNRElDbGllbnRXbmRQcm9jKEhXTkQxNixVSU5ULFdQQVJBTTE2LExQQVJBTSk7CitleHRlcm4gTFJFU1VMVCBQcmludERsZ1Byb2MoSFdORDE2LFVJTlQsV1BBUkFNMTYsTFBBUkFNKTsKK2V4dGVybiBMUkVTVUxUIFByaW50U2V0dXBEbGdQcm9jKEhXTkQxNixVSU5ULFdQQVJBTTE2LExQQVJBTSk7CitleHRlcm4gTFJFU1VMVCBSZXBsYWNlVGV4dERsZ1Byb2MoSFdORDE2LFVJTlQsV1BBUkFNMTYsTFBBUkFNKTsKK2V4dGVybiBMUkVTVUxUIFNjcm9sbEJhclduZFByb2MoSFdORDE2LFVJTlQsV1BBUkFNMTYsTFBBUkFNKTsKK2V4dGVybiBMUkVTVUxUIFN0YXRpY1duZFByb2MoSFdORDE2LFVJTlQsV1BBUkFNMTYsTFBBUkFNKTsKIGV4dGVybiBMUkVTVUxUIFRBU0tfUmVzY2hlZHVsZSh2b2lkKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9sb2FkZXIvbWFpbi5jIGIvbG9hZGVyL21haW4uYwppbmRleCAxYzFlZTljLi42NDg1NGQ2IDEwMDY0NAotLS0gYS9sb2FkZXIvbWFpbi5jCisrKyBiL2xvYWRlci9tYWluLmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogICAgIGlmICghUVVFVUVfQ3JlYXRlU3lzTXNnUXVldWUoIHF1ZXVlU2l6ZSApKSByZXR1cm4gMDsKIAogICAgIC8qIFNldCBkb3VibGUgY2xpY2sgdGltZSAqLwotICAgIFNldERvdWJsZUNsaWNrVGltZSggR2V0UHJvZmlsZUludDMyQSgid2luZG93cyIsIkRvdWJsZUNsaWNrU3BlZWQiLDQ1MikgKTsKKyAgICBTZXREb3VibGVDbGlja1RpbWUzMiggR2V0UHJvZmlsZUludDMyQSgid2luZG93cyIsIkRvdWJsZUNsaWNrU3BlZWQiLDQ1MikgKTsKIAogICAgIHJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvbG9hZGVyL3BlX2ltYWdlLmMgYi9sb2FkZXIvcGVfaW1hZ2UuYwppbmRleCBkMzBiMDliLi41OWQxNWNiIDEwMDY0NAotLS0gYS9sb2FkZXIvcGVfaW1hZ2UuYworKysgYi9sb2FkZXIvcGVfaW1hZ2UuYwpAQCAtMzcsNyArMzcsNyBAQAogCiB2b2lkIGR1bXBfZXhwb3J0cyhJTUFHRV9FWFBPUlRfRElSRUNUT1JZICogcGVfZXhwb3J0cywgdW5zaWduZWQgaW50IGxvYWRfYWRkcikKIHsgCi0gIGNoYXIJCSpNb2R1bGU7CisgIGNoYXIJCSpNb2R1bGUsKnM7CiAgIGludAkJaTsKICAgdV9zaG9ydAkqb3JkaW5hbDsKICAgdV9sb25nCSpmdW5jdGlvbiwqZnVuY3Rpb25zOwpAQCAtNzMsNiArNzMsNyBAQAogCSAgZGFkZHIub2ZmPVJWQSgqZnVuY3Rpb25zKTsKIAkgIGZ1bmN0aW9uKys7CiAgICAgICB9CisgICAgICB3aGlsZSAoKHM9c3RyY2hyKGJ1ZmZlciwnLicpKSkgKnM9J18nOwogICAgICAgREVCVUdfQWRkU3ltYm9sKGJ1ZmZlciwmZGFkZHIsIE5VTEwsIFNZTV9XSU4zMiB8IFNZTV9GVU5DKTsKICAgfQogfQpAQCAtNTM2LDYgKzUzNyw4IEBACiAJaWYocGUtPnBlX2V4cG9ydCkgZHVtcF9leHBvcnRzKHBlLT5wZV9leHBvcnQsbG9hZF9hZGRyKTsKICAgCQkKIAlpZiAocGUtPnBlX2V4cG9ydCkgeworCQljaGFyCSpzOworCiAJCS8qIGFkZCBzdGFydCBvZiBzZWN0aW9ucyBhcyBkZWJ1Z3N5bWJvbHMgKi8KIAkJZm9yKGk9MDtpPHBlLT5wZV9oZWFkZXItPkZpbGVIZWFkZXIuTnVtYmVyT2ZTZWN0aW9ucztpKyspIHsKIAkJCXNwcmludGYoYnVmZmVyLCIlc18lcyIsCkBAIC01NDMsMTEgKzU0NiwxMyBAQAogCQkJCXBlLT5wZV9zZWdbaV0uTmFtZQogCQkJKTsKIAkJCWRhZGRyLm9mZj0gUlZBKHBlLT5wZV9zZWdbaV0uVmlydHVhbEFkZHJlc3MpOworICAgICAgCQkJd2hpbGUgKChzPXN0cmNocihidWZmZXIsJy4nKSkpICpzPSdfJzsKIAkJCURFQlVHX0FkZFN5bWJvbChidWZmZXIsJmRhZGRyLCBOVUxMLCBTWU1fV0lOMzIgfCBTWU1fRlVOQyk7CiAJCX0KIAkJLyogYWRkIGVudHJ5IHBvaW50ICovCiAJCXNwcmludGYoYnVmZmVyLCIlc19FbnRyeVBvaW50IiwoY2hhciopUlZBKHBlLT5wZV9leHBvcnQtPk5hbWUpKTsKIAkJZGFkZHIub2ZmPVJWQShwZS0+cGVfaGVhZGVyLT5PcHRpb25hbEhlYWRlci5BZGRyZXNzT2ZFbnRyeVBvaW50KTsKKyAgICAgIAkJd2hpbGUgKChzPXN0cmNocihidWZmZXIsJy4nKSkpICpzPSdfJzsKIAkJREVCVUdfQWRkU3ltYm9sKGJ1ZmZlciwmZGFkZHIsIE5VTEwsIFNZTV9XSU4zMiB8IFNZTV9GVU5DKTsKIAkJLyogYWRkIHN0YXJ0IG9mIERMTCAqLwogCQlkYWRkci5vZmY9bG9hZF9hZGRyOwpkaWZmIC0tZ2l0IGEvbG9hZGVyL3NpZ25hbC5jIGIvbG9hZGVyL3NpZ25hbC5jCmluZGV4IDc2OWI1MTAuLmUxZmJhMWYgMTAwNjQ0Ci0tLSBhL2xvYWRlci9zaWduYWwuYworKysgYi9sb2FkZXIvc2lnbmFsLmMKQEAgLTk5LDcgKzk5LDcgQEAKICAqLwogc3RhdGljIHZvaWQgU0lHTkFMX2NoaWxkKHZvaWQpCiB7Ci0jaWZkZWYgX19zdnI0X18KKyNpZiBkZWZpbmVkKF9fc3ZyNF9fKSB8fCBkZWZpbmVkKF9fRU1YX18pCiAgICAgd2FpdChOVUxMKTsKICNlbHNlCiAgICAgd2FpdDQoIDAsIE5VTEwsIFdOT0hBTkcsIE5VTEwpOwpAQCAtMTk1LDYgKzE5NSwxNSBAQAogICAgIHJldCA9IHNpZ2FjdGlvbiggc2lnLCAmc2lnX2FjdCwgTlVMTCApOwogI2VuZGlmICAvKiBfX3N2cjRfXyB8fCBfU0NPX0RTICovCiAKKyNpZiBkZWZpbmVkKF9fRU1YX18pCisgICAgc2lnc2V0X3Qgc2lnX21hc2s7CisgICAgc2lnZW1wdHlzZXQoJnNpZ19tYXNrKTsKKyAgICBzaWdfYWN0LnNhX2hhbmRsZXIgPSBmdW5jOworICAgIHNpZ19hY3Quc2FfZmxhZ3MgPSAwOyAvKiBGSVhNRTogRU1YIGhhcyBvbmx5IFNBX0FDSyBhbmQgU0FfU1lTViAqLworICAgIHNpZ19hY3Quc2FfbWFzayA9IHNpZ19tYXNrOworICAgIHJldCA9IHNpZ2FjdGlvbiggc2lnLCAmc2lnX2FjdCwgTlVMTCApOworI2VuZGlmICAvKiBfX0VNWF9fICovCisKICAgICBpZiAocmV0IDwgMCkKICAgICB7CiAgICAgICAgIHBlcnJvciggInNpZ2FjdGlvbiIgKTsKZGlmZiAtLWdpdCBhL2xvYWRlci90YXNrLmMgYi9sb2FkZXIvdGFzay5jCmluZGV4IDg2NGFiYWQuLmQ5YTY2NmYgMTAwNjQ0Ci0tLSBhL2xvYWRlci90YXNrLmMKKysrIGIvbG9hZGVyL3Rhc2suYwpAQCAtODMzLDcgKzgzMyw4IEBACiAgIGlmKCBwVGFzayApCiAgIHsKICAgICBwUSA9IChNRVNTQUdFUVVFVUUqKUdsb2JhbExvY2sxNihwVGFzay0+aFF1ZXVlKTsKLSAgICBpZiggcFEgJiYgcFEtPmZsYWdzICYgUVVFVUVfRkxBR19YRVZFTlQgKQorICAgIGlmKCBwUSAmJiBwUS0+ZmxhZ3MgJiBRVUVVRV9GTEFHX1hFVkVOVCAmJgorCSAgICAhKHBRLT53YWtlQml0cyAmIChRU19TRU5ETUVTU0FHRSB8IFFTX1NNUkVTVUxUKSkgKQogICAgIHsKICAgICAgIHBRLT5mbGFncyAmPSB+UVVFVUVfRkxBR19YRVZFTlQ7CiAgICAgICBFVkVOVF9XYWl0WEV2ZW50KCBGQUxTRSwgRkFMU0UgKTsKZGlmZiAtLWdpdCBhL21lbW9yeS9hdG9tLmMgYi9tZW1vcnkvYXRvbS5jCmluZGV4IDU4MWRlMDQuLjU5OGMyNjcgMTAwNjQ0Ci0tLSBhL21lbW9yeS9hdG9tLmMKKysrIGIvbWVtb3J5L2F0b20uYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgaW50IGxlbjsKIAogICAgIGlmIChzdHJbMF0gPT0gJyMnKSByZXR1cm4gYXRvaSggJnN0clsxXSApOyAgLyogQ2hlY2sgZm9yIGludGVnZXIgYXRvbSAqLwotICAgIGlmICgobGVuID0gc3RybGVuKCBzdHIgKSkgPiAyNTUpIGxlbiA9IDI1NTsKKyAgICBpZiAoKGxlbiA9IHN0cmxlbiggc3RyICkpID4gTUFYX0FUT01fTEVOKSBsZW4gPSBNQVhfQVRPTV9MRU47CiAgICAgaWYgKCEodGFibGUgPSBBVE9NX0dldFRhYmxlKCBzZWxlY3RvciwgVFJVRSApKSkgcmV0dXJuIDA7CiAgICAgaGFzaCA9IEFUT01fSGFzaCggdGFibGUtPnNpemUsIHN0ciwgbGVuICk7CiAgICAgZW50cnkgPSB0YWJsZS0+ZW50cmllc1toYXNoXTsKQEAgLTI2MSw5ICsyNjEsOSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEluaXRBdG9tVGFibGUgICAoS0VSTkVMLjY4KQorICogICAgICAgICAgIEluaXRBdG9tVGFibGUxNiAgIChLRVJORUwuNjgpCiAgKi8KLVdPUkQgSW5pdEF0b21UYWJsZSggV09SRCBlbnRyaWVzICkKK1dPUkQgSW5pdEF0b21UYWJsZTE2KCBXT1JEIGVudHJpZXMgKQogewogICAgIHJldHVybiBBVE9NX0luaXRUYWJsZSggQ1VSUkVOVF9EUywgZW50cmllcyApOwogfQpAQCAtMjgwLDkgKzI4MCw5IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgQWRkQXRvbSAgIChLRVJORUwuNzApCisgKiAgICAgICAgICAgQWRkQXRvbTE2ICAgKEtFUk5FTC43MCkKICAqLwotQVRPTSBBZGRBdG9tKCBTRUdQVFIgc3RyICkKK0FUT00gQWRkQXRvbTE2KCBTRUdQVFIgc3RyICkKIHsKICAgICBBVE9NIGF0b207CiAgICAgSEFORExFMTYgZHMgPSBDVVJSRU5UX0RTOwpAQCAtMjkyLDcgKzI5Miw3IEBACiAgICAgewogICAgICAgICAvKiBJZiB0aGUgc3RyaW5nIGlzIGluIHRoZSBzYW1lIGRhdGEgc2VnbWVudCBhcyB0aGUgYXRvbSB0YWJsZSwgbWFrZSAqLwogICAgICAgICAvKiBhIGNvcHkgb2YgdGhlIHN0cmluZyB0byBiZSBzdXJlIGl0IGRvZXNuJ3QgbW92ZSBpbiBsaW5lYXIgbWVtb3J5LiAqLwotICAgICAgICBjaGFyIGJ1ZmZlclsyNTZdOworICAgICAgICBjaGFyIGJ1ZmZlcltNQVhfQVRPTV9MRU4rMV07CiAgICAgICAgIGxzdHJjcHluMzJBKCBidWZmZXIsIChjaGFyICopUFRSX1NFR19UT19MSU4oc3RyKSwgc2l6ZW9mKGJ1ZmZlcikgKTsKICAgICAgICAgYXRvbSA9IEFUT01fQWRkQXRvbSggZHMsIGJ1ZmZlciApOwogICAgIH0KQEAgLTMwMiwxOCArMzAyLDQ1IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgRGVsZXRlQXRvbSAgIChLRVJORUwuNzEpCisgKiAgICAgICAgICAgQWRkQXRvbTMyQSAgIChLRVJORUwzMi4wKQogICovCi1BVE9NIERlbGV0ZUF0b20oIEFUT00gYXRvbSApCitBVE9NIEFkZEF0b20zMkEoIExQQ1NUUiBzdHIgKQoreworICAgIHJldHVybiBHbG9iYWxBZGRBdG9tMzJBKCBzdHIgKTsgIC8qIEZJWE1FICovCit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgQWRkQXRvbTMyVyAgIChLRVJORUwzMi4xKQorICovCitBVE9NIEFkZEF0b20zMlcoIExQQ1dTVFIgc3RyICkKK3sKKyAgICByZXR1cm4gR2xvYmFsQWRkQXRvbTMyVyggc3RyICk7ICAvKiBGSVhNRSAqLworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIERlbGV0ZUF0b20xNiAgIChLRVJORUwuNzEpCisgKi8KK0FUT00gRGVsZXRlQXRvbTE2KCBBVE9NIGF0b20gKQogewogICAgIHJldHVybiBBVE9NX0RlbGV0ZUF0b20oIENVUlJFTlRfRFMsIGF0b20gKTsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBGaW5kQXRvbSAgIChLRVJORUwuNjkpCisgKiAgICAgICAgICAgRGVsZXRlQXRvbTMyICAgKEtFUk5FTDMyLjY5KQogICovCi1BVE9NIEZpbmRBdG9tKCBTRUdQVFIgc3RyICkKK0FUT00gRGVsZXRlQXRvbTMyKCBBVE9NIGF0b20gKQoreworICAgIHJldHVybiBHbG9iYWxEZWxldGVBdG9tKCBhdG9tICk7ICAvKiBGSVhNRSAqLworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEZpbmRBdG9tMTYgICAoS0VSTkVMLjY5KQorICovCitBVE9NIEZpbmRBdG9tMTYoIFNFR1BUUiBzdHIgKQogewogICAgIGlmICghSElXT1JEKHN0cikpIHJldHVybiAoQVRPTSlMT1dPUkQoc3RyKTsgIC8qIEludGVnZXIgYXRvbSAqLwogICAgIHJldHVybiBBVE9NX0ZpbmRBdG9tKCBDVVJSRU5UX0RTLCAoTFBDU1RSKVBUUl9TRUdfVE9fTElOKHN0cikgKTsKQEAgLTMyMSwxMSArMzQ4LDQ3IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgR2V0QXRvbU5hbWUgICAoS0VSTkVMLjcyKQorICogICAgICAgICAgIEZpbmRBdG9tMzJBICAgKEtFUk5FTDMyLjExNykKICAqLwotV09SRCBHZXRBdG9tTmFtZSggQVRPTSBhdG9tLCBMUFNUUiBidWZmZXIsIHNob3J0IGNvdW50ICkKK0FUT00gRmluZEF0b20zMkEoIExQQ1NUUiBzdHIgKQogewotICAgIHJldHVybiAoV09SRClBVE9NX0dldEF0b21OYW1lKCBDVVJSRU5UX0RTLCBhdG9tLCBidWZmZXIsIGNvdW50ICk7CisgICAgcmV0dXJuIEdsb2JhbEZpbmRBdG9tMzJBKCBzdHIgKTsgIC8qIEZJWE1FICovCit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRmluZEF0b20zMlcgICAoS0VSTkVMMzIuMTE4KQorICovCitBVE9NIEZpbmRBdG9tMzJXKCBMUENXU1RSIHN0ciApCit7CisgICAgcmV0dXJuIEdsb2JhbEZpbmRBdG9tMzJXKCBzdHIgKTsgIC8qIEZJWE1FICovCit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2V0QXRvbU5hbWUxNiAgIChLRVJORUwuNzIpCisgKi8KK1VJTlQxNiBHZXRBdG9tTmFtZTE2KCBBVE9NIGF0b20sIExQU1RSIGJ1ZmZlciwgSU5UMTYgY291bnQgKQoreworICAgIHJldHVybiAoVUlOVDE2KUFUT01fR2V0QXRvbU5hbWUoIENVUlJFTlRfRFMsIGF0b20sIGJ1ZmZlciwgY291bnQgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHZXRBdG9tTmFtZTMyQSAgIChLRVJORUwzMi4xNDkpCisgKi8KK1VJTlQzMiBHZXRBdG9tTmFtZTMyQSggQVRPTSBhdG9tLCBMUFNUUiBidWZmZXIsIElOVDMyIGNvdW50ICkKK3sKKyAgICByZXR1cm4gR2xvYmFsR2V0QXRvbU5hbWUzMkEoIGF0b20sIGJ1ZmZlciwgY291bnQgKTsgIC8qIEZJWE1FICovCit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2V0QXRvbU5hbWUzMlcgICAoS0VSTkVMMzIuMTUwKQorICovCitVSU5UMzIgR2V0QXRvbU5hbWUzMlcoIEFUT00gYXRvbSwgTFBXU1RSIGJ1ZmZlciwgSU5UMzIgY291bnQgKQoreworICAgIHJldHVybiBHbG9iYWxHZXRBdG9tTmFtZTMyVyggYXRvbSwgYnVmZmVyLCBjb3VudCApOyAgLyogRklYTUUgKi8KIH0KIAogCmRpZmYgLS1naXQgYS9tZW1vcnkvZ2xvYmFsLmMgYi9tZW1vcnkvZ2xvYmFsLmMKaW5kZXggNWMzOTk4Zi4uM2IxNTU0OSAxMDA2NDQKLS0tIGEvbWVtb3J5L2dsb2JhbC5jCisrKyBiL21lbW9yeS9nbG9iYWwuYwpAQCAtMTQsMTEgKzE0LDEzIEBACiAjaW5jbHVkZSAiaGVhcC5oIgogI2luY2x1ZGUgInRvb2xoZWxwLmgiCiAjaW5jbHVkZSAic2VsZWN0b3JzLmgiCisjaW5jbHVkZSAibWlzY2VtdS5oIgogI2luY2x1ZGUgImRkZV9tZW0uaCIKICNpbmNsdWRlICJzdGFja2ZyYW1lLmgiCiAjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJ3aW5lcnJvci5oIgogCiAgIC8qIEdsb2JhbCBhcmVuYSBibG9jayAqLwogdHlwZWRlZiBzdHJ1Y3QKQEAgLTUzMywxOCArNTM1LDE4IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgR2xvYmFsV2lyZSAgIChLRVJORUwuMTExKQorICogICAgICAgICAgIEdsb2JhbFdpcmUxNiAgIChLRVJORUwuMTExKQogICovCi1TRUdQVFIgR2xvYmFsV2lyZSggSEdMT0JBTDE2IGhhbmRsZSApCitTRUdQVFIgR2xvYmFsV2lyZTE2KCBIR0xPQkFMMTYgaGFuZGxlICkKIHsKICAgICByZXR1cm4gV0lOMTZfR2xvYmFsTG9jazE2KCBoYW5kbGUgKTsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBHbG9iYWxVbldpcmUgICAoS0VSTkVMLjExMikKKyAqICAgICAgICAgICBHbG9iYWxVbldpcmUxNiAgIChLRVJORUwuMTEyKQogICovCi1CT09MMTYgR2xvYmFsVW5XaXJlKCBIR0xPQkFMMTYgaGFuZGxlICkKK0JPT0wxNiBHbG9iYWxVbldpcmUxNiggSEdMT0JBTDE2IGhhbmRsZSApCiB7CiAgICAgcmV0dXJuIEdsb2JhbFVubG9jazE2KCBoYW5kbGUgKTsKIH0KQEAgLTU4MywxNiArNTg1LDUxIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgR2V0RnJlZVNwYWNlICAgKEtFUk5FTC4xNjkpCisgKiAgICAgICAgICAgR2V0RnJlZVNwYWNlMTYgICAoS0VSTkVMLjE2OSkKICAqLwotRFdPUkQgR2V0RnJlZVNwYWNlKCBVSU5UMTYgd0ZsYWdzICkKK0RXT1JEIEdldEZyZWVTcGFjZTE2KCBVSU5UMTYgd0ZsYWdzICkKIHsKLSAgICBNRU1PUllTVEFUVVMJbXM7Ci0KKyAgICBNRU1PUllTVEFUVVMgbXM7CiAgICAgR2xvYmFsTWVtb3J5U3RhdHVzKCAmbXMgKTsKICAgICByZXR1cm4gbXMuZHdBdmFpbFZpcnR1YWw7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdsb2JhbERPU0FsbG9jICAgKEtFUk5FTC4xODQpCisgKi8KK0RXT1JEIEdsb2JhbERPU0FsbG9jKERXT1JEIHNpemUpCit7CisgICBVSU5UMTYgICAgdVBhcmFncmFwaDsKKyAgIExQVk9JRCAgICBscEJsb2NrID0gRE9TTUVNX0dldEJsb2NrKCBzaXplLCAmdVBhcmFncmFwaCApOworICAgCisgICBpZiggbHBCbG9jayApCisgICB7CisgICAgICAgSE1PRFVMRTE2IGhNb2R1bGUgPSBHZXRNb2R1bGVIYW5kbGUoIktFUk5FTCIpOworICAgICAgIFdPUkQJIHdTZWxlY3RvcjsKKyAgIAorICAgICAgIHdTZWxlY3RvciA9IEdMT0JBTF9DcmVhdGVCbG9jayhHTUVNX0ZJWEVELCBscEJsb2NrLCBzaXplLCAKKwkJCQkgICAgICBoTW9kdWxlLCAwLCAwLCAwLCBOVUxMICk7CisgICAgICAgcmV0dXJuIE1BS0VMT05HKHdTZWxlY3Rvcix1UGFyYWdyYXBoKTsKKyAgIH0KKyAgIHJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHbG9iYWxET1NGcmVlICAgICAgKEtFUk5FTC4xODUpCisgKi8KK1dPUkQgR2xvYmFsRE9TRnJlZShXT1JEIHNlbCkKK3sKKyAgIERXT1JEICAgYmxvY2sgPSBHZXRTZWxlY3RvckJhc2Uoc2VsKTsKKworICAgaWYoIGJsb2NrICYmIGJsb2NrIDwgMHgxMDAwMDAgKSAKKyAgIHsKKyAgICAgICBMUFZPSUQgbHBCbG9jayA9IERPU01FTV9NYXBEb3NUb0xpbmVhciggYmxvY2sgKTsKKyAgICAgICBpZiggRE9TTUVNX0ZyZWVCbG9jayggbHBCbG9jayApICkKKwkgICBHTE9CQUxfRnJlZUJsb2NrKCBzZWwgKTsKKyAgICAgICBzZWwgPSAwOworICAgfQorICAgcmV0dXJuIHNlbDsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2xvYmFsUGFnZUxvY2sgICAoS0VSTkVMLjE5MSkKQEAgLTYxNSwyMSArNjUyLDIxIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgR2xvYmFsRml4ICAgKEtFUk5FTC4xOTcpCisgKiAgICAgICAgICAgR2xvYmFsRml4MTYgICAoS0VSTkVMLjE5NykKICAqLwotdm9pZCBHbG9iYWxGaXgoIEhHTE9CQUwxNiBoYW5kbGUgKQordm9pZCBHbG9iYWxGaXgxNiggSEdMT0JBTDE2IGhhbmRsZSApCiB7Ci0gICAgZHByaW50Zl9nbG9iYWwoIHN0ZGRlYiwgIkdsb2JhbEZpeDogJTA0eFxuIiwgaGFuZGxlICk7CisgICAgZHByaW50Zl9nbG9iYWwoIHN0ZGRlYiwgIkdsb2JhbEZpeDE2OiAlMDR4XG4iLCBoYW5kbGUgKTsKICAgICBHRVRfQVJFTkFfUFRSKGhhbmRsZSktPmxvY2tDb3VudCsrOwogfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEdsb2JhbFVuZml4ICAgKEtFUk5FTC4xOTgpCisgKiAgICAgICAgICAgR2xvYmFsVW5maXgxNiAgIChLRVJORUwuMTk4KQogICovCi12b2lkIEdsb2JhbFVuZml4KCBIR0xPQkFMMTYgaGFuZGxlICkKK3ZvaWQgR2xvYmFsVW5maXgxNiggSEdMT0JBTDE2IGhhbmRsZSApCiB7Ci0gICAgZHByaW50Zl9nbG9iYWwoIHN0ZGRlYiwgIkdsb2JhbFVuZml4OiAlMDR4XG4iLCBoYW5kbGUgKTsKKyAgICBkcHJpbnRmX2dsb2JhbCggc3RkZGViLCAiR2xvYmFsVW5maXgxNjogJTA0eFxuIiwgaGFuZGxlICk7CiAgICAgR0VUX0FSRU5BX1BUUihoYW5kbGUpLT5sb2NrQ291bnQtLTsKIH0KIApAQCAtNzc2LDE5ICs4MTMsMzY1IEBACiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKKy8qCisgKiBXaW4zMiBHbG9iYWwgaGVhcCBmdW5jdGlvbnMgKEdsb2JhbFhYWCkuCisgKiBUaGVzZSBmdW5jdGlvbnMgaW5jbHVkZWQgaW4gV2luMzIgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCAxNiBiaXQgV2luZG93cworICogRXNwZWNpYWxseSB0aGUgbW92ZWFibGUgYmxvY2tzIGFuZCBoYW5kbGVzIGFyZSBvbGRpc2guIAorICogQnV0IHRoZSBhYmlsaXR5IHRvIGRpcmVjdGx5IGFsbG9jYXRlIG1lbW9yeSB3aXRoIEdQVFIgYW5kIExQVFIgaXMgd2lkZWx5CisgKiB1c2VkLgorICoKKyAqIFRoZSBoYW5kbGUgc3R1ZmYgbG9va3MgaG9ycmlibGUsIGJ1dCBpdCdzIGltcGxlbWVudGVkIGFsbW9zdCBsaWtlIFdpbjk1CisgKiBkb2VzIGl0LiAKKyAqCisgKi8KKworI2RlZmluZSBNQUdJQ19HTE9CQUxfVVNFRCAweDUzNDIKKyNkZWZpbmUgR0xPQkFMX0xPQ0tfTUFYICAgMHhGRgorI2RlZmluZSBIQU5ETEVfVE9fSU5URVJOKGgpICAoUEdMT0JBTDMyX0lOVEVSTikoKChjaGFyICopKGgpKS0yKQorI2RlZmluZSBJTlRFUk5fVE9fSEFORExFKGkpICAoKEhHTE9CQUwzMikgJigoaSktPlBvaW50ZXIpKQorI2RlZmluZSBQT0lOVEVSX1RPX0hBTkRMRShwKSAoKigoKEhHTE9CQUwzMiAqKShwKSktMSkpCisjZGVmaW5lIElTSEFORExFKGgpICAgICAgICAgICgoKERXT1JEKShoKSYyKSE9MCkKKyNkZWZpbmUgSVNQT0lOVEVSKGgpICAgICAgICAgKCgoRFdPUkQpKGgpJjIpPT0wKQorCit0eXBlZGVmIHN0cnVjdCBfX0dMT0JBTDMyX0lOVEVSTgoreworICAgV09SRCAgICAgICAgIE1hZ2ljOworICAgTFBWT0lEICAgICAgIFBvaW50ZXIgV0lORV9QQUNLRUQ7CisgICBCWVRFICAgICAgICAgRmxhZ3M7CisgICBCWVRFICAgICAgICAgTG9ja0NvdW50OworfSBHTE9CQUwzMl9JTlRFUk4sICpQR0xPQkFMMzJfSU5URVJOOworCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIEdsb2JhbEFsbG9jMzIgICAoS0VSTkVMMzIuMzE1KQogICovCi1IR0xPQkFMMzIgR2xvYmFsQWxsb2MzMiggVUlOVDMyIGZsYWdzLCBEV09SRCBzaXplICkKK0hHTE9CQUwzMiBHbG9iYWxBbGxvYzMyKFVJTlQzMiBmbGFncywgRFdPUkQgc2l6ZSkKIHsKLSAgICBEV09SRCBoZWFwRmxhZ3MgPSAwOworICAgUEdMT0JBTDMyX0lOVEVSTiAgICAgcGludGVybjsKKyAgIERXT1JECQlocGZsYWdzOworICAgTFBWT0lEICAgICAgICAgICAgICAgcGFsbG9jOwogCi0gICAgaWYgKGZsYWdzICYgR01FTV9NT1ZFQUJMRSkKLSAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiR2xvYmFsQWxsb2MzMjogdW5pbXBsZW1lbnRlZCBmbGFnIEdNRU1fTU9WRUFCTEVcbiIgKTsKKyAgIGlmKGZsYWdzJkdNRU1fWkVST0lOSVQpCisgICAgICBocGZsYWdzPUhFQVBfWkVST19NRU1PUlk7CisgICBlbHNlCisgICAgICBocGZsYWdzPTA7CisgICAKKyAgIGlmKChmbGFncyAmIEdNRU1fTU9WRUFCTEUpPT0wKSAvKiBQT0lOVEVSICovCisgICB7CisgICAgICBwYWxsb2M9SGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksIGhwZmxhZ3MsIHNpemUpOworICAgICAgcmV0dXJuIChIR0xPQkFMMzIpIHBhbGxvYzsKKyAgIH0KKyAgIGVsc2UgIC8qIEhBTkRMRSAqLworICAgeworICAgICAgLyogSGVhcExvY2soR2V0UHJvY2Vzc0hlYXAoKSk7ICovCiAKLSAgICBpZiAoZmxhZ3MgJiBHTUVNX1pFUk9JTklUKSBoZWFwRmxhZ3MgfD0gSEVBUF9aRVJPX01FTU9SWTsKLSAgICByZXR1cm4gKEhHTE9CQUwzMilIZWFwQWxsb2MoIEdldFByb2Nlc3NIZWFwKCksIGhlYXBGbGFncywgc2l6ZSApOworICAgICAgcGludGVybj1IZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgIHNpemVvZihHTE9CQUwzMl9JTlRFUk4pKTsKKyAgICAgIGlmKHNpemUpCisgICAgICB7CisJIHBhbGxvYz1IZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgc2l6ZStzaXplb2YoSEdMT0JBTDMyKSk7CisJICooSEdMT0JBTDMyICopcGFsbG9jPUlOVEVSTl9UT19IQU5ETEUocGludGVybik7CisJIHBpbnRlcm4tPlBvaW50ZXI9cGFsbG9jK3NpemVvZihIR0xPQkFMMzIpOworICAgICAgfQorICAgICAgZWxzZQorCSBwaW50ZXJuLT5Qb2ludGVyPU5VTEw7CisgICAgICBwaW50ZXJuLT5NYWdpYz1NQUdJQ19HTE9CQUxfVVNFRDsKKyAgICAgIHBpbnRlcm4tPkZsYWdzPWZsYWdzPj44OworICAgICAgcGludGVybi0+TG9ja0NvdW50PTA7CisgICAgICAKKyAgICAgIC8qIEhlYXBVbmxvY2soR2V0UHJvY2Vzc0hlYXAoKSk7ICovCisgICAgICAgCisgICAgICByZXR1cm4gSU5URVJOX1RPX0hBTkRMRShwaW50ZXJuKTsKKyAgIH0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHbG9iYWxMb2NrMzIgICAoS0VSTkVMMzIuMzI2KQorICovCitMUFZPSUQgIEdsb2JhbExvY2szMihIR0xPQkFMMzIgaG1lbSkKK3sKKyAgIFBHTE9CQUwzMl9JTlRFUk4gcGludGVybjsKKyAgIExQVk9JRCAgICAgICAgICAgcGFsbG9jOworCisgICBpZihJU1BPSU5URVIoaG1lbSkpCisgICAgICByZXR1cm4gKExQVk9JRCkgaG1lbTsKKworICAgLyogSGVhcExvY2soR2V0UHJvY2Vzc0hlYXAoKSk7ICovCisgICAKKyAgIHBpbnRlcm49SEFORExFX1RPX0lOVEVSTihobWVtKTsKKyAgIGlmKHBpbnRlcm4tPk1hZ2ljPT1NQUdJQ19HTE9CQUxfVVNFRCkKKyAgIHsKKyAgICAgIGlmKHBpbnRlcm4tPkxvY2tDb3VudDxHTE9CQUxfTE9DS19NQVgpCisJIHBpbnRlcm4tPkxvY2tDb3VudCsrOworICAgICAgcGFsbG9jPXBpbnRlcm4tPlBvaW50ZXI7CisgICB9CisgICBlbHNlCisgICB7CisgICAgICBkcHJpbnRmX2dsb2JhbChzdGRkZWIsICJHbG9iYWxMb2NrMzI6IGludmFsaWQgaGFuZGxlXG4iKTsKKyAgICAgIHBhbGxvYz0oTFBWT0lEKSBOVUxMOworICAgfQorICAgLyogSGVhcFVubG9jayhHZXRQcm9jZXNzSGVhcCgpKTsgKi87CisgICByZXR1cm4gcGFsbG9jOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdsb2JhbFVubG9jazMyICAgKEtFUk5FTDMyLjMzMikKKyAqLworQk9PTDMyIEdsb2JhbFVubG9jazMyKEhHTE9CQUwzMiBobWVtKQoreworICAgUEdMT0JBTDMyX0lOVEVSTiAgICAgICBwaW50ZXJuOworICAgQk9PTDMyICAgICAgICAgICAgICAgICBsb2NrZWQ7CisKKyAgIGlmKElTUE9JTlRFUihobWVtKSkKKyAgICAgIHJldHVybiBGQUxTRTsKKworICAgLyogSGVhcExvY2soR2V0UHJvY2Vzc0hlYXAoKSk7ICovCisgICBwaW50ZXJuPUhBTkRMRV9UT19JTlRFUk4oaG1lbSk7CisgICAKKyAgIGlmKHBpbnRlcm4tPk1hZ2ljPT1NQUdJQ19HTE9CQUxfVVNFRCkKKyAgIHsKKyAgICAgIGlmKChwaW50ZXJuLT5Mb2NrQ291bnQ8R0xPQkFMX0xPQ0tfTUFYKSYmKHBpbnRlcm4tPkxvY2tDb3VudD4wKSkKKwkgcGludGVybi0+TG9ja0NvdW50LS07CisKKyAgICAgIGxvY2tlZD0ocGludGVybi0+TG9ja0NvdW50PT0wKSA/IEZBTFNFIDogVFJVRTsKKyAgIH0KKyAgIGVsc2UKKyAgIHsKKyAgICAgIGRwcmludGZfZ2xvYmFsKHN0ZGRlYiwgIkdsb2JhbFVubG9jazMyOiBpbnZhbGlkIGhhbmRsZVxuIik7CisgICAgICBsb2NrZWQ9RkFMU0U7CisgICB9CisgICAvKiBIZWFwVW5sb2NrKEdldFByb2Nlc3NIZWFwKCkpOyAqLworICAgcmV0dXJuIGxvY2tlZDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHbG9iYWxIYW5kbGUzMiAgIChLRVJORUwzMi4zMjUpCisgKi8KK0hHTE9CQUwzMiBHbG9iYWxIYW5kbGUzMihMUENWT0lEIHBtZW0pCit7CisgICByZXR1cm4gKEhHTE9CQUwzMikgUE9JTlRFUl9UT19IQU5ETEUocG1lbSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2xvYmFsUmVBbGxvYzMyICAgKEtFUk5FTDMyLjMyOCkKKyAqLworSEdMT0JBTDMyIEdsb2JhbFJlQWxsb2MzMihIR0xPQkFMMzIgaG1lbSwgRFdPUkQgc2l6ZSwgVUlOVDMyIGZsYWdzKQoreworICAgTFBWT0lEICAgICAgICAgICAgICAgcGFsbG9jOworICAgSEdMT0JBTDMyICAgICAgICAgICAgaG5ldzsKKyAgIFBHTE9CQUwzMl9JTlRFUk4gICAgIHBpbnRlcm47CisKKyAgIGhuZXc9TlVMTDsKKyAgIC8qIEhlYXBMb2NrKEdldFByb2Nlc3NIZWFwKCkpOyAqLworICAgaWYoZmxhZ3MgJiBHTUVNX01PRElGWSkgLyogbW9kaWZ5IGZsYWdzICovCisgICB7CisgICAgICBpZiggSVNQT0lOVEVSKGhtZW0pICYmIChmbGFncyAmIEdNRU1fTU9WRUFCTEUpKQorICAgICAgeworCSAvKiBtYWtlIGEgZml4ZWQgYmxvY2sgbW92ZWFibGUKKwkgICogYWN0dWFsbHkgb25seSBOVCBpcyBhYmxlIHRvIGRvIHRoaXMuIEJ1dCBpdCdzIHNvbyBzaW1wbGUKKwkgICovCisJIHNpemU9SGVhcFNpemUoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgKExQVk9JRCkgaG1lbSk7CisJIGhuZXc9R2xvYmFsQWxsb2MzMiggZmxhZ3MsIHNpemUpOworCSBwYWxsb2M9R2xvYmFsTG9jazMyKGhuZXcpOworCSBtZW1jcHkocGFsbG9jLCAoTFBWT0lEKSBobWVtLCBzaXplKTsKKwkgR2xvYmFsVW5sb2NrMzIoaG5ldyk7CisJIEdsb2JhbEZyZWUzMihobWVtKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoIElTUE9JTlRFUihobWVtKSAmJihmbGFncyAmIEdNRU1fRElTQ0FSREFCTEUpKQorICAgICAgeworCSAvKiBjaGFuZ2UgdGhlIGZsYWdzIHRvIG1ha2Ugb3VyIGJsb2NrICJkaXNjYXJkYWJsZSIgKi8KKwkgcGludGVybj1IQU5ETEVfVE9fSU5URVJOKGhtZW0pOworCSBwaW50ZXJuLT5GbGFncyA9IHBpbnRlcm4tPkZsYWdzIHwgKEdNRU1fRElTQ0FSREFCTEUgPj4gOCk7CisJIGhuZXc9aG1lbTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKwkgU2V0TGFzdEVycm9yKEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKTsKKwkgaG5ldz1OVUxMOworICAgICAgfQorICAgfQorICAgZWxzZQorICAgeworICAgICAgaWYoSVNQT0lOVEVSKGhtZW0pKQorICAgICAgeworCSAvKiByZWFsbG9jYXRlIGZpeGVkIG1lbW9yeSAqLworCSBobmV3PShIR0xPQkFMMzIpSGVhcFJlQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgKExQVk9JRCkgaG1lbSwgc2l6ZSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisJIC8qIHJlYWxsb2NhdGUgYSBtb3ZlYWJsZSBibG9jayAqLworCSBwaW50ZXJuPUhBTkRMRV9UT19JTlRFUk4oaG1lbSk7CisJIGlmKHBpbnRlcm4tPkxvY2tDb3VudCE9MCkKKwkgICAgU2V0TGFzdEVycm9yKEVSUk9SX0lOVkFMSURfSEFORExFKTsKKwkgZWxzZSBpZihzaXplIT0wKQorCSB7CisJICAgIGhuZXc9aG1lbTsKKwkgICAgaWYocGludGVybi0+UG9pbnRlcikKKwkgICAgeworCSAgICAgICBwYWxsb2M9SGVhcFJlQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwgMCwKKwkJCQkgIHBpbnRlcm4tPlBvaW50ZXItc2l6ZW9mKEhHTE9CQUwzMiksCisJCQkJICBzaXplK3NpemVvZihIR0xPQkFMMzIpICk7CisJICAgICAgIHBpbnRlcm4tPlBvaW50ZXI9cGFsbG9jK3NpemVvZihIR0xPQkFMMzIpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCSAgICAgICBwYWxsb2M9SGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksIDAsIHNpemUrc2l6ZW9mKEhHTE9CQUwzMikpOworCSAgICAgICAqKEhHTE9CQUwzMiAqKXBhbGxvYz1obWVtOworCSAgICAgICBwaW50ZXJuLT5Qb2ludGVyPXBhbGxvYytzaXplb2YoSEdMT0JBTDMyKTsKKwkgICAgfQorCSB9CisJIGVsc2UKKwkgeworCSAgICBpZihwaW50ZXJuLT5Qb2ludGVyKQorCSAgICB7CisJICAgICAgIEhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksIDAsIHBpbnRlcm4tPlBvaW50ZXItc2l6ZW9mKEhHTE9CQUwzMikpOworCSAgICAgICBwaW50ZXJuLT5Qb2ludGVyPU5VTEw7CisJICAgIH0KKwkgfQorICAgICAgfQorICAgfQorICAgLyogSGVhcFVubG9jayhHZXRQcm9jZXNzSGVhcCgpKTsgKi8KKyAgIHJldHVybiBobmV3OworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdsb2JhbEZyZWUzMiAgIChLRVJORUwzMi4zMjIpCisgKi8KK0hHTE9CQUwzMiBHbG9iYWxGcmVlMzIoSEdMT0JBTDMyIGhtZW0pCit7CisgICBQR0xPQkFMMzJfSU5URVJOIHBpbnRlcm47CisgICBIR0xPQkFMMzIgICAgICAgIGhyZXR1cm5lZD1OVUxMOworICAgCisgICBpZihJU1BPSU5URVIoaG1lbSkpIC8qIFBPSU5URVIgKi8KKyAgIHsKKyAgICAgIGlmKCFIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLCAwLCAoTFBWT0lEKSBobWVtKSkKKyAgICAgICAgIGhtZW09TlVMTDsKKyAgIH0KKyAgIGVsc2UgIC8qIEhBTkRMRSAqLworICAgeworICAgICAgLyogSGVhcExvY2soR2V0UHJvY2Vzc0hlYXAoKSk7ICovICAgICAgCisgICAgICBwaW50ZXJuPUhBTkRMRV9UT19JTlRFUk4oaG1lbSk7CisgICAgICAKKyAgICAgIGlmKHBpbnRlcm4tPk1hZ2ljPT1NQUdJQ19HTE9CQUxfVVNFRCkKKyAgICAgIHsJIAorCSBpZihwaW50ZXJuLT5Mb2NrQ291bnQhPTApCisJICAgIFNldExhc3RFcnJvcihFUlJPUl9JTlZBTElEX0hBTkRMRSk7CisJIGlmKHBpbnRlcm4tPlBvaW50ZXIpCisJICAgIGlmKCFIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLCAwLCAKKwkgICAgICAgICAgICAgICAgIChjaGFyICopKHBpbnRlcm4tPlBvaW50ZXIpLXNpemVvZihIR0xPQkFMMzIpKSkKKwkgICAgICAgaHJldHVybmVkPWhtZW07CisJIGlmKCFIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLCAwLCBwaW50ZXJuKSkgCisJICAgIGhyZXR1cm5lZD1obWVtOworICAgICAgfSAgICAgIAorICAgICAgLyogSGVhcFVubG9jayhHZXRQcm9jZXNzSGVhcCgpKTsgKi8KKyAgIH0KKyAgIHJldHVybiBocmV0dXJuZWQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2xvYmFsU2l6ZTMyICAgKEtFUk5FTDMyLjMyOSkKKyAqLworRFdPUkQgIEdsb2JhbFNpemUzMihIR0xPQkFMMzIgaG1lbSkKK3sKKyAgIERXT1JEICAgICAgICAgICAgICAgIHJldHZhbDsKKyAgIFBHTE9CQUwzMl9JTlRFUk4gICAgIHBpbnRlcm47CisKKyAgIGlmKElTUE9JTlRFUihobWVtKSkgCisgICB7CisgICAgICByZXR2YWw9SGVhcFNpemUoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgIChMUFZPSUQpIGhtZW0pOworICAgfQorICAgZWxzZQorICAgeworICAgICAgLyogSGVhcExvY2soR2V0UHJvY2Vzc0hlYXAoKSk7ICovCisgICAgICBwaW50ZXJuPUhBTkRMRV9UT19JTlRFUk4oaG1lbSk7CisgICAgICAKKyAgICAgIGlmKHBpbnRlcm4tPk1hZ2ljPT1NQUdJQ19HTE9CQUxfVVNFRCkKKyAgICAgIHsKKwkgcmV0dmFsPUhlYXBTaXplKEdldFByb2Nlc3NIZWFwKCksIDAsIAorCSAgICAgICAgICAgICAgICAgKGNoYXIgKikocGludGVybi0+UG9pbnRlciktc2l6ZW9mKEhHTE9CQUwzMikpLTQ7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisJIGRwcmludGZfZ2xvYmFsKHN0ZGRlYiwgIkdsb2JhbFNpemUzMjogaW52YWxpZCBoYW5kbGVcbiIpOworCSByZXR2YWw9MDsKKyAgICAgIH0KKyAgICAgIC8qIEhlYXBVbmxvY2soR2V0UHJvY2Vzc0hlYXAoKSk7ICovCisgICB9CisgICByZXR1cm4gcmV0dmFsOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdsb2JhbFdpcmUzMiAgIChLRVJORUwzMi4zMzMpCisgKi8KK0xQVk9JRCAgR2xvYmFsV2lyZTMyKEhHTE9CQUwzMiBobWVtKQoreworICAgcmV0dXJuIEdsb2JhbExvY2szMiggaG1lbSApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdsb2JhbFVuV2lyZTMyICAgKEtFUk5FTDMyLjMzMCkKKyAqLworQk9PTDMyICBHbG9iYWxVbldpcmUzMihIR0xPQkFMMzIgaG1lbSkKK3sKKyAgIHJldHVybiBHbG9iYWxVbmxvY2szMiggaG1lbSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2xvYmFsRml4MzIgICAoS0VSTkVMMzIuMzIwKQorICovCitWT0lEICBHbG9iYWxGaXgzMihIR0xPQkFMMzIgaG1lbSkKK3sKKyAgICBHbG9iYWxMb2NrMzIoIGhtZW0gKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHbG9iYWxVbmZpeDMyICAgKEtFUk5FTDMyLjMzMSkKKyAqLworVk9JRCAgR2xvYmFsVW5maXgzMihIR0xPQkFMMzIgaG1lbSkKK3sKKyAgIEdsb2JhbFVubG9jazMyKCBobWVtKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHbG9iYWxGbGFnczMyICAgKEtFUk5FTDMyLjMyMSkKKyAqLworVUlOVDMyICBHbG9iYWxGbGFnczMyKEhHTE9CQUwzMiBobWVtKQoreworICAgRFdPUkQgICAgICAgICAgICAgICAgcmV0dmFsOworICAgUEdMT0JBTDMyX0lOVEVSTiAgICAgcGludGVybjsKKyAgIAorICAgaWYoSVNQT0lOVEVSKGhtZW0pKQorICAgeworICAgICAgcmV0dmFsPTA7CisgICB9CisgICBlbHNlCisgICB7CisgICAgICAvKiBIZWFwTG9jayhHZXRQcm9jZXNzSGVhcCgpKTsgKi8KKyAgICAgIHBpbnRlcm49SEFORExFX1RPX0lOVEVSTihobWVtKTsKKyAgICAgIGlmKHBpbnRlcm4tPk1hZ2ljPT1NQUdJQ19HTE9CQUxfVVNFRCkKKyAgICAgIHsgICAgICAgICAgICAgICAKKwkgcmV0dmFsPXBpbnRlcm4tPkxvY2tDb3VudCArIChwaW50ZXJuLT5GbGFnczw8OCk7CisJIGlmKHBpbnRlcm4tPlBvaW50ZXI9PTApCisJICAgIHJldHZhbHw9IEdNRU1fRElTQ0FSREVEOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworCSBkcHJpbnRmX2dsb2JhbChzdGRkZWIsIkdsb2JhbEZsYWdzMzI6IGludmFsaWQgaGFuZGxlXG4iKTsKKwkgcmV0dmFsPTA7CisgICAgICB9CisgICAgICAvKiBIZWFwVW5sb2NrKEdldFByb2Nlc3NIZWFwKCkpOyAqLworICAgfQorICAgcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC04MDIsNzUgKzExODUsNiBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEdsb2JhbEZsYWdzMzIgICAoS0VSTkVMMzIuMzIxKQotICovCi1VSU5UMzIgR2xvYmFsRmxhZ3MzMiggSEdMT0JBTDMyIGhhbmRsZSApCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgR2xvYmFsRnJlZTMyICAgKEtFUk5FTDMyLjMyMikKLSAqLwotSEdMT0JBTDMyIEdsb2JhbEZyZWUzMiggSEdMT0JBTDMyIGhhbmRsZSApCi17Ci0gICAgcmV0dXJuIEhlYXBGcmVlKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCAoTFBWT0lEKWhhbmRsZSApID8gMCA6IGhhbmRsZTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBHbG9iYWxIYW5kbGUzMiAgIChLRVJORUwzMi4zMjUpCi0gKi8KLUhHTE9CQUwzMiBHbG9iYWxIYW5kbGUzMiggTFBDVk9JRCBwdHIgKQotewotICAgIHJldHVybiAoSEdMT0JBTDMyKXB0cjsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBHbG9iYWxMb2NrMzIgICAoS0VSTkVMMzIuMzI2KQotICovCi1MUFZPSUQgR2xvYmFsTG9jazMyKCBIR0xPQkFMMzIgaGFuZGxlICkKLXsKLSAgICByZXR1cm4gKExQVk9JRCloYW5kbGU7Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgR2xvYmFsUmVBbGxvYzMyICAgKEtFUk5FTDMyLjMyOCkKLSAqLwotSEdMT0JBTDMyIEdsb2JhbFJlQWxsb2MzMiggSEdMT0JBTDMyIGhhbmRsZSwgRFdPUkQgc2l6ZSwgVUlOVDMyIGZsYWdzICkKLXsKLSAgICBpZiAoZmxhZ3MgJiBHTUVNX01PRElGWSkKLSAgICB7Ci0gICAgICAgIGZwcmludGYoIHN0ZGVyciwgIkdsb2JhbFJlQWxsb2MzMjogR01FTV9NT0RJRlkgbm90IHN1cHBvcnRlZFxuIiApOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gKEhHTE9CQUwzMilIZWFwUmVBbGxvYyggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgKExQVk9JRCloYW5kbGUsIHNpemUgKTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBHbG9iYWxTaXplMzIgICAoS0VSTkVMMzIuMzI5KQotICovCi1EV09SRCBHbG9iYWxTaXplMzIoIEhHTE9CQUwzMiBoYW5kbGUgKQotewotICAgIHJldHVybiBIZWFwU2l6ZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgKExQVk9JRCloYW5kbGUgKTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBHbG9iYWxVbmxvY2szMiAgIChLRVJORUwzMi4zMzIpCi0gKi8KLUJPT0wzMiBHbG9iYWxVbmxvY2szMiggSEdMT0JBTDMyIGhhbmRsZSApCi17Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2xvYmFsTWVtb3J5U3RhdHVzICAgKEtFUk5FTDMyLjMyNykKICAqLwogVk9JRCBHbG9iYWxNZW1vcnlTdGF0dXMoIExQTUVNT1JZU1RBVFVTIGxwbWVtICkKZGlmZiAtLWdpdCBhL21lbW9yeS9zZWxlY3Rvci5jIGIvbWVtb3J5L3NlbGVjdG9yLmMKaW5kZXggOWQ3NjQ3Ny4uYmJiMjVjNiAxMDA2NDQKLS0tIGEvbWVtb3J5L3NlbGVjdG9yLmMKKysrIGIvbWVtb3J5L3NlbGVjdG9yLmMKQEAgLTI2NiwxNyArMjY2LDEyIEBACiAgKi8KIERXT1JEIEdldFNlbGVjdG9yQmFzZSggV09SRCBzZWwgKQogewotICAgIGV4dGVybiBjaGFyKiBET1NNRU1fZG9zbWVtOwotICAgIERXT1JEIGJhc2U7Ci0KLSAgICBiYXNlID0gR0VUX1NFTF9CQVNFKHNlbCk7CisgICAgRFdPUkQgYmFzZSA9IEdFVF9TRUxfQkFTRShzZWwpOwogCiAgICAgLyogaWYgYmFzZSBwb2ludHMgaW50byBET1NNRU0sIGFzc3VtZSB3ZSBoYXZlIHRvCi0gICAgICogcmV0dXJuIHBvaW50ZXIgaW50byBwaHlzaWNhbCBsb3dlciAxTUIKLSAgICAgKi8KLSAgICBpZiAoKGJhc2UgPj0gKERXT1JEKURPU01FTV9kb3NtZW0pICYmCi0gICAgICAgIChiYXNlIDwgKERXT1JEKURPU01FTV9kb3NtZW0rMHgxMDAwMDApKSBiYXNlIC09IChEV09SRClET1NNRU1fZG9zbWVtOwotICAgIHJldHVybiBiYXNlOworICAgICAqIHJldHVybiBwb2ludGVyIGludG8gcGh5c2ljYWwgbG93ZXIgMU1CICovCisKKyAgICByZXR1cm4gRE9TTUVNX01hcExpbmVhclRvRG9zKCAoTFBWT0lEKWJhc2UgKTsKIH0KIAogCkBAIC0yODUsMjMgKzI4MCwxMiBAQAogICovCiBXT1JEIFNldFNlbGVjdG9yQmFzZSggV09SRCBzZWwsIERXT1JEIGJhc2UgKQogewotICAgIGV4dGVybiBjaGFyKiBET1NNRU1fZG9zbWVtOwogICAgIGxkdF9lbnRyeSBlbnRyeTsKIAogICAgIExEVF9HZXRFbnRyeSggU0VMRUNUT1JfVE9fRU5UUlkoc2VsKSwgJmVudHJ5ICk7Ci0jaWZuZGVmIFdJTkVMSUIKLSAgICBpZiAoYmFzZSA8IDB4MTAwMDAwKQotICAgIHsKLSAgICAJLyogQXNzdW1lIHBvaW50ZXJzIGluIHRoZSBsb3dlciAxTUIgcmFuZ2UgYXJlCi0JICogaW4gZmFjdCBwaHlzaWNhbCBhZGRyZXNzZXMgaW50byBET1MgbWVtb3J5LgotCSAqIFRyYW5zbGF0ZSB0aGUgYmFzZSB0byBvdXIgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24KLQkgKgotCSAqIChORVRBUEkuRExMIG9mIFdpbjk1IGRvZXMgdXNlIFNldFNlbGVjdG9yQmFzZSB0aGlzIHdheSkKLQkgKi8KLQllbnRyeS5iYXNlID0gKERXT1JEKShET1NNRU1fZG9zbWVtK2Jhc2UpOwotICAgIH0KLSAgICBlbHNlIGVudHJ5LmJhc2UgPSBiYXNlOwotI2VuZGlmCisKKyAgICBlbnRyeS5iYXNlID0gKERXT1JEKURPU01FTV9NYXBEb3NUb0xpbmVhcihiYXNlKTsKKwogICAgIExEVF9TZXRFbnRyeSggU0VMRUNUT1JfVE9fRU5UUlkoc2VsKSwgJmVudHJ5ICk7CiAgICAgcmV0dXJuIHNlbDsKIH0KZGlmZiAtLWdpdCBhL21pc2MvY2xpcGJvYXJkLmMgYi9taXNjL2NsaXBib2FyZC5jCmluZGV4IGY3ZDM4YWUuLmJjNjRhYWMgMTAwNjQ0Ci0tLSBhL21pc2MvY2xpcGJvYXJkLmMKKysrIGIvbWlzYy9jbGlwYm9hcmQuYwpAQCAtNDEsOSArNDEsOSBAQAogICoJCQlpbnRlcm5hbCB2YXJpYWJsZXMKICAqLwogCi1zdGF0aWMgSFdORCBoV25kQ2xpcE93bmVyICA9IDA7CQkvKiBjdXJyZW50IGNsaXBib2FyZCBvd25lciAqLwotc3RhdGljIEhXTkQgaFduZENsaXBXaW5kb3cgPSAwOwkJLyogd2luZG93IHRoYXQgb3BlbmVkIGNsaXBib2FyZCAqLwotc3RhdGljIEhXTkQgaFduZFZpZXdlciAgICAgPSAwOwkJLyogc3RhcnQgb2Ygdmlld2VycyBjaGFpbiAqLworc3RhdGljIEhXTkQzMiBoV25kQ2xpcE93bmVyICA9IDA7ICAgLyogY3VycmVudCBjbGlwYm9hcmQgb3duZXIgKi8KK3N0YXRpYyBIV05EMzIgaFduZENsaXBXaW5kb3cgPSAwOyAgIC8qIHdpbmRvdyB0aGF0IG9wZW5lZCBjbGlwYm9hcmQgKi8KK3N0YXRpYyBIV05EMzIgaFduZFZpZXdlciAgICAgPSAwOyAgIC8qIHN0YXJ0IG9mIHZpZXdlcnMgY2hhaW4gKi8KIAogc3RhdGljIEJPT0wgYkNsaXBDaGFuZ2VkICA9IEZBTFNFOwogc3RhdGljIFdPUkQgTGFzdFJlZ0Zvcm1hdCA9IENGX1JFR0ZPUk1BVEJBU0U7CkBAIC0xNjAsNyArMTYwLDcgQEAKICAqLwogQk9PTCBDTElQQk9BUkRfUmVxdWVzdFhTZWxlY3Rpb24oKQogewotICBIV05EIGhXbmQgPSAoaFduZENsaXBXaW5kb3cpID8gaFduZENsaXBXaW5kb3cgOiBHZXRBY3RpdmVXaW5kb3cxNigpOworICBIV05EMzIgaFduZCA9IChoV25kQ2xpcFdpbmRvdykgPyBoV25kQ2xpcFdpbmRvdyA6IEdldEFjdGl2ZVdpbmRvdzMyKCk7CiAKICAgaWYoICFoV25kICkgcmV0dXJuIEZBTFNFOwogCkBAIC0xOTcsNyArMTk3LDcgQEAKICAgICAvKiBzcGVjaWFsIGNhc2UgKi8KIAogICAgIGlmKCB3Rm9ybWF0ID09IENGX1RFWFQgfHwgd0Zvcm1hdCA9PSBDRl9PRU1URVhUICkKLSAgICAgICAgcmV0dXJuIGxwRm9ybWF0W0NGX1RFWFQtMV0ud0RhdGFQcmVzZW50IHwgCisgICAgICAgIHJldHVybiBscEZvcm1hdFtDRl9URVhULTFdLndEYXRhUHJlc2VudCB8fAogICAgICAgICAgICAgICAgbHBGb3JtYXRbQ0ZfT0VNVEVYVC0xXS53RGF0YVByZXNlbnQ7CiAKICAgICB3aGlsZShUUlVFKSB7CkBAIC0yMTAsMTEgKzIxMCwyMCBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJT3BlbkNsaXBib2FyZAkJW1VTRVIuMTM3XQorICogICAgICAgICAgICBPcGVuQ2xpcGJvYXJkMTYgICAoVVNFUi4xMzcpCiAgKi8KLUJPT0wgT3BlbkNsaXBib2FyZChIV05EIGhXbmQpCitCT09MMTYgT3BlbkNsaXBib2FyZDE2KCBIV05EMTYgaFduZCApCiB7Ci0gICAgQk9PTCBiUmV0ID0gRkFMU0U7CisgICAgcmV0dXJuIE9wZW5DbGlwYm9hcmQzMiggaFduZCApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICBPcGVuQ2xpcGJvYXJkMzIgICAoVVNFUjMyLjQwNikKKyAqLworQk9PTDMyIE9wZW5DbGlwYm9hcmQzMiggSFdORDMyIGhXbmQgKQoreworICAgIEJPT0wzMiBiUmV0ID0gRkFMU0U7CiAgICAgZHByaW50Zl9jbGlwYm9hcmQoc3RkZGViLCJPcGVuQ2xpcGJvYXJkKCUwNHgpID0gIiwgaFduZCk7CiAKICAgICBpZiAoIWhXbmRDbGlwV2luZG93KQpAQCAtMjMwLDkgKzIzOSwxOCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQlDbG9zZUNsaXBib2FyZAkJW1VTRVIuMTM4XQorICogICAgICAgICAgICBDbG9zZUNsaXBib2FyZDE2ICAgKFVTRVIuMTM4KQogICovCi1CT09MIENsb3NlQ2xpcGJvYXJkKCkKK0JPT0wxNiBDbG9zZUNsaXBib2FyZDE2KHZvaWQpCit7CisgICAgcmV0dXJuIENsb3NlQ2xpcGJvYXJkMzIoKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgQ2xvc2VDbGlwYm9hcmQzMiAgIChVU0VSMzIuNTMpCisgKi8KK0JPT0wzMiBDbG9zZUNsaXBib2FyZDMyKHZvaWQpCiB7CiAgICAgZHByaW50Zl9jbGlwYm9hcmQoc3RkZGViLCJDbG9zZUNsaXBib2FyZCgpOyAhXG4iKTsKIApAQCAtMjQ2LDkgKzI2NCwxOCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQlFbXB0eUNsaXBib2FyZAkJW1VTRVIuMTM5XQorICogICAgICAgICAgICBFbXB0eUNsaXBib2FyZDE2ICAgKFVTRVIuMTM5KQogICovCi1CT09MIEVtcHR5Q2xpcGJvYXJkKCkKK0JPT0wxNiBFbXB0eUNsaXBib2FyZDE2KHZvaWQpCit7CisgICAgcmV0dXJuIEVtcHR5Q2xpcGJvYXJkMzIoKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgRW1wdHlDbGlwYm9hcmQzMiAgIChVU0VSMzIuMTY4KQorICovCitCT09MMzIgRW1wdHlDbGlwYm9hcmQzMih2b2lkKQogewogICAgIExQQ0xJUEZPUk1BVCBscEZvcm1hdCA9IENsaXBGb3JtYXRzOyAKIApAQCAtMjg3LDEyICszMTQsMTkgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJR2V0Q2xpcGJvYXJkT3duZXIJW1VTRVIuMTQwXQorICogICAgICAgICAgICBHZXRDbGlwYm9hcmRPd25lcjE2ICAgKFVTRVIuMTQwKQogICovCi1IV05EIEdldENsaXBib2FyZE93bmVyKCkKK0hXTkQxNiBHZXRDbGlwYm9hcmRPd25lcjE2KHZvaWQpCiB7Ci0gICAgZHByaW50Zl9jbGlwYm9hcmQoc3RkZGViLAotCQkiR2V0Q2xpcGJvYXJkT3duZXIoKSA9ICUwNHggIVxuIiwgaFduZENsaXBPd25lcik7CisgICAgcmV0dXJuIGhXbmRDbGlwT3duZXI7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgIEdldENsaXBib2FyZE93bmVyMzIgICAoVVNFUjMyLjIyNCkKKyAqLworSFdORDMyIEdldENsaXBib2FyZE93bmVyMzIodm9pZCkKK3sKICAgICByZXR1cm4gaFduZENsaXBPd25lcjsKIH0KIApAQCAtNDUyLDExICs0ODYsMjAgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJQ291bnRDbGlwYm9hcmRGb3JtYXRzCVtVU0VSLjE0M10KKyAqICAgICAgICAgICBDb3VudENsaXBib2FyZEZvcm1hdHMxNiAgIChVU0VSLjE0MykKICAqLwotSU5UIENvdW50Q2xpcGJvYXJkRm9ybWF0cygpCitJTlQxNiBDb3VudENsaXBib2FyZEZvcm1hdHMxNih2b2lkKQogewotICAgIGludCAJIEZvcm1hdENvdW50ID0gMDsKKyAgICByZXR1cm4gQ291bnRDbGlwYm9hcmRGb3JtYXRzMzIoKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBDb3VudENsaXBib2FyZEZvcm1hdHMzMiAgIChVU0VSMzIuNjIpCisgKi8KK0lOVDMyIENvdW50Q2xpcGJvYXJkRm9ybWF0czMyKHZvaWQpCit7CisgICAgSU5UMzIgRm9ybWF0Q291bnQgPSAwOwogICAgIExQQ0xJUEZPUk1BVCBscEZvcm1hdCA9IENsaXBGb3JtYXRzOyAKIAogICAgIGRwcmludGZfY2xpcGJvYXJkKHN0ZGRlYiwiQ291bnRDbGlwYm9hcmRGb3JtYXRzKClcbiIpOwpAQCAtNDgzLDkgKzUyNiwxOCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQlFbnVtQ2xpcGJvYXJkRm9ybWF0cwlbVVNFUi4xNDRdCisgKiAgICAgICAgICAgIEVudW1DbGlwYm9hcmRGb3JtYXRzMTYgICAoVVNFUi4xNDQpCiAgKi8KLVVJTlQxNiBFbnVtQ2xpcGJvYXJkRm9ybWF0cyhVSU5UMTYgd0Zvcm1hdCkKK1VJTlQxNiBFbnVtQ2xpcGJvYXJkRm9ybWF0czE2KCBVSU5UMTYgd0Zvcm1hdCApCit7CisgICAgcmV0dXJuIEVudW1DbGlwYm9hcmRGb3JtYXRzMzIoIHdGb3JtYXQgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgRW51bUNsaXBib2FyZEZvcm1hdHMzMiAgIChVU0VSMzIuMTc4KQorICovCitVSU5UMzIgRW51bUNsaXBib2FyZEZvcm1hdHMzMiggVUlOVDMyIHdGb3JtYXQgKQogewogICAgIExQQ0xJUEZPUk1BVCBscEZvcm1hdCA9IENsaXBGb3JtYXRzOyAKIApAQCAtNjIxLDExICs2NzMsMjAgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJU2V0Q2xpcGJvYXJkVmlld2VyCVtVU0VSLjE0N10KKyAqICAgICAgICAgICAgU2V0Q2xpcGJvYXJkVmlld2VyMTYgICAoVVNFUi4xNDcpCiAgKi8KLUhXTkQgU2V0Q2xpcGJvYXJkVmlld2VyKEhXTkQgaFduZCkKK0hXTkQxNiBTZXRDbGlwYm9hcmRWaWV3ZXIxNiggSFdORDE2IGhXbmQgKQogewotICAgIEhXTkQgaHduZFByZXYgPSBoV25kVmlld2VyOworICAgIHJldHVybiBTZXRDbGlwYm9hcmRWaWV3ZXIzMiggaFduZCApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICBTZXRDbGlwYm9hcmRWaWV3ZXIzMiAgIChVU0VSMzIuNDcwKQorICovCitIV05EMzIgU2V0Q2xpcGJvYXJkVmlld2VyMzIoIEhXTkQzMiBoV25kICkKK3sKKyAgICBIV05EMzIgaHduZFByZXYgPSBoV25kVmlld2VyOwogCiAgICAgZHByaW50Zl9jbGlwYm9hcmQoc3RkZGViLCJTZXRDbGlwYm9hcmRWaWV3ZXIoJTA0eClcbiIsIGhXbmQpOwogCkBAIC02MzUsMTIgKzY5NiwxOSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQlHZXRDbGlwYm9hcmRWaWV3ZXIJW1VTRVIuMTQ4XQorICogICAgICAgICAgIEdldENsaXBib2FyZFZpZXdlcjE2ICAgKFVTRVIuMTQ4KQogICovCi1IV05EIEdldENsaXBib2FyZFZpZXdlcigpCitIV05EMTYgR2V0Q2xpcGJvYXJkVmlld2VyMTYodm9pZCkKIHsKLSAgICBkcHJpbnRmX2NsaXBib2FyZChzdGRkZWIsIkdldENsaXBib2FyZEZvcm1hdCgpID0gJTA0eFxuIiwgaFduZFZpZXdlcik7CisgICAgcmV0dXJuIGhXbmRWaWV3ZXI7Cit9CiAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2V0Q2xpcGJvYXJkVmlld2VyMzIgICAoVVNFUjMyLjIyNSkKKyAqLworSFdORDMyIEdldENsaXBib2FyZFZpZXdlcjMyKHZvaWQpCit7CiAgICAgcmV0dXJuIGhXbmRWaWV3ZXI7CiB9CiAKQEAgLTY3Niw5ICs3NDQsMTggQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUJW1VTRVIuMTkzXQorICogICAgICAgICAgIElzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlMTYgICAoVVNFUi4xOTMpCiAgKi8KLUJPT0wgSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUoV09SRCB3Rm9ybWF0KQorQk9PTDE2IElzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlMTYoIFVJTlQxNiB3Rm9ybWF0ICkKK3sKKyAgICByZXR1cm4gSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUzMiggd0Zvcm1hdCApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIElzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlMzIgICAoVVNFUjMyLjMzOSkKKyAqLworQk9PTDMyIElzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlMzIoIFVJTlQzMiB3Rm9ybWF0ICkKIHsKICAgICBkcHJpbnRmX2NsaXBib2FyZChzdGRkZWIsIklzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlKCUwNFgpICFcbiIsIHdGb3JtYXQpOwogCkBAIC02OTAsMTIgKzc2NywxOSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQlHZXRPcGVuQ2xpcGJvYXJkV2luZG93CVtVU0VSLjI0OF0KKyAqICAgICAgICAgICAgIEdldE9wZW5DbGlwYm9hcmRXaW5kb3cxNiAgIChVU0VSLjI0OCkKICAqLwotSFdORCBHZXRPcGVuQ2xpcGJvYXJkV2luZG93KCkKK0hXTkQxNiBHZXRPcGVuQ2xpcGJvYXJkV2luZG93MTYodm9pZCkKIHsKLSAgICBkcHJpbnRmX2NsaXBib2FyZChzdGRkZWIsCi0JCSJHZXRPcGVuQ2xpcGJvYXJkV2luZG93KCkgPSAlMDR4XG4iLCBoV25kQ2xpcFdpbmRvdyk7CisgICAgcmV0dXJuIGhXbmRDbGlwV2luZG93OworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgR2V0T3BlbkNsaXBib2FyZFdpbmRvdzMyICAgKFVTRVIzMi4yNzYpCisgKi8KK0hXTkQzMiBHZXRPcGVuQ2xpcGJvYXJkV2luZG93MzIodm9pZCkKK3sKICAgICByZXR1cm4gaFduZENsaXBXaW5kb3c7CiB9CiAKQEAgLTc5Myw3ICs4NzcsNyBAQAogICogV2luZSBtaWdodCBoYXZlIGxvc3QgWEFfUFJJTUFSWSBzZWxlY3Rpb24gYmVjYXVzZSBvZgogICogRW1wdHlDbGlwYm9hcmQoKSBvciBvdGhlciBjbGllbnQuIAogICovCi12b2lkIENMSVBCT0FSRF9SZWxlYXNlU2VsZWN0aW9uKFdpbmRvdyB3LCBIV05EIGh3bmQpCit2b2lkIENMSVBCT0FSRF9SZWxlYXNlU2VsZWN0aW9uKFdpbmRvdyB3LCBIV05EMzIgaHduZCkKIHsKICAgLyogdyBpcyB0aGUgd2luZG93IHRoYXQgbG9zdCBzZWxlY3Rpb24sCiAgICAqIApkaWZmIC0tZ2l0IGEvbWlzYy9jb21tZGxnLmMgYi9taXNjL2NvbW1kbGcuYwppbmRleCBlY2UzZjAzLi43ZWJlOTRjIDEwMDY0NAotLS0gYS9taXNjL2NvbW1kbGcuYworKysgYi9taXNjL2NvbW1kbGcuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVETEdfU3RyaXBFZGl0Q29udHJvbCAgICAgICAgW2ludGVybmFsXQogICogU3RyaXAgcGF0aG5hbWVzIG9mZiB0aGUgY29udGVudHMgb2YgdGhlIGVkaXQgY29udHJvbC4KICAqLwotc3RhdGljIHZvaWQgRklMRURMR19TdHJpcEVkaXRDb250cm9sKEhXTkQgaHduZCkKK3N0YXRpYyB2b2lkIEZJTEVETEdfU3RyaXBFZGl0Q29udHJvbChIV05EMTYgaHduZCkKIHsKICAgICBjaGFyIHRlbXBbNTEyXSwgKmNwOwogCkBAIC0xOTMsNyArMTkzLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogCQkJCUZJTEVETEdfU2NhbkRpcgkJCVtpbnRlcm5hbF0KICAqLwotc3RhdGljIEJPT0wgRklMRURMR19TY2FuRGlyKEhXTkQgaFduZCwgTFBTVFIgbmV3UGF0aCkKK3N0YXRpYyBCT09MIEZJTEVETEdfU2NhbkRpcihIV05EMTYgaFduZCwgTFBTVFIgbmV3UGF0aCkKIHsKICAgICBpbnQgbGVuOwogICAgIGNoYXIgc3RyWzUxMl07CkBAIC0yMzUsNyArMjM1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFRExHX1dNRHJhd0l0ZW0gICAgICAgICAgICAgIFtpbnRlcm5hbF0KICAqLwotc3RhdGljIExPTkcgRklMRURMR19XTURyYXdJdGVtKEhXTkQgaFduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtLGludCBzYXZlZGxnKQorc3RhdGljIExPTkcgRklMRURMR19XTURyYXdJdGVtKEhXTkQxNiBoV25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0saW50IHNhdmVkbGcpCiB7CiAgICAgTFBEUkFXSVRFTVNUUlVDVDE2IGxwZGlzID0gKExQRFJBV0lURU1TVFJVQ1QxNilQVFJfU0VHX1RPX0xJTihsUGFyYW0pOwogICAgIGNoYXIgKnN0cjsKQEAgLTI1NSw5ICsyNTUsOSBAQAogCiAJaWYgKHNhdmVkbGcpICAgICAgIC8qIHVzZSBfZ3JheV8gdGV4dCBpbiBGaWxlU2F2ZURsZyAqLwogCSAgaWYgKCFscGRpcy0+aXRlbVN0YXRlKQotCSAgICBTZXRUZXh0Q29sb3IobHBkaXMtPmhEQyxHZXRTeXNDb2xvcihDT0xPUl9HUkFZVEVYVCkgKTsKKwkgICAgU2V0VGV4dENvbG9yKGxwZGlzLT5oREMsR2V0U3lzQ29sb3IzMihDT0xPUl9HUkFZVEVYVCkgKTsKIAkgIGVsc2UgIAotCSAgICBTZXRUZXh0Q29sb3IobHBkaXMtPmhEQyxHZXRTeXNDb2xvcihDT0xPUl9XSU5ET1dURVhUKSApOworCSAgICBTZXRUZXh0Q29sb3IobHBkaXMtPmhEQyxHZXRTeXNDb2xvcjMyKENPTE9SX1dJTkRPV1RFWFQpICk7CiAJICAgIC8qIGludmVyc2lvbiBvZiBncmF5IHdvdWxkIGJlIGJhZCByZWFkYWJsZSAqLwkgIAkgIAogCiAJVGV4dE91dDE2KGxwZGlzLT5oREMsIGxwZGlzLT5yY0l0ZW0ubGVmdCwgbHBkaXMtPnJjSXRlbS50b3AsCkBAIC0zMjcsNyArMzI3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFRExHX1dNTWVhc3VyZUl0ZW0gICAgICAgICAgIFtpbnRlcm5hbF0KICAqLwotc3RhdGljIExPTkcgRklMRURMR19XTU1lYXN1cmVJdGVtKEhXTkQgaFduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKSAKK3N0YXRpYyBMT05HIEZJTEVETEdfV01NZWFzdXJlSXRlbShIV05EMTYgaFduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKSAKIHsKICAgICBCSVRNQVAxNiBibTsKICAgICBMUE1FQVNVUkVJVEVNU1RSVUNUMTYgbHBtZWFzdXJlOwpAQCAtMzU0LDcgKzM1NCw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVETEdfV01Jbml0RGlhbG9nICAgICAgICAgICAgW2ludGVybmFsXQogICovCiAKLXN0YXRpYyBMT05HIEZJTEVETEdfV01Jbml0RGlhbG9nKEhXTkQgaFduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKSAKK3N0YXRpYyBMT05HIEZJTEVETEdfV01Jbml0RGlhbG9nKEhXTkQxNiBoV25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pIAogewogICBpbnQgaSwgbjsKICAgTFBPUEVORklMRU5BTUUgbHBvZm47CkBAIC00NDAsNyArNDQwLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFRExHX1dNQ29tbWFuZCAgICAgICAgICAgICAgIFtpbnRlcm5hbF0KICAqLwotc3RhdGljIExSRVNVTFQgRklMRURMR19XTUNvbW1hbmQoSFdORCBoV25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pIAorc3RhdGljIExSRVNVTFQgRklMRURMR19XTUNvbW1hbmQoSFdORDE2IGhXbmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkgCiB7CiAgIExPTkcgbFJldDsKICAgTFBPUEVORklMRU5BTUUgbHBvZm47CkBAIC02MTksMTAgKzYxOSwxMCBAQAogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgfQotICAgICAgRW5kRGlhbG9nKGhXbmQsIFRSVUUpOworICAgICAgRW5kRGlhbG9nMzIoaFduZCwgVFJVRSk7CiAgICAgICByZXR1cm4gVFJVRTsKICAgICBjYXNlIElEQ0FOQ0VMOgotICAgICAgRW5kRGlhbG9nKGhXbmQsIEZBTFNFKTsKKyAgICAgIEVuZERpYWxvZzMyKGhXbmQsIEZBTFNFKTsKICAgICAgIHJldHVybiBUUlVFOwogICAgIH0KICAgcmV0dXJuIEZBTFNFOwpAQCAtNjMyLDcgKzYzMiw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBGaWxlT3BlbkRsZ1Byb2MgICAoQ09NTURMRy42KQogICovCi1MUkVTVUxUIEZpbGVPcGVuRGxnUHJvYyhIV05EIGhXbmQsIFVJTlQgd01zZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorTFJFU1VMVCBGaWxlT3BlbkRsZ1Byb2MoSFdORDE2IGhXbmQsIFVJTlQgd01zZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogeyAgCiAgTFBPUEVORklMRU5BTUUgbHBvZm4gPSAoTFBPUEVORklMRU5BTUUpUFRSX1NFR19UT19MSU4oR2V0V2luZG93TG9uZzMyQShoV25kLCBEV0xfVVNFUikpOwogIApAQCAtNjc1LDcgKzY3NSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBGaWxlU2F2ZURsZ1Byb2MgICAoQ09NTURMRy43KQogICovCi1MUkVTVUxUIEZpbGVTYXZlRGxnUHJvYyhIV05EIGhXbmQsIFVJTlQgd01zZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorTFJFU1VMVCBGaWxlU2F2ZURsZ1Byb2MoSFdORDE2IGhXbmQsIFVJTlQgd01zZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogIExQT1BFTkZJTEVOQU1FIGxwb2ZuID0gKExQT1BFTkZJTEVOQU1FKVBUUl9TRUdfVE9fTElOKEdldFdpbmRvd0xvbmczMkEoaFduZCwgRFdMX1VTRVIpKTsKICAKQEAgLTc3Miw3ICs3NzIsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTkRETEdfV01Jbml0RGlhbG9nICAgICAgICAgICAgW2ludGVybmFsXQogICovCi1zdGF0aWMgTFJFU1VMVCBGSU5ERExHX1dNSW5pdERpYWxvZyhIV05EIGhXbmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3N0YXRpYyBMUkVTVUxUIEZJTkRETEdfV01Jbml0RGlhbG9nKEhXTkQxNiBoV25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgTFBGSU5EUkVQTEFDRSBscGZyOwogCkBAIC04MTcsNyArODE3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSU5ERExHX1dNQ29tbWFuZCAgICAgICAgICAgICAgIFtpbnRlcm5hbF0KICAqLwotc3RhdGljIExSRVNVTFQgRklORERMR19XTUNvbW1hbmQoSFdORCBoV25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitzdGF0aWMgTFJFU1VMVCBGSU5ERExHX1dNQ29tbWFuZChIV05EMTYgaFduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICAgIExQRklORFJFUExBQ0UgbHBmcjsKICAgICBpbnQgdUZpbmRSZXBsYWNlTWVzc2FnZSA9IFJlZ2lzdGVyV2luZG93TWVzc2FnZTMyQSggRklORE1TR1NUUklORyApOwpAQCAtODYwLDcgKzg2MCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBGaW5kVGV4dERsZ1Byb2MgICAoQ09NTURMRy4xMykKICAqLwotTFJFU1VMVCBGaW5kVGV4dERsZ1Byb2MoSFdORCBoV25kLCBVSU5UIHdNc2csIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK0xSRVNVTFQgRmluZFRleHREbGdQcm9jKEhXTkQxNiBoV25kLCBVSU5UIHdNc2csIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBzd2l0Y2ggKHdNc2cpIHsKIAljYXNlIFdNX0lOSVRESUFMT0c6CkBAIC04NzUsNyArODc1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVBMQUNFRExHX1dNSW5pdERpYWxvZyAgICAgICAgIFtpbnRlcm5hbF0KICAqLwotc3RhdGljIExSRVNVTFQgUkVQTEFDRURMR19XTUluaXREaWFsb2coSFdORCBoV25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitzdGF0aWMgTFJFU1VMVCBSRVBMQUNFRExHX1dNSW5pdERpYWxvZyhIV05EMTYgaFduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICAgIExQRklORFJFUExBQ0UgbHBmcjsKIApAQCAtOTExLDcgKzkxMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVQTEFDRURMR19XTUNvbW1hbmQgICAgICAgICAgICBbaW50ZXJuYWxdCiAgKi8KLXN0YXRpYyBMUkVTVUxUIFJFUExBQ0VETEdfV01Db21tYW5kKEhXTkQgaFduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorc3RhdGljIExSRVNVTFQgUkVQTEFDRURMR19XTUNvbW1hbmQoSFdORDE2IGhXbmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBMUEZJTkRSRVBMQUNFIGxwZnI7CiAgICAgaW50IHVGaW5kUmVwbGFjZU1lc3NhZ2UgPSBSZWdpc3RlcldpbmRvd01lc3NhZ2UzMkEoIEZJTkRNU0dTVFJJTkcgKTsKQEAgLTk4MCw3ICs5ODAsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgUmVwbGFjZVRleHREbGdQcm9jICAgKENPTU1ETEcuMTQpCiAgKi8KLUxSRVNVTFQgUmVwbGFjZVRleHREbGdQcm9jKEhXTkQgaFduZCwgVUlOVCB3TXNnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitMUkVTVUxUIFJlcGxhY2VUZXh0RGxnUHJvYyhIV05EMTYgaFduZCwgVUlOVCB3TXNnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgc3dpdGNoICh3TXNnKSB7CiAJY2FzZSBXTV9JTklURElBTE9HOgpAQCAtMTAyOSw3ICsxMDI5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIFByaW50RGxnUHJvYyAgIChDT01NRExHLjIxKQogICovCi1MUkVTVUxUIFByaW50RGxnUHJvYyhIV05EIGhXbmQsIFVJTlQgd01zZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorTFJFU1VMVCBQcmludERsZ1Byb2MoSFdORDE2IGhXbmQsIFVJTlQgd01zZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICBzd2l0Y2ggKHdNc2cpCiAgICAgewpAQCAtMTA0MSwxMCArMTA0MSwxMCBAQAogICAgICAgc3dpdGNoICh3UGFyYW0pCiAJewogCWNhc2UgSURPSzoKLQkgIEVuZERpYWxvZyhoV25kLCBUUlVFKTsKKwkgIEVuZERpYWxvZzMyKGhXbmQsIFRSVUUpOwogCSAgcmV0dXJuKFRSVUUpOwogCWNhc2UgSURDQU5DRUw6Ci0JICBFbmREaWFsb2coaFduZCwgRkFMU0UpOworCSAgRW5kRGlhbG9nMzIoaFduZCwgRkFMU0UpOwogCSAgcmV0dXJuKFRSVUUpOwogCX0KICAgICAgIHJldHVybihGQUxTRSk7CkBAIC0xMDU2LDcgKzEwNTYsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgUHJpbnRTZXR1cERsZ1Byb2MgICAoQ09NTURMRy4yMikKICAqLwotTFJFU1VMVCBQcmludFNldHVwRGxnUHJvYyhIV05EIGhXbmQsIFVJTlQgd01zZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorTFJFU1VMVCBQcmludFNldHVwRGxnUHJvYyhIV05EMTYgaFduZCwgVUlOVCB3TXNnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIHN3aXRjaCAod01zZykKICAgICB7CkBAIC0xMDY3LDEwICsxMDY3LDEwIEBACiAgICAgY2FzZSBXTV9DT01NQU5EOgogICAgICAgc3dpdGNoICh3UGFyYW0pIHsKICAgICAgIGNhc2UgSURPSzoKLQlFbmREaWFsb2coaFduZCwgVFJVRSk7CisJRW5kRGlhbG9nMzIoaFduZCwgVFJVRSk7CiAJcmV0dXJuKFRSVUUpOwogICAgICAgY2FzZSBJRENBTkNFTDoKLQlFbmREaWFsb2coaFduZCwgRkFMU0UpOworCUVuZERpYWxvZzMyKGhXbmQsIEZBTFNFKTsKIAlyZXR1cm4oVFJVRSk7CiAgICAgICB9CiAgICAgICByZXR1cm4oRkFMU0UpOwpAQCAtMTMzMCwxMCArMTMzMCwxMCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICBDQ19Nb3VzZUNoZWNrUHJlZGVmQ29sb3JBcnJheSAgICAgICAgICAgICAgIFtpbnRlcm5hbF0KICAqLwotc3RhdGljIGludCBDQ19Nb3VzZUNoZWNrUHJlZGVmQ29sb3JBcnJheShIV05EIGhEbGcsaW50IGRsZ2l0ZW0saW50IHJvd3MsaW50IGNvbHMsCitzdGF0aWMgaW50IENDX01vdXNlQ2hlY2tQcmVkZWZDb2xvckFycmF5KEhXTkQxNiBoRGxnLGludCBkbGdpdGVtLGludCByb3dzLGludCBjb2xzLAogCSAgICBMUEFSQU0gbFBhcmFtLENPTE9SUkVGICpjcikKIHsKLSBIV05EIGh3bmQ7CisgSFdORDE2IGh3bmQ7CiAgUE9JTlQxNiBwb2ludCA9IE1BS0VQT0lOVDE2KGxQYXJhbSk7CiAgUkVDVDE2IHJlY3Q7CiAgaW50IGR4LGR5LHgseTsKQEAgLTEzNjIsMTAgKzEzNjIsMTAgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICBDQ19Nb3VzZUNoZWNrVXNlckNvbG9yQXJyYXkgICAgICAgICAgICAgICBbaW50ZXJuYWxdCiAgKi8KLXN0YXRpYyBpbnQgQ0NfTW91c2VDaGVja1VzZXJDb2xvckFycmF5KEhXTkQgaERsZyxpbnQgZGxnaXRlbSxpbnQgcm93cyxpbnQgY29scywKK3N0YXRpYyBpbnQgQ0NfTW91c2VDaGVja1VzZXJDb2xvckFycmF5KEhXTkQxNiBoRGxnLGludCBkbGdpdGVtLGludCByb3dzLGludCBjb2xzLAogCSAgICBMUEFSQU0gbFBhcmFtLENPTE9SUkVGICpjcixDT0xPUlJFRipjcmFycikKIHsKLSBIV05EIGh3bmQ7CisgSFdORDE2IGh3bmQ7CiAgUE9JTlQxNiBwb2ludCA9IE1BS0VQT0lOVDE2KGxQYXJhbSk7CiAgUkVDVDE2IHJlY3Q7CiAgaW50IGR4LGR5LHgseTsKQEAgLTE0MDQsNyArMTQwNCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgQ0NfTW91c2VDaGVja0NvbG9yR3JhcGggICAgICAgICAgICAgICAgICAgW2ludGVybmFsXQogICovCi1zdGF0aWMgaW50IENDX01vdXNlQ2hlY2tDb2xvckdyYXBoKEhXTkQgaERsZyxpbnQgZGxnaXRlbSxpbnQgKmhvcmksaW50ICp2ZXJ0LExQQVJBTSBsUGFyYW0pCitzdGF0aWMgaW50IENDX01vdXNlQ2hlY2tDb2xvckdyYXBoKEhXTkQxNiBoRGxnLGludCBkbGdpdGVtLGludCAqaG9yaSxpbnQgKnZlcnQsTFBBUkFNIGxQYXJhbSkKIHsKICBIV05EMzIgaHduZDsKICBQT0lOVDE2IHBvaW50ID0gTUFLRVBPSU5UMTYobFBhcmFtKTsKQEAgLTE0MzYsOSArMTQzNiw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgQ0NfTW91c2VDaGVja1Jlc3VsdFdpbmRvdyAgICAgICAgICAgICAgICAgW2ludGVybmFsXQogICovCi1zdGF0aWMgaW50IENDX01vdXNlQ2hlY2tSZXN1bHRXaW5kb3coSFdORCBoRGxnLExQQVJBTSBsUGFyYW0pCitzdGF0aWMgaW50IENDX01vdXNlQ2hlY2tSZXN1bHRXaW5kb3coSFdORDE2IGhEbGcsTFBBUkFNIGxQYXJhbSkKIHsKLSBIV05EIGh3bmQ7CisgSFdORDE2IGh3bmQ7CiAgUE9JTlQxNiBwb2ludCA9IE1BS0VQT0lOVDE2KGxQYXJhbSk7CiAgUkVDVDE2IHJlY3Q7CiAKQEAgLTE0NTYsNyArMTQ1Niw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICBDQ19DaGVja0RpZ2l0c0luRWRpdCAgICAgICAgICAgICAgICAgW2ludGVybmFsXQogICovCi1zdGF0aWMgaW50IENDX0NoZWNrRGlnaXRzSW5FZGl0KEhXTkQgaHduZCxpbnQgbWF4dmFsKQorc3RhdGljIGludCBDQ19DaGVja0RpZ2l0c0luRWRpdChIV05EMTYgaHduZCxpbnQgbWF4dmFsKQogewogIGludCBpLGssbSxyZXN1bHQsdmFsdWU7CiAgbG9uZyBlZGl0cG9zOwpAQCAtMTQ5Nyw3ICsxNDk3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgIENDX1BhaW50U2VsZWN0ZWRDb2xvciAgICAgICAgICAgICAgICAgICBbaW50ZXJuYWxdCiAgKi8KLXN0YXRpYyB2b2lkIENDX1BhaW50U2VsZWN0ZWRDb2xvcihIV05EIGhEbGcsQ09MT1JSRUYgY3IpCitzdGF0aWMgdm9pZCBDQ19QYWludFNlbGVjdGVkQ29sb3IoSFdORDE2IGhEbGcsQ09MT1JSRUYgY3IpCiB7CiAgUkVDVDE2IHJlY3Q7CiAgSERDMzIgIGhkYzsKQEAgLTE1MTMsNyArMTUxMyw3IEBACiAgICBoQnJ1c2ggPSBTZWxlY3RPYmplY3QzMiAoaGRjLCBoQnJ1c2gpIDsKICAgIFJlY3RhbmdsZTMyKGhkYywgcmVjdC5sZWZ0LHJlY3QudG9wLHJlY3QucmlnaHQvMixyZWN0LmJvdHRvbSk7CiAgICBEZWxldGVPYmplY3QzMiAoU2VsZWN0T2JqZWN0MzIgKGhkYyxoQnJ1c2gpKSA7Ci0gICBoQnJ1c2g9Q3JlYXRlU29saWRCcnVzaDMyKEdldE5lYXJlc3RDb2xvcihoZGMsY3IpKTsKKyAgIGhCcnVzaD1DcmVhdGVTb2xpZEJydXNoMzIoR2V0TmVhcmVzdENvbG9yMzIoaGRjLGNyKSk7CiAgICBpZiAoaEJydXNoKQogICAgewogICAgIGhCcnVzaD0gU2VsZWN0T2JqZWN0MzIgKGhkYywgaEJydXNoKSA7CkBAIC0xNTI4LDcgKzE1MjgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgQ0NfUGFpbnRUcmlhbmdsZSAgICAgICAgICAgICAgICAgICAgICAgIFtpbnRlcm5hbF0KICAqLwotc3RhdGljIHZvaWQgQ0NfUGFpbnRUcmlhbmdsZShIV05EIGhEbGcsaW50IHkpCitzdGF0aWMgdm9pZCBDQ19QYWludFRyaWFuZ2xlKEhXTkQxNiBoRGxnLGludCB5KQogewogIEhEQzMyIGhEQzsKICBsb25nIHRlbXA7CkBAIC0xNTM3LDcgKzE1MzcsNyBAQAogIGludCBoZWlnaHQ7CiAgaW50IG9iZW47CiAgUkVDVDE2IHJlY3Q7Ci0gSFdORCBod25kPUdldERsZ0l0ZW0zMihoRGxnLDB4MmJlKTsKKyBIV05EMTYgaHduZD1HZXREbGdJdGVtMzIoaERsZywweDJiZSk7CiAgc3RydWN0IENDUFJJVkFURSAqbHBwPShzdHJ1Y3QgQ0NQUklWQVRFICopR2V0V2luZG93TG9uZzMyQShoRGxnLCBEV0xfVVNFUik7IAogCiAgaWYgKElzV2luZG93VmlzaWJsZTMyKEdldERsZ0l0ZW0zMihoRGxnLDB4MmM2KSkpICAgLyogaWYgZnVsbCBzaXplICovCkBAIC0xNTczLDExICsxNTczLDExIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICBDQ19QYWludENyb3NzICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ludGVybmFsXQogICovCi1zdGF0aWMgdm9pZCBDQ19QYWludENyb3NzKEhXTkQgaERsZyxpbnQgeCxpbnQgeSkKK3N0YXRpYyB2b2lkIENDX1BhaW50Q3Jvc3MoSFdORDE2IGhEbGcsaW50IHgsaW50IHkpCiB7CiAgSERDMzIgaERDOwogIGludCB3PUdldERpYWxvZ0Jhc2VVbml0cygpOwotIEhXTkQgaHduZD1HZXREbGdJdGVtMzIoaERsZywweDJjNik7CisgSFdORDE2IGh3bmQ9R2V0RGxnSXRlbTMyKGhEbGcsMHgyYzYpOwogIHN0cnVjdCBDQ1BSSVZBVEUgKiBscHA9KHN0cnVjdCBDQ1BSSVZBVEUgKilHZXRXaW5kb3dMb25nMzJBKGhEbGcsIERXTF9VU0VSKTsgCiAgUkVDVDE2IHJlY3Q7CiAgUE9JTlQxNiBwb2ludDsKQEAgLTE2MTksNyArMTYxOSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICBDQ19QcmVwYXJlQ29sb3JHcmFwaCAgICAgICAgICAgICAgICAgICAgW2ludGVybmFsXQogICovCi1zdGF0aWMgdm9pZCBDQ19QcmVwYXJlQ29sb3JHcmFwaChIV05EIGhEbGcpICAgIAorc3RhdGljIHZvaWQgQ0NfUHJlcGFyZUNvbG9yR3JhcGgoSFdORDE2IGhEbGcpICAgIAogewogIGludCBzZGlmLGhkaWYseGRpZix5ZGlmLHIsZyxiLGh1ZSxzYXQ7CiAgSFdORDMyIGh3bmQ9R2V0RGxnSXRlbTMyKGhEbGcsMHgyYzYpOwpAQCAtMTYyNyw3ICsxNjI3LDcgQEAKICBIQlJVU0gzMiBoYnJ1c2g7CiAgSERDMzIgaGRjIDsKICBSRUNUMTYgcmVjdCxjbGllbnQ7Ci0gSENVUlNPUjE2IGhjdXJzb3I9U2V0Q3Vyc29yKExvYWRDdXJzb3IxNigwLElEQ19XQUlUKSk7CisgSENVUlNPUjE2IGhjdXJzb3I9U2V0Q3Vyc29yMTYoTG9hZEN1cnNvcjE2KDAsSURDX1dBSVQpKTsKIAogIEdldENsaWVudFJlY3QxNihod25kLCZjbGllbnQpOwogIGhkYz1HZXREQzMyKGh3bmQpOwpAQCAtMTY1NywxMyArMTY1NywxMyBAQAogICByZWN0LmxlZnQ9cmVjdC5yaWdodDsKICB9CiAgUmVsZWFzZURDMzIoaHduZCxoZGMpOwotIFNldEN1cnNvcihoY3Vyc29yKTsKKyBTZXRDdXJzb3IxNihoY3Vyc29yKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NfUGFpbnRDb2xvckdyYXBoICAgICAgICAgICAgICAgIFtpbnRlcm5hbF0KICAqLwotc3RhdGljIHZvaWQgQ0NfUGFpbnRDb2xvckdyYXBoKEhXTkQgaERsZykKK3N0YXRpYyB2b2lkIENDX1BhaW50Q29sb3JHcmFwaChIV05EMTYgaERsZykKIHsKICBIV05EMzIgaHduZD1HZXREbGdJdGVtMzIoaERsZywweDJjNik7CiAgc3RydWN0IENDUFJJVkFURSAqIGxwcD0oc3RydWN0IENDUFJJVkFURSAqKUdldFdpbmRvd0xvbmczMkEoaERsZywgRFdMX1VTRVIpOyAKQEAgLTE2ODYsNyArMTY4Niw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NfUGFpbnRMdW1CYXIgICAgICAgICAgICAgICAgICAgW2ludGVybmFsXQogICovCi1zdGF0aWMgdm9pZCBDQ19QYWludEx1bUJhcihIV05EIGhEbGcsaW50IGh1ZSxpbnQgc2F0KQorc3RhdGljIHZvaWQgQ0NfUGFpbnRMdW1CYXIoSFdORDE2IGhEbGcsaW50IGh1ZSxpbnQgc2F0KQogewogIEhXTkQzMiBod25kPUdldERsZ0l0ZW0zMihoRGxnLDB4MmJlKTsKICBSRUNUMTYgcmVjdCxjbGllbnQ7CkBAIC0xNzIyLDcgKzE3MjIsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NfRWRpdFNldFJHQiAgICAgICAgICAgICAgICAgIFtpbnRlcm5hbF0KICAqLwotc3RhdGljIHZvaWQgQ0NfRWRpdFNldFJHQihIV05EIGhEbGcsQ09MT1JSRUYgY3IpCitzdGF0aWMgdm9pZCBDQ19FZGl0U2V0UkdCKEhXTkQxNiBoRGxnLENPTE9SUkVGIGNyKQogewogIGNoYXIgYnVmZmVyWzEwXTsKICBzdHJ1Y3QgQ0NQUklWQVRFICogbHBwPShzdHJ1Y3QgQ0NQUklWQVRFICopR2V0V2luZG93TG9uZzMyQShoRGxnLCBEV0xfVVNFUik7IApAQCAtMTc0NSw3ICsxNzQ1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDX0VkaXRTZXRIU0wgICAgICAgICAgICAgICAgICBbaW50ZXJuYWxdCiAgKi8KLXN0YXRpYyB2b2lkIENDX0VkaXRTZXRIU0woSFdORCBoRGxnLGludCBoLGludCBzLGludCBsKQorc3RhdGljIHZvaWQgQ0NfRWRpdFNldEhTTChIV05EMTYgaERsZyxpbnQgaCxpbnQgcyxpbnQgbCkKIHsKICBjaGFyIGJ1ZmZlclsxMF07CiAgc3RydWN0IENDUFJJVkFURSAqIGxwcD0oc3RydWN0IENDUFJJVkFURSAqKUdldFdpbmRvd0xvbmczMkEoaERsZywgRFdMX1VTRVIpOyAKQEAgLTE3NjcsNyArMTc2Nyw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICBDQ19Td2l0Y2hUb0Z1bGxTaXplICAgICAgICAgICAgICAgICAgW2ludGVybmFsXQogICovCi1zdGF0aWMgdm9pZCBDQ19Td2l0Y2hUb0Z1bGxTaXplKEhXTkQgaERsZyxDT0xPUlJFRiByZXN1bHQsTFBSRUNUMTYgbHByZWN0KQorc3RhdGljIHZvaWQgQ0NfU3dpdGNoVG9GdWxsU2l6ZShIV05EMTYgaERsZyxDT0xPUlJFRiByZXN1bHQsTFBSRUNUMTYgbHByZWN0KQogewogIGludCBpOwogIHN0cnVjdCBDQ1BSSVZBVEUgKiBscHA9KHN0cnVjdCBDQ1BSSVZBVEUgKilHZXRXaW5kb3dMb25nMzJBKGhEbGcsIERXTF9VU0VSKTsgCkBAIC0xNzk2LDcgKzE3OTYsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIENDX1BhaW50UHJlZGVmQ29sb3JBcnJheSAgICAgICAgIFtpbnRlcm5hbF0KICAqLwotc3RhdGljIHZvaWQgQ0NfUGFpbnRQcmVkZWZDb2xvckFycmF5KEhXTkQgaERsZyxpbnQgcm93cyxpbnQgY29scykKK3N0YXRpYyB2b2lkIENDX1BhaW50UHJlZGVmQ29sb3JBcnJheShIV05EMTYgaERsZyxpbnQgcm93cyxpbnQgY29scykKIHsKICBIV05EMzIgaHduZD1HZXREbGdJdGVtMzIoaERsZywweDJkMCk7CiAgUkVDVDE2IHJlY3Q7CkBAIC0xODM1LDcgKzE4MzUsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NfUGFpbnRVc2VyQ29sb3JBcnJheSAgICAgICAgIFtpbnRlcm5hbF0KICAqLwotc3RhdGljIHZvaWQgQ0NfUGFpbnRVc2VyQ29sb3JBcnJheShIV05EIGhEbGcsaW50IHJvd3MsaW50IGNvbHMsQ09MT1JSRUYqIGxwY3IpCitzdGF0aWMgdm9pZCBDQ19QYWludFVzZXJDb2xvckFycmF5KEhXTkQxNiBoRGxnLGludCByb3dzLGludCBjb2xzLENPTE9SUkVGKiBscGNyKQogewogIEhXTkQzMiBod25kPUdldERsZ0l0ZW0zMihoRGxnLDB4MmQxKTsKICBSRUNUMTYgcmVjdDsKQEAgLTE4OTEsMTAgKzE4OTEsMTAgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NfV01Jbml0RGlhbG9nICAgICAgICAgICAgICAgICBbaW50ZXJuYWxdCiAgKi8KLXN0YXRpYyBMT05HIENDX1dNSW5pdERpYWxvZyhIV05EIGhEbGcsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkgCitzdGF0aWMgTE9ORyBDQ19XTUluaXREaWFsb2coSFdORDE2IGhEbGcsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkgCiB7CiAgICBpbnQgaSxyZXM7Ci0gICBIV05EIGh3bmQ7CisgICBIV05EMTYgaHduZDsKICAgIFJFQ1QxNiByZWN0OwogICAgUE9JTlQxNiBwb2ludDsKICAgIHN0cnVjdCBDQ1BSSVZBVEUgKiBscHA7IApAQCAtMTkwNCw3ICsxOTA0LDcgQEAKICAgIGxwcC0+bHBjYz0oTFBDSE9PU0VDT0xPUilsUGFyYW07CiAgICBpZiAobHBwLT5scGNjLT5sU3RydWN0U2l6ZSAhPSBzaXplb2YoQ0hPT1NFQ09MT1IpKQogICAgewotICAgICAgRW5kRGlhbG9nIChoRGxnLCAwKSA7CisgICAgICBFbmREaWFsb2czMiAoaERsZywgMCkgOwogICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQogICAgU2V0V2luZG93TG9uZzMyQShoRGxnLCBEV0xfVVNFUiwgKExPTkcpbHBwKTsgCkBAIC0xOTQyLDcgKzE5NDIsNyBAQAogICAgICAgQ2xpZW50VG9TY3JlZW4xNihod25kLCZwb2ludCk7CiAgICAgICBTY3JlZW5Ub0NsaWVudDE2KGhEbGcsJnBvaW50KTsKICAgICAgIEdldENsaWVudFJlY3QxNihoRGxnLCZyZWN0KTsKLSAgICAgIHBvaW50LngrPUdldFN5c3RlbU1ldHJpY3MoU01fQ1hETEdGUkFNRSk7CisgICAgICBwb2ludC54Kz1HZXRTeXN0ZW1NZXRyaWNzMzIoU01fQ1hETEdGUkFNRSk7CiAgICAgICBTZXRXaW5kb3dQb3MzMihoRGxnLE5VTEwsMCwwLHBvaW50LngscmVzLFNXUF9OT01PVkV8U1dQX05PWk9SREVSKTsKIAogICAgICAgU2hvd1dpbmRvdzMyKEdldERsZ0l0ZW0zMihoRGxnLDB4MmM2KSxTV19ISURFKTsKQEAgLTE5NjEsNyArMTk2MSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NfV01Db21tYW5kICAgICAgICAgICAgICAgICAgW2ludGVybmFsXQogICovCi1zdGF0aWMgTFJFU1VMVCBDQ19XTUNvbW1hbmQoSFdORCBoRGxnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pIAorc3RhdGljIExSRVNVTFQgQ0NfV01Db21tYW5kKEhXTkQxNiBoRGxnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pIAogewogICAgIGludCByLGcsYixpLHh4OwogICAgIFVJTlQgY29rbXNnOwpAQCAtMjA0NCw3ICsyMDQ0LDcgQEAKIAogICAgICAgICAgIGNhc2UgMHgyYzk6ICAgICAgICAgICAgICAvKiByZXN1bHRpbmcgY29sb3IgKi8KIAkgICAgICAgaGRjPUdldERDMzIoaERsZyk7Ci0JICAgICAgIGxwcC0+bHBjYy0+cmdiUmVzdWx0PUdldE5lYXJlc3RDb2xvcihoZGMsbHBwLT5scGNjLT5yZ2JSZXN1bHQpOworCSAgICAgICBscHAtPmxwY2MtPnJnYlJlc3VsdD1HZXROZWFyZXN0Q29sb3IzMihoZGMsbHBwLT5scGNjLT5yZ2JSZXN1bHQpOwogCSAgICAgICBSZWxlYXNlREMzMihoRGxnLGhkYyk7CiAJICAgICAgIENDX0VkaXRTZXRSR0IoaERsZyxscHAtPmxwY2MtPnJnYlJlc3VsdCk7CiAJICAgICAgIENDX1BhaW50U2VsZWN0ZWRDb2xvcihoRGxnLGxwcC0+bHBjYy0+cmdiUmVzdWx0KTsKQEAgLTIwNzQsMTEgKzIwNzQsMTEgQEAKIAkJCWlmIChTZW5kTWVzc2FnZTE2KGxwcC0+bHBjYy0+aHduZE93bmVyLGNva21zZywwLChMUEFSQU0pbHBwLT5scGNjKSkKIAkJCSAgIGJyZWFrOyAgICAvKiBkbyBOT1QgY2xvc2UgKi8KIAotCQlFbmREaWFsb2cgKGhEbGcsIDEpIDsKKwkJRW5kRGlhbG9nMzIgKGhEbGcsIDEpIDsKIAkJcmV0dXJuIFRSVUUgOwogCQogCSAgY2FzZSBJRENBTkNFTCA6Ci0JCUVuZERpYWxvZyAoaERsZywgMCkgOworCQlFbmREaWFsb2czMiAoaERsZywgMCkgOwogCQlyZXR1cm4gVFJVRSA7CiAKICAgICAgICB9CkBAIC0yMDg4LDcgKzIwODgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDX1dNUGFpbnQgICAgICAgICAgICAgICAgICAgIFtpbnRlcm5hbF0KICAqLwotc3RhdGljIExSRVNVTFQgQ0NfV01QYWludChIV05EIGhEbGcsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkgCitzdGF0aWMgTFJFU1VMVCBDQ19XTVBhaW50KEhXTkQxNiBoRGxnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pIAogewogICAgIHN0cnVjdCBDQ1BSSVZBVEUgKiBscHA9KHN0cnVjdCBDQ1BSSVZBVEUgKilHZXRXaW5kb3dMb25nMzJBKGhEbGcsIERXTF9VU0VSKTsgCiAgICAgLyogd2UgaGF2ZSB0byBwYWludCBkaWFsb2cgY2hpbGRyZW4gZXhjZXB0IHRleHQgYW5kIGJ1dHRvbnMgKi8KQEAgLTIxMTUsNyArMjExNSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NfV01MQnV0dG9uRG93biAgICAgICAgICAgICAgW2ludGVybmFsXQogICovCi1zdGF0aWMgTFJFU1VMVCBDQ19XTUxCdXR0b25Eb3duKEhXTkQgaERsZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKSAKK3N0YXRpYyBMUkVTVUxUIENDX1dNTEJ1dHRvbkRvd24oSFdORDE2IGhEbGcsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkgCiB7CiAgICBzdHJ1Y3QgQ0NQUklWQVRFICogbHBwPShzdHJ1Y3QgQ0NQUklWQVRFICopR2V0V2luZG93TG9uZzMyQShoRGxnLCBEV0xfVVNFUik7IAogICAgaW50IHIsZyxiLGk7CkBAIC0yMTYzLDcgKzIxNjMsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ29sb3JEbGdQcm9jICAgKENPTU1ETEcuOCkKICAqLwotTFJFU1VMVCBDb2xvckRsZ1Byb2MoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsCitMUkVTVUxUIENvbG9yRGxnUHJvYyhIV05EMTYgaERsZywgVUlOVCBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgV1BBUkFNMTYgd1BhcmFtLCBMT05HIGxQYXJhbSkKIHsKICBpbnQgcmVzOwpAQCAtMjMwNyw4ICsyMzA3LDggQEAKIHsKICAgaW50IGk7CiAgIFdPUkQgdzsKLSAgSFdORCBod25kPUxPV09SRChsUGFyYW0pOwotICBIV05EIGhEbGc9R2V0UGFyZW50MTYoaHduZCk7CisgIEhXTkQxNiBod25kPUxPV09SRChsUGFyYW0pOworICBIV05EMTYgaERsZz1HZXRQYXJlbnQxNihod25kKTsKICAgTFBDSE9PU0VGT05UIGxwY2Y9KExQQ0hPT1NFRk9OVClHZXRXaW5kb3dMb25nMzJBKGhEbGcsIERXTF9VU0VSKTsgCiAgIExPR0ZPTlQxNiAqbHBsZiA9IChMT0dGT05UMTYgKilQVFJfU0VHX1RPX0xJTiggbG9nZm9udCApOwogCkBAIC0yMzQyLDcgKzIzNDIsNyBAQAogICoKICAqIEZpbGwgZm9udCBzdHlsZSBpbmZvcm1hdGlvbiBpbnRvIGNvbWJvYm94ICAod2l0aG91dCB1c2luZyBmb250LmMgZGlyZWN0bHkpCiAgKi8KLXN0YXRpYyBpbnQgU2V0Rm9udFN0eWxlc1RvQ29tYm8yKEhXTkQgaHduZCwgSERDMTYgaGRjLCBMUExPR0ZPTlQxNiBscGxmLAorc3RhdGljIGludCBTZXRGb250U3R5bGVzVG9Db21ibzIoSFdORDE2IGh3bmQsIEhEQzE2IGhkYywgTFBMT0dGT05UMTYgbHBsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVEVYVE1FVFJJQzE2IGxwdG0pCiB7CiAgICAjZGVmaW5lIEZTVFlMRVMgNApAQCAtMjM4NCw3ICsyMzg0LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgU2V0Rm9udFNpemVzVG9Db21ibzMgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW50ZXJuYWxdCiAgKi8KLXN0YXRpYyBpbnQgU2V0Rm9udFNpemVzVG9Db21ibzMoSFdORCBod25kLCBMUExPR0ZPTlQxNiBscGxmLCBMUENIT09TRUZPTlQgbHBjZikKK3N0YXRpYyBpbnQgU2V0Rm9udFNpemVzVG9Db21ibzMoSFdORDE2IGh3bmQsIExQTE9HRk9OVDE2IGxwbGYsIExQQ0hPT1NFRk9OVCBscGNmKQogewogICBzdGF0aWMgY29uc3QgaW50IHNpemVzW109ezgsOSwxMCwxMSwxMiwxNCwxNiwxOCwyMCwyMiwyNCwyNiwyOCwzNiw0OCw3MiwwfTsKICAgaW50IGgsaSxqOwpAQCAtMjQyMyw5ICsyNDIzLDkgQEAKIElOVDE2IEZvbnRTdHlsZUVudW1Qcm9jKCBTRUdQVFIgbG9nZm9udCwgU0VHUFRSIG1ldHJpY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDE2IG5Gb250VHlwZSwgTFBBUkFNIGxQYXJhbSApCiB7Ci0gIEhXTkQgaGNtYjI9TE9XT1JEKGxQYXJhbSk7Ci0gIEhXTkQgaGNtYjM9SElXT1JEKGxQYXJhbSk7Ci0gIEhXTkQgaERsZz1HZXRQYXJlbnQxNihoY21iMyk7CisgIEhXTkQxNiBoY21iMj1MT1dPUkQobFBhcmFtKTsKKyAgSFdORDE2IGhjbWIzPUhJV09SRChsUGFyYW0pOworICBIV05EMTYgaERsZz1HZXRQYXJlbnQxNihoY21iMyk7CiAgIExQQ0hPT1NFRk9OVCBscGNmPShMUENIT09TRUZPTlQpR2V0V2luZG93TG9uZzMyQShoRGxnLCBEV0xfVVNFUik7IAogICBMT0dGT05UMTYgKmxwbGYgPSAoTE9HRk9OVDE2ICopUFRSX1NFR19UT19MSU4obG9nZm9udCk7CiAgIFRFWFRNRVRSSUMxNiAqbHB0bSA9IChURVhUTUVUUklDMTYgKilQVFJfU0VHX1RPX0xJTihtZXRyaWNzKTsKQEAgLTI0NTYsMTMgKzI0NTYsMTMgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENGbl9XTUluaXREaWFsb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ludGVybmFsXQogICovCi1MUkVTVUxUIENGbl9XTUluaXREaWFsb2coSFdORCBoRGxnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitMUkVTVUxUIENGbl9XTUluaXREaWFsb2coSFdORDE2IGhEbGcsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgSERDMzIgaGRjOwogICBpbnQgaSxqLHJlcyxpbml0PTA7CiAgIGxvbmcgbDsKICAgTFBMT0dGT05UMTYgbHB4eDsKLSAgSENVUlNPUjE2IGhjdXJzb3I9U2V0Q3Vyc29yKExvYWRDdXJzb3IxNigwLElEQ19XQUlUKSk7CisgIEhDVVJTT1IxNiBoY3Vyc29yPVNldEN1cnNvcjE2KExvYWRDdXJzb3IxNigwLElEQ19XQUlUKSk7CiAgIExQQ0hPT1NFRk9OVCBscGNmOwogCiAgIFNldFdpbmRvd0xvbmczMkEoaERsZywgRFdMX1VTRVIsIGxQYXJhbSk7IApAQCAtMjQ3Myw3ICsyNDczLDcgQEAKICAgaWYgKGxwY2YtPmxTdHJ1Y3RTaXplICE9IHNpemVvZihDSE9PU0VGT05UKSkKICAgewogICAgIGRwcmludGZfY29tbWRsZyhzdGRkZWIsIldNX0lOSVRESUFMT0c6IHN0cnVjdHVyZSBzaXplIGZhaWx1cmUgISEhXG4iKTsKLSAgICBFbmREaWFsb2cgKGhEbGcsIDApOyAKKyAgICBFbmREaWFsb2czMiAoaERsZywgMCk7IAogICAgIHJldHVybiBGQUxTRTsKICAgfQogICBpZiAoIWhCaXRtYXBUVCkKQEAgLTI1NTksNyArMjU1OSw3IEBACiAgIGVsc2UKICAgewogICAgIGRwcmludGZfY29tbWRsZyhzdGRkZWIsIldNX0lOSVRESUFMT0c6IEhEQyBmYWlsdXJlICEhIVxuIik7Ci0gICAgRW5kRGlhbG9nIChoRGxnLCAwKTsgCisgICAgRW5kRGlhbG9nMzIgKGhEbGcsIDApOyAKICAgICByZXR1cm4gRkFMU0U7CiAgIH0KIApAQCAtMjU2OCw3ICsyNTY4LDcgQEAKICAgcmVzPVRSVUU7CiAgIGlmIChDRm5fSG9va0NhbGxDaGsobHBjZikpCiAgICAgcmVzPUNhbGxXaW5kb3dQcm9jMTYobHBjZi0+bHBmbkhvb2ssaERsZyxXTV9JTklURElBTE9HLHdQYXJhbSxsUGFyYW0pOwotICBTZXRDdXJzb3IoaGN1cnNvcik7ICAgCisgIFNldEN1cnNvcjE2KGhjdXJzb3IpOyAgIAogICByZXR1cm4gcmVzOwogfQogCkBAIC0yNTc2LDcgKzI1NzYsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ0ZuX1dNTWVhc3VyZUl0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICBbaW50ZXJuYWxdCiAgKi8KLUxSRVNVTFQgQ0ZuX1dNTWVhc3VyZUl0ZW0oSFdORCBoRGxnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitMUkVTVUxUIENGbl9XTU1lYXN1cmVJdGVtKEhXTkQxNiBoRGxnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIEJJVE1BUDE2IGJtOwogICBMUE1FQVNVUkVJVEVNU1RSVUNUMTYgbHBtaT1QVFJfU0VHX1RPX0xJTigoTFBNRUFTVVJFSVRFTVNUUlVDVDE2KWxQYXJhbSk7CkBAIC0yNTkyLDcgKzI1OTIsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ0ZuX1dNRHJhd0l0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW50ZXJuYWxdCiAgKi8KLUxSRVNVTFQgQ0ZuX1dNRHJhd0l0ZW0oSFdORCBoRGxnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitMUkVTVUxUIENGbl9XTURyYXdJdGVtKEhXTkQxNiBoRGxnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIEhCUlVTSDE2IGhCcnVzaDsKICAgY2hhciAqYnVmZmVyOwpAQCAtMjY4NSw3ICsyNjg1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENGbl9XTUN0bENvbG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ludGVybmFsXQogICovCi1MUkVTVUxUIENGbl9XTUN0bENvbG9yKEhXTkQgaERsZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorTFJFU1VMVCBDRm5fV01DdGxDb2xvcihIV05EMTYgaERsZywgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICBMUENIT09TRUZPTlQgbHBjZj0oTFBDSE9PU0VGT05UKUdldFdpbmRvd0xvbmczMkEoaERsZywgRFdMX1VTRVIpOyAKIApAQCAtMjcwMSw3ICsyNzAxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENGbl9XTUNvbW1hbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ludGVybmFsXQogICovCi1MUkVTVUxUIENGbl9XTUNvbW1hbmQoSFdORCBoRGxnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitMUkVTVUxUIENGbl9XTUNvbW1hbmQoSFdORDE2IGhEbGcsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgSEZPTlQxNiBoRm9udDsKICAgaW50IGksajsKQEAgLTI3MjMsMTQgKzI3MjMsMTQgQEAKIAkJICAgICAgaT1TZW5kRGxnSXRlbU1lc3NhZ2UxNihoRGxnLGNtYjEsQ0JfR0VUQ1VSU0VMMTYsMCwwKTsKIAkJICAgICAgaWYgKGkhPUNCX0VSUikKIAkJICAgICAgewotCQkgICAgICAgIEhDVVJTT1IxNiBoY3Vyc29yPVNldEN1cnNvcihMb2FkQ3Vyc29yMTYoMCxJRENfV0FJVCkpOworCQkgICAgICAgIEhDVVJTT1IxNiBoY3Vyc29yPVNldEN1cnNvcjE2KExvYWRDdXJzb3IxNigwLElEQ19XQUlUKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzdHIgPSBTRUdQVFJfQUxMT0MoMjU2KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFNlbmREbGdJdGVtTWVzc2FnZTE2KGhEbGcsY21iMSxDQl9HRVRMQlRFWFQxNixpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExQQVJBTSlTRUdQVFJfR0VUKHN0cikpOwogCSAgICAgICAgICAgICAgICBkcHJpbnRmX2NvbW1kbGcoc3RkZGViLCJXTV9DT01NQU5EL2NtYjEgPT4lc1xuIixzdHIpOwogICAgICAgIAkJICAgICAgICBFbnVtRm9udEZhbWlsaWVzMTYoaGRjLHN0cixGb250U3R5bGVFbnVtUHJvYywKIAkJICAgICAgICAgICAgIE1BS0VMT05HKEdldERsZ0l0ZW0zMihoRGxnLGNtYjIpLEdldERsZ0l0ZW0zMihoRGxnLGNtYjMpKSk7Ci0JCSAgICAgICAgU2V0Q3Vyc29yKGhjdXJzb3IpOyAgICAgCisJCSAgICAgICAgU2V0Q3Vyc29yMTYoaGN1cnNvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBTRUdQVFJfRlJFRShzdHIpOwogCQkgICAgICB9CiAJCSAgICAgIGlmICghKGxwY2YtPkZsYWdzICYgQ0ZfUFJJTlRFUkZPTlRTICYmIGxwY2YtPmhEQykpCkBAIC0yNzM5LDcgKzI3MzksNyBAQAogIAkJICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgIGRwcmludGZfY29tbWRsZyhzdGRkZWIsIldNX0NPTU1BTkQ6IEhEQyBmYWlsdXJlICEhIVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgRW5kRGlhbG9nIChoRGxnLCAwKTsgCisgICAgICAgICAgICAgICAgICAgICAgRW5kRGlhbG9nMzIgKGhEbGcsIDApOyAKICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgICAgICAgICAgICAgfQogCSAgICAgICAgICB9CkBAIC0yODE2LDcgKzI4MTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgKCAobHBjZi0+RmxhZ3MgJiBDRl9MSU1JVFNJWkUpICYmIAogICAgICAgICAgICAgICAgICAgICAgICgtbHB4eC0+bGZIZWlnaHQgPj0gbHBjZi0+blNpemVNaW4pICYmIAogICAgICAgICAgICAgICAgICAgICAgICgtbHB4eC0+bGZIZWlnaHQgPD0gbHBjZi0+blNpemVNYXgpKSkKLQkgICAgICAgICAgICAgRW5kRGlhbG9nKGhEbGcsIFRSVUUpOworCSAgICAgICAgICAgICBFbmREaWFsb2czMihoRGxnLCBUUlVFKTsKIAkgICAgICAgICAgZWxzZQogCSAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY2hhciBidWZmZXJbODBdOwpAQCAtMjgyNSw3ICsyODI1LDcgQEAKIAkgICAgICAgICAgIE1lc3NhZ2VCb3gxNihoRGxnLGJ1ZmZlcixOVUxMLE1CX09LKTsKIAkgICAgICAgICAgfSAKIAkJICByZXR1cm4oVFJVRSk7Ci0JY2FzZSBJRENBTkNFTDpFbmREaWFsb2coaERsZywgRkFMU0UpOworCWNhc2UgSURDQU5DRUw6RW5kRGlhbG9nMzIoaERsZywgRkFMU0UpOwogCQkgIHJldHVybihUUlVFKTsKIAl9CiAgICAgICByZXR1cm4oRkFMU0UpOwpAQCAtMjgzOCw3ICsyODM4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgMi4gc29tZSBDRl8uLiBmbGFncyBhcmUgbm90IHN1cHBvcnRlZAogICAgICAgICAgICAgICAgICAgICAzLiBzb21lIFRUeXBlIGV4dGVuc2lvbnMKICAqLwotTFJFU1VMVCBGb3JtYXRDaGFyRGxnUHJvYyhIV05EIGhEbGcsIFVJTlQgbWVzc2FnZSwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorTFJFU1VMVCBGb3JtYXRDaGFyRGxnUHJvYyhIV05EMTYgaERsZywgVUlOVCBtZXNzYWdlLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIExQQ0hPT1NFRk9OVCBscGNmPShMUENIT09TRUZPTlQpR2V0V2luZG93TG9uZzMyQShoRGxnLCBEV0xfVVNFUik7ICAKICAgaWYgKG1lc3NhZ2UhPVdNX0lOSVRESUFMT0cpCmRpZmYgLS1naXQgYS9taXNjL2NydGRsbC5jIGIvbWlzYy9jcnRkbGwuYwppbmRleCA5OGZjMzg0Li5lYTE4NWFjIDEwMDY0NAotLS0gYS9taXNjL2NydGRsbC5jCisrKyBiL21pc2MvY3J0ZGxsLmMKQEAgLTgzMSw2ICs4MzEsMjMgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICBfd2NzcmV2ICAgICAgICAgICAoQ1JURExMLjMyNikKKyAqLworVk9JRCBDUlRETExfX3djc3JldihMUFdTVFIgcykgeworCUxQV1NUUgllOworCisJZT1zOworCXdoaWxlICgqZSkKKwkJZSsrOworCXdoaWxlIChzPGUpIHsKKwkJV0NIQVIJYTsKKworCQlhPSpzOypzPSplOyplPWE7CisJCXMrKztlLS07CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgIHdjc3N0ciAgICAgICAgICAgKENSVERMTC41MTcpCiAgKi8KIExQV1NUUiBDUlRETExfd2Nzc3RyKExQV1NUUiBzLExQV1NUUiBiKQpkaWZmIC0tZ2l0IGEvbWlzYy9kcml2ZXIuYyBiL21pc2MvZHJpdmVyLmMKaW5kZXggODJhNjQxNC4uYzUzNWZmZCAxMDA2NDQKLS0tIGEvbWlzYy9kcml2ZXIuYworKysgYi9taXNjL2RyaXZlci5jCkBAIC0yMzIsOCArMjMyLDcgQEAKIAlyZXR1cm4gKExSRVNVTFQpMEw7CiAKICAgICAgIGNhc2UgRFJWX0NPTkZJR1VSRToKLQlNZXNzYWdlQm94MTYoIChIV05EKU5VTEwsICJEcml2ZXIgaXNuJ3QgY29uZmlndXJhYmxlICEiLCAKLSAgICAgICAgICAgICAgICAgICAgICAiV2luZSBEcml2ZXIiLCBNQl9PSyApOworCU1lc3NhZ2VCb3gxNiggMCwgIkRyaXZlciBpc24ndCBjb25maWd1cmFibGUgISIsICJXaW5lIERyaXZlciIsIE1CX09LICk7CiAJcmV0dXJuIChMUkVTVUxUKTBMOwogCiAgICAgICBjYXNlIERSVl9JTlNUQUxMOgpkaWZmIC0tZ2l0IGEvbWlzYy9sc3RyLmMgYi9taXNjL2xzdHIuYwppbmRleCA1ZWE0NTA5Li43MzVhNTllIDEwMDY0NAotLS0gYS9taXNjL2xzdHIuYworKysgYi9taXNjL2xzdHIuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAgICAgd2hpbGUgKCpzdGFydCAmJiAoc3RhcnQgPCBwdHIpKQogICAgIHsKICAgICAgICAgTFBDU1RSIG5leHQgPSBDaGFyTmV4dDMyQSggc3RhcnQgKTsKLSAgICAgICAgaWYgKG5leHQgPiBwdHIpIGJyZWFrOworICAgICAgICBpZiAobmV4dCA+PSBwdHIpIGJyZWFrOwogICAgICAgICBzdGFydCA9IG5leHQ7CiAgICAgfQogICAgIHJldHVybiAoTFBTVFIpc3RhcnQ7CmRpZmYgLS1naXQgYS9taXNjL21haW4uYyBiL21pc2MvbWFpbi5jCmluZGV4IDU3OTA5NzYuLjE2ODcyMjYgMTAwNjQ0Ci0tLSBhL21pc2MvbWFpbi5jCisrKyBiL21pc2MvbWFpbi5jCkBAIC02OSw2ICs2OSw3IEBACiAgICAgeyJFbyIsICAgICAwfSwJLyogTEFOR19FbyAqLyAvKiBGSVhNRSBsYW5ndWFnZWlkICovCiAgICAgeyJJdCIsMHgwNDEwfSwJLyogTEFOR19JdCAqLwogICAgIHsiS28iLDB4MDQxMn0sCS8qIExBTkdfS28gKi8KKyAgICB7Ikh1IiwweDA0MzZ9LAkvKiBMQU5HX0h1ICovCiAgICAge05VTEwsMH0KIH07CiAKQEAgLTE2MSw3ICsxNjIsNyBAQAogICAiICAgIC1maXhlZG1hcCAgICAgICBVc2UgYSBcInN0YW5kYXJkXCIgY29sb3IgbWFwXG4iIFwKICAgIiAgICAtaWNvbmljICAgICAgICAgU3RhcnQgYXMgYW4gaWNvblxuIiBcCiAgICIgICAgLWlwYyAgICAgICAgICAgIEVuYWJsZSBJUEMgZmFjaWxpdGllc1xuIiBcCi0gICIgICAgLWxhbmd1YWdlIHh4ICAgIFNldCB0aGUgbGFuZ3VhZ2UgKG9uZSBvZiBFbixFcyxEZSxObyxGcixGaSxEYSxDeixFbyxJdCxLbylcbiIgXAorICAiICAgIC1sYW5ndWFnZSB4eCAgICBTZXQgdGhlIGxhbmd1YWdlIChvbmUgb2YgRW4sRXMsRGUsTm8sRnIsRmksRGEsQ3osRW8sSXQsS28sSHUpXG4iIFwKICAgIiAgICAtbWFuYWdlZCAgICAgICAgQWxsb3cgdGhlIHdpbmRvdyBtYW5hZ2VyIHRvIG1hbmFnZSBjcmVhdGVkIHdpbmRvd3NcbiIgXAogICAiICAgIC1tb2RlIG1vZGUgICAgICBTdGFydCBXaW5lIGluIGEgcGFydGljdWxhciBtb2RlIChzdGFuZGFyZCBvciBlbmhhbmNlZClcbiIgXAogICAiICAgIC1uYW1lIG5hbWUgICAgICBTZXQgdGhlIGFwcGxpY2F0aW9uIG5hbWVcbiIgXApAQCAtNjgyLDExICs2ODMsMjEgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBNZXNzYWdlQmVlcCAgICAoVVNFUi4xMDQpCisgKiAgICAgICAgICAgTWVzc2FnZUJlZXAxNiAgIChVU0VSLjEwNCkKICAqLwotdm9pZCBNZXNzYWdlQmVlcChXT1JEIGkpCit2b2lkIE1lc3NhZ2VCZWVwMTYoIFVJTlQxNiBpICkKIHsKLQlYQmVsbChkaXNwbGF5LCAxMDApOworICAgIE1lc3NhZ2VCZWVwMzIoIGkgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBNZXNzYWdlQmVlcDMyICAgKFVTRVIzMi4zODkpCisgKi8KK0JPT0wzMiBNZXNzYWdlQmVlcDMyKCBVSU5UMzIgaSApCit7CisgICAgWEJlbGwoIGRpc3BsYXksIDEwMCApOworICAgIHJldHVybiBUUlVFOwogfQogCiAKQEAgLTkzOSw3ICs5NTAsNyBAQAogCQkJYnJlYWs7CiAJCQogCQljYXNlIFNQSV9HRVRCT1JERVI6Ci0JCQkqKElOVCAqKWxwdlBhcmFtID0gR2V0U3lzdGVtTWV0cmljcyggU01fQ1hGUkFNRSApOworCQkJKihJTlQxNiAqKWxwdlBhcmFtID0gR2V0U3lzdGVtTWV0cmljczE2KCBTTV9DWEZSQU1FICk7CiAJCQlicmVhazsKIAogCQljYXNlIFNQSV9HRVRGQVNUVEFTS1NXSVRDSDoKQEAgLTk3Myw3ICs5ODQsNyBAQAogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogCQljYXNlIFNQSV9HRVRNRU5VRFJPUEFMSUdOTUVOVDoKLQkJCSooQk9PTCAqKSBscHZQYXJhbSA9IEdldFN5c3RlbU1ldHJpY3MoIFNNX01FTlVEUk9QQUxJR05NRU5UICk7IC8qIFhYWCBjaGVjayB0aGlzICovCisJCQkqKEJPT0wxNiAqKSBscHZQYXJhbSA9IEdldFN5c3RlbU1ldHJpY3MxNiggU01fTUVOVURST1BBTElHTk1FTlQgKTsgLyogWFhYIGNoZWNrIHRoaXMgKi8KIAkJCWJyZWFrOwogCiAJCWNhc2UgU1BJX0dFVFNDUkVFTlNBVkVBQ1RJVkU6CkBAIC05OTQsNyArMTAwNSw3IEBACiAJCQlpZiAobHB2UGFyYW0gPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlNldFN5c3RlbU1ldHJpY3MoIFNNX0NYSUNPTlNQQUNJTkcsIHVQYXJhbSApKi8gOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICooSU5UICopIGxwdlBhcmFtID0gR2V0U3lzdGVtTWV0cmljcyggU01fQ1hJQ09OU1BBQ0lORyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICooSU5UMTYgKilscHZQYXJhbSA9IEdldFN5c3RlbU1ldHJpY3MxNiggU01fQ1hJQ09OU1BBQ0lORyApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTUElfSUNPTlZFUlRJQ0FMU1BBQ0lORzoKQEAgLTEwMDIsNyArMTAxMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChscHZQYXJhbSA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICAgICAgLypTZXRTeXN0ZW1NZXRyaWNzKCBTTV9DWUlDT05TUEFDSU5HLCB1UGFyYW0gKSovIDsKIAkJICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICooSU5UICopIGxwdlBhcmFtID0gR2V0U3lzdGVtTWV0cmljcyhTTV9DWUlDT05TUEFDSU5HKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICooSU5UMTYgKilscHZQYXJhbSA9IEdldFN5c3RlbU1ldHJpY3MxNihTTV9DWUlDT05TUEFDSU5HKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKIAkJY2FzZSBTUElfU0VUQkVFUDoKQEAgLTEwNzEsOCArMTA4Miw4IEBACiAKICAgICAgICAgICAgICAgICBjYXNlIFNQSV9HRVRXT1JLQVJFQToKICAgICAgICAgICAgICAgICAgICAgU2V0UmVjdDE2KCAoUkVDVDE2ICopbHB2UGFyYW0sIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0U3lzdGVtTWV0cmljcyggU01fQ1hTQ1JFRU4gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTeXN0ZW1NZXRyaWNzKCBTTV9DWVNDUkVFTiApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0U3lzdGVtTWV0cmljczE2KCBTTV9DWFNDUkVFTiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN5c3RlbU1ldHJpY3MxNiggU01fQ1lTQ1JFRU4gKSApOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogCQlkZWZhdWx0OgpAQCAtMTE0MCwxNCArMTE1MSw2IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qCVNXQVBNT1VTRUJVVFRPTiAoVVNFUi4xODYpCi0qLwotQk9PTCBTd2FwTW91c2VCdXR0b24oQk9PTCBmU3dhcCkKLXsKLQlyZXR1cm4gMDsJLyogZG9uJ3Qgc3dhcCAqLwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoJRmlsZUNEUiAoS0VSTkVMLjEzMCkKICovCiB2b2lkIEZpbGVDRFIoRkFSUFJPQzE2IHgpCkBAIC0xMTU4LDcgKzExNjEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCUdldFdpbkRlYnVnSW5mbyAoS0VSTkVMLjM1NSkKICovCi1CT09MIEdldFdpbkRlYnVnSW5mbyhXSU5ERUJVR0lORk8gKmxwd2RpLCBVSU5UIGZsYWdzKQorQk9PTDE2IEdldFdpbkRlYnVnSW5mbyhXSU5ERUJVR0lORk8gKmxwd2RpLCBVSU5UMTYgZmxhZ3MpCiB7CiAJcHJpbnRmKCJHZXRXaW5EZWJ1Z0luZm8oJThseCwlZCkgc3R1YiByZXR1cm5pbmcgMFxuIiwgKHVuc2lnbmVkIGxvbmcpbHB3ZGksIGZsYWdzKTsKIAkvKiAwIG1lYW5zIG5vdCBpbiBkZWJ1Z2dpbmcgbW9kZS92ZXJzaW9uICovCkBAIC0xMTcwLDcgKzExNzMsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCUdldFdpbkRlYnVnSW5mbyAoS0VSTkVMLjM1NSkKICovCi1CT09MIFNldFdpbkRlYnVnSW5mbyhXSU5ERUJVR0lORk8gKmxwd2RpKQorQk9PTDE2IFNldFdpbkRlYnVnSW5mbyhXSU5ERUJVR0lORk8gKmxwd2RpKQogewogCXByaW50ZigiU2V0V2luRGVidWdJbmZvKCU4bHgpIHN0dWIgcmV0dXJuaW5nIDBcbiIsICh1bnNpZ25lZCBsb25nKWxwd2RpKTsKIAkvKiAwIG1lYW5zIG5vdCBpbiBkZWJ1Z2dpbmcgbW9kZS92ZXJzaW9uICovCmRpZmYgLS1naXQgYS9taXNjL25ldHdvcmsuYyBiL21pc2MvbmV0d29yay5jCmluZGV4IGY2MjY3YjQuLjE1NmRiNTMgMTAwNjQ0Ci0tLSBhL21pc2MvbmV0d29yay5jCisrKyBiL21pc2MvbmV0d29yay5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgIFdOZXRXYXRjaFF1ZXVlICAgICAgIFtVU0VSLjUwOF0KICAqLwotaW50IFdOZXRXYXRjaFF1ZXVlKEhXTkQgaFduZCxMUFNUUiBzekxvY2FsLExQU1RSIHN6VXNlcixXT1JEIG5RdWV1ZSkKK2ludCBXTmV0V2F0Y2hRdWV1ZShIV05EMTYgaFduZCxMUFNUUiBzekxvY2FsLExQU1RSIHN6VXNlcixXT1JEIG5RdWV1ZSkKIHsKIAlwcmludGYoIkVNUFRZIFNUVUIgISEhIFdOZXRXYXRjaFF1ZXVlKCUwNHgsJyVzJywnJXMnLCV4KVxuIiwKIAkJaFduZCxzekxvY2FsLHN6VXNlcixuUXVldWUpOwpAQCAtMTkxLDcgKzE5MSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICBXTmV0RGV2aWNlTW9kZSAgICAgICBbVVNFUi41MTRdCiAgKi8KLWludCBXTmV0RGV2aWNlTW9kZShIV05EIGhXbmRPd25lcikKK2ludCBXTmV0RGV2aWNlTW9kZShIV05EMTYgaFduZE93bmVyKQogewogCXByaW50ZigiRU1QVFkgU1RVQiAhISEgV05ldERldmljZU1vZGUoJTA0eClcbiIsaFduZE93bmVyKTsKIAlyZXR1cm4gV05fTkVUX0VSUk9SOwpAQCAtMjAwLDcgKzIwMCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICBXTmV0QnJvd3NlRGlhbG9nICAgICAgIFtVU0VSLjUxNV0KICAqLwotaW50IFdOZXRCcm93c2VEaWFsb2coSFdORCBoUGFyZW50LFdPUkQgblR5cGUsTFBTVFIgc3pQYXRoKQoraW50IFdOZXRCcm93c2VEaWFsb2coSFdORDE2IGhQYXJlbnQsV09SRCBuVHlwZSxMUFNUUiBzelBhdGgpCiB7CiAJcHJpbnRmKCJFTVBUWSBTVFVCICEhISBXTmV0QnJvd3NlRGlhbG9nKCUwNHgsJXgsJyVzJylcbiIsCiAJCWhQYXJlbnQsblR5cGUsc3pQYXRoKTsKQEAgLTI2MCw3ICsyNjAsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgV05ldFJlc3RvcmVDb25uZWN0aW9uICAgICAgIFtVU0VSLjUyM10KICAqLwotaW50IFdOZXRSZXN0b3JlQ29ubmVjdGlvbihIV05EIGh3bmRPd25lcixMUFNUUiBscHN6RGV2aWNlKQoraW50IFdOZXRSZXN0b3JlQ29ubmVjdGlvbihIV05EMTYgaHduZE93bmVyLExQU1RSIGxwc3pEZXZpY2UpCiB7CiAJcHJpbnRmKCJFTVBUWSBTVFVCICEhISBXTmV0UmVzdG9yZUNvbm5lY3Rpb24oJTA0eCwnJXMnKVxuIiwKIAkJaHduZE93bmVyLGxwc3pEZXZpY2UpOwpAQCAtMjgwLDcgKzI4MCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICBXbmV0Q29ubmVjdERpYWxvZyAgICAgICBbVVNFUi41MjVdCiAgKi8KLVVJTlQgV05ldENvbm5lY3REaWFsb2coSFdORCBoV25kUGFyZW50LCBXT1JEIGlUeXBlKQorVUlOVCBXTmV0Q29ubmVjdERpYWxvZyhIV05EMTYgaFduZFBhcmVudCwgV09SRCBpVHlwZSkKIHsKIAlwcmludGYoIkVNUFRZIFNUVUIgISEhIFdOZXRDb25uZWN0RGlhbG9nKCUwNHgsICU0WClcbiIsIGhXbmRQYXJlbnQsIGlUeXBlKTsKIAlyZXR1cm4gV05fU1VDQ0VTUzsKQEAgLTI4OSw3ICsyODksNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgV05ldERpc2Nvbm5lY3REaWFsb2cgICAgICAgW1VTRVIuNTI2XQogICovCi1pbnQgV05ldERpc2Nvbm5lY3REaWFsb2coSFdORCBod25kT3duZXIsIFdPUkQgaVR5cGUpCitpbnQgV05ldERpc2Nvbm5lY3REaWFsb2coSFdORDE2IGh3bmRPd25lciwgV09SRCBpVHlwZSkKIHsKIAlwcmludGYoIkVNUFRZIFNUVUIgISEhIFdOZXREaXNjb25uZWN0RGlhbG9nKCUwNHgsJXgpXG4iLAogCQlod25kT3duZXIsaVR5cGUpOwpAQCAtMjk5LDcgKzI5OSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICBXbmV0Q29ubmVjdGlvbkRpYWxvZyAgICAgW1VTRVIuNTI3XQogICovCi1VSU5UIFdOZXRDb25uZWN0aW9uRGlhbG9nKEhXTkQgaFduZFBhcmVudCwgV09SRCBpVHlwZSkKK1VJTlQgV05ldENvbm5lY3Rpb25EaWFsb2coSFdORDE2IGhXbmRQYXJlbnQsIFdPUkQgaVR5cGUpCiB7CiAJcHJpbnRmKCJFTVBUWSBTVFVCICEhISBXTmV0Q29ubmVjdGlvbkRpYWxvZyglMDR4LCAlNFgpXG4iLCAKIAkJaFduZFBhcmVudCwgaVR5cGUpOwpAQCAtMzA5LDcgKzMwOSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICBXTmV0Vmlld1F1ZXVlRGlhbG9nICAgICAgIFtVU0VSLjUyOF0KICAqLwotaW50IFdOZXRWaWV3UXVldWVEaWFsb2coSFdORCBod25kT3duZXIsTFBTVFIgbHBzelF1ZXVlKQoraW50IFdOZXRWaWV3UXVldWVEaWFsb2coSFdORDE2IGh3bmRPd25lcixMUFNUUiBscHN6UXVldWUpCiB7CiAJcHJpbnRmKCJFTVBUWSBTVFVCICEhISBXTmV0Vmlld1F1ZXVlRGlhbG9nKCUwNHgsJyVzJylcbiIsCiAJCWh3bmRPd25lcixscHN6UXVldWUpOwpAQCAtMzE5LDcgKzMxOSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICBXTmV0UHJvcGVydHlEaWFsb2cgICAgICAgW1VTRVIuNTI5XQogICovCi1pbnQgV05ldFByb3BlcnR5RGlhbG9nKEhXTkQgaHduZFBhcmVudCxXT1JEIGlCdXR0b24sCitpbnQgV05ldFByb3BlcnR5RGlhbG9nKEhXTkQxNiBod25kUGFyZW50LFdPUkQgaUJ1dHRvbiwKIAlXT1JEIG5Qcm9wU2VsLExQU1RSIGxwc3pOYW1lLFdPUkQgblR5cGUpCiB7CiAJcHJpbnRmKCJFTVBUWSBTVFVCICEhISBXTmV0UHJvcGVydHlEaWFsb2coJTA0eCwleCwleCwnJXMnLCV4KVxuIiwKQEAgLTM0MCw3ICszNDAsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgV05ldERpcmVjdG9yeU5vdGlmeSAgICAgICBbVVNFUi41MzFdCiAgKi8KLWludCBXTmV0RGlyZWN0b3J5Tm90aWZ5KEhXTkQgaHduZE93bmVyLHZvaWQgKmxwRGlyLFdPUkQgd09wZXIpCitpbnQgV05ldERpcmVjdG9yeU5vdGlmeShIV05EMTYgaHduZE93bmVyLHZvaWQgKmxwRGlyLFdPUkQgd09wZXIpCiB7CiAJcHJpbnRmKCJFTVBUWSBTVFVCICEhISBXTmV0RGlyZWN0b3J5Tm90aWZ5KCUwNHgsJXAsJXgpXG4iLAogCQlod25kT3duZXIsbHBEaXIsd09wZXIpOwpAQCAtMzUwLDcgKzM1MCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICBXTmV0R2V0UHJvcGVydHlUZXh0ICAgICAgIFtVU0VSLjUzMl0KICAqLwotaW50IFdOZXRHZXRQcm9wZXJ0eVRleHQoSFdORCBod25kUGFyZW50LFdPUkQgaUJ1dHRvbixXT1JEIG5Qcm9wU2VsLAoraW50IFdOZXRHZXRQcm9wZXJ0eVRleHQoSFdORDE2IGh3bmRQYXJlbnQsV09SRCBpQnV0dG9uLFdPUkQgblByb3BTZWwsCiAJTFBTVFIgbHBzek5hbWUsV09SRCBuVHlwZSkKIHsKIAlwcmludGYoIkVNUFRZIFNUVUIgISEhIFdOZXRHZXRQcm9wZXJ0eVRleHQoJTA0eCwleCwleCwnJXMnLCV4KVxuIiwKZGlmZiAtLWdpdCBhL21pc2MvbnRkbGwuYyBiL21pc2MvbnRkbGwuYwppbmRleCA2ZjE4ZTI2Li5mOWQ4OTg1IDEwMDY0NAotLS0gYS9taXNjL250ZGxsLmMKKysrIGIvbWlzYy9udGRsbC5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgIndpbi5oIgogI2luY2x1ZGUgIndpbmRvd3MuaCIKKyNpbmNsdWRlICJudGRsbC5oIgogI2luY2x1ZGUgImhlYXAuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogI2luY2x1ZGUgImRlYnVnLmgiCkBAIC0yNyw2ICsyOCwxNzcgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgUnRsTGVuZ3RoU2lkCQkJCVtOVERMTF0KKyAqLworRFdPUkQKK1J0bExlbmd0aFNpZChMUFNJRCBzaWQpIHsKKwlyZXR1cm4gc2l6ZW9mKERXT1JEKSpzaWQtPlN1YkF1dGhvcml0eUNvdW50K3NpemVvZihTSUQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICBSdGxDcmVhdGVBY2wJCQkJW05URExMXQorICovCitEV09SRCAvKiBOVFNUQVRVUyAqLworUnRsQ3JlYXRlQWNsKExQQUNMIGFjbCxEV09SRCBzaXplLERXT1JEIHJldikgeworCWlmIChyZXYhPUFDTF9SRVZJU0lPTikKKwkJcmV0dXJuIFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKwlpZiAoc2l6ZTxzaXplb2YoQUNMKSkKKwkJcmV0dXJuIFNUQVRVU19CVUZGRVJfVE9PX1NNQUxMOworCWlmIChzaXplPjB4RkZGRikKKwkJcmV0dXJuIFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworCW1lbXNldChhY2wsJ1wwJyxzaXplb2YoQUNMKSk7CisJYWNsLT5BY2xSZXZpc2lvbgk9IHJldjsKKwlhY2wtPkFjbFNpemUJCT0gc2l6ZTsKKwlhY2wtPkFjZUNvdW50CQk9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgIFJ0bEZpcnN0RnJlZUFjZQkJCVtOVERMTF0KKyAqIGxvb2tzIGZvciB0aGUgQWNlQ291bnQrMSBBQ0UsIGFuZCBpZiBpdCBpcyBzdGlsbCB3aXRoaW4gdGhlIGFsbG9jZWQKKyAqIEFDTCwgcmV0dXJuIGEgcG9pbnRlciB0byBpdAorICovCitCT09MMzIKK1J0bEZpcnN0RnJlZUFjZShMUEFDTCBhY2wsTFBBQ0VfSEVBREVSICp4KSB7CisJTFBBQ0VfSEVBREVSCWFjZTsKKwlpbnQJCWk7CisKKwkqeCA9IDA7CisJYWNlID0gKExQQUNFX0hFQURFUikoYWNsKzEpOworCWZvciAoaT0wO2k8YWNsLT5BY2VDb3VudDtpKyspIHsKKwkJaWYgKChEV09SRClhY2U+PSgoKERXT1JEKWFjbCkrYWNsLT5BY2xTaXplKSkKKwkJCXJldHVybiAwOworCQlhY2UgPSAoTFBBQ0VfSEVBREVSKSgoKEJZVEUqKWFjZSkrYWNlLT5BY2VTaXplKTsKKwl9CisJaWYgKChEV09SRClhY2U+PSgoKERXT1JEKWFjbCkrYWNsLT5BY2xTaXplKSkKKwkJcmV0dXJuIDA7CisJKnggPSBhY2U7CisJcmV0dXJuIDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgIFJ0bEFkZEFjZQkJCQlbTlRETExdCisgKi8KK0RXT1JEIC8qIE5UU1RBVFVTICovCitSdGxBZGRBY2UoTFBBQ0wgYWNsLERXT1JEIHJldixEV09SRCB4bnJvZmFjZXMsTFBBQ0VfSEVBREVSIGFjZXN0YXJ0LERXT1JEIGFjZWxlbil7CisJTFBBQ0VfSEVBREVSCWFjZSx0YXJnZXRhY2U7CisJaW50CQlucm9mYWNlczsKKworCWlmIChhY2wtPkFjbFJldmlzaW9uICE9IEFDTF9SRVZJU0lPTikKKwkJcmV0dXJuIFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKwlpZiAoIVJ0bEZpcnN0RnJlZUFjZShhY2wsJnRhcmdldGFjZSkpCisJCXJldHVybiBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisJbnJvZmFjZXM9MDthY2U9YWNlc3RhcnQ7CisJd2hpbGUgKCgoRFdPUkQpYWNlLShEV09SRClhY2VzdGFydCk8YWNlbGVuKSB7CisJCW5yb2ZhY2VzKys7CisJCWFjZSA9IChMUEFDRV9IRUFERVIpKCgoQllURSopYWNlKSthY2UtPkFjZVNpemUpOworCX0KKwlpZiAoKERXT1JEKXRhcmdldGFjZSthY2VsZW4+KERXT1JEKWFjbCthY2wtPkFjbFNpemUpIC8qIHRvbyBtdWNoIGFjZXMgKi8KKwkJcmV0dXJuIFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKwltZW1jcHkoKExQQllURSl0YXJnZXRhY2UsYWNlc3RhcnQsYWNlbGVuKTsKKwlhY2wtPkFjZUNvdW50Kz1ucm9mYWNlczsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgUnRsQ3JlYXRlU2VjdXJpdHlEZXNjcmlwdG9yCQlbTlRETExdCisgKi8KK0RXT1JEIC8qIE5UU1RBVFVTICovCitSdGxDcmVhdGVTZWN1cml0eURlc2NyaXB0b3IoTFBTRUNVUklUWV9ERVNDUklQVE9SIGxwc2QsRFdPUkQgcmV2KSB7CisJaWYgKHJldiE9U0VDVVJJVFlfREVTQ1JJUFRPUl9SRVZJU0lPTikKKwkJcmV0dXJuIFNUQVRVU19VTktOT1dOX1JFVklTSU9OOworCW1lbXNldChscHNkLCdcMCcsc2l6ZW9mKCpscHNkKSk7CisJbHBzZC0+UmV2aXNpb24gPSBTRUNVUklUWV9ERVNDUklQVE9SX1JFVklTSU9OOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICBSdGxTZXREYWNsU2VjdXJpdHlEZXNjcmlwdG9yCQlbTlRETExdCisgKi8KK0RXT1JEIC8qIE5UU1RBVFVTICovCitSdGxTZXREYWNsU2VjdXJpdHlEZXNjcmlwdG9yICgKK0xQU0VDVVJJVFlfREVTQ1JJUFRPUiBscHNkLEJPT0wzMiBkYWNscHJlc2VudCxMUEFDTCBkYWNsLEJPT0wzMiBkYWNsZGVmYXVsdGVkCispIHsKKwlpZiAobHBzZC0+UmV2aXNpb24hPVNFQ1VSSVRZX0RFU0NSSVBUT1JfUkVWSVNJT04pCisJCXJldHVybiBTVEFUVVNfVU5LTk9XTl9SRVZJU0lPTjsKKwlpZiAobHBzZC0+Q29udHJvbCAmIFNFX1NFTEZfUkVMQVRJVkUpCisJCXJldHVybiBTVEFUVVNfSU5WQUxJRF9TRUNVUklUWV9ERVNDUjsKKwlpZiAoIWRhY2xwcmVzZW50KSB7CisJCWxwc2QtPkNvbnRyb2wgJj0gflNFX0RBQ0xfUFJFU0VOVDsKKwkJcmV0dXJuIDA7CisJfQorCWxwc2QtPkNvbnRyb2wgfD0gU0VfREFDTF9QUkVTRU5UOworCWxwc2QtPkRhY2wgPSBkYWNsOworCWlmIChkYWNsZGVmYXVsdGVkKQorCQlscHNkLT5Db250cm9sIHw9IFNFX0RBQ0xfREVGQVVMVEVEOworCWVsc2UKKwkJbHBzZC0+Q29udHJvbCAmPSB+U0VfREFDTF9ERUZBVUxURUQ7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgIFJ0bFNldFNhY2xTZWN1cml0eURlc2NyaXB0b3IJCVtOVERMTF0KKyAqLworRFdPUkQgLyogTlRTVEFUVVMgKi8KK1J0bFNldFNhY2xTZWN1cml0eURlc2NyaXB0b3IgKAorTFBTRUNVUklUWV9ERVNDUklQVE9SIGxwc2QsQk9PTDMyIHNhY2xwcmVzZW50LExQQUNMIHNhY2wsQk9PTDMyIHNhY2xkZWZhdWx0ZWQKKykgeworCWlmIChscHNkLT5SZXZpc2lvbiE9U0VDVVJJVFlfREVTQ1JJUFRPUl9SRVZJU0lPTikKKwkJcmV0dXJuIFNUQVRVU19VTktOT1dOX1JFVklTSU9OOworCWlmIChscHNkLT5Db250cm9sICYgU0VfU0VMRl9SRUxBVElWRSkKKwkJcmV0dXJuIFNUQVRVU19JTlZBTElEX1NFQ1VSSVRZX0RFU0NSOworCWlmICghc2FjbHByZXNlbnQpIHsKKwkJbHBzZC0+Q29udHJvbCAmPSB+U0VfU0FDTF9QUkVTRU5UOworCQlyZXR1cm4gMDsKKwl9CisJbHBzZC0+Q29udHJvbCB8PSBTRV9TQUNMX1BSRVNFTlQ7CisJbHBzZC0+U2FjbCA9IHNhY2w7CisJaWYgKHNhY2xkZWZhdWx0ZWQpCisJCWxwc2QtPkNvbnRyb2wgfD0gU0VfU0FDTF9ERUZBVUxURUQ7CisJZWxzZQorCQlscHNkLT5Db250cm9sICY9IH5TRV9TQUNMX0RFRkFVTFRFRDsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgUnRsU2V0T3duZXJTZWN1cml0eURlc2NyaXB0b3IJCVtOVERMTF0KKyAqLworRFdPUkQgLyogTlRTVEFUVVMgKi8KK1J0bFNldE93bmVyU2VjdXJpdHlEZXNjcmlwdG9yIChMUFNFQ1VSSVRZX0RFU0NSSVBUT1IgbHBzZCxMUFNJRCBvd25lcixCT09MMzIgb3duZXJkZWZhdWx0ZWQpIHsKKwlpZiAobHBzZC0+UmV2aXNpb24hPVNFQ1VSSVRZX0RFU0NSSVBUT1JfUkVWSVNJT04pCisJCXJldHVybiBTVEFUVVNfVU5LTk9XTl9SRVZJU0lPTjsKKwlpZiAobHBzZC0+Q29udHJvbCAmIFNFX1NFTEZfUkVMQVRJVkUpCisJCXJldHVybiBTVEFUVVNfSU5WQUxJRF9TRUNVUklUWV9ERVNDUjsKKworCWxwc2QtPk93bmVyID0gb3duZXI7CisJaWYgKG93bmVyZGVmYXVsdGVkKQorCQlscHNkLT5Db250cm9sIHw9IFNFX09XTkVSX0RFRkFVTFRFRDsKKwllbHNlCisJCWxwc2QtPkNvbnRyb2wgJj0gflNFX09XTkVSX0RFRkFVTFRFRDsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgUnRsU2V0T3duZXJTZWN1cml0eURlc2NyaXB0b3IJCVtOVERMTF0KKyAqLworRFdPUkQgLyogTlRTVEFUVVMgKi8KK1J0bFNldEdyb3VwU2VjdXJpdHlEZXNjcmlwdG9yIChMUFNFQ1VSSVRZX0RFU0NSSVBUT1IgbHBzZCxMUFNJRCBncm91cCxCT09MMzIgZ3JvdXBkZWZhdWx0ZWQpIHsKKwlpZiAobHBzZC0+UmV2aXNpb24hPVNFQ1VSSVRZX0RFU0NSSVBUT1JfUkVWSVNJT04pCisJCXJldHVybiBTVEFUVVNfVU5LTk9XTl9SRVZJU0lPTjsKKwlpZiAobHBzZC0+Q29udHJvbCAmIFNFX1NFTEZfUkVMQVRJVkUpCisJCXJldHVybiBTVEFUVVNfSU5WQUxJRF9TRUNVUklUWV9ERVNDUjsKKworCWxwc2QtPkdyb3VwID0gZ3JvdXA7CisJaWYgKGdyb3VwZGVmYXVsdGVkKQorCQlscHNkLT5Db250cm9sIHw9IFNFX0dST1VQX0RFRkFVTFRFRDsKKwllbHNlCisJCWxwc2QtPkNvbnRyb2wgJj0gflNFX0dST1VQX0RFRkFVTFRFRDsKKwlyZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICBSdGxOb3JtYWxpemVQcm9jZXNzUGFyYW1zCQlbTlRETExdCiAgKi8KIExQVk9JRApAQCAtMTIyLDYgKzI5NCwyNSBAQAogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIH0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgIFJ0bE11bHRpQnl0ZVRvVW5pY29kZU4JCVtOVERMTF0KKyAqIEZJWE1FOiBtdWx0aWJ5dGUgc3VwcG9ydAorICovCitEV09SRCAvKiBOVFNUQVRVUyAqLworUnRsTXVsdGlCeXRlVG9Vbmljb2RlTihMUFdTVFIgdW5pc3RyLERXT1JEIHVuaWxlbixMUERXT1JEIHJlc2xlbixMUFNUUiBvZW1zdHIsRFdPUkQgb2VtbGVuKSB7CisJRFdPUkQJbGVuOworCUxQV1NUUgl4OworCisJbGVuID0gb2VtbGVuOworCWlmICh1bmlsZW4vMiA8IGxlbikKKwkJbGVuID0gdW5pbGVuLzI7CisJeD0oTFBXU1RSKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLEhFQVBfWkVST19NRU1PUlksKGxlbisxKSpzaXplb2YoV0NIQVIpKTsKKwlsc3RyY3B5bkF0b1coeCxvZW1zdHIsbGVuKzEpOworCW1lbWNweSh1bmlzdHIseCxsZW4qMik7CisJaWYgKHJlc2xlbikgKnJlc2xlbiA9IGxlbioyOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICBSdGxPZW1Ub1VuaWNvZGVOCQkJW05URExMXQogICovCiBEV09SRCAvKiBOVFNUQVRVUyAqLwpAQCAtMjcwLDMgKzQ2MSwzNCBAQAogUnRseEFuc2lTdHJpbmdUb1VuaWNvZGVTaXplKExQQU5TSV9TVFJJTkcgc3RyKSB7CiAJcmV0dXJuIHN0ci0+TGVuZ3RoKjIrMjsKIH0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgUnRsRG9zUGF0aE5hbWVUb050UGF0aE5hbWVfVQkJW05URExMXQorICoKKyAqIEZJWE1FOiBjb252ZXJ0IHRvIFVOQyBvciB3aGF0ZXZlciBpcyBleHBlY3RlZCBoZXJlCisgKi8KK0JPT0wzMiAKK1J0bERvc1BhdGhOYW1lVG9OdFBhdGhOYW1lX1UoCisJTFBXU1RSIGZyb20sTFBVTklDT0RFX1NUUklORyB1cyxEV09SRCB4MixEV09SRCB4MworKSB7CisJTFBTVFIJZnJvbUEgPSBIRUFQX3N0cmR1cFd0b0EoR2V0UHJvY2Vzc0hlYXAoKSwwLGZyb20pOworCisJZnByaW50ZihzdGRlcnIsIlJ0bERvc1BhdGhOYW1lVG9OdFBhdGhOYW1lX1UoJXMsJXAsJTA4bHgsJTA4bHgpXG4iLAorCQlmcm9tQSx1cyx4Mix4MworCSk7CisJaWYgKHVzKQorCQlSdGxJbml0VW5pY29kZVN0cmluZyh1cyxIRUFQX3N0cmR1cFcoR2V0UHJvY2Vzc0hlYXAoKSwwLGZyb20pKTsKKwlyZXR1cm4gVFJVRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgTnRPcGVuRmlsZQkJCQlbTlRETExdCisgKi8KK0RXT1JECitOdE9wZW5GaWxlKERXT1JEIHgxLERXT1JEIGZsYWdzLERXT1JEIHgzLERXT1JEIHg0LERXT1JEIGFsaWdubWVudCxEV09SRCB4NikgeworCWZwcmludGYoc3RkZXJyLCJOdE9wZW5GaWxlKCUwOGx4LCUwOGx4LCUwOGx4LCUwOGx4LCUwOGx4LCUwOGx4KVxuIiwKKwkJeDEsZmxhZ3MseDMseDQsYWxpZ25tZW50LHg2CisJKTsKKwkvKiByZXR1cm5zIGZpbGUgaW8gY29tcGxldGlvbiBzdGF0dXMgKi8KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL21pc2Mvb2xlMm5scy5jIGIvbWlzYy9vbGUybmxzLmMKaW5kZXggNjFhMWIxZi4uNmNiM2IxZCAxMDA2NDQKLS0tIGEvbWlzYy9vbGUybmxzLmMKKysrIGIvbWlzYy9vbGUybmxzLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogICAgIGNhc2UgTEFOR19FczogcmV0dXJuIDB4MGE7ICAgICAgICAgLyogU3BhbmlzaCAqLwogICAgIGNhc2UgTEFOR19GaTogcmV0dXJuIDB4MGI7ICAgICAgICAgLyogRmlubmlzaCAqLwogICAgIGNhc2UgTEFOR19GcjogcmV0dXJuIDB4MGM7ICAgICAgICAgLyogRnJlbmNoICovCi0gLyogY2FzZSBMQU5HX0h1OiByZXR1cm4gMHgwZTsgKi8gICAgICAvKiBIdW5nYXJpYW4gKi8KKyAgICBjYXNlIExBTkdfSHU6IHJldHVybiAweDBlOyAgICAgICAgIC8qIEh1bmdhcmlhbiAqLwogIC8qIGNhc2UgTEFOR19JYzogcmV0dXJuIDB4MGY7ICovICAgICAgLyogSWNlbGFuZGljICovCiAgICAgY2FzZSBMQU5HX0l0OiByZXR1cm4gMHgxMDsgICAgICAgICAvKiBJdGFsaWFuICovCiAgLyogY2FzZSBMQU5HX0pwOiByZXR1cm4gMHgxMTsgKi8gICAgICAvKiBKYXBhbmVzZSAqLwpAQCAtMTI2MSw2ICsxMjYxLDEzMSBAQAogICAgICAgICB9CiAgICAgYnJlYWs7ICAvKiBMQU5HKEtvKSAqLwogCisgICAgY2FzZSBMQU5HX0h1OgorICAgIAlzd2l0Y2ggKExDVHlwZSkgeworTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIjkiKQorTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIk1hZ3lhciIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiSHVuZ2FyaWFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJodW4iKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIk1hZ3lhciIpCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIzNiIpCitMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJNYWd5YXJvcnN64WciKQorTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiSHVuZ2FyeSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiSHUiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIk1hZ3lhcm9yc3rhZyIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjkiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjM2IikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwiODUyIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UsIjg1MiIpCitMT0NWQUwoTE9DQUxFX1NMSVNULCI7IikKK0xPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIjAiKQorTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLiIpCitMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiLCIpCisvKgorTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpCisqLworTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKK0xPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKKy8qCitMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpCitJcyB0aGlzICIwMTIzNDU2Nzg5IiA/PworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKQorKi8KK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJGdCIpCisvKgorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkKK0xPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVApCitMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkKK0xPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKQorKi8KK0xPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjAiKQorLyoKK0xPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKQorKi8KK0xPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikKK0xPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKQorTE9DVkFMKExPQ0FMRV9TREFURSwiLyIpCitMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikKK0xPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwieXl5eS5NTS5kZCIpCitMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCB5eXl5LiBNTU1NIGQiKQorLyoKK0xPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpCisqLworTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCisvKgorTE9DVkFMKExPQ0FMRV9JTERBVEUpCisqLworTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKgorTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKQorTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkKKyovCitMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyoKK0xPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKQorTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pCitMT0NWQUwoTE9DQUxFX1MxMTU5KQorTE9DVkFMKExPQ0FMRV9TMjM1OSkKK0xPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkKK0xPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpCitMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykKK0xPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikKKyovCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiSOl0ZvUiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIktlZGQiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIlN6ZXJkYSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiQ3P8dPZydPZrIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJQ6W50ZWsiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIlN6b21iYXQiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIlZhc+FybmFwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJI6SIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiS2UiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIlNlIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJDcyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiUOkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIlNvIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJWYSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJKYW514XIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmVicnXhciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJN4XJjaXVzIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIsFwcmlsaXMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiTeFqdXMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiSvpuaXVzIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIkr6bGl1cyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJBdWd1c3p0dXMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiU3plcHRlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiT2t082JlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiTm92ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkRlY2VtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiSmFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIkZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJN4XIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiwXByIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIk3haiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJK+m4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiSvpsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIkF1ZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJTemUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIk9rdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiTm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJEZWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisvKgorTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOKQorTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOKQorTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04pCitMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTikKK0xPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTKQorTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkKK0xPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTKQorTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkKKyovCisJZGVmYXVsdDogZm91bmQ9MDticmVhazsKKwl9CisgICAgYnJlYWs7ICAvKiBMQU5HKEVuKSAqLworCisKIC8qSW5zZXJ0IG90aGVyIGxhbmd1YWdlcyBoZXJlKi8KIAogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9taXNjL3JlZ2lzdHJ5LmMgYi9taXNjL3JlZ2lzdHJ5LmMKaW5kZXggMjIyZDk5NC4uNjY4ZWJmOCAxMDA2NDQKLS0tIGEvbWlzYy9yZWdpc3RyeS5jCisrKyBiL21pc2MvcmVnaXN0cnkuYwpAQCAtMzAxNyw3ICszMDE3LDcgQEAKIH0KIC8qIFJlZ0Nvbm5lY3RSZWdpc3RyeUEJCVtBRFZBUEkzMi4xMjddICovCiBEV09SRCBSZWdDb25uZWN0UmVnaXN0cnkzMkEoTFBDU1RSIG1hY2hpbmUsSEtFWSBoa2V5LExQSEtFWSByZXNrZXkpIHsKLQlmcHJpbnRmKHN0ZGVyciwiUmVnQ29ubmVjdFJlZ2lzdHJ5MzJBKCVzLCUwOGx4LCVwKSwgU1RVQi5cbiIsCisJZnByaW50ZihzdGRlcnIsIlJlZ0Nvbm5lY3RSZWdpc3RyeTMyQSglcywlMDh4LCVwKSwgU1RVQi5cbiIsCiAJCW1hY2hpbmUsaGtleSxyZXNrZXkKIAkpOwogCXJldHVybiBFUlJPUl9GSUxFX05PVF9GT1VORDsgLyogRklYTUUgKi8KZGlmZiAtLWdpdCBhL21pc2Mvc2hlbGwuYyBiL21pc2Mvc2hlbGwuYwppbmRleCBhZDQ5MmMwLi43YTFiY2U5IDEwMDY0NAotLS0gYS9taXNjL3NoZWxsLmMKKysrIGIvbWlzYy9zaGVsbC5jCkBAIC01Myw3ICs1Myw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJRHJhZ0FjY2VwdEZpbGVzCQlbU0hFTEwuOV0KICAqLwotdm9pZCBEcmFnQWNjZXB0RmlsZXMoSFdORCBoV25kLCBCT09MIGIpCit2b2lkIERyYWdBY2NlcHRGaWxlcyhIV05EMTYgaFduZCwgQk9PTCBiKQogewogICAgIFdORCogd25kID0gV0lOX0ZpbmRXbmRQdHIoaFduZCk7CiAKQEAgLTI4Myw3ICsyODMsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCVNoZWxsRXhlY3V0ZQkJW1NIRUxMLjIwXQogICovCi1ISU5TVEFOQ0UxNiBTaGVsbEV4ZWN1dGUoSFdORCBoV25kLCBMUENTVFIgbHBPcGVyYXRpb24sIExQQ1NUUiBscEZpbGUsCitISU5TVEFOQ0UxNiBTaGVsbEV4ZWN1dGUoSFdORDE2IGhXbmQsIExQQ1NUUiBscE9wZXJhdGlvbiwgTFBDU1RSIGxwRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBMUFNUUiBscFBhcmFtZXRlcnMsIExQQ1NUUiBscERpcmVjdG9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgaVNob3dDbWQpCiB7CkBAIC0zNzQsMTEgKzM3NCwxMSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiAxOwotICAgIAorCiAgICAgY2FzZSBXTV9DT01NQU5EOgogICAgICAgICBpZiAod1BhcmFtID09IElET0spCiAgICAgICAgIHsKLSAgICAgICAgICAgIEVuZERpYWxvZyhoV25kLCBUUlVFKTsKKyAgICAgICAgICAgIEVuZERpYWxvZzMyKGhXbmQsIFRSVUUpOwogICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9taXNjL3NvdW5kLmMgYi9taXNjL3NvdW5kLmMKaW5kZXggOWI3MjQxNi4uN2MwNmFlYSAxMDA2NDQKLS0tIGEvbWlzYy9zb3VuZC5jCisrKyBiL21pc2Mvc291bmQuYwpAQCAtNywxMTAgKzcsMTgxIEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAKLWludCBPcGVuU291bmQodm9pZCkKK0lOVDE2IE9wZW5Tb3VuZDE2KHZvaWQpCiB7Ci0gIHByaW50ZigiT3BlblNvdW5kKClcbiIpOworICBwcmludGYoIk9wZW5Tb3VuZDE2KClcbiIpOwogICByZXR1cm4gLTE7CiB9CiAKK3ZvaWQgT3BlblNvdW5kMzIodm9pZCkKK3sKKyAgcHJpbnRmKCJPcGVuU291bmQzMigpXG4iKTsKK30KKwogdm9pZCBDbG9zZVNvdW5kKHZvaWQpCiB7CiAgIHByaW50ZigiQ2xvc2VTb3VuZCgpXG4iKTsKIH0KIAotaW50IFNldFZvaWNlUXVldWVTaXplKGludCBuVm9pY2UsIGludCBuQnl0ZXMpCitJTlQxNiBTZXRWb2ljZVF1ZXVlU2l6ZTE2KElOVDE2IG5Wb2ljZSwgSU5UMTYgbkJ5dGVzKQogewotICBwcmludGYoIlNldFZvaWNlUXVldWVTaXplICglZCwlZClcbiIsblZvaWNlLG5CeXRlcyk7CisgIHByaW50ZigiU2V0Vm9pY2VRdWV1ZVNpemUxNiAoJWQsJWQpXG4iLG5Wb2ljZSxuQnl0ZXMpOwogICByZXR1cm4gMDsKIH0KIAotaW50IFNldFZvaWNlTm90ZShpbnQgblZvaWNlLCBpbnQgblZhbHVlLCBpbnQgbkxlbmd0aCwgaW50IG5DZG90cykKK0RXT1JEIFNldFZvaWNlUXVldWVTaXplMzIoRFdPUkQgblZvaWNlLCBEV09SRCBuQnl0ZXMpCiB7Ci0gIHByaW50ZigiU2V0Vm9pY2VOb3RlICglZCwlZCwlZCwlZClcbiIsblZvaWNlLG5WYWx1ZSxuTGVuZ3RoLG5DZG90cyk7CisgIHByaW50ZigiU2V0Vm9pY2VRdWV1ZVNpemUzMiAoJWxkLCVsZClcbiIsblZvaWNlLG5CeXRlcyk7CiAgIHJldHVybiAwOwogfQogCi1pbnQgU2V0Vm9pY2VBY2NlbnQoaW50IG5Wb2ljZSwgaW50IG5UZW1wbywgaW50IG5Wb2x1bWUsIGludCBuTW9kZSwgaW50IG5QaXRjaCkKK0lOVDE2IFNldFZvaWNlTm90ZTE2KElOVDE2IG5Wb2ljZSwgSU5UMTYgblZhbHVlLCBJTlQxNiBuTGVuZ3RoLCBJTlQxNiBuQ2RvdHMpCiB7Ci0gIHByaW50ZigiU2V0Vm9pY2VBY2NlbnQoJWQsJWQsJWQsJWQsJWQpXG4iLCBuVm9pY2UsIG5UZW1wbywgCisgIHByaW50ZigiU2V0Vm9pY2VOb3RlMTYgKCVkLCVkLCVkLCVkKVxuIixuVm9pY2UsblZhbHVlLG5MZW5ndGgsbkNkb3RzKTsKKyAgcmV0dXJuIDA7Cit9CisKK0RXT1JEIFNldFZvaWNlTm90ZTMyKERXT1JEIG5Wb2ljZSwgRFdPUkQgblZhbHVlLCBEV09SRCBuTGVuZ3RoLCBEV09SRCBuQ2RvdHMpCit7CisgIHByaW50ZigiU2V0Vm9pY2VOb3RlMzIgKCVsZCwlbGQsJWxkLCVsZClcbiIsblZvaWNlLG5WYWx1ZSxuTGVuZ3RoLG5DZG90cyk7CisgIHJldHVybiAwOworfQorCitJTlQxNiBTZXRWb2ljZUFjY2VudDE2KElOVDE2IG5Wb2ljZSwgSU5UMTYgblRlbXBvLCBJTlQxNiBuVm9sdW1lLAorICAgICAgICAgICAgICAgICAgICAgICBJTlQxNiBuTW9kZSwgSU5UMTYgblBpdGNoKQoreworICBwcmludGYoIlNldFZvaWNlQWNjZW50MTYoJWQsJWQsJWQsJWQsJWQpXG4iLCBuVm9pY2UsIG5UZW1wbywgCiAJIG5Wb2x1bWUsIG5Nb2RlLCBuUGl0Y2gpOwogICByZXR1cm4gMDsKIH0KIAotaW50IFNldFZvaWNlRW52ZWxvcGUoaW50IG5Wb2ljZSwgaW50IG5TaGFwZSwgaW50IG5SZXBlYXQpCitEV09SRCBTZXRWb2ljZUFjY2VudDMyKERXT1JEIG5Wb2ljZSwgRFdPUkQgblRlbXBvLCBEV09SRCBuVm9sdW1lLAorICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBuTW9kZSwgRFdPUkQgblBpdGNoKQogewotICBwcmludGYoIlNldFZvaWNlRW52ZWxvcGUoJWQsJWQsJWQpXG4iLG5Wb2ljZSxuU2hhcGUsblJlcGVhdCk7CisgIHByaW50ZigiU2V0Vm9pY2VBY2NlbnQzMiglbGQsJWxkLCVsZCwlbGQsJWxkKVxuIiwgblZvaWNlLCBuVGVtcG8sIAorCSBuVm9sdW1lLCBuTW9kZSwgblBpdGNoKTsKICAgcmV0dXJuIDA7CiB9CiAKLWludCBTZXRTb3VuZE5vaXNlKGludCBuU291cmNlLCBpbnQgbkR1cmF0aW9uKQorSU5UMTYgU2V0Vm9pY2VFbnZlbG9wZTE2KElOVDE2IG5Wb2ljZSwgSU5UMTYgblNoYXBlLCBJTlQxNiBuUmVwZWF0KQogewotICBwcmludGYoIlNldFNvdW5kTm9pc2UoJWQsJWQpXG4iLG5Tb3VyY2UsbkR1cmF0aW9uKTsKKyAgcHJpbnRmKCJTZXRWb2ljZUVudmVsb3BlMTYoJWQsJWQsJWQpXG4iLG5Wb2ljZSxuU2hhcGUsblJlcGVhdCk7CiAgIHJldHVybiAwOwogfQogCi1pbnQgU2V0Vm9pY2VTb3VuZChpbnQgblZvaWNlLCBsb25nIGxGcmVxdWVuY3ksIGludCBuRHVyYXRpb24pCitEV09SRCBTZXRWb2ljZUVudmVsb3BlMzIoRFdPUkQgblZvaWNlLCBEV09SRCBuU2hhcGUsIERXT1JEIG5SZXBlYXQpCiB7Ci0gIHByaW50ZigiU2V0Vm9pY2VTb3VuZCglZCwgJWxkLCAlZClcbiIsblZvaWNlLGxGcmVxdWVuY3ksIG5EdXJhdGlvbik7CisgIHByaW50ZigiU2V0Vm9pY2VFbnZlbG9wZTMyKCVsZCwlbGQsJWxkKVxuIixuVm9pY2UsblNoYXBlLG5SZXBlYXQpOwogICByZXR1cm4gMDsKIH0KIAotaW50IFN0YXJ0U291bmQodm9pZCkKK0lOVDE2IFNldFNvdW5kTm9pc2UxNihJTlQxNiBuU291cmNlLCBJTlQxNiBuRHVyYXRpb24pCit7CisgIHByaW50ZigiU2V0U291bmROb2lzZTE2KCVkLCVkKVxuIixuU291cmNlLG5EdXJhdGlvbik7CisgIHJldHVybiAwOworfQorCitEV09SRCBTZXRTb3VuZE5vaXNlMzIoRFdPUkQgblNvdXJjZSwgRFdPUkQgbkR1cmF0aW9uKQoreworICBwcmludGYoIlNldFNvdW5kTm9pc2UzMiglbGQsJWxkKVxuIixuU291cmNlLG5EdXJhdGlvbik7CisgIHJldHVybiAwOworfQorCitJTlQxNiBTZXRWb2ljZVNvdW5kMTYoSU5UMTYgblZvaWNlLCBEV09SRCBsRnJlcXVlbmN5LCBJTlQxNiBuRHVyYXRpb24pCit7CisgIHByaW50ZigiU2V0Vm9pY2VTb3VuZDE2KCVkLCAlbGQsICVkKVxuIixuVm9pY2UsbEZyZXF1ZW5jeSwgbkR1cmF0aW9uKTsKKyAgcmV0dXJuIDA7Cit9CisKK0RXT1JEIFNldFZvaWNlU291bmQzMihEV09SRCBuVm9pY2UsIERXT1JEIGxGcmVxdWVuY3ksIERXT1JEIG5EdXJhdGlvbikKK3sKKyAgcHJpbnRmKCJTZXRWb2ljZVNvdW5kMzIoJWxkLCAlbGQsICVsZClcbiIsblZvaWNlLGxGcmVxdWVuY3ksIG5EdXJhdGlvbik7CisgIHJldHVybiAwOworfQorCitJTlQxNiBTdGFydFNvdW5kMTYodm9pZCkKIHsKICAgcmV0dXJuIDA7CiB9CiAKLWludCBTdG9wU291bmQodm9pZCkKK0lOVDE2IFN0b3BTb3VuZDE2KHZvaWQpCiB7CiAgIHJldHVybiAwOwogfQogCi1pbnQgV2FpdFNvdW5kU3RhdGUoaW50IHgpCitJTlQxNiBXYWl0U291bmRTdGF0ZTE2KElOVDE2IHgpCiB7Ci0JZnByaW50ZihzdGRlcnIsICJXYWl0U291bmRTdGF0ZSglZClcbiIsIHgpOworICAgIGZwcmludGYoc3RkZXJyLCAiV2FpdFNvdW5kU3RhdGUxNiglZClcbiIsIHgpOworICAgIHJldHVybiAwOworfQorCitEV09SRCBXYWl0U291bmRTdGF0ZTMyKERXT1JEIHgpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJXYWl0U291bmRTdGF0ZTMyKCVsZClcbiIsIHgpOworICAgIHJldHVybiAwOworfQorCitJTlQxNiBTeW5jQWxsVm9pY2VzMTYodm9pZCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlN5bmNBbGxWb2ljZXMxNigpXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKworRFdPUkQgU3luY0FsbFZvaWNlczMyKHZvaWQpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJTeW5jQWxsVm9pY2VzMzIoKVxuIik7CisgICAgcmV0dXJuIDA7Cit9CisKK0lOVDE2IENvdW50Vm9pY2VOb3RlczE2KElOVDE2IHgpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJDb3VudFZvaWNlTm90ZXMxNiglZClcbiIsIHgpOworICAgIHJldHVybiAwOworfQorCitEV09SRCBDb3VudFZvaWNlTm90ZXMzMihEV09SRCB4KQoreworICAgIGZwcmludGYoc3RkZXJyLCAiQ291bnRWb2ljZU5vdGVzMzIoJWxkKVxuIiwgeCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0xQSU5UMTYgR2V0VGhyZXNob2xkRXZlbnQxNih2b2lkKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiR2V0VGhyZXNob2xkRXZlbnQxNigpXG4iKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworTFBEV09SRCBHZXRUaHJlc2hvbGRFdmVudDMyKHZvaWQpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJHZXRUaHJlc2hvbGRFdmVudDMyKClcbiIpOworICAgIHJldHVybiBOVUxMOworfQorCitJTlQxNiBHZXRUaHJlc2hvbGRTdGF0dXMxNih2b2lkKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiR2V0VGhyZXNob2xkU3RhdHVzMTYoKVxuIik7CisgICAgcmV0dXJuIDA7Cit9CisKK0RXT1JEIEdldFRocmVzaG9sZFN0YXR1czMyKHZvaWQpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJHZXRUaHJlc2hvbGRTdGF0dXMzMigpXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKworSU5UMTYgU2V0Vm9pY2VUaHJlc2hvbGQxNihJTlQxNiBhLCBJTlQxNiBiKQoreworCWZwcmludGYoc3RkZXJyLCAiU2V0Vm9pY2VUaHJlc2hvbGQxNiglZCwlZClcbiIsIGEsIGIpOwogICAgICAgICByZXR1cm4gMDsKIH0KIAotaW50IFN5bmNBbGxWb2ljZXModm9pZCkKK0RXT1JEIFNldFZvaWNlVGhyZXNob2xkMzIoRFdPUkQgYSwgRFdPUkQgYikKIHsKLQlmcHJpbnRmKHN0ZGVyciwgIlN5bmNBbGxWb2ljZXMoKVxuIik7Ci0gICAgICAgIHJldHVybiAwOwotfQotCi1JTlQgQ291bnRWb2ljZU5vdGVzKElOVCB4KQotewotCWZwcmludGYoc3RkZXJyLCAiQ291bnRWb2ljZU5vdGVzKCVkKVxuIiwgeCk7Ci0gICAgICAgIHJldHVybiAwOwotfQotCi1MUElOVDE2IEdldFRocmVzaG9sZEV2ZW50KHZvaWQpCi17Ci0JZnByaW50ZihzdGRlcnIsICJHZXRUaHJlc2hvbGRFdmVudCgpXG4iKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci19Ci0KLWludCBHZXRUaHJlc2hvbGRTdGF0dXModm9pZCkKLXsKLQlmcHJpbnRmKHN0ZGVyciwgIkdldFRocmVzaG9sZFN0YXR1cygpXG4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLWludCBTZXRWb2ljZVRocmVzaG9sZChpbnQgYSwgaW50IGIpCi17Ci0JZnByaW50ZihzdGRlcnIsICJTZXRWb2ljZVRocmVzaG9sZCglZCwlZClcbiIsIGEsIGIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlNldFZvaWNlVGhyZXNob2xkMzIoJWxkLCVsZClcbiIsIGEsIGIpOworICAgIHJldHVybiAwOwogfQogCiB2b2lkIERvQmVlcCh2b2lkKQogewogCWZwcmludGYoc3RkZXJyLCAiQkVFUCFcbiIpOwogfQotCi0vKgotMTEgICBwYXNjYWwgIFdBSVRTT1VORFNUQVRFKHdvcmQpIFdhaXRTb3VuZFN0YXRlKDEpCi0xMiAgIHBhc2NhbCAgU1lOQ0FMTFZPSUNFUygpIFN5bmNBbGxWb2ljZXMoKQotMTMgICBwYXNjYWwgIENPVU5UVk9JQ0VOT1RFUyh3b3JkKSBDb3VudFZvaWNlTm90ZXMoMSkKLTE0ICAgcGFzY2FsICBHRVRUSFJFU0hPTERFVkVOVCgpIEdldFRocmVzaG9sZEV2ZW50KCkKLTE1ICAgcGFzY2FsICBHRVRUSFJFU0hPTERTVEFUVVMoKSBHZXRUaHJlc2hvbGRTdGF0dXMoKQotMTYgICBwYXNjYWwgIFNFVFZPSUNFVEhSRVNIT0xEKHdvcmQgd29yZCkgU2V0Vm9pY2VUaHJlc2hvbGQoMSAyKQotKi8KZGlmZiAtLWdpdCBhL21pc2Mvc3B5LmMgYi9taXNjL3NweS5jCmluZGV4IDI0OTA2YWIuLjdiMTlhMzQgMTAwNjQ0Ci0tLSBhL21pc2Mvc3B5LmMKKysrIGIvbWlzYy9zcHkuYwpAQCAtOTMsMTAgKzkzLDE2IEBACiAgICAgIldNX1dJTkRPV1BPU0NIQU5HRUQiLAkvKiAweDAwNDcgKi8KICAgICAiV01fUE9XRVIiLCBOVUxMLCAKICAgICAiV01fQ09QWURBVEEiLCAKLSAgICAiV01fQ0FOQ0VMSk9VUk5BTCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgIldNX0NBTkNFTEpPVVJOQUwiLCBOVUxMLCBOVUxMLCAKKyAgICAiV01fTk9USUZZIiwgTlVMTCwKIAotICAgIE5VTEwsIAkJICAgICAgICAvKiAweDAwNTAgKi8KLSAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAKKyAgICAvKiAweDAwNTAgKi8KKyAgICAiV01fSU5QVVRMQU5HQ0hBTkdFUkVRVUVTVCIsCisgICAgIldNX0lOUFVUTEFOR0NIQU5HRSIsIAorICAgICJXTV9UQ0FSRCIsIAorICAgICJXTV9IRUxQIiwgCisgICAgIldNX1VTRVJDSEFOR0VEIiwgCisgICAgIldNX05PVElGWUZPUk1BVCIsIE5VTEwsIE5VTEwsIAogICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCiAKICAgICAvKiAweDAwNjAgKi8KQEAgLTEwNSw5ICsxMTEsMTQgQEAKIAogICAgIC8qIDB4MDA3MCAqLwogICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCAKKyAgICAiV01fQ09OVEVYVE1FTlUiLCAKKyAgICAiV01fU1RZTEVDSEFOR0lORyIsIAorICAgICJXTV9TVFlMRUNIQU5HRUQiLCAKKyAgICAiV01fRElTUExBWUNIQU5HRSIsIAorICAgICJXTV9HRVRJQ09OIiwKIAotICAgIE5VTEwsCQkJLyogMHgwMDgwICovCisgICAgIldNX1NFVElDT04iLAkJLyogMHgwMDgwICovCiAgICAgIldNX05DQ1JFQVRFIiwJCS8qIDB4MDA4MSAqLwogICAgICJXTV9OQ0RFU1RST1kiLAkJLyogMHgwMDgyICovCiAgICAgIldNX05DQ0FMQ1NJWkUiLAkJLyogMHgwMDgzICovCkBAIC0zNzQsOCArMzg1LDExIEBACiAgICAgIldNX0VOVEVSTUVOVUxPT1AiLCAgICAgICAgIC8qIDB4MDIxMSAqLwogICAgICJXTV9FWElUTUVOVUxPT1AiLCAgICAgICAgICAvKiAweDAyMTIgKi8KICAgICAid21fbmV4dG1lbnUiLCAJCS8qIDB4MDIxMyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICAiV01fU0laSU5HIiwgCisgICAgIldNX0NBUFRVUkVDSEFOR0VEIiwKKyAgICAiV01fTU9WSU5HIiwgTlVMTCwKKyAgICAiV01fUE9XRVJCUk9BRENBU1QiLCAKKyAgICAiV01fREVWSUNFQ0hBTkdFIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKIAogICAgICJXTV9NRElDUkVBVEUiLCAgICAgICAgICAgICAvKiAweDAyMjAgKi8KICAgICAiV01fTURJREVTVFJPWSIsICAgICAgICAgICAgLyogMHgwMjIxICovCkBAIC00NjAsNyArNDc0LDkgQEAKICAgICAiV01fUEFMRVRURUlTQ0hBTkdJTkciLAogICAgICJXTV9QQUxFVFRFQ0hBTkdFRCIsCiAgICAgIldNX0hPVEtFWSIsIAkJLyogMHgwMzEyICovCi0JICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAKKwkgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIAorICAgICJXTV9QUklOVCIsIAorICAgICJXTV9QUklOVENMSUVOVCIsIAogICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIAogCiAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKZGlmZiAtLWdpdCBhL21pc2MvdXNlci5jIGIvbWlzYy91c2VyLmMKaW5kZXggN2ZkNzI4NzQuLjBkMGVjYjggMTAwNjQ0Ci0tLSBhL21pc2MvdXNlci5jCisrKyBiL21pc2MvdXNlci5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAogICAgICAgLyogQ3JlYXRlIHRhc2sgbWVzc2FnZSBxdWV1ZSAqLwogICAgIHF1ZXVlU2l6ZSA9IEdldFByb2ZpbGVJbnQzMkEoICJ3aW5kb3dzIiwgIkRlZmF1bHRRdWV1ZVNpemUiLCA4ICk7Ci0gICAgaWYgKCFTZXRNZXNzYWdlUXVldWUoIHF1ZXVlU2l6ZSApKSByZXR1cm4gMDsKKyAgICBpZiAoIVNldE1lc3NhZ2VRdWV1ZTMyKCBxdWV1ZVNpemUgKSkgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL21pc2Mvd2luc29jay5jIGIvbWlzYy93aW5zb2NrLmMKaW5kZXggNWZjNGRiNy4uYjg0Y2Y2YyAxMDA2NDQKLS0tIGEvbWlzYy93aW5zb2NrLmMKKysrIGIvbWlzYy93aW5zb2NrLmMKQEAgLTU4MSw3ICs1ODEsNyBAQAogICByZXR1cm4gU09DS0VUX0VSUk9SOwogfQogCi11X2xvbmcgIFdJTlNPQ0tfaHRvbmwodV9sb25nIGhvc3Rsb25nKSAgIHsgcmV0dXJuKCBodG9ubChob3N0bG9uZykgKTsgfSAgICAgICAgIAordV9sb25nICBXSU5TT0NLX2h0b25sKHVfbG9uZyBob3N0bG9uZykgICB7IHJldHVybiggaHRvbmwoaG9zdGxvbmcpICk7IH0KIHVfc2hvcnQgV0lOU09DS19odG9ucyh1X3Nob3J0IGhvc3RzaG9ydCkgeyByZXR1cm4oIGh0b25zKGhvc3RzaG9ydCkgKTsgfQogdV9sb25nICBXSU5TT0NLX2luZXRfYWRkcihjaGFyICpjcCkgICAgICB7IHJldHVybiggaW5ldF9hZGRyKGNwKSApOyB9CiB1X2xvbmcgIFdJTlNPQ0tfbnRvaGwodV9sb25nIG5ldGxvbmcpICAgIHsgcmV0dXJuKCBudG9obChuZXRsb25nKSApOyB9CmRpZmYgLS1naXQgYS9taXNjL3dpbnNvY2tfYXN5bmMuYyBiL21pc2Mvd2luc29ja19hc3luYy5jCmluZGV4IDY0NDMzZjQuLjVjZDAzODIgMTAwNjQ0Ci0tLSBhL21pc2Mvd2luc29ja19hc3luYy5jCisrKyBiL21pc2Mvd2luc29ja19hc3luYy5jCkBAIC0xOCw5ICsxOCw2IEBACiAjaW5jbHVkZSA8c3lzL3NvX2lvY3RsLmg+CiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjZW5kaWYKLSNpZm5kZWYgRkFTWU5DCi0jZGVmaW5lIEZBU1lOQyBGSU9BU1lOQwotI2VuZGlmCiAjaWZkZWYgX19zdnI0X18KICNpbmNsdWRlIDxzeXMvZmlsZS5oPgogI2luY2x1ZGUgPHN5cy9maWxpby5oPgpAQCAtMzIsNiArMjksMTAgQEAKICNpbmNsdWRlICJ3aW5zb2NrLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAorI2lmbmRlZiBGQVNZTkMKKyNkZWZpbmUgRkFTWU5DIEZJT0FTWU5DCisjZW5kaWYKKwogI2RlZmluZSBfX1dTX0FTWU5DX0RFQlVHCTAKIAogc3RhdGljIGludAkJX19hc3luY19pb19tYXhfZmQgPSAwOwpkaWZmIC0tZ2l0IGEvbXNkb3MvZG9zbWVtLmMgYi9tc2Rvcy9kb3NtZW0uYwppbmRleCBhYTg0NTkzLi4wN2Q3ODFmIDEwMDY0NAotLS0gYS9tc2Rvcy9kb3NtZW0uYworKysgYi9tc2Rvcy9kb3NtZW0uYwpAQCAtMTcsMTAgKzE3LDggQEAKICNpbmNsdWRlICJtb2R1bGUuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCi0KIEhBTkRMRTE2IERPU01FTV9CaW9zU2VnOyAgLyogQklPUyBkYXRhIHNlZ21lbnQgYXQgMHg0MDowICovCiAKLQogI3ByYWdtYSBwYWNrKDEpCiAKIHR5cGVkZWYgc3RydWN0CkBAIC03NiwxMDYgKzc0LDQ1IEBACiAKICNwcmFnbWEgcGFjayg0KQogCi0KIHN0YXRpYyBCSU9TREFUQSAqcEJpb3NEYXRhID0gTlVMTDsKLWNoYXIJKkRPU01FTV9kb3NtZW07Ci1zdHJ1Y3QgZG9zbWVtX2VudHJ5IHsKLQlzdHJ1Y3QJZG9zbWVtX2VudHJ5CSpuZXh0OwotCUJZVEUJCQlpc2ZyZWU7Ci19Oworc3RhdGljIGNoYXIJKkRPU01FTV9kb3NtZW07CitzdGF0aWMgY2hhcgkqRE9TTUVNX3RvcDsKIAorICAgICAgIERXT1JEIAkgRE9TTUVNX0NvbGxhdGVUYWJsZTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgRE9TTUVNX0luaXRDb2xsYXRlVGFibGUKLSAqCi0gKiBJbml0aWFsaXNlcyB0aGUgY29sbGF0ZSB0YWJsZSAoY2hhcmFjdGVyIHNvcnRpbmcsIGxhbmd1YWdlIGRlcGVuZGVuZCkKKy8qIHVzZSAyIGxvdyBiaXRzIG9mICdzaXplJyBmb3IgdGhlIGhvdXNla2VlcGluZyAqLworCisjZGVmaW5lIERNX0JMT0NLX0RFQlVHCQkweEFCRTAwMDAwCisjZGVmaW5lIERNX0JMT0NLX1RFUk1JTkFMCTB4MDAwMDAwMDEKKyNkZWZpbmUgRE1fQkxPQ0tfRlJFRQkJMHgwMDAwMDAwMgorI2RlZmluZSBETV9CTE9DS19NQVNLCQkweDAwMUZGRkZDCisKKy8qCisjZGVmaW5lIF9fRE9TTUVNX0RFQlVHX18KICAqLwotRFdPUkQgRE9TTUVNX0NvbGxhdGVUYWJsZTsKIAotc3RhdGljIHZvaWQgRE9TTUVNX0luaXRDb2xsYXRlVGFibGUoKQotewotCURXT1JECQl4OwotCXVuc2lnbmVkIGNoYXIJKnRibDsKLQlpbnQJCWk7Cit0eXBlZGVmIHN0cnVjdCB7CisgICB1bnNpZ25lZAlzaXplOworfSBkb3NtZW1fZW50cnk7CiAKLQl4PUdsb2JhbERPU0FsbG9jKDI1OCk7Ci0JRE9TTUVNX0NvbGxhdGVUYWJsZT1NQUtFTE9ORygwLCh4Pj4xNikpOwotCXRibD1ET1NNRU1fUmVhbE1vZGUyTGluZWFyKERPU01FTV9Db2xsYXRlVGFibGUpOwotCSooV09SRCopdGJsCT0gMHgxMDA7Ci0JdGJsKz0yOwotCWZvciAoaT0wO2k8MHgxMDA7aSsrKQotCQkqdGJsKys9aTsKLX0KK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgICAgICBibG9ja3M7CisgIHVuc2lnbmVkICAgICAgZnJlZTsKK30gZG9zbWVtX2luZm87CiAKK3N0YXRpYyBkb3NtZW1fZW50cnkqIAlyb290X2Jsb2NrID0gTlVMTDsKK3N0YXRpYyBkb3NtZW1faW5mbyoJaW5mb19ibG9jayA9IE5VTEw7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIERPU01FTV9Jbml0Ci0gKgotICogQ3JlYXRlIHRoZSBkb3MgbWVtb3J5IHNlZ21lbnRzLCBhbmQgc3RvcmUgdGhlbSBpbnRvIHRoZSBLRVJORUwKLSAqIGV4cG9ydGVkIHZhbHVlcy4KLSAqLwotQk9PTDMyIERPU01FTV9Jbml0KHZvaWQpCi17Ci0gICAgLyogQWxsb2NhdGUgMSBNQiBkb3NtZW1vcnkgKi8KLSAgICAvKiBZZXMsIGFsbG9jYXRpbmcgMSBNQiBvZiBtZW1vcnksIHdoaWNoIGlzIHVzdWFsbHkgbm90IGV2ZW4gdXNlZCwgaXMgYSAKLSAgICAgKiB3YXN0ZSBvZiBtZW1vcnkuIEJ1dCBJIChNTSkgZG9uJ3Qgc2VlIGFueSBlYXN5IG1ldGhvZCB0byB1c2UgCi0gICAgICogR2xvYmFsRE9Te0FsbG9jLEZyZWV9IHdpdGhpbiBhbiBhcmVhIG9mIG1lbW9yeSwgd2l0aCBwcm90ZWN0ZWQgbW9kZQotICAgICAqIHNlbGVjdG9ycyBwb2ludGluZyBpbnRvIGl0LCBhbmQgdGhlIHBvc3NpYmlsdHksIHRoYXQgdGhlIHVzZXJwcm9ncmFtCi0gICAgICogY2FsbHMgU2V0U2VsZWN0b3JCYXNlKCxwaHlzaWNhbF9hZGRyZXNzX2luX0RPU01FTSk7IHRoYXQgaW5jbHVkZXMgCi0gICAgICogZHluYW1pY2FsIGVubGFyZ2luZyAocmVhbGxvY2luZykgdGhlIGRvc21lbSBhcmVhLgotICAgICAqIFllcywgb25lIGNvdWxkIHdhbGsgdGhlIGxkdF9jb3B5IG9uIGV2ZXJ5IHJlYWxsb2MoKSBvbiBET1NNRU0sIGJ1dAotICAgICAqIHRoaXMgZmVlbHMgbW9yZSBsaWtlIGEgaGFjayB0byBtZSB0aGFuIHRoaXMgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcy4KLSAgICAgKiBJZiB5b3UgZmluZCBhbm90aGVyLCBiZXR0ZXIsIG1ldGhvZCwganVzdCBjaGFuZ2UgaXQuIC1NYXJjdXMgTWVpc3NuZXIKLSAgICAgKi8KLSAgICBET1NNRU1fZG9zbWVtID0gVmlydHVhbEFsbG9jKE5VTEwsMHgxMDAwMDAsTUVNX0NPTU1JVCxQQUdFX0VYRUNVVEVfUkVBRFdSSVRFKTsKLSAgICBpZiAoIURPU01FTV9kb3NtZW0pCi0gICAgewotICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJDb3VsZCBub3QgYWxsb2NhdGUgRE9TIG1lbW9yeS5cbiIgKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgICBET1NNRU1fQmlvc1NlZyA9IEdMT0JBTF9DcmVhdGVCbG9jayhHTUVNX0ZJWEVELERPU01FTV9kb3NtZW0rMHg0MDAsMHgxMDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgTlVMTCApOwotICAgIERPU01FTV9GaWxsQmlvc1NlZ21lbnQoKTsKLSAgICBET1NNRU1fSW5pdE1lbW9yeUhhbmRsaW5nKCk7Ci0gICAgRE9TTUVNX0luaXRDb2xsYXRlVGFibGUoKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgRE9TTUVNX0luaXRNZW1vcnlIYW5kbGluZwotICoKLSAqIEluaXRpYWxpc2VzIHRoZSBET1MgTWVtb3J5IHN0cnVjdHVyZXMuCi0gKi8KLXZvaWQKLURPU01FTV9Jbml0TWVtb3J5SGFuZGxpbmcoKQotewotICAgIHN0cnVjdAlkb3NtZW1fZW50cnkJKmRtOwotCi0gICAgZG0gPSAoc3RydWN0IGRvc21lbV9lbnRyeSopKERPU01FTV9kb3NtZW0rMHgxMDAwMCk7Ci0gICAgZG0tPmlzZnJlZQk9ICAxOwotICAgIGRtLT5uZXh0CT0gIChzdHJ1Y3QgZG9zbWVtX2VudHJ5KikoRE9TTUVNX2Rvc21lbSsweDlGRkYwKTsKLSAgICBkbQkJPSAgZG0tPm5leHQ7Ci0gICAgZG0tPmlzZnJlZQk9IDA7Ci0gICAgZG0tPm5leHQJPSBOVUxMOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBET1NNRU1fVGljawotICoKLSAqIEluY3JlbWVudCB0aGUgQklPUyB0aWNrIGNvdW50ZXIuIENhbGxlZCBieSB0aW1lciBzaWduYWwgaGFuZGxlci4KLSAqLwotdm9pZCBET1NNRU1fVGljayh2b2lkKQotewotICAgIGlmIChwQmlvc0RhdGEpIHBCaW9zRGF0YS0+VGlja3MrKzsKLX0KLQorI2RlZmluZSBORVhUX0JMT0NLKGJsb2NrKSBcCisgICAgICAgIChkb3NtZW1fZW50cnkqKSgoKGNoYXIqKShibG9jaykpICsgXAorCSBzaXplb2YoZG9zbWVtX2VudHJ5KSArICgoYmxvY2spLT5zaXplICYgRE1fQkxPQ0tfTUFTSykpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIERPU01FTV9GaWxsQmlvc1NlZ21lbnQKICAqCiAgKiBGaWxsIHRoZSBCSU9TIGRhdGEgc2VnbWVudCB3aXRoIGR1bW15IHZhbHVlcy4KICAqLwotdm9pZCBET1NNRU1fRmlsbEJpb3NTZWdtZW50KHZvaWQpCitzdGF0aWMgdm9pZCBET1NNRU1fRmlsbEJpb3NTZWdtZW50KHZvaWQpCiB7CiAgICAgcEJpb3NEYXRhID0gKEJJT1NEQVRBICopR2xvYmFsTG9jazE2KCBET1NNRU1fQmlvc1NlZyApOwogCkBAIC0yMDQsMTA0ICsxNDEsMjU0IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEdsb2JhbERPU0FsbG9jCShLRVJORUwuMTg0KQorICogICAgICAgICAgIERPU01FTV9Jbml0Q29sbGF0ZVRhYmxlCiAgKgotICogQWxsb2NhdGVzIGEgcGllY2Ugb2YgRE9TIE1lbW9yeSwgaW4gdGhlIGZpcnN0IDEgTUIgcGh5c2ljYWwgbWVtb3J5LgotICogCi0gKiBvcGVyYXRlcyBvbiB0aGUgcHJlYWxsb2NhdGVkIERPU01FTV9kb3NtZW0gKDFNQikuIFRoZSB1c2VhYmxlIGFyZWEKLSAqIHN0YXJ0cyBhdCAxMDAwOjAwMDAgYW5kIGVuZHMgYXQgOUZGRjpGRkVGCi0gKiBNZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBpcyBGaXJzdCBGaXQuIChGSVhNRTogWWVzLEkga25vdyB0aGF0IEZpcnN0IEZpdAotICogaXMgYSByYXRoZXIgYmFkIHN0cmF0ZWd5LiBCdXQgc2luY2UgdGhvc2UgZnVuY3Rpb25zIGFyZSByYXRoZXIgc2VsZG9tCi0gKiBjYWxsZWQsIGl0J3MgZWFzeW5lc3MgZml0cyB0aGUgcHVycG9zZSB3ZWxsLikKLSAqIAorICogSW5pdGlhbGlzZXMgdGhlIGNvbGxhdGUgdGFibGUgKGNoYXJhY3RlciBzb3J0aW5nLCBsYW5ndWFnZSBkZXBlbmRlbnQpCiAgKi8KLQotRFdPUkQgR2xvYmFsRE9TQWxsb2MoRFdPUkQgc2l6ZSkKK3N0YXRpYyB2b2lkIERPU01FTV9Jbml0Q29sbGF0ZVRhYmxlKCkKIHsKLQlzdHJ1Y3QJZG9zbWVtX2VudHJ5CSpkbSwqbmRtOwotCURXT1JECXN0YXJ0LGJsb2Nrc2l6ZTsKLQlXT1JECXNlbDsKLQlITU9EVUxFMTYgaE1vZHVsZT1HZXRNb2R1bGVIYW5kbGUoIktFUk5FTCIpOworCURXT1JECQl4OworCXVuc2lnbmVkIGNoYXIJKnRibDsKKwlpbnQJCWk7CiAKLQotCXN0YXJ0CT0gMDsKLQlkbQk9IChzdHJ1Y3QgZG9zbWVtX2VudHJ5KikoRE9TTUVNX2Rvc21lbSsweDEwMDAwKTsKLQlzaXplCT0gKHNpemUrMHhmKSZ+MHhmOwotCXdoaWxlIChkbSAmJiBkbS0+bmV4dCkgewotCQlibG9ja3NpemUgPSAoKGNoYXIqKWRtLT5uZXh0LShjaGFyKilkbSktMTY7Ci0JCWlmICgoZG0tPmlzZnJlZSkgJiYgKGJsb2Nrc2l6ZT49c2l6ZSkpIHsKLQkJCWRtLT5pc2ZyZWUgPSAwOwotCQkJc3RhcnQgPSAoKCgoY2hhciopZG0pLURPU01FTV9kb3NtZW0pKzB4MTApJiB+MHhmOwotCQkJaWYgKChibG9ja3NpemUtc2l6ZSkgPj0gMHgyMCkgewotCQkJCS8qIGlmIGVub3VnaCBtZW1vcnkgaXMgbGVmdCBmb3IgYSBuZXcgYmxvY2sKLQkJCQkgKiBzcGxpdCB0aGlzIGFyZWEgaW50byB0d28gYmxvY2tzCi0JCQkJICovCi0JCQkJbmRtPShzdHJ1Y3QgZG9zbWVtX2VudHJ5KikoKGNoYXIqKWRtKzB4MTArc2l6ZSk7Ci0JCQkJbmRtLT5pc2ZyZWUJPSAxOwotCQkJCW5kbS0+bmV4dAk9IGRtLT5uZXh0OwotCQkJCWRtLT5uZXh0CT0gbmRtOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJZG09ZG0tPm5leHQ7Ci0JfQotCWlmICghc3RhcnQpCi0JCXJldHVybiAwOwotCXNlbD1HTE9CQUxfQ3JlYXRlQmxvY2soCi0JCUdNRU1fRklYRUQsRE9TTUVNX2Rvc21lbStzdGFydCxzaXplLAotCQloTW9kdWxlLEZBTFNFLEZBTFNFLEZBTFNFLE5VTEwKLQkpOwotCXJldHVybiBNQUtFTE9ORyhzZWwsc3RhcnQ+PjQpOworCXggPSBHbG9iYWxET1NBbGxvYygyNTgpOworCURPU01FTV9Db2xsYXRlVGFibGUgPSBNQUtFTE9ORygwLCh4Pj4xNikpOworCXRibCA9IERPU01FTV9NYXBSZWFsVG9MaW5lYXIoRE9TTUVNX0NvbGxhdGVUYWJsZSk7CisJKihXT1JEKil0YmwJPSAweDEwMDsKKwl0YmwgKz0gMjsKKwlmb3IgKCBpID0gMDsgaSA8IDB4MTAwOyBpKyspICp0YmwrKyA9IGk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEdsb2JhbERPU0ZyZWUJKEtFUk5FTC4xODUpCisgKiAgICAgICAgICAgRE9TTUVNX0luaXRNZW1vcnkKICAqCi0gKiBGcmVlcyBhbGxvY2F0ZWQgZG9zbWVtb3J5IGFuZCBjb3JyZXNwb25kaW5nIHNlbGVjdG9yLgorICogSW5pdGlhbGlzZXMgdGhlIERPUyBtZW1vcnkgc3RydWN0dXJlcy4KICAqLwotCi1XT1JECi1HbG9iYWxET1NGcmVlKFdPUkQgc2VsKQorc3RhdGljIHZvaWQgRE9TTUVNX0luaXRNZW1vcnkoKQogewotCURXT1JECWJhc2U7Ci0Jc3RydWN0CWRvc21lbV9lbnRyeQkqZG07CisgICAvKiBMb3cgNjRLYiBhcmUgcmVzZXJ2ZWQgZm9yIERPUy9CSU9TIHNvIHRoZSB1c2VhYmxlIGFyZWEgc3RhcnRzIGF0CisgICAgKiAxMDAwOjAwMDAgYW5kIGVuZHMgYXQgOUZGRjpGRkVGLiAqLwogCi0JYmFzZSA9IEdldFNlbGVjdG9yQmFzZShzZWwpOwotCS8qIGJhc2UgaGFzIGFscmVhZHkgYmVlbiBjb252ZXJzZWQgdG8gYSBwaHlzaWNhbCBhZGRyZXNzICovCi0JaWYgKGJhc2U+PTB4MTAwMDAwKQotCQlyZXR1cm4gc2VsOwotCWRtCT0gKHN0cnVjdCBkb3NtZW1fZW50cnkqKShET1NNRU1fZG9zbWVtK2Jhc2UtMHgxMCk7Ci0JaWYgKGRtLT5pc2ZyZWUpIHsKLQkJZnByaW50ZihzdGRlcnIsIkZyZWVpbmcgYWxyZWFkeSBmcmVlZCBET1NNRU0uXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWRtLT5pc2ZyZWUgPSAxOworICAgIGRvc21lbV9lbnRyeSogICAgICAgZG07CiAKLQkvKiBjb2xsYXBzZSBhZGp1bmN0IGZyZWUgYmxvY2tzIGludG8gb25lICovCi0JZG0gPSAoc3RydWN0IGRvc21lbV9lbnRyeSopKERPU01FTV9kb3NtZW0rMHgxMDAwMCk7Ci0Jd2hpbGUgKGRtICYmIGRtLT5uZXh0KSB7Ci0JCWlmIChkbS0+aXNmcmVlICYmIGRtLT5uZXh0LT5pc2ZyZWUpCi0JCQlkbS0+bmV4dCA9IGRtLT5uZXh0LT5uZXh0OwotCQlkbSA9IGRtLT5uZXh0OwotCX0KLQlHTE9CQUxfRnJlZUJsb2NrKHNlbCk7Ci0JcmV0dXJuIDA7CisgICAgRE9TTUVNX3RvcCA9IERPU01FTV9kb3NtZW0rMHg5RkZGQzsgLyogNjQwSyAqLworICAgIGluZm9fYmxvY2sgPSAoZG9zbWVtX2luZm8qKSggRE9TTUVNX2Rvc21lbSArIDB4MTAwMDAgKTsKKworICAgIC8qIGZpcnN0IGJsb2NrIGhhcyB0byBiZSBwYXJhZ3JhcGgtYWxpZ25lZCByZWxhdGl2ZSB0byB0aGUgRE9TTUVNX2Rvc21lbSAqLworCisgICAgcm9vdF9ibG9jayA9IChkb3NtZW1fZW50cnkqKSggRE9TTUVNX2Rvc21lbSArIDB4MTAwMDAgKworICAgICAgICAgICAgICAgICAoKCgoc2l6ZW9mKGRvc21lbV9pbmZvKSArIDB4ZikgJiB+MHhmKSAtIHNpemVvZihkb3NtZW1fZW50cnkpKSkpOworICAgIHJvb3RfYmxvY2stPnNpemUgPSBET1NNRU1fdG9wIC0gKCgoY2hhciopcm9vdF9ibG9jaykgKyBzaXplb2YoZG9zbWVtX2VudHJ5KSk7CisKKyAgICBpbmZvX2Jsb2NrLT5ibG9ja3MgPSAwOworICAgIGluZm9fYmxvY2stPmZyZWUgPSByb290X2Jsb2NrLT5zaXplOworCisgICAgZG0gPSBORVhUX0JMT0NLKHJvb3RfYmxvY2spOworICAgIGRtLT5zaXplID0gRE1fQkxPQ0tfVEVSTUlOQUw7CisgICAgcm9vdF9ibG9jay0+c2l6ZSB8PSBETV9CTE9DS19GUkVFIAorI2lmZGVmIF9fRE9TTUVNX0RFQlVHX18KKwkJICAgICB8IERNX0JMT0NLX0RFQlVHOworI2VuZGlmCisJCSAgICAgOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBET1NNRU1fUmVhbE1vZGUyTGluZWFyCisgKiAgICAgICAgICAgRE9TTUVNX0luaXQKICAqCi0gKiBDb252ZXJ0cyBhIHJlYWxtb2RlIHNlZ21lbnQ6b2Zmc2V0IGFkZHJlc3MgaW50byBhIGxpbmVhciBwb2ludGVyCisgKiBDcmVhdGUgdGhlIGRvcyBtZW1vcnkgc2VnbWVudHMsIGFuZCBzdG9yZSB0aGVtIGludG8gdGhlIEtFUk5FTAorICogZXhwb3J0ZWQgdmFsdWVzLgogICovCi1MUFZPSUQgRE9TTUVNX1JlYWxNb2RlMkxpbmVhcihEV09SRCB4KQorQk9PTDMyIERPU01FTV9Jbml0KHZvaWQpCiB7Ci0JTFBWT0lECWxpbjsKKyAgICAvKiBBbGxvY2F0ZSAxIE1CIGRvc21lbW9yeSAKKyAgICAgKiAtIGl0IGlzIG1vc3RseSB3YXN0ZWQgYnV0IHdlIHVzZSBjYW4gc29tZSBvZiBpdCB0byAKKyAgICAgKiAgIHN0b3JlIGludGVybmFsIHRyYW5zbGF0aW9uIHRhYmxlcywgZXRjLi4uCisgICAgICovCisgICAgRE9TTUVNX2Rvc21lbSA9IFZpcnR1YWxBbGxvYyhOVUxMLDB4MTAwMDAwLE1FTV9DT01NSVQsUEFHRV9FWEVDVVRFX1JFQURXUklURSk7CisgICAgaWYgKCFET1NNRU1fZG9zbWVtKQorICAgIHsKKyAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiQ291bGQgbm90IGFsbG9jYXRlIERPUyBtZW1vcnkuXG4iICk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRE9TTUVNX0Jpb3NTZWcgPSBHTE9CQUxfQ3JlYXRlQmxvY2soR01FTV9GSVhFRCxET1NNRU1fZG9zbWVtKzB4NDAwLDB4MTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIE5VTEwgKTsKKyAgICBET1NNRU1fRmlsbEJpb3NTZWdtZW50KCk7CisgICAgRE9TTUVNX0luaXRNZW1vcnkoKTsKKyAgICBET1NNRU1fSW5pdENvbGxhdGVUYWJsZSgpOworICAgIHJldHVybiBUUlVFOworfQogCi0JbGluPURPU01FTV9kb3NtZW0rKHgmMHhmZmZmKSsoKCh4JjB4ZmZmZjAwMDApPj4xNikqMTYpOwotCWRwcmludGZfc2VsZWN0b3Ioc3RkZGViLCJET1NNRU1fUmVhbE1vZGUyTGluZWFyKDB4JTA4bHgpIHJldHVybnMgMHglcC5cbiIsCi0JCXgsbGluCi0JKTsKLQlyZXR1cm4gbGluOwordm9pZCBET1NNRU1fSW5pdEV4cG9ydHMoSE1PRFVMRTE2IGhLZXJuZWwpCit7CisjZGVmaW5lIFNFVF9FTlRSWV9QT0lOVChudW0sYWRkcikgXAorICAgIE1PRFVMRV9TZXRFbnRyeVBvaW50KCBoS2VybmVsLCAobnVtKSwgR0xPQkFMX0NyZWF0ZUJsb2NrKCBHTUVNX0ZJWEVELCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9TTUVNX2Rvc21lbSsoYWRkciksIDB4MTAwMDAsIGhLZXJuZWwsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgRkFMU0UsIEZBTFNFLCBOVUxMICkpCisKKyAgICBTRVRfRU5UUllfUE9JTlQoIDE3NCwgMHhhMDAwMCApOyAgLyogS0VSTkVMLjE3NDogX19BMDAwSCAqLworICAgIFNFVF9FTlRSWV9QT0lOVCggMTgxLCAweGIwMDAwICk7ICAvKiBLRVJORUwuMTgxOiBfX0IwMDBIICovCisgICAgU0VUX0VOVFJZX1BPSU5UKCAxODIsIDB4YjgwMDAgKTsgIC8qIEtFUk5FTC4xODI6IF9fQjgwMEggKi8KKyAgICBTRVRfRU5UUllfUE9JTlQoIDE5NSwgMHhjMDAwMCApOyAgLyogS0VSTkVMLjE5NTogX19DMDAwSCAqLworICAgIFNFVF9FTlRSWV9QT0lOVCggMTc5LCAweGQwMDAwICk7ICAvKiBLRVJORUwuMTc5OiBfX0QwMDBIICovCisgICAgU0VUX0VOVFJZX1BPSU5UKCAxOTAsIDB4ZTAwMDAgKTsgIC8qIEtFUk5FTC4xOTA6IF9fRTAwMEggKi8KKyAgICBTRVRfRU5UUllfUE9JTlQoIDE3MywgMHhmMDAwMCApOyAgLyogS0VSTkVMLjE3MzogX19ST01CSU9TICovCisgICAgU0VUX0VOVFJZX1BPSU5UKCAxOTQsIDB4ZjAwMDAgKTsgIC8qIEtFUk5FTC4xOTQ6IF9fRjAwMEggKi8KKyAgICBNT0RVTEVfU2V0RW50cnlQb2ludChoS2VybmVsLCAxOTMsRE9TTUVNX0Jpb3NTZWcpOyAvKiBLRVJORUwuMTkzOiBfXzAwNDBIICovCisKKyN1bmRlZiBTRVRfRU5UUllfUE9JTlQKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRE9TTUVNX1RpY2sKKyAqCisgKiBJbmNyZW1lbnQgdGhlIEJJT1MgdGljayBjb3VudGVyLiBDYWxsZWQgYnkgdGltZXIgc2lnbmFsIGhhbmRsZXIuCisgKi8KK3ZvaWQgRE9TTUVNX1RpY2sodm9pZCkKK3sKKyAgICBpZiAocEJpb3NEYXRhKSBwQmlvc0RhdGEtPlRpY2tzKys7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIERPU01FTV9HZXRCbG9jaworICoKKyAqIENhcnZlIGEgY2h1bmsgb2YgdGhlIERPUyBtZW1vcnkgYmxvY2sgKHdpdGhvdXQgc2VsZWN0b3IpLgorICovCitMUFZPSUQgRE9TTUVNX0dldEJsb2NrKFVJTlQzMiBzaXplLCBVSU5UMTYqIHBzZWcpCit7CisgICBVSU5UMzIgIAkgYmxvY2tzaXplOworICAgY2hhciAgICAgICAgICpibG9jayA9IE5VTEw7CisgICBkb3NtZW1fZW50cnkgKmRtOworI2lmZGVmIF9fRE9TTUVNX0RFQlVHXworICAgZG9zbWVtX2VudHJ5ICpwcmV2ID0gTlVMTDsKKyNlbmRpZgorIAorICAgaWYoIHNpemUgPiBpbmZvX2Jsb2NrLT5mcmVlICkgcmV0dXJuIE5VTEw7CisgICBkbSA9IHJvb3RfYmxvY2s7CisKKyAgIHdoaWxlIChkbSAmJiBkbS0+c2l6ZSAhPSBETV9CTE9DS19URVJNSU5BTCkKKyAgIHsKKyNpZmRlZiBfX0RPU01FTV9ERUJVR19fCisgICAgICAgaWYoIChkbS0+c2l6ZSAmIERNX0JMT0NLX0RFQlVHKSAhPSBETV9CTE9DS19ERUJVRyApCisgICAgICAgeworCSAgICBmcHJpbnRmKHN0ZGVyciwiRE9TTUVNX0dldEJsb2NrOiBNQ0Igb3ZlcnJ1biEgW3ByZXYgPSAweCUwOHhdXG4iLCA0ICsgKFVJTlQzMilwcmV2KTsKKwkgICAgcmV0dXJuIE5VTEw7CisgICAgICAgfQorICAgICAgIHByZXYgPSBkbTsKKyNlbmRpZgorICAgICAgIGlmKCBkbS0+c2l6ZSAmIERNX0JMT0NLX0ZSRUUgKQorICAgICAgIHsKKwkgICBkb3NtZW1fZW50cnkgICpuZXh0ID0gTkVYVF9CTE9DSyhkbSk7CisKKwkgICB3aGlsZSggbmV4dC0+c2l6ZSAmIERNX0JMT0NLX0ZSRUUgKSAvKiBjb2xsYXBzZSBmcmVlIGJsb2NrcyAqLworCSAgIHsKKwkgICAgICAgZG0tPnNpemUgKz0gc2l6ZW9mKGRvc21lbV9lbnRyeSkgKyAobmV4dC0+c2l6ZSAmIERNX0JMT0NLX01BU0spOworCSAgICAgICBuZXh0LT5zaXplID0gKERNX0JMT0NLX0ZSRUUgfCBETV9CTE9DS19URVJNSU5BTCk7CisJICAgICAgIG5leHQgPSBORVhUX0JMT0NLKGRtKTsKKwkgICB9CisKKwkgICBibG9ja3NpemUgPSBkbS0+c2l6ZSAmIERNX0JMT0NLX01BU0s7CisJICAgaWYoIGJsb2Nrc2l6ZSA+PSBzaXplICkKKyAgICAgICAgICAgeworCSAgICAgICBibG9jayA9ICgoY2hhciopZG0pICsgc2l6ZW9mKGRvc21lbV9lbnRyeSk7CisJICAgICAgIGlmKCBibG9ja3NpemUgLSBzaXplID4gMHgyMCApCisJICAgICAgIHsKKwkJICAgLyogc3BsaXQgZG0gc28gdGhhdCB0aGUgbmV4dCBvbmUgc3RheXMKKwkJICAgICogcGFyYWdyYXBoLWFsaWduZWQgKGFuZCBkbSBsb3NlcyBmcmVlIGJpdCkgKi8KKworCSAgICAgICAgICAgZG0tPnNpemUgPSAoKChzaXplICsgMHhmICsgc2l6ZW9mKGRvc21lbV9lbnRyeSkpICYgfjB4ZikgLQorCQkJICAgICAgICAgCSAgICAgIHNpemVvZihkb3NtZW1fZW50cnkpKTsKKwkgICAgICAgICAgIG5leHQgPSAoZG9zbWVtX2VudHJ5KikoKChjaGFyKilkbSkgKyAKKwkgCQkgICBzaXplb2YoZG9zbWVtX2VudHJ5KSArIGRtLT5zaXplKTsKKwkgICAgICAgICAgIG5leHQtPnNpemUgPSAoYmxvY2tzaXplIC0gKGRtLT5zaXplICsgCisJCQkgICBzaXplb2YoZG9zbWVtX2VudHJ5KSkpIHwgRE1fQkxPQ0tfRlJFRSAKKyNpZmRlZiBfX0RPU01FTV9ERUJVR19fCisJCQkJCSAgICAgICAgICB8IERNX0JMT0NLX0RFQlVHCisjZW5kaWYKKwkJCQkJCSAgOworCSAgICAgICB9IGVsc2UgZG0tPnNpemUgJj0gRE1fQkxPQ0tfTUFTSzsKKworCSAgICAgICBpbmZvX2Jsb2NrLT5ibG9ja3MrKzsKKwkgICAgICAgaW5mb19ibG9jay0+ZnJlZSAtPSBkbS0+c2l6ZTsKKwkgICAgICAgaWYoIHBzZWcgKSAqcHNlZyA9IChibG9jayAtIERPU01FTV9kb3NtZW0pID4+IDQ7CisjaWZkZWYgX19ET1NNRU1fREVCVUdfXworICAgICAgICAgICAgICAgZG0tPnNpemUgfD0gRE1fQkxPQ0tfREVCVUc7CisjZW5kaWYKKwkgICAgICAgYnJlYWs7CisJICAgfQorIAkgICBkbSA9IG5leHQ7CisgICAgICAgfQorICAgICAgIGVsc2UgZG0gPSBORVhUX0JMT0NLKGRtKTsKKyAgIH0KKyAgIHJldHVybiAoTFBWT0lEKWJsb2NrOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBET1NNRU1fRnJlZUJsb2NrCisgKi8KK0JPT0wzMiBET1NNRU1fRnJlZUJsb2NrKHZvaWQqIHB0cikKK3sKKyAgIGlmKCBwdHIgPj0gKHZvaWQqKSgoKGNoYXIqKXJvb3RfYmxvY2spICsgc2l6ZW9mKGRvc21lbV9lbnRyeSkpICYmCisgICAgICAgcHRyIDwgKHZvaWQqKURPU01FTV90b3AgJiYgISgoKChjaGFyKilwdHIpIC0gRE9TTUVNX2Rvc21lbSkgJiAweGYpICkKKyAgIHsKKyAgICAgICBkb3NtZW1fZW50cnkgICpkbSA9IChkb3NtZW1fZW50cnkqKSgoKGNoYXIqKXB0cikgLSBzaXplb2YoZG9zbWVtX2VudHJ5KSk7CisKKyAgICAgICBpZiggIShkbS0+c2l6ZSAmIChETV9CTE9DS19GUkVFIHwgRE1fQkxPQ0tfVEVSTUlOQUwpKQorI2lmZGVmIF9fRE9TTUVNX0RFQlVHX18KKwkgJiYgKChkbS0+c2l6ZSAmIERNX0JMT0NLX0RFQlVHKSA9PSBETV9CTE9DS19ERUJVRyApCisjZW5kaWYKKwkgKQorICAgICAgIHsKKwkgICAgIGluZm9fYmxvY2stPmJsb2Nrcy0tOworCSAgICAgaW5mb19ibG9jay0+ZnJlZSArPSBkbS0+c2l6ZTsKKworCSAgICAgZG0tPnNpemUgfD0gRE1fQkxPQ0tfRlJFRTsKKwkgICAgIHJldHVybiBUUlVFOworICAgICAgIH0KKyAgIH0KKyAgIHJldHVybiBGQUxTRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRE9TTUVNX01hcExpbmVhclRvRG9zCisgKgorICogTGluZWFyIGFkZHJlc3MgdG8gdGhlIERPUyBhZGRyZXNzIHNwYWNlLgorICovCitVSU5UMzIgRE9TTUVNX01hcExpbmVhclRvRG9zKExQVk9JRCBwdHIpCit7CisjaWZuZGVmIFdJTkVMSUIKKyAgIGlmICgoKGNoYXIqKXB0ciA+PSBET1NNRU1fZG9zbWVtKSAmJgorICAgICAgICAoKGNoYXIqKXB0ciA8IERPU01FTV9kb3NtZW0rMHgxMDAwMDApKSAgCisJICByZXR1cm4gKFVJTlQzMilwdHIgLSAoVUlOVDMyKURPU01FTV9kb3NtZW07CisjZW5kaWYKKyAgIHJldHVybiAoVUlOVDMyKXB0cjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRE9TTUVNX01hcERvc1RvTGluZWFyCisgKgorICogRE9TIGxpbmVhciBhZGRyZXNzIHRvIHRoZSBsaW5lYXIgYWRkcmVzcyBzcGFjZS4KKyAqLworTFBWT0lEIERPU01FTV9NYXBEb3NUb0xpbmVhcihVSU5UMzIgcHRyKQoreworI2lmbmRlZiBXSU5FTElCCisgICBpZiAoIHB0ciA8IDEwMDAwMDAgKSByZXR1cm4gKExQVk9JRCkocHRyICsgKFVJTlQzMilET1NNRU1fZG9zbWVtKTsKKyNlbmRpZgorICAgcmV0dXJuIChMUFZPSUQpcHRyOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBET1NNRU1fTWFwUmVhbFRvTGluZWFyCisgKgorICogUmVhbCBtb2RlIERPUyBhZGRyZXNzIGludG8gYSBsaW5lYXIgcG9pbnRlcgorICovCitMUFZPSUQgRE9TTUVNX01hcFJlYWxUb0xpbmVhcihEV09SRCB4KQoreworICAgTFBWT0lEICAgICAgIGxpbjsKKworICAgbGluPURPU01FTV9kb3NtZW0rKHgmMHhmZmZmKSsoKCh4JjB4ZmZmZjAwMDApPj4xNikqMTYpOworICAgZHByaW50Zl9zZWxlY3RvcihzdGRkZWIsIkRPU01FTV9NYXBSMkwoMHglMDhseCkgcmV0dXJucyAweCVwLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgeCxsaW4gKTsKKyAgIHJldHVybiBsaW47CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzExLDcgKzM5OCw3IEBACiAgKi8KIFdPUkQgRE9TTUVNX0FsbG9jU2VsZWN0b3IoV09SRCByZWFsc2VsKQogewotCUhNT0RVTEUxNiBoTW9kdWxlPUdldE1vZHVsZUhhbmRsZSgiS0VSTkVMIik7CisJSE1PRFVMRTE2IGhNb2R1bGUgPSBHZXRNb2R1bGVIYW5kbGUoIktFUk5FTCIpOwogCVdPUkQJc2VsOwogCiAJc2VsPUdMT0JBTF9DcmVhdGVCbG9jaygKQEAgLTMyMywzICs0MTAsNCBAQAogCSk7CiAJcmV0dXJuIHNlbDsKIH0KKwpkaWZmIC0tZ2l0IGEvbXNkb3MvZHBtaS5jIGIvbXNkb3MvZHBtaS5jCmluZGV4IDJjNDZiNTkuLjUwOTYzNjggMTAwNjQ0Ci0tLSBhL21zZG9zL2RwbWkuYworKysgYi9tc2Rvcy9kcG1pLmMKQEAgLTIzNSw3ICsyMzUsNyBAQAogCQkgICAgICAgIC8qIEVTOkRJIGlzIGEgUkVBTE1PREUgcG9pbnRlciB0byA1IGJ5dGUgZG9zbWVtIAogCQkJICogd2UgZmlsbCB0aGF0IHdpdGggMHg2LCByZWFsbW9kZSBwb2ludGVyIHRvIGNvbGxhdGVUQgogCQkJICovCi0JCQl0YWJsZSA9IERPU01FTV9SZWFsTW9kZTJMaW5lYXIoTUFLRUxPTkcocC0+ZWRpLHAtPmVzKSk7CisJCQl0YWJsZSA9IERPU01FTV9NYXBSZWFsVG9MaW5lYXIoTUFLRUxPTkcocC0+ZWRpLHAtPmVzKSk7CiAJCQkqKEJZVEUqKXRhYmxlCQk9IDB4MDY7CiAJCQkqKERXT1JEKikodGFibGUrMSkJPSBET1NNRU1fQ29sbGF0ZVRhYmxlOwogCkBAIC0yNDksNyArMjQ5LDcgQEAKIAkJY2FzZSAweDQ0OgogCQkgICAgc3dpdGNoIChwLT5lYXggJiAweEZGKSB7CiAJCSAgICBjYXNlIDB4MEQ6ey8qIGdlbmVyaWMgYmxvY2sgZGV2aWNlIHJlcXVlc3QgKi8KLQkJICAgIAlCWVRFCSpkYXRhcHRyID0gRE9TTUVNX1JlYWxNb2RlMkxpbmVhcigocC0+ZHMpKjB4MTAwMCsocC0+ZWR4ICYgMHhGRkZGKSk7CisJCSAgICAJQllURQkqZGF0YXB0ciA9IERPU01FTV9NYXBSZWFsVG9MaW5lYXIoKHAtPmRzKSoweDEwMDArKHAtPmVkeCAmIDB4RkZGRikpOwogCQkJaW50CWRyaXZlID0gRE9TX0dFVF9EUklWRShwLT5lYngmMHhGRik7IAogCiAJCSAgICAJaWYgKChwLT5lY3ggJiAweEZGMDApICE9IDB4MDgwMCkgewpkaWZmIC0tZ2l0IGEvbXVsdGltZWRpYS9hdWRpby5jIGIvbXVsdGltZWRpYS9hdWRpby5jCmluZGV4IGE4MjI2MzIuLjVhOWI0NWYgMTAwNjQ0Ci0tLSBhL211bHRpbWVkaWEvYXVkaW8uYworKysgYi9tdWx0aW1lZGlhL2F1ZGlvLmMKQEAgLTMxNyw3ICszMTcsNyBAQAogCVVTRVJfSEVBUF9GUkVFKGhXYXZlSGRyKTsKIAlpZiAoZHdGbGFncyAmIE1DSV9OT1RJRlkpIHsKIAkJZHByaW50Zl9tY2l3YXZlKHN0ZGRlYiwiV0FWRV9tY2lQbGF5IC8vIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCAlMDhsWCAhXG4iLCBscFBhcm1zLT5kd0NhbGxiYWNrKTsKLQkJbWNpRHJpdmVyTm90aWZ5KChIV05EKUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCisJCW1jaURyaXZlck5vdGlmeSgoSFdORDE2KUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCiAJCQlNQ0lXYXZEZXZbd0RldklEXS53Tm90aWZ5RGV2aWNlSUQsIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCk7CiAJCX0KIAlyZXR1cm4gMDsKQEAgLTM4Nyw3ICszODcsNyBAQAogCVVTRVJfSEVBUF9GUkVFKGhXYXZlSGRyKTsKIAlpZiAoZHdGbGFncyAmIE1DSV9OT1RJRlkpIHsKIAkgIGRwcmludGZfbWNpd2F2ZShzdGRkZWIsIldBVkVfbWNpUmVjb3JkIC8vIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCAlMDhsWCAhXG4iLCBscFBhcm1zLT5kd0NhbGxiYWNrKTsKLQkJbWNpRHJpdmVyTm90aWZ5KChIV05EKUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCisJCW1jaURyaXZlck5vdGlmeSgoSFdORDE2KUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCiAJCQlNQ0lXYXZEZXZbd0RldklEXS53Tm90aWZ5RGV2aWNlSUQsIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCk7CiAJCX0KIAlyZXR1cm4gMDsKQEAgLTU5MCw3ICs1OTAsNyBAQAogCQl9CiAJaWYgKGR3RmxhZ3MgJiBNQ0lfTk9USUZZKSB7CiAJCWRwcmludGZfbWNpd2F2ZShzdGRkZWIsIldBVkVfbWNpU3RhdHVzIC8vIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCAlMDhsWCAhXG4iLCBscFBhcm1zLT5kd0NhbGxiYWNrKTsKLQkJbWNpRHJpdmVyTm90aWZ5KChIV05EKUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCisJCW1jaURyaXZlck5vdGlmeSgoSFdORDE2KUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCiAJCQlNQ0lXYXZEZXZbd0RldklEXS53Tm90aWZ5RGV2aWNlSUQsIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCk7CiAJCX0KICAJcmV0dXJuIDA7CkBAIC0xNjAzLDcgKzE2MDMsNyBAQAogCQljYXNlIERSVl9RVUVSWUNPTkZJR1VSRToKIAkJCXJldHVybiAxOwogCQljYXNlIERSVl9DT05GSUdVUkU6Ci0JCQlNZXNzYWdlQm94MTYoKEhXTkQpTlVMTCwgIlNhbXBsZSBNdWx0aU1lZGlhIExpbnV4IERyaXZlciAhIiwgCisJCQlNZXNzYWdlQm94MTYoMCwgIlNhbXBsZSBNdWx0aU1lZGlhIExpbnV4IERyaXZlciAhIiwgCiAJCQkJCQkJCSJNTUxpbnV4IERyaXZlciIsIE1CX09LKTsKIAkJCXJldHVybiAxOwogCQljYXNlIERSVl9JTlNUQUxMOgpkaWZmIC0tZ2l0IGEvbXVsdGltZWRpYS9qb3lzdGljay5jIGIvbXVsdGltZWRpYS9qb3lzdGljay5jCmluZGV4IDMwMWJhNmMuLmFiMjgxOTAgMTAwNjQ0Ci0tLSBhL211bHRpbWVkaWEvam95c3RpY2suYworKysgYi9tdWx0aW1lZGlhL2pveXN0aWNrLmMKQEAgLTY3LDcgKzY3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogCQkJCUpveVNldENhcHR1cmUJCVtNTVNZU1RFTS4xMDZdCiAgKi8KLVdPUkQgSm95U2V0Q2FwdHVyZShIV05EIGhXbmQsIFdPUkQgd0lELCBXT1JEIHdQZXJpb2QsIEJPT0wgYkNoYW5nZWQpCitXT1JEIEpveVNldENhcHR1cmUoSFdORDE2IGhXbmQsIFdPUkQgd0lELCBXT1JEIHdQZXJpb2QsIEJPT0wgYkNoYW5nZWQpCiB7CiAgICAgZnByaW50ZihzdGRuaW1wLCAiRU1QVFkgU1RVQiAhISEgSm95U2V0Q2FwdHVyZSglMDRYLCAlMDRYLCAlZCwgJWQpO1xuIiwKIAkgICAgaFduZCwgd0lELCB3UGVyaW9kLCBiQ2hhbmdlZCk7CmRpZmYgLS1naXQgYS9tdWx0aW1lZGlhL21jaWFuaW0uYyBiL211bHRpbWVkaWEvbWNpYW5pbS5jCmluZGV4IGNlZWY4YmYuLmU2ZTg0ZjMgMTAwNjQ0Ci0tLSBhL211bHRpbWVkaWEvbWNpYW5pbS5jCisrKyBiL211bHRpbWVkaWEvbWNpYW5pbS5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAkJZHByaW50Zl9tY2lhbmltKHN0ZGRlYiwKIAkJCSJBTklNX21jaU9wZW4gLy8gTUNJX05PVElGWV9TVUNDRVNTRlVMICUwOGxYICFcbiIsIAogCQkJbHBQYXJtcy0+ZHdDYWxsYmFjayk7Ci0JCW1jaURyaXZlck5vdGlmeSgoSFdORClMT1dPUkQobHBQYXJtcy0+ZHdDYWxsYmFjayksIAorCQltY2lEcml2ZXJOb3RpZnkoKEhXTkQxNilMT1dPUkQobHBQYXJtcy0+ZHdDYWxsYmFjayksIAogCQkJQW5pbURldlt3RGV2SURdLndOb3RpZnlEZXZpY2VJRCwgTUNJX05PVElGWV9TVUNDRVNTRlVMKTsKIAkJfQogIAlyZXR1cm4gMDsKQEAgLTMzMCw3ICszMzAsNyBAQAogCQlkcHJpbnRmX21jaWFuaW0oc3RkZGViLAogCQkJIkFOSU1fbWNpU3RhdHVzIC8vIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCAlMDhsWCAhXG4iLCAKIAkJCWxwUGFybXMtPmR3Q2FsbGJhY2spOwotCQltY2lEcml2ZXJOb3RpZnkoKEhXTkQpTE9XT1JEKGxwUGFybXMtPmR3Q2FsbGJhY2spLCAKKwkJbWNpRHJpdmVyTm90aWZ5KChIV05EMTYpTE9XT1JEKGxwUGFybXMtPmR3Q2FsbGJhY2spLCAKIAkJCUFuaW1EZXZbd0RldklEXS53Tm90aWZ5RGV2aWNlSUQsIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCk7CiAJCX0KIAlpZiAoZHdGbGFncyAmIE1DSV9TVEFUVVNfSVRFTSkgewpAQCAtNDM2LDcgKzQzNiw3IEBACiAJCWRwcmludGZfbWNpYW5pbShzdGRkZWIsCiAJCQkiQU5JTV9tY2lQbGF5IC8vIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCAlMDhsWCAhXG4iLCAKIAkJCWxwUGFybXMtPmR3Q2FsbGJhY2spOwotCQltY2lEcml2ZXJOb3RpZnkoKEhXTkQpTE9XT1JEKGxwUGFybXMtPmR3Q2FsbGJhY2spLCAKKwkJbWNpRHJpdmVyTm90aWZ5KChIV05EMTYpTE9XT1JEKGxwUGFybXMtPmR3Q2FsbGJhY2spLCAKIAkJCUFuaW1EZXZbd0RldklEXS53Tm90aWZ5RGV2aWNlSUQsIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCk7CiAJCX0KIAlyZXR1cm4gMDsKQEAgLTQ1OSw3ICs0NTksNyBAQAogCQlkcHJpbnRmX21jaWFuaW0oc3RkZGViLAogCQkJIkFOSU1fbWNpU3RvcCAvLyBNQ0lfTk9USUZZX1NVQ0NFU1NGVUwgJTA4bFggIVxuIiwgCiAJCQlscFBhcm1zLT5kd0NhbGxiYWNrKTsKLQkJbWNpRHJpdmVyTm90aWZ5KChIV05EKUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCisJCW1jaURyaXZlck5vdGlmeSgoSFdORDE2KUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCiAJCQlBbmltRGV2W3dEZXZJRF0ud05vdGlmeURldmljZUlELCBNQ0lfTk9USUZZX1NVQ0NFU1NGVUwpOwogCQl9CiAgCXJldHVybiAwOwpAQCAtNDgyLDcgKzQ4Miw3IEBACiAJCWRwcmludGZfbWNpYW5pbShzdGRkZWIsCiAJCQkiQU5JTV9tY2lQYXVzZSAvLyBNQ0lfTk9USUZZX1NVQ0NFU1NGVUwgJTA4bFggIVxuIiwgCiAJCQlscFBhcm1zLT5kd0NhbGxiYWNrKTsKLQkJbWNpRHJpdmVyTm90aWZ5KChIV05EKUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCisJCW1jaURyaXZlck5vdGlmeSgoSFdORDE2KUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCiAJCQlBbmltRGV2W3dEZXZJRF0ud05vdGlmeURldmljZUlELCBNQ0lfTk9USUZZX1NVQ0NFU1NGVUwpOwogCQl9CiAJcmV0dXJuIDA7CkBAIC01MDUsNyArNTA1LDcgQEAKIAkJZHByaW50Zl9tY2lhbmltKHN0ZGRlYiwKIAkJCSJBTklNX21jaVJlc3VtZSAvLyBNQ0lfTk9USUZZX1NVQ0NFU1NGVUwgJTA4bFggIVxuIiwgCiAJCQlscFBhcm1zLT5kd0NhbGxiYWNrKTsKLQkJbWNpRHJpdmVyTm90aWZ5KChIV05EKUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCisJCW1jaURyaXZlck5vdGlmeSgoSFdORDE2KUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCiAJCQlBbmltRGV2W3dEZXZJRF0ud05vdGlmeURldmljZUlELCBNQ0lfTk9USUZZX1NVQ0NFU1NGVUwpOwogCQl9CiAJcmV0dXJuIDA7CkBAIC01NDQsNyArNTQ0LDcgQEAKIAkJZHByaW50Zl9tY2lhbmltKHN0ZGRlYiwKIAkJCSJBTklNX21jaVNlZWsgLy8gTUNJX05PVElGWV9TVUNDRVNTRlVMICUwOGxYICFcbiIsIAogCQkJbHBQYXJtcy0+ZHdDYWxsYmFjayk7Ci0JCW1jaURyaXZlck5vdGlmeSgoSFdORClMT1dPUkQobHBQYXJtcy0+ZHdDYWxsYmFjayksIAorCQltY2lEcml2ZXJOb3RpZnkoKEhXTkQxNilMT1dPUkQobHBQYXJtcy0+ZHdDYWxsYmFjayksIAogCQkJQW5pbURldlt3RGV2SURdLndOb3RpZnlEZXZpY2VJRCwgTUNJX05PVElGWV9TVUNDRVNTRlVMKTsKIAkJfQogCXJldHVybiBkd1JldDsKQEAgLTU5Miw3ICs1OTIsNyBAQAogCQlkcHJpbnRmX21jaWFuaW0oc3RkZGViLAogCQkJIkFOSU1fbWNpU2V0IC8vIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCAlMDhsWCAhXG4iLCAKIAkJCWxwUGFybXMtPmR3Q2FsbGJhY2spOwotCQltY2lEcml2ZXJOb3RpZnkoKEhXTkQpTE9XT1JEKGxwUGFybXMtPmR3Q2FsbGJhY2spLCAKKwkJbWNpRHJpdmVyTm90aWZ5KChIV05EMTYpTE9XT1JEKGxwUGFybXMtPmR3Q2FsbGJhY2spLCAKIAkJCUFuaW1EZXZbd0RldklEXS53Tm90aWZ5RGV2aWNlSUQsIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCk7CiAJCX0KIAlyZXR1cm4gMDsKQEAgLTYzMSw3ICs2MzEsNyBAQAogCQljYXNlIERSVl9RVUVSWUNPTkZJR1VSRToKIAkJCXJldHVybiAxOwogCQljYXNlIERSVl9DT05GSUdVUkU6Ci0JCQlNZXNzYWdlQm94MTYoKEhXTkQpTlVMTCwgIlNhbXBsZSBNdWx0aU1lZGlhIExpbnV4IERyaXZlciAhIiwgCisJCQlNZXNzYWdlQm94MTYoMCwgIlNhbXBsZSBNdWx0aU1lZGlhIExpbnV4IERyaXZlciAhIiwgCiAJCQkJCQkJCSJNTUxpbnV4IERyaXZlciIsIE1CX09LKTsKIAkJCXJldHVybiAxOwogCQljYXNlIERSVl9JTlNUQUxMOgpkaWZmIC0tZ2l0IGEvbXVsdGltZWRpYS9tY2ljZGEuYyBiL211bHRpbWVkaWEvbWNpY2RhLmMKaW5kZXggYmJjMGNlMy4uZmViYWI4NCAxMDA2NDQKLS0tIGEvbXVsdGltZWRpYS9tY2ljZGEuYworKysgYi9tdWx0aW1lZGlhL21jaWNkYS5jCkBAIC0yNzksNyArMjc5LDcgQEAKICAgICAgICAgCWRwcmludGZfY2RhdWRpbyhzdGRkZWIsCiAJCQkiQ0RBVURJT19tY2lPcGVuIC8vIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCAlMDhsWCAhXG4iLCAKIAkJCWxwUGFybXMtPmR3Q2FsbGJhY2spOwotCQltY2lEcml2ZXJOb3RpZnkoKEhXTkQpTE9XT1JEKGxwUGFybXMtPmR3Q2FsbGJhY2spLCAKKwkJbWNpRHJpdmVyTm90aWZ5KChIV05EMTYpTE9XT1JEKGxwUGFybXMtPmR3Q2FsbGJhY2spLCAKIAkJCUNEQURldlt3RGV2SURdLndOb3RpZnlEZXZpY2VJRCwgTUNJX05PVElGWV9TVUNDRVNTRlVMKTsKIAkJfQogIAlyZXR1cm4gMDsKQEAgLTYyNiw3ICs2MjYsNyBAQAogICAgICAgICAJZHByaW50Zl9jZGF1ZGlvKHN0ZGRlYiwKIAkJCSJDREFVRElPX21jaVN0YXR1cyAvLyBNQ0lfTk9USUZZX1NVQ0NFU1NGVUwgJTA4bFggIVxuIiwgCiAJCQlscFBhcm1zLT5kd0NhbGxiYWNrKTsKLQkJbWNpRHJpdmVyTm90aWZ5KChIV05EKUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCisJCW1jaURyaXZlck5vdGlmeSgoSFdORDE2KUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCiAJCQlDREFEZXZbd0RldklEXS53Tm90aWZ5RGV2aWNlSUQsIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCk7CiAJCX0KIAlpZiAoZHdGbGFncyAmIE1DSV9TVEFUVVNfSVRFTSkgewpAQCAtNzk3LDcgKzc5Nyw3IEBACiAJCQkiQ0RBVURJT19tY2lQbGF5IC8vIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCAlMDhsWCAhXG4iLCAKIAkJCWxwUGFybXMtPmR3Q2FsbGJhY2spOwogLyoKLQkJbWNpRHJpdmVyTm90aWZ5KChIV05EKUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCisJCW1jaURyaXZlck5vdGlmeSgoSFdORDE2KUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCiAJCQlDREFEZXZbd0RldklEXS53Tm90aWZ5RGV2aWNlSUQsIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCk7CiAqLwogCQl9CkBAIC04MjgsNyArODI4LDcgQEAKICAgICAgICAgCWRwcmludGZfY2RhdWRpbyhzdGRkZWIsCiAJCQkiQ0RBVURJT19tY2lTdG9wIC8vIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCAlMDhsWCAhXG4iLCAKIAkJCWxwUGFybXMtPmR3Q2FsbGJhY2spOwotCQltY2lEcml2ZXJOb3RpZnkoKEhXTkQpTE9XT1JEKGxwUGFybXMtPmR3Q2FsbGJhY2spLCAKKwkJbWNpRHJpdmVyTm90aWZ5KChIV05EMTYpTE9XT1JEKGxwUGFybXMtPmR3Q2FsbGJhY2spLCAKIAkJCUNEQURldlt3RGV2SURdLndOb3RpZnlEZXZpY2VJRCwgTUNJX05PVElGWV9TVUNDRVNTRlVMKTsKIAkJfQogIAlyZXR1cm4gMDsKQEAgLTg1OCw3ICs4NTgsNyBAQAogICAgICAgICBkcHJpbnRmX2NkYXVkaW8oc3RkZGViLAogCQkiQ0RBVURJT19tY2lQYXVzZSAvLyBNQ0lfTk9USUZZX1NVQ0NFU1NGVUwgJTA4bFggIVxuIiwgCiAJCWxwUGFybXMtPmR3Q2FsbGJhY2spOwotCQltY2lEcml2ZXJOb3RpZnkoKEhXTkQpTE9XT1JEKGxwUGFybXMtPmR3Q2FsbGJhY2spLCAKKwkJbWNpRHJpdmVyTm90aWZ5KChIV05EMTYpTE9XT1JEKGxwUGFybXMtPmR3Q2FsbGJhY2spLCAKIAkJCUNEQURldlt3RGV2SURdLndOb3RpZnlEZXZpY2VJRCwgTUNJX05PVElGWV9TVUNDRVNTRlVMKTsKIAkJfQogCXJldHVybiAwOwpAQCAtODg4LDcgKzg4OCw3IEBACiAgICAgICAgIAlkcHJpbnRmX2NkYXVkaW8oc3RkZGViLAogCQkJIkNEQVVESU9fbWNpUmVzdW1lIC8vIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCAlMDhsWCAhXG4iLCAKIAkJCWxwUGFybXMtPmR3Q2FsbGJhY2spOwotCQltY2lEcml2ZXJOb3RpZnkoKEhXTkQpTE9XT1JEKGxwUGFybXMtPmR3Q2FsbGJhY2spLCAKKwkJbWNpRHJpdmVyTm90aWZ5KChIV05EMTYpTE9XT1JEKGxwUGFybXMtPmR3Q2FsbGJhY2spLCAKIAkJCUNEQURldlt3RGV2SURdLndOb3RpZnlEZXZpY2VJRCwgTUNJX05PVElGWV9TVUNDRVNTRlVMKTsKIAkJfQogCXJldHVybiAwOwpAQCAtOTM3LDcgKzkzNyw3IEBACiAgICAgICAgIAlkcHJpbnRmX2NkYXVkaW8oc3RkZGViLAogCQkJIkNEQVVESU9fbWNpU2VlayAvLyBNQ0lfTk9USUZZX1NVQ0NFU1NGVUwgJTA4bFggIVxuIiwgCiAJCQlscFBhcm1zLT5kd0NhbGxiYWNrKTsKLQkJbWNpRHJpdmVyTm90aWZ5KChIV05EKUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCisJCW1jaURyaXZlck5vdGlmeSgoSFdORDE2KUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCiAJCQlDREFEZXZbd0RldklEXS53Tm90aWZ5RGV2aWNlSUQsIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCk7CiAJCX0KIAlyZXR1cm4gZHdSZXQ7CkBAIC0xMDEwLDcgKzEwMTAsNyBAQAogICAgICAgICAJZHByaW50Zl9jZGF1ZGlvKHN0ZGRlYiwKIAkJCSJDREFVRElPX21jaVNldCAvLyBNQ0lfTk9USUZZX1NVQ0NFU1NGVUwgJTA4bFggIVxuIiwgCiAJCQlscFBhcm1zLT5kd0NhbGxiYWNrKTsKLQkJbWNpRHJpdmVyTm90aWZ5KChIV05EKUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCisJCW1jaURyaXZlck5vdGlmeSgoSFdORDE2KUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCiAJCQlDREFEZXZbd0RldklEXS53Tm90aWZ5RGV2aWNlSUQsIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCk7CiAJCX0KIAlyZXR1cm4gMDsKQEAgLTEwNDcsNyArMTA0Nyw3IEBACiAJCWNhc2UgRFJWX1FVRVJZQ09ORklHVVJFOgogCQkJcmV0dXJuIDE7CiAJCWNhc2UgRFJWX0NPTkZJR1VSRToKLQkJCU1lc3NhZ2VCb3gxNigoSFdORClOVUxMLCAiU2FtcGxlIE11bHRpTWVkaWEgTGludXggRHJpdmVyICEiLCAKKwkJCU1lc3NhZ2VCb3gxNigwLCAiU2FtcGxlIE11bHRpTWVkaWEgTGludXggRHJpdmVyICEiLCAKIAkJCQkJCQkJIk1NTGludXggRHJpdmVyIiwgTUJfT0spOwogCQkJcmV0dXJuIDE7CiAJCWNhc2UgRFJWX0lOU1RBTEw6CmRpZmYgLS1naXQgYS9tdWx0aW1lZGlhL21jaXN0cmluZy5jIGIvbXVsdGltZWRpYS9tY2lzdHJpbmcuYwppbmRleCA5M2ZhMDYwLi45MWFmMDhkIDEwMDY0NAotLS0gYS9tdWx0aW1lZGlhL21jaXN0cmluZy5jCisrKyBiL211bHRpbWVkaWEvbWNpc3RyaW5nLmMKQEAgLTIwOTUsNyArMjA5NSw3IEBACiAgKiBpdCBpcyB1c2VkLiAoaW1hZ2luZSAiY2xvc2UgYWxsIikuIE5vdCBpbXBsZW1lbnRlZCB5ZXQuCiAgKi8KIERXT1JEIG1jaVNlbmRTdHJpbmcgKExQQ1NUUiBscHN0ckNvbW1hbmQsIExQU1RSIGxwc3RyUmV0dXJuU3RyaW5nLCAKLQlVSU5UIHVSZXR1cm5MZW5ndGgsIEhXTkQgaHduZENhbGxiYWNrKQorCVVJTlQgdVJldHVybkxlbmd0aCwgSFdORDE2IGh3bmRDYWxsYmFjaykKIHsKIAljaGFyCSpjbWQsKmRldiwqYXJncywqKmtleXdvcmRzOwogCVdPUkQJdURldlR5cD0wLHdEZXZJRD0wOwpkaWZmIC0tZ2l0IGEvbXVsdGltZWRpYS9taWRpLmMgYi9tdWx0aW1lZGlhL21pZGkuYwppbmRleCBhZGRiZjE2Li41ZDA4ZDdiIDEwMDY0NAotLS0gYS9tdWx0aW1lZGlhL21pZGkuYworKysgYi9tdWx0aW1lZGlhL21pZGkuYwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJTUNJTWlkaURldlt3RGV2SURdLmR3U3RhdHVzID0gTUNJX01PREVfU1RPUDsKIAlpZiAoZHdGbGFncyAmIE1DSV9OT1RJRlkpIHsKIAkJZHByaW50Zl9taWRpKHN0ZGRlYiwgIk1JRElfbWNpUGxheSAvLyBNQ0lfTk9USUZZX1NVQ0NFU1NGVUwgJTA4bFggIVxuIiwgbHBQYXJtcy0+ZHdDYWxsYmFjayk7Ci0JCW1jaURyaXZlck5vdGlmeSgoSFdORClMT1dPUkQobHBQYXJtcy0+ZHdDYWxsYmFjayksIAorCQltY2lEcml2ZXJOb3RpZnkoKEhXTkQxNilMT1dPUkQobHBQYXJtcy0+ZHdDYWxsYmFjayksIAogCQkJTUNJTWlkaURldlt3RGV2SURdLndOb3RpZnlEZXZpY2VJRCwgTUNJX05PVElGWV9TVUNDRVNTRlVMKTsKICNpZiAwCiAJCWV4aXQoMSk7CkBAIC01NTAsNyArNTUwLDcgQEAKIAlNQ0lNaWRpRGV2W3dEZXZJRF0uZHdTdGF0dXMgPSBNQ0lfTU9ERV9TVE9QOwogCWlmIChkd0ZsYWdzICYgTUNJX05PVElGWSkgewogCQlkcHJpbnRmX21pZGkoc3RkZGViLCAiTUlESV9tY2lSZWNvcmQgLy8gTUNJX05PVElGWV9TVUNDRVNTRlVMICUwOGxYICFcbiIsIGxwUGFybXMtPmR3Q2FsbGJhY2spOwotCQltY2lEcml2ZXJOb3RpZnkoKEhXTkQpTE9XT1JEKGxwUGFybXMtPmR3Q2FsbGJhY2spLCAKKwkJbWNpRHJpdmVyTm90aWZ5KChIV05EMTYpTE9XT1JEKGxwUGFybXMtPmR3Q2FsbGJhY2spLCAKIAkJCU1DSU1pZGlEZXZbd0RldklEXS53Tm90aWZ5RGV2aWNlSUQsIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCk7CiAJCX0KIAlyZXR1cm4gMDsKQEAgLTczNSw3ICs3MzUsNyBAQAogCQl9CiAJaWYgKGR3RmxhZ3MgJiBNQ0lfTk9USUZZKSB7CiAJCWRwcmludGZfbWlkaShzdGRkZWIsICJNSURJX21jaVN0YXR1cyAvLyBNQ0lfTk9USUZZX1NVQ0NFU1NGVUwgJTA4bFggIVxuIiwgbHBQYXJtcy0+ZHdDYWxsYmFjayk7Ci0JCW1jaURyaXZlck5vdGlmeSgoSFdORClMT1dPUkQobHBQYXJtcy0+ZHdDYWxsYmFjayksIAorCQltY2lEcml2ZXJOb3RpZnkoKEhXTkQxNilMT1dPUkQobHBQYXJtcy0+ZHdDYWxsYmFjayksIAogCQkJTUNJTWlkaURldlt3RGV2SURdLndOb3RpZnlEZXZpY2VJRCwgTUNJX05PVElGWV9TVUNDRVNTRlVMKTsKIAkJfQogIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL211bHRpbWVkaWEvbW1zeXN0ZW0uYyBiL211bHRpbWVkaWEvbW1zeXN0ZW0uYwppbmRleCBiZmUwNTg4Li4xMjMzN2E2IDEwMDY0NAotLS0gYS9tdWx0aW1lZGlhL21tc3lzdGVtLmMKKysrIGIvbXVsdGltZWRpYS9tbXN5c3RlbS5jCkBAIC01MzcsNyArNTM3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAJCQkJbWNpRHJpdmVyTm90aWZ5CQkJW01NU1lTVEVNLjcxMV0KICovCi1CT09MIG1jaURyaXZlck5vdGlmeShIV05EIGhXbmRDYWxsQmFjaywgVUlOVCB3RGV2SUQsIFVJTlQgd1N0YXR1cykKK0JPT0wgbWNpRHJpdmVyTm90aWZ5KEhXTkQxNiBoV25kQ2FsbEJhY2ssIFVJTlQgd0RldklELCBVSU5UIHdTdGF0dXMpCiB7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJtY2lEcml2ZXJOb3RpZnkoJTA0WCwgJXUsICUwNFgpXG4iLCBoV25kQ2FsbEJhY2ssIHdEZXZJRCwgd1N0YXR1cyk7CiAJaWYgKCFJc1dpbmRvdyhoV25kQ2FsbEJhY2spKSByZXR1cm4gRkFMU0U7CmRpZmYgLS1naXQgYS9vYmplY3RzL2NvbG9yLmMgYi9vYmplY3RzL2NvbG9yLmMKaW5kZXggNzZhMjRjYi4uNWQxYWJkOSAxMDA2NDQKLS0tIGEvb2JqZWN0cy9jb2xvci5jCisrKyBiL29iamVjdHMvY29sb3IuYwpAQCAtMTM1LDcgKzEzNSw3IEBACiAgICAgcmV0dXJuIGNTcGFjZS5mbGFnczsKIH0KIAotQ09MT1JSRUYgQ09MT1JfR2V0U3lzdGVtUGFsZXR0ZUVudHJ5KEJZVEUgaSkKK0NPTE9SUkVGIENPTE9SX0dldFN5c3RlbVBhbGV0dGVFbnRyeShVSU5UMzIgaSkKIHsKICByZXR1cm4gKihDT0xPUlJFRiopKENPTE9SX3N5c1BhbCArIGkpICYgMHgwMGZmZmZmZjsKIH0KQEAgLTU2Nyw3ICs1NjcsNyBAQAogICAgICAgICBwYWxQdHItPnBhbFBhbEVudHJ5W2ldLnBlQmx1ZSA9IF9fc3lzUGFsVGVtcGxhdGVbaV0ucGVCbHVlOwogICAgICAgICBwYWxQdHItPnBhbFBhbEVudHJ5W2ldLnBlRmxhZ3MgPSAwOyAgCiAgICAgfQotICAgIGhwYWxldHRlID0gQ3JlYXRlUGFsZXR0ZSggcGFsUHRyICk7CisgICAgaHBhbGV0dGUgPSBDcmVhdGVQYWxldHRlMTYoIHBhbFB0ciApOwogCiAgICAgcGFsT2JqID0gKFBBTEVUVEVPQkoqKSBHRElfR2V0T2JqUHRyKCBocGFsZXR0ZSwgUEFMRVRURV9NQUdJQyApOwogCmRpZmYgLS1naXQgYS9vYmplY3RzL2N1cnNvcmljb24uYyBiL29iamVjdHMvY3Vyc29yaWNvbi5jCmluZGV4IDQ2YTU0MDUuLjYyYjQ4MjMgMTAwNjQ0Ci0tLSBhL29iamVjdHMvY3Vyc29yaWNvbi5jCisrKyBiL29iamVjdHMvY3Vyc29yaWNvbi5jCkBAIC0yMiw2ICsyMiw3IEBACiAgKiB0aGUgYml0cyBkaXJlY3RseSA6LSgKICAqLwogCisjZGVmaW5lIE5PX1RSQU5TSVRJT05fVFlQRVMgIC8qIFRoaXMgZmlsZSBpcyBXaW4zMi1jbGVhbiAqLwogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgIndpbmRvd3MuaCIKQEAgLTM4LDkgKzM5LDkgQEAKIAogZXh0ZXJuIFVJTlQxNiBDT0xPUl9HZXRTeXN0ZW1QYWxldHRlU2l6ZSgpOwogCi1DdXJzb3IgQ1VSU09SSUNPTl9YQ3Vyc29yID0gTm9uZTsgIC8qIEN1cnJlbnQgWCBjdXJzb3IgKi8KLXN0YXRpYyBIQ1VSU09SMTYgaEFjdGl2ZUN1cnNvciA9IDA7ICAvKiBBY3RpdmUgY3Vyc29yICovCi1zdGF0aWMgaW50IENVUlNPUl9TaG93Q291bnQgPSAwOyAgIC8qIEN1cnNvciBkaXNwbGF5IGNvdW50ICovCitDdXJzb3IgQ1VSU09SSUNPTl9YQ3Vyc29yID0gTm9uZTsgICAgLyogQ3VycmVudCBYIGN1cnNvciAqLworc3RhdGljIEhDVVJTT1IzMiBoQWN0aXZlQ3Vyc29yID0gMDsgIC8qIEFjdGl2ZSBjdXJzb3IgKi8KK3N0YXRpYyBJTlQzMiBDVVJTT1JfU2hvd0NvdW50ID0gMDsgICAvKiBDdXJzb3IgZGlzcGxheSBjb3VudCAqLwogc3RhdGljIFJFQ1QzMiBDVVJTT1JfQ2xpcFJlY3Q7ICAgICAgIC8qIEN1cnNvciBjbGlwcGluZyByZWN0ICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yMDAsOSArMjAxLDEwIEBACiAgKiBMb2FkIHRoZSBpY29uL2N1cnNvciBkaXJlY3RvcnkgZm9yIGEgZ2l2ZW4gcmVzb3VyY2UgbmFtZSBhbmQgZmluZCB0aGUKICAqIGJlc3QgbWF0Y2hpbmcgZW50cnkuCiAgKi8KLXN0YXRpYyBCT09MIENVUlNPUklDT05fTG9hZERpckVudHJ5KEhJTlNUQU5DRTMyIGhJbnN0YW5jZSwgU0VHUFRSIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBjb2xvcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MIGZDdXJzb3IsIENVUlNPUklDT05ESVJFTlRSWSAqZGlyRW50cnkpCitzdGF0aWMgQk9PTDMyIENVUlNPUklDT05fTG9hZERpckVudHJ5KCBISU5TVEFOQ0UzMiBoSW5zdGFuY2UsIFNFR1BUUiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UMzIgd2lkdGgsIElOVDMyIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVDMyIGNvbG9ycywgQk9PTDMyIGZDdXJzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJTT1JJQ09ORElSRU5UUlkgKmRpckVudHJ5ICkKIHsKICAgICBIUlNSQzE2IGhSc3JjOwogICAgIEhHTE9CQUwxNiBoTWVtOwpAQCAtMjM0LDcgKzIzNiw3IEBACiAgKiBDcmVhdGUgYSBjdXJzb3Igb3IgaWNvbiBmcm9tIGEgcmVzb3VyY2UuCiAgKi8KIEhHTE9CQUwxNiBDVVJTT1JJQ09OX0xvYWRIYW5kbGVyKCBIR0xPQkFMMTYgaGFuZGxlLCBISU5TVEFOQ0UxNiBoSW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCBmQ3Vyc29yICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MMzIgZkN1cnNvciApCiB7CiAgICAgSEJJVE1BUDMyIGhBbmRCaXRzLCBoWG9yQml0czsKICAgICBIREMzMiBoZGM7CkBAIC0yOTQsNiArMjk2LDExIEBACiAKICAgICBoWG9yQml0cyA9IENyZWF0ZURJQml0bWFwMzIoIGhkYywgJnBJbmZvLT5ibWlIZWFkZXIsIENCTV9JTklULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKWJtaSArIHNpemUsIHBJbmZvLCBESUJfUkdCX0NPTE9SUyApOworICAgIGlmICghaFhvckJpdHMpIHsKKyAgICAgICAgZnJlZSggcEluZm8gKTsKKyAgICAJUmVsZWFzZURDMzIoIDAsIGhkYyApOworICAgIAlyZXR1cm4gMDsKKyAgICB9CiAKICAgICAvKiBGaXggdGhlIGJpdG1hcCBoZWFkZXIgdG8gbG9hZCB0aGUgbW9ub2Nocm9tZSBtYXNrICovCiAKQEAgLTMyNSw2ICszMzIsMTEgQEAKICAgICBoQW5kQml0cyA9IENyZWF0ZURJQml0bWFwMzIoIGhkYywgJnBJbmZvLT5ibWlIZWFkZXIsIENCTV9JTklULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cywgcEluZm8sIERJQl9SR0JfQ09MT1JTICk7CiAgICAgUmVsZWFzZURDMzIoIDAsIGhkYyApOworICAgIGlmICghaEFuZEJpdHMpIHsKKyAgICAgICAgRGVsZXRlT2JqZWN0MzIoIGhYb3JCaXRzICk7CisgICAgICAgIGZyZWUoIHBJbmZvICk7CisgICAgCXJldHVybiAwOworICAgIH0KIAogICAgIC8qIE5vdyBjcmVhdGUgdGhlIENVUlNPUklDT05JTkZPIHN0cnVjdHVyZSAqLwogCkBAIC0zNjksOCArMzgxLDggQEAKICAqIExvYWQgYSBjdXJzb3Igb3IgaWNvbi4KICAqLwogc3RhdGljIEhHTE9CQUwxNiBDVVJTT1JJQ09OX0xvYWQoIEhJTlNUQU5DRTE2IGhJbnN0YW5jZSwgU0VHUFRSIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgY29sb3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgZkN1cnNvciApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UMzIgd2lkdGgsIElOVDMyIGhlaWdodCwgSU5UMzIgY29sb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wzMiBmQ3Vyc29yICkKIHsKICAgICBIR0xPQkFMMTYgaGFuZGxlLCBoUmV0OwogICAgIEhSU1JDMTYgaFJzcmM7CkBAIC01MTMsOCArNTI1LDkgQEAKICByZXR1cm4gaFJldDsKIH0KIAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBMb2FkQ3Vyc29yICAgIChVU0VSLjE3MykKKyAqICAgICAgICAgICBMb2FkQ3Vyc29yMTYgICAgKFVTRVIuMTczKQogICovCiBIQ1VSU09SMTYgTG9hZEN1cnNvcjE2KCBISU5TVEFOQ0UxNiBoSW5zdGFuY2UsIFNFR1BUUiBuYW1lICkKIHsKQEAgLTUzMSw5ICs1NDQsOSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIExvYWRJY29uICAgIChVU0VSLjE3NCkKKyAqICAgICAgICAgICBMb2FkSWNvbjE2ICAgIChVU0VSLjE3NCkKICAqLwotSElDT04xNiBMb2FkSWNvbjE2KEhJTlNUQU5DRTE2IGhJbnN0YW5jZSxTRUdQVFIgbmFtZSkKK0hJQ09OMTYgTG9hZEljb24xNiggSElOU1RBTkNFMTYgaEluc3RhbmNlLCBTRUdQVFIgbmFtZSApCiB7CiAgICAgaWYgKEhJV09SRChuYW1lKSkKICAgICAgICAgZHByaW50Zl9pY29uKCBzdGRkZWIsICJMb2FkSWNvbjogJTA0eCAnJXMnXG4iLApAQCAtNTQ5LDExICs1NjIsMTEgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBDcmVhdGVDdXJzb3IgICAgKFVTRVIuNDA2KQorICogICAgICAgICAgIENyZWF0ZUN1cnNvcjE2ICAgIChVU0VSLjQwNikKICAqLwotSENVUlNPUjE2IENyZWF0ZUN1cnNvciggSElOU1RBTkNFMTYgaEluc3RhbmNlLCBJTlQgeEhvdFNwb3QsIElOVCB5SG90U3BvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIElOVCBuV2lkdGgsIElOVCBuSGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQllURSAqbHBBTkRiaXRzLCBjb25zdCBCWVRFICpscFhPUmJpdHMgKQorSENVUlNPUjE2IENyZWF0ZUN1cnNvcjE2KEhJTlNUQU5DRTE2IGhJbnN0YW5jZSwgSU5UMTYgeEhvdFNwb3QsIElOVDE2IHlIb3RTcG90LAorICAgICAgICAgICAgICAgICAgICAgICAgIElOVDE2IG5XaWR0aCwgSU5UMTYgbkhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBMUENWT0lEIGxwQU5EYml0cywgTFBDVk9JRCBscFhPUmJpdHMgKQogewogICAgIENVUlNPUklDT05JTkZPIGluZm8gPSB7IHsgeEhvdFNwb3QsIHlIb3RTcG90IH0sIG5XaWR0aCwgbkhlaWdodCwgMCwgMSwgMSB9OwogCkBAIC01NjQsMTIgKzU3Nyw0MyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIENyZWF0ZUljb24gICAgKFVTRVIuNDA3KQorICogICAgICAgICAgIENyZWF0ZUN1cnNvcjMyICAgIChVU0VSMzIuNjYpCiAgKi8KLUhJQ09OMTYgQ3JlYXRlSWNvbiggSElOU1RBTkNFMTYgaEluc3RhbmNlLCBJTlQgbldpZHRoLCBJTlQgbkhlaWdodCwgQllURSBiUGxhbmVzLAotICAgICAgICAgICAgICAgICAgQllURSBiQml0c1BpeGVsLCBjb25zdCBCWVRFKiBscEFORGJpdHMsIGNvbnN0IEJZVEUqIGxwWE9SYml0cykKK0hDVVJTT1IzMiBDcmVhdGVDdXJzb3IzMihISU5TVEFOQ0UzMiBoSW5zdGFuY2UsIElOVDMyIHhIb3RTcG90LCBJTlQzMiB5SG90U3BvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBJTlQzMiBuV2lkdGgsIElOVDMyIG5IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgTFBDVk9JRCBscEFORGJpdHMsIExQQ1ZPSUQgbHBYT1JiaXRzICkKIHsKLSAgICBDVVJTT1JJQ09OSU5GTyBpbmZvID0geyB7IDAsIDAgfSwgbldpZHRoLCBuSGVpZ2h0LCAwLCBiUGxhbmVzLCBiQml0c1BpeGVsIH07CisgICAgQ1VSU09SSUNPTklORk8gaW5mbyA9IHsgeyB4SG90U3BvdCwgeUhvdFNwb3QgfSwgbldpZHRoLCBuSGVpZ2h0LCAwLCAxLCAxIH07CisKKyAgICBkcHJpbnRmX2N1cnNvciggc3RkZGViLCAiQ3JlYXRlQ3Vyc29yOiAlZHglZCBzcG90PSVkLCVkIHhvcj0lcCBhbmQ9JXBcbiIsCisgICAgICAgICAgICAgICAgICAgIG5XaWR0aCwgbkhlaWdodCwgeEhvdFNwb3QsIHlIb3RTcG90LCBscFhPUmJpdHMsIGxwQU5EYml0cyk7CisgICAgcmV0dXJuIENyZWF0ZUN1cnNvckljb25JbmRpcmVjdCggaEluc3RhbmNlLCAmaW5mbywgbHBBTkRiaXRzLCBscFhPUmJpdHMgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBDcmVhdGVJY29uMTYgICAgKFVTRVIuNDA3KQorICovCitISUNPTjE2IENyZWF0ZUljb24xNiggSElOU1RBTkNFMTYgaEluc3RhbmNlLCBJTlQxNiBuV2lkdGgsIElOVDE2IG5IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgQllURSBiUGxhbmVzLCBCWVRFIGJCaXRzUGl4ZWwsCisgICAgICAgICAgICAgICAgICAgICAgTFBDVk9JRCBscEFORGJpdHMsIExQQ1ZPSUQgbHBYT1JiaXRzICkKK3sKKyAgICBDVVJTT1JJQ09OSU5GTyBpbmZvID0geyB7IDAsIDAgfSwgbldpZHRoLCBuSGVpZ2h0LCAwLCBiUGxhbmVzLCBiQml0c1BpeGVsfTsKKworICAgIGRwcmludGZfaWNvbiggc3RkZGViLCAiQ3JlYXRlSWNvbjogJWR4JWR4JWQsIHhvcj0lcCwgYW5kPSVwXG4iLAorICAgICAgICAgICAgICAgICAgbldpZHRoLCBuSGVpZ2h0LCBiUGxhbmVzICogYkJpdHNQaXhlbCwgbHBYT1JiaXRzLCBscEFORGJpdHMpOworICAgIHJldHVybiBDcmVhdGVDdXJzb3JJY29uSW5kaXJlY3QoIGhJbnN0YW5jZSwgJmluZm8sIGxwQU5EYml0cywgbHBYT1JiaXRzICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgQ3JlYXRlSWNvbjMyICAgIChVU0VSMzIuNzQpCisgKi8KK0hJQ09OMzIgQ3JlYXRlSWNvbjMyKCBISU5TVEFOQ0UzMiBoSW5zdGFuY2UsIElOVDMyIG5XaWR0aCwgSU5UMzIgbkhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICBCWVRFIGJQbGFuZXMsIEJZVEUgYkJpdHNQaXhlbCwKKyAgICAgICAgICAgICAgICAgICAgICBMUENWT0lEIGxwQU5EYml0cywgTFBDVk9JRCBscFhPUmJpdHMgKQoreworICAgIENVUlNPUklDT05JTkZPIGluZm8gPSB7IHsgMCwgMCB9LCBuV2lkdGgsIG5IZWlnaHQsIDAsIGJQbGFuZXMsIGJCaXRzUGl4ZWx9OwogCiAgICAgZHByaW50Zl9pY29uKCBzdGRkZWIsICJDcmVhdGVJY29uOiAlZHglZHglZCwgeG9yPSVwLCBhbmQ9JXBcbiIsCiAgICAgICAgICAgICAgICAgICBuV2lkdGgsIG5IZWlnaHQsIGJQbGFuZXMgKiBiQml0c1BpeGVsLCBscFhPUmJpdHMsIGxwQU5EYml0cyk7CkBAIC01ODAsMTAgKzYyNCw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDcmVhdGVDdXJzb3JJY29uSW5kaXJlY3QgICAgKFVTRVIuNDA4KQogICovCi1IR0xPQkFMMTYgQ3JlYXRlQ3Vyc29ySWNvbkluZGlyZWN0KCBISU5TVEFOQ0UxNiBoSW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJTT1JJQ09OSU5GTyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJZVEUgKmxwQU5EYml0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJZVEUgKmxwWE9SYml0cyApCitIR0xPQkFMMTYgQ3JlYXRlQ3Vyc29ySWNvbkluZGlyZWN0KEhJTlNUQU5DRTE2IGhJbnN0YW5jZSwgQ1VSU09SSUNPTklORk8gKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQQ1ZPSUQgbHBBTkRiaXRzLCBMUENWT0lEIGxwWE9SYml0cyApCiB7CiAgICAgSEdMT0JBTDE2IGhhbmRsZTsKICAgICBjaGFyICpwdHI7CkBAIC02MzcsOSArNjc5LDE4IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgRGVzdHJveUljb24gICAgKFVTRVIuNDU3KQorICogICAgICAgICAgIERlc3Ryb3lJY29uMTYgICAgKFVTRVIuNDU3KQogICovCi1CT09MIERlc3Ryb3lJY29uKCBISUNPTjE2IGhJY29uICkKK0JPT0wxNiBEZXN0cm95SWNvbjE2KCBISUNPTjE2IGhJY29uICkKK3sKKyAgICByZXR1cm4gRGVzdHJveUljb24zMiggaEljb24gKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBEZXN0cm95SWNvbjMyICAgIChVU0VSMzIuMTMyKQorICovCitCT09MMzIgRGVzdHJveUljb24zMiggSElDT04zMiBoSWNvbiApCiB7CiAgICAgZHByaW50Zl9pY29uKCBzdGRkZWIsICJEZXN0cm95SWNvbjogJTA0eFxuIiwgaEljb24gKTsKICAgICAvKiBGSVhNRTogc2hvdWxkIGNoZWNrIGZvciBPRU0gaWNvbiBoZXJlICovCkBAIC02NDgsOSArNjk5LDE4IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgRGVzdHJveUN1cnNvciAgICAoVVNFUi40NTgpCisgKiAgICAgICAgICAgRGVzdHJveUN1cnNvcjE2ICAgIChVU0VSLjQ1OCkKICAqLwotQk9PTCBEZXN0cm95Q3Vyc29yKCBIQ1VSU09SMTYgaEN1cnNvciApCitCT09MMTYgRGVzdHJveUN1cnNvcjE2KCBIQ1VSU09SMTYgaEN1cnNvciApCit7CisgICAgcmV0dXJuIERlc3Ryb3lDdXJzb3IzMiggaEN1cnNvciApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIERlc3Ryb3lDdXJzb3IzMiAgICAoVVNFUjMyLjEzMSkKKyAqLworQk9PTDMyIERlc3Ryb3lDdXJzb3IzMiggSENVUlNPUjMyIGhDdXJzb3IgKQogewogICAgIGRwcmludGZfY3Vyc29yKCBzdGRkZWIsICJEZXN0cm95Q3Vyc29yOiAlMDR4XG4iLCBoQ3Vyc29yICk7CiAgICAgLyogRklYTUU6IHNob3VsZCBjaGVjayBmb3IgT0VNIGN1cnNvciBoZXJlICovCkBAIC02NTksMTMgKzcxOSwyMiBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIERyYXdJY29uICAgIChVU0VSLjg0KQorICogICAgICAgICAgIERyYXdJY29uMTYgICAgKFVTRVIuODQpCiAgKi8KLUJPT0wgRHJhd0ljb24oIEhEQzE2IGhkYywgSU5UIHgsIElOVCB5LCBISUNPTjE2IGhJY29uICkKK0JPT0wxNiBEcmF3SWNvbjE2KCBIREMxNiBoZGMsIElOVDE2IHgsIElOVDE2IHksIEhJQ09OMTYgaEljb24gKQoreworICAgIHJldHVybiBEcmF3SWNvbjMyKCBoZGMsIHgsIHksIGhJY29uICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRHJhd0ljb24zMiAgICAoVVNFUjMyLjE1OCkKKyAqLworQk9PTDMyIERyYXdJY29uMzIoIEhEQzMyIGhkYywgSU5UMzIgeCwgSU5UMzIgeSwgSElDT04zMiBoSWNvbiApCiB7CiAgICAgQ1VSU09SSUNPTklORk8gKnB0cjsKICAgICBIREMzMiBoTWVtREM7Ci0gICAgSEJJVE1BUDE2IGhYb3JCaXRzLCBoQW5kQml0czsKKyAgICBIQklUTUFQMzIgaFhvckJpdHMsIGhBbmRCaXRzOwogICAgIENPTE9SUkVGIG9sZEZnLCBvbGRCZzsKIAogICAgIGlmICghKHB0ciA9IChDVVJTT1JJQ09OSU5GTyAqKUdsb2JhbExvY2sxNiggaEljb24gKSkpIHJldHVybiBGQUxTRTsKQEAgLTcxOSw3ICs3ODgsNyBAQAogICoKICAqIENoYW5nZSB0aGUgWCBjdXJzb3IuIEhlbHBlciBmdW5jdGlvbiBmb3IgU2V0Q3Vyc29yKCkgYW5kIFNob3dDdXJzb3IoKS4KICAqLwotc3RhdGljIEJPT0wgQ1VSU09SSUNPTl9TZXRDdXJzb3IoIEhDVVJTT1IxNiBoQ3Vyc29yICkKK3N0YXRpYyBCT09MMzIgQ1VSU09SSUNPTl9TZXRDdXJzb3IoIEhDVVJTT1IxNiBoQ3Vyc29yICkKIHsKICAgICBQaXhtYXAgcGl4bWFwQml0cywgcGl4bWFwTWFzaywgcGl4bWFwQWxsOwogICAgIFhDb2xvciBmZywgYmc7CkBAIC04NDIsNyArOTExLDcgQEAKICAgICBlbHNlCiAgICAgewogICAgICAgICAvKiBTZXQgdGhlIHNhbWUgY3Vyc29yIGZvciBhbGwgdG9wLWxldmVsIHdpbmRvd3MgKi8KLSAgICAgICAgSFdORCBod25kID0gR2V0V2luZG93MzIoIEdldERlc2t0b3BXaW5kb3czMigpLCBHV19DSElMRCApOworICAgICAgICBIV05EMzIgaHduZCA9IEdldFdpbmRvdzMyKCBHZXREZXNrdG9wV2luZG93MzIoKSwgR1dfQ0hJTEQgKTsKICAgICAgICAgd2hpbGUoaHduZCkKICAgICAgICAgewogICAgICAgICAgICAgV2luZG93IHdpbiA9IFdJTl9HZXRYV2luZG93KCBod25kICk7CkBAIC04NTUsMTEgKzkyNCwyMCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIFNldEN1cnNvciAgICAoVVNFUi42OSkKKyAqICAgICAgICAgICBTZXRDdXJzb3IxNiAgICAoVVNFUi42OSkKICAqLwotSENVUlNPUjE2IFNldEN1cnNvciggSENVUlNPUjE2IGhDdXJzb3IgKQorSENVUlNPUjE2IFNldEN1cnNvcjE2KCBIQ1VSU09SMTYgaEN1cnNvciApCiB7Ci0gICAgSENVUlNPUjE2IGhPbGRDdXJzb3I7CisgICAgcmV0dXJuIChIQ1VSU09SMTYpU2V0Q3Vyc29yMzIoIGhDdXJzb3IgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBTZXRDdXJzb3IzMiAgICAoVVNFUjMyLjQ3MSkKKyAqLworSENVUlNPUjMyIFNldEN1cnNvcjMyKCBIQ1VSU09SMzIgaEN1cnNvciApCit7CisgICAgSENVUlNPUjMyIGhPbGRDdXJzb3I7CiAKICAgICBpZiAoaEN1cnNvciA9PSBoQWN0aXZlQ3Vyc29yKSByZXR1cm4gaEFjdGl2ZUN1cnNvcjsgIC8qIE5vIGNoYW5nZSAqLwogICAgIGRwcmludGZfY3Vyc29yKCBzdGRkZWIsICJTZXRDdXJzb3I6ICUwNHhcbiIsIGhDdXJzb3IgKTsKQEAgLTg3MiwxOSArOTUwLDM4IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgU2V0Q3Vyc29yUG9zICAgIChVU0VSLjcwKQorICogICAgICAgICAgIFNldEN1cnNvclBvczE2ICAgIChVU0VSLjcwKQogICovCi12b2lkIFNldEN1cnNvclBvcyggc2hvcnQgeCwgc2hvcnQgeSApCit2b2lkIFNldEN1cnNvclBvczE2KCBJTlQxNiB4LCBJTlQxNiB5ICkKIHsKLSAgICBkcHJpbnRmX2N1cnNvciggc3RkZGViLCAiU2V0Q3Vyc29yUG9zOiB4PSVkIHk9JWRcbiIsIHgsIHkgKTsKLSAgICBYV2FycFBvaW50ZXIoIGRpc3BsYXksIHJvb3RXaW5kb3csIHJvb3RXaW5kb3csIDAsIDAsIDAsIDAsIHgsIHkgKTsKKyAgICBTZXRDdXJzb3JQb3MzMiggeCwgeSApOwogfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIFNob3dDdXJzb3IgICAgKFVTRVIuNzEpCisgKiAgICAgICAgICAgU2V0Q3Vyc29yUG9zMzIgICAgKFVTRVIzMi40NzMpCiAgKi8KLWludCBTaG93Q3Vyc29yKCBCT09MIGJTaG93ICkKK0JPT0wzMiBTZXRDdXJzb3JQb3MzMiggSU5UMzIgeCwgSU5UMzIgeSApCit7CisgICAgZHByaW50Zl9jdXJzb3IoIHN0ZGRlYiwgIlNldEN1cnNvclBvczogeD0lZCB5PSVkXG4iLCB4LCB5ICk7CisgICAgWFdhcnBQb2ludGVyKCBkaXNwbGF5LCByb290V2luZG93LCByb290V2luZG93LCAwLCAwLCAwLCAwLCB4LCB5ICk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgU2hvd0N1cnNvcjE2ICAgIChVU0VSLjcxKQorICovCitJTlQxNiBTaG93Q3Vyc29yMTYoIEJPT0wxNiBiU2hvdyApCit7CisgICAgcmV0dXJuIFNob3dDdXJzb3IzMiggYlNob3cgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBTaG93Q3Vyc29yMzIgICAgKFVTRVIzMi41MjkpCisgKi8KK0lOVDMyIFNob3dDdXJzb3IzMiggQk9PTDMyIGJTaG93ICkKIHsKICAgICBkcHJpbnRmX2N1cnNvciggc3RkZGViLCAiU2hvd0N1cnNvcjogJWQsIGNvdW50PSVkXG4iLAogICAgICAgICAgICAgICAgICAgICBiU2hvdywgQ1VSU09SX1Nob3dDb3VudCApOwpAQCAtOTA0LDkgKzEwMDEsMTggQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBHZXRDdXJzb3IgICAgKFVTRVIuMjQ3KQorICogICAgICAgICAgIEdldEN1cnNvcjE2ICAgIChVU0VSLjI0NykKICAqLwotSENVUlNPUjE2IEdldEN1cnNvcih2b2lkKQorSENVUlNPUjE2IEdldEN1cnNvcjE2KHZvaWQpCit7CisgICAgcmV0dXJuIGhBY3RpdmVDdXJzb3I7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2V0Q3Vyc29yMzIgICAgKFVTRVIzMi4yMjYpCisgKi8KK0hDVVJTT1IzMiBHZXRDdXJzb3IzMih2b2lkKQogewogICAgIHJldHVybiBoQWN0aXZlQ3Vyc29yOwogfQpAQCAtMTAyNyw3ICsxMTMzLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkgICAgTG9hZEljb25IYW5kbGVyICAgIChVU0VSLjQ1NikKICAqLwotSElDT04xNiBMb2FkSWNvbkhhbmRsZXIoIEhHTE9CQUwxNiBoUmVzb3VyY2UsIEJPT0wgYk5ldyApCitISUNPTjE2IExvYWRJY29uSGFuZGxlciggSEdMT0JBTDE2IGhSZXNvdXJjZSwgQk9PTDE2IGJOZXcgKQogewogICAgIGRwcmludGZfY3Vyc29yKHN0ZGRlYiwiTG9hZEljb25IYW5kbGVyOiBoUmVzPSUwNHhcbiIsaFJlc291cmNlKTsKIApkaWZmIC0tZ2l0IGEvb2JqZWN0cy9kYy5jIGIvb2JqZWN0cy9kYy5jCmluZGV4IDAyYmM1Y2UuLjg4OTUxOGYgMTAwNjQ0Ci0tLSBhL29iamVjdHMvZGMuYworKysgYi9vYmplY3RzL2RjLmMKQEAgLTc5MSwxNCArNzkxLDIzIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgR2V0RGV2aWNlQ2FwcyAgICAoR0RJLjgwKQorICogICAgICAgICAgIEdldERldmljZUNhcHMxNiAgICAoR0RJLjgwKQogICovCi1pbnQgR2V0RGV2aWNlQ2FwcyggSERDMTYgaGRjLCBXT1JEIGNhcCApCitJTlQxNiBHZXREZXZpY2VDYXBzMTYoIEhEQzE2IGhkYywgSU5UMTYgY2FwICkKK3sKKyAgICByZXR1cm4gR2V0RGV2aWNlQ2FwczMyKCBoZGMsIGNhcCApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdldERldmljZUNhcHMzMiAgICAoR0RJMzIuMTcxKQorICovCitJTlQzMiBHZXREZXZpY2VDYXBzMzIoIEhEQzMyIGhkYywgSU5UMzIgY2FwICkKIHsKICAgICBEQyAqIGRjID0gKERDICopIEdESV9HZXRPYmpQdHIoIGhkYywgRENfTUFHSUMgKTsKICAgICBpZiAoIWRjKSByZXR1cm4gMDsKIAotICAgIGlmIChjYXAgPiBzaXplb2YoRGV2aWNlQ2Fwcyktc2l6ZW9mKFdPUkQpKSByZXR1cm4gMDsKKyAgICBpZiAoKGNhcCA8IDApIHx8IChjYXAgPiBzaXplb2YoRGV2aWNlQ2Fwcyktc2l6ZW9mKFdPUkQpKSkgcmV0dXJuIDA7CiAgICAgCiAgICAgZHByaW50Zl9kYyhzdGRkZWIsICJHZXREZXZpY2VDYXBzKCUwNHgsJWQpOiByZXR1cm5pbmcgJWRcbiIsCiAJICAgIGhkYywgY2FwLCAqKFdPUkQgKikoKChjaGFyICopZGMtPncuZGV2Q2FwcykgKyBjYXApICk7CmRpZmYgLS1naXQgYS9vYmplY3RzL2ZvbnQuYyBiL29iamVjdHMvZm9udC5jCmluZGV4IGI0YTNhMzIuLmVkZjAyNjYgMTAwNjQ0Ci0tLSBhL29iamVjdHMvZm9udC5jCisrKyBiL29iamVjdHMvZm9udC5jCkBAIC03NTQsOSArNzU0LDE4IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgU2V0TWFwcGVyRmxhZ3MgICAgKEdESS4zNDkpCisgKiAgICAgICAgICAgU2V0TWFwcGVyRmxhZ3MxNiAgICAoR0RJLjM0OSkKICAqLwotRFdPUkQgU2V0TWFwcGVyRmxhZ3MoSERDMTYgaERDLCBEV09SRCBkd0ZsYWcpCitEV09SRCBTZXRNYXBwZXJGbGFnczE2KCBIREMxNiBoREMsIERXT1JEIGR3RmxhZyApCit7CisgICAgcmV0dXJuIFNldE1hcHBlckZsYWdzMzIoIGhEQywgZHdGbGFnICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgU2V0TWFwcGVyRmxhZ3MzMiAgICAoR0RJMzIuMzIyKQorICovCitEV09SRCBTZXRNYXBwZXJGbGFnczMyKCBIREMzMiBoREMsIERXT1JEIGR3RmxhZyApCiB7CiAgICAgZHByaW50Zl9mb250KHN0ZG5pbXAsIlNldG1hcHBlckZsYWdzKCUwNHgsICUwOGxYKSAvLyBFbXB0eSBTdHViICFcbiIsIAogCQkgaERDLCBkd0ZsYWcpOyAKZGlmZiAtLWdpdCBhL29iamVjdHMvZ2Rpb2JqLmMgYi9vYmplY3RzL2dkaW9iai5jCmluZGV4IDAzNTkzNDMuLmQ4ZWNjYWEgMTAwNjQ0Ci0tLSBhL29iamVjdHMvZ2Rpb2JqLmMKKysrIGIvb2JqZWN0cy9nZGlvYmouYwpAQCAtNywxMCArNywxMCBAQAogI2RlZmluZSBOT19UUkFOU0lUSU9OX1RZUEVTICAvKiBUaGlzIGZpbGUgaXMgV2luMzItY2xlYW4gKi8KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgImdkaS5oIgogI2luY2x1ZGUgImNvbG9yLmgiCiAjaW5jbHVkZSAiYml0bWFwLmgiCiAjaW5jbHVkZSAiYnJ1c2guaCIKKyNpbmNsdWRlICJkYy5oIgogI2luY2x1ZGUgImZvbnQuaCIKICNpbmNsdWRlICJoZWFwLmgiCiAjaW5jbHVkZSAicGFsZXR0ZS5oIgpkaWZmIC0tZ2l0IGEvb2JqZWN0cy9tZXRhZmlsZS5jIGIvb2JqZWN0cy9tZXRhZmlsZS5jCmluZGV4IDAxNzRjOTIuLmQ1ZGNmMTIgMTAwNjQ0Ci0tLSBhL29iamVjdHMvbWV0YWZpbGUuYworKysgYi9vYmplY3RzL21ldGFmaWxlLmMKQEAgLTU1LDEwICs1NSwxOCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgR2V0TWV0YWZpbGUgICAgICAgICBHREkuMTI0IEJ5IEtlbm55IE1hY0RvbmFsZCAzMCBOb3YgOTQKKyAqICAgICAgICAgR2V0TWV0YWZpbGUxNiAgIChHREkuMTI0KQogICovCitITUVUQUZJTEUxNiBHZXRNZXRhRmlsZTE2KCBMUENTVFIgbHBGaWxlbmFtZSApCit7CisgICAgcmV0dXJuIEdldE1ldGFGaWxlMzJBKCBscEZpbGVuYW1lICk7Cit9CiAKLUhNRVRBRklMRTE2IEdldE1ldGFGaWxlKExQU1RSIGxwRmlsZW5hbWUpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgR2V0TWV0YWZpbGUzMkEgICAoR0RJMzIuMTk3KQorICovCitITUVUQUZJTEUzMiBHZXRNZXRhRmlsZTMyQSggTFBDU1RSIGxwRmlsZW5hbWUgKQogewogICBITUVUQUZJTEUxNiBobWY7CiAgIE1FVEFIRUFERVIgKm1oOwpAQCAtNzMsMTcgKzgxLDIxIEBACiAgIGhtZiA9IEdsb2JhbEFsbG9jMTYoR01FTV9NT1ZFQUJMRSwgTUZIRUFERVJTSVpFKTsKICAgbWggPSAoTUVUQUhFQURFUiAqKUdsb2JhbExvY2sxNihobWYpOwogICAKLSAgaWYgKCFtaCkgeworICBpZiAoIW1oKQorICB7CiAgICAgR2xvYmFsRnJlZTE2KGhtZik7CiAgICAgcmV0dXJuIDA7CiAgIH0KICAgCi0gIGlmICgoaEZpbGUgPSBfbG9wZW4zMihscEZpbGVuYW1lLCBPRl9SRUFEKSkgPT0gSEZJTEVfRVJST1IzMikgeworICBpZiAoKGhGaWxlID0gX2xvcGVuMzIobHBGaWxlbmFtZSwgT0ZfUkVBRCkpID09IEhGSUxFX0VSUk9SMzIpCisgIHsKICAgICBHbG9iYWxGcmVlMTYoaG1mKTsKICAgICByZXR1cm4gMDsKICAgfQogICAKLSAgaWYgKF9scmVhZDMyKGhGaWxlLCAoY2hhciAqKW1oLCBNRkhFQURFUlNJWkUpID09IEhGSUxFX0VSUk9SMzIpIHsKKyAgaWYgKF9scmVhZDMyKGhGaWxlLCAoY2hhciAqKW1oLCBNRkhFQURFUlNJWkUpID09IEhGSUxFX0VSUk9SMzIpCisgIHsKKyAgICBfbGNsb3NlMzIoIGhGaWxlICk7CiAgICAgR2xvYmFsRnJlZTE2KGhtZik7CiAgICAgcmV0dXJuIDA7CiAgIH0KQEAgLTkzLDIwICsxMDUsMjUgQEAKICAgaG1mID0gR2xvYmFsUmVBbGxvYzE2KGhtZixzaXplLEdNRU1fTU9WRUFCTEUpOwogICBtaCA9IChNRVRBSEVBREVSICopR2xvYmFsTG9jazE2KGhtZik7CiAgIAotICBpZiAoIW1oKSB7CisgIGlmICghbWgpCisgIHsKKyAgICBfbGNsb3NlMzIoIGhGaWxlICk7CiAgICAgR2xvYmFsRnJlZTE2KGhtZik7CiAgICAgcmV0dXJuIDA7CiAgIH0KICAgCiAgIGlmIChfbHJlYWQzMihoRmlsZSwgKGNoYXIqKW1oICsgbWgtPm10SGVhZGVyU2l6ZSAqIDIsIAotCSAgICAgICAgc2l6ZSAtIG1oLT5tdEhlYWRlclNpemUgKiAyKSA9PSBIRklMRV9FUlJPUjMyKSB7CisJICAgICAgICBzaXplIC0gbWgtPm10SGVhZGVyU2l6ZSAqIDIpID09IEhGSUxFX0VSUk9SMzIpCisgIHsKKyAgICBfbGNsb3NlMzIoIGhGaWxlICk7CiAgICAgR2xvYmFsRnJlZTE2KGhtZik7CiAgICAgcmV0dXJuIDA7CiAgIH0KICAgCiAgIF9sY2xvc2UzMihoRmlsZSk7CiAKLSAgaWYgKG1oLT5tdFR5cGUgIT0gMSkgeworICBpZiAobWgtPm10VHlwZSAhPSAxKQorICB7CiAgICAgR2xvYmFsRnJlZTE2KGhtZik7CiAgICAgcmV0dXJuIDA7CiAgIH0KQEAgLTExOCwxMCArMTM1LDMxIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICBDb3B5TWV0YWZpbGUgICAgICAgICBHREkuMTUxIE5pZWxzIGRlIENhcnBlbnRpZXIsIEFwcmlsIDE5OTYKKyAqICAgICAgICAgR2V0TWV0YWZpbGUzMlcgICAoR0RJMzIuMTk5KQorICovCitITUVUQUZJTEUzMiBHZXRNZXRhRmlsZTMyVyggTFBDV1NUUiBscEZpbGVuYW1lICkKK3sKKyAgICBMUFNUUiBwID0gSEVBUF9zdHJkdXBXdG9BKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBscEZpbGVuYW1lICk7CisgICAgSE1FVEFGSUxFMzIgcmV0ID0gR2V0TWV0YUZpbGUzMkEoIHAgKTsKKyAgICBIZWFwRnJlZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgcCApOworICAgIHJldHVybiByZXQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICBDb3B5TWV0YUZpbGUxNiAgIChHREkuMTUxKQogICovCiAKLUhNRVRBRklMRTE2IENvcHlNZXRhRmlsZShITUVUQUZJTEUxNiBoU3JjTWV0YUZpbGUsIExQQ1NUUiBscEZpbGVuYW1lKQorSE1FVEFGSUxFMTYgQ29weU1ldGFGaWxlMTYoIEhNRVRBRklMRTE2IGhTcmNNZXRhRmlsZSwgTFBDU1RSIGxwRmlsZW5hbWUgKQoreworICAgIHJldHVybiBDb3B5TWV0YUZpbGUzMkEoIGhTcmNNZXRhRmlsZSwgbHBGaWxlbmFtZSApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgQ29weU1ldGFGaWxlMzJBICAgKEdESTMyLjIzKQorICovCitITUVUQUZJTEUzMiBDb3B5TWV0YUZpbGUzMkEoIEhNRVRBRklMRTMyIGhTcmNNZXRhRmlsZSwgTFBDU1RSIGxwRmlsZW5hbWUgKQogewogICAgIEhNRVRBRklMRTE2IGhhbmRsZSA9IDA7CiAgICAgTUVUQUhFQURFUiAqbWg7CkBAIC0xNDYsNiArMTg0LDcgQEAKICAgICAgICAgX2xjbG9zZTMyKGhGaWxlKTsKIAlpZiAoaSA9PSAtMSkKIAkgICAgcmV0dXJuIDA7CisgICAgICAgIC8qIEZJWE1FOiByZXR1cm4gdmFsdWUgKi8KICAgICAgICAgfQogICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAvKiBtZW1vcnkgYmFzZWQgbWV0YWZpbGUgKi8KICAgICAgICAgewpAQCAtMTU4LDEyICsxOTcsMjUgQEAKICAgICByZXR1cm4gaGFuZGxlOwogfQogCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgQ29weU1ldGFGaWxlMzJXICAgKEdESTMyLjI0KQorICovCitITUVUQUZJTEUzMiBDb3B5TWV0YUZpbGUzMlcoIEhNRVRBRklMRTMyIGhTcmNNZXRhRmlsZSwgTFBDV1NUUiBscEZpbGVuYW1lICkKK3sKKyAgICBMUFNUUiBwID0gSEVBUF9zdHJkdXBXdG9BKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBscEZpbGVuYW1lICk7CisgICAgSE1FVEFGSUxFMzIgcmV0ID0gQ29weU1ldGFGaWxlMzJBKCBoU3JjTWV0YUZpbGUsIHAgKTsKKyAgICBIZWFwRnJlZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgcCApOworICAgIHJldHVybiByZXQ7Cit9CisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICBJc1ZhbGlkTWV0YUZpbGUgICAoR0RJLjQxMCkKICAqICAgICAgICAgKFRoaXMgaXMgbm90IGV4YWN0bHkgd2hhdCB3aW5kb3dzIGRvZXMsIHNlZSAiVW5kb2MgV2luIikKICAqLwogCi1CT09MIElzVmFsaWRNZXRhRmlsZShITUVUQUZJTEUxNiBobWYpCitCT09MMTYgSXNWYWxpZE1ldGFGaWxlKEhNRVRBRklMRTE2IGhtZikKIHsKICAgICBCT09MIHJlc3U9RkFMU0U7CiAgICAgTUVUQUhFQURFUiAqbWggPSAoTUVUQUhFQURFUiAqKUdsb2JhbExvY2sxNihobWYpOwpAQCAtMTc5LDgyICsyMzEsMTkgQEAKIH0KIAogCi0jaWYgMAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICBDbG9zZU1ldGFmaWxlICAgICAgICAgR0RJLjEyNgorICogICAgICAgICBQbGF5TWV0YWZpbGUxNiAgIChHREkuMTIzKQogICovCi0KLUhNRVRBRklMRTE2IENsb3NlTWV0YUZpbGUoSERDMTYgaGRjKQorQk9PTDE2IFBsYXlNZXRhRmlsZTE2KCBIREMxNiBoZGMsIEhNRVRBRklMRTE2IGhtZiApCiB7Ci0gICAgREMgKmRjOwotICAgIE1FVEFIRUFERVIgKm1oOwotICAgIEhNRVRBRklMRTE2IGhtZjsKLSAgICBIRklMRSBoRmlsZTsKLSAgICBNRVRBRklMRURSVl9QREVWSUNFICpwaHlzRGV2OwotICAgIAotICAgIGRwcmludGZfbWV0YWZpbGUoc3RkZGViLCJDbG9zZU1ldGFGaWxlXG4iKTsKLQotICAgIGlmICghKGRjID0gKERDICopR0RJX0dldE9ialB0cihoZGMsIE1FVEFGSUxFX0RDX01BR0lDKSkpIHJldHVybiAwOwotCi0gICAgcGh5c0RldiA9IChNRVRBRklMRURSVl9QREVWSUNFICopZGMtPnBoeXNEZXY7Ci0gICAgbWggPSAoTUVUQUhFQURFUiAqKUdsb2JhbExvY2sxNiggcGh5c0Rldi0+aE1ldGFmaWxlICk7Ci0KLSAgICAvKiBDb25zdHJ1Y3QgdGhlIGVuZCBvZiBtZXRhZmlsZSByZWNvcmQgLSB0aGlzIGlzIGRvY3VtZW50ZWQKLSAgICAgKiBpbiBTREsgS25vd2xlZGdlYmFzZSBROTkzMzQuCi0gICAgICovCi0KLSAgICBpZiAoIU1GX01ldGFQYXJhbTAoZGMsIE1FVEFfRU9GKSkKLSAgICB7Ci0gICAgICAgIERlbGV0ZURDMzIoIGhkYyApOwotCXJldHVybiAwOwotICAgIH0JCi0KLSAgICBpZiAobWgtPm10VHlwZSA9PSAxKSAgICAgICAgLyogZGlzayBiYXNlZCBtZXRhZmlsZSAqLwotICAgIHsKLSAgICAgICAgaEZpbGUgPSBtaC0+bXROb1BhcmFtZXRlcnM7Ci0JbWgtPm10Tm9QYXJhbWV0ZXJzID0gMDsKLSAgICAgICAgaWYgKF9sbHNlZWsoaEZpbGUsIDBMLCAwKSA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgRGVsZXRlREMzMiggaGRjICk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoX2x3cml0ZTMyKGhGaWxlLCAoY2hhciAqKW1oLCBNRkhFQURFUlNJWkUpID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICBEZWxldGVEQzMyKCBoZGMgKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIF9sY2xvc2UoaEZpbGUpOwotICAgIH0KLQotICAgIGhtZiA9IHBoeXNEZXYtPmhNZXRhZmlsZTsKLSAgICBHbG9iYWxVbmxvY2sxNiggaG1mICk7Ci0gICAgcGh5c0Rldi0+aE1ldGFmaWxlID0gMDsgIC8qIFNvIGl0IHdvbid0IGJlIGRlbGV0ZWQgKi8KLSAgICBEZWxldGVEQzMyKCBoZGMgKTsKLSAgICByZXR1cm4gaG1mOworICAgIHJldHVybiBQbGF5TWV0YUZpbGUzMiggaGRjLCBobWYgKTsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgIERlbGV0ZU1ldGFmaWxlICAgICAgICAgR0RJLjEyNworICogICAgICAgICBQbGF5TWV0YWZpbGUzMiAgIChHREkzMi4yNjUpCiAgKi8KLQotQk9PTCBEZWxldGVNZXRhRmlsZShITUVUQUZJTEUxNiBobWYpCi17Ci0gICAgTUVUQUhFQURFUiAqbWggPSAoTUVUQUhFQURFUiAqKUdsb2JhbExvY2sxNihobWYpOwotCi0gICAgaWYgKCFtaCkKLQlyZXR1cm4gRkFMU0U7Ci0KLSAgICBHbG9iYWxGcmVlMTYoaG1mKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgIFBsYXlNZXRhZmlsZSAgICAgICAgIEdESS4xMjMKLSAqLwotCi1CT09MIFBsYXlNZXRhRmlsZShIREMxNiBoZGMsIEhNRVRBRklMRTE2IGhtZikKK0JPT0wzMiBQbGF5TWV0YUZpbGUzMiggSERDMzIgaGRjLCBITUVUQUZJTEUzMiBobWYgKQogewogICAgIE1FVEFIRUFERVIgKm1oID0gKE1FVEFIRUFERVIgKilHbG9iYWxMb2NrMTYoaG1mKTsKICAgICBNRVRBUkVDT1JEICptcjsKQEAgLTU5Miw3ICs1ODEsNyBAQAogICAgIC8qIFcuIE1hZ3JvOiBTb21lIG5ldyBtZXRhZmlsZSBvcGVyYXRpb25zLiAgTm90IGFsbCBkZWJ1Z2dlZC4gKi8KICAgICBjYXNlIE1FVEFfQ1JFQVRFUEFMRVRURToKIAlNRl9BZGRIYW5kbGUoaHQsIG5IYW5kbGVzLCAKLQkJICAgICBDcmVhdGVQYWxldHRlKChMUExPR1BBTEVUVEUpbXItPnJkUGFyYW0pKTsKKwkJICAgICBDcmVhdGVQYWxldHRlMTYoKExQTE9HUEFMRVRURSltci0+cmRQYXJhbSkpOwogCWJyZWFrOwogCiAgICAgY2FzZSBNRVRBX1NFVFRFWFRBTElHTjoKQEAgLTYwMCwxNSArNTg5LDE1IEBACiAJYnJlYWs7CiAKICAgICBjYXNlIE1FVEFfU0VMRUNUUEFMRVRURToKLQlTZWxlY3RQYWxldHRlKGhkYywgKihodC0+b2JqZWN0SGFuZGxlICsgKihtci0+cmRQYXJhbSsxKSksKihtci0+cmRQYXJhbSkpOworCVNlbGVjdFBhbGV0dGUxNihoZGMsICooaHQtPm9iamVjdEhhbmRsZSArICoobXItPnJkUGFyYW0rMSkpLCoobXItPnJkUGFyYW0pKTsKIAlicmVhazsKIAogICAgIGNhc2UgTUVUQV9TRVRNQVBQRVJGTEFHUzoKLQlTZXRNYXBwZXJGbGFncyhoZGMsICoobXItPnJkUGFyYW0pKTsKKwlTZXRNYXBwZXJGbGFnczE2KGhkYywgKihtci0+cmRQYXJhbSkpOwogCWJyZWFrOwogCiAgICAgY2FzZSBNRVRBX1JFQUxJWkVQQUxFVFRFOgotCVJlYWxpemVQYWxldHRlKGhkYyk7CisJUmVhbGl6ZVBhbGV0dGUxNihoZGMpOwogCWJyZWFrOwogCiAgICAgY2FzZSBNRVRBX0VTQ0FQRToKQEAgLTczNSw3ICs3MjQsNyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgR2V0TWV0YUZpbGVCaXRzCQlieSBXaWxsaWFtIE1hZ3JvLCAxOSBTZXAgMTk5NQorICogICAgICAgICBHZXRNZXRhRmlsZUJpdHMgICAoR0RJLjE1OSkKICAqCiAgKiBUcmFkZSBpbiBhIG1ldGEgZmlsZSBvYmplY3QgaGFuZGxlIGZvciBhIGhhbmRsZSB0byB0aGUgbWV0YSBmaWxlIG1lbW9yeQogICovCkBAIC03NDgsMTEgKzczNywxMCBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgIFNldE1ldGFGaWxlQml0cwkJYnkgV2lsbGlhbSBNYWdybywgMTkgU2VwIDE5OTUKKyAqICAgICAgICAgU2V0TWV0YUZpbGVCaXRzICAgKEdESS4xNjApCiAgKgogICogVHJhZGUgaW4gYSBtZXRhIGZpbGUgbWVtb3J5IGhhbmRsZSBmb3IgYSBoYW5kbGUgdG8gYSBtZXRhIGZpbGUgb2JqZWN0CiAgKi8KLQogSE1FVEFGSUxFMTYgU2V0TWV0YUZpbGVCaXRzKCBIR0xPQkFMMTYgaE1lbSApCiB7CiAgICAgZHByaW50Zl9tZXRhZmlsZShzdGRkZWIsIlNldE1ldGFGaWxlQml0czogaG1mIG91dDogJTA0eFxuIiwgaE1lbSk7CmRpZmYgLS1naXQgYS9vYmplY3RzL29lbWJpdG1hcC5jIGIvb2JqZWN0cy9vZW1iaXRtYXAuYwppbmRleCA4NzkyOWJjLi4yMjRmNjU4IDEwMDY0NAotLS0gYS9vYmplY3RzL29lbWJpdG1hcC5jCisrKyBiL29iamVjdHMvb2VtYml0bWFwLmMKQEAgLTI4NCw3ICsyODQsNyBAQAogICAgICAgICBPQk1fQ29sb3JzW2ldLnZhbHVlID0gTlVMTDsKICAgICAgICAgaWYgKE9CTV9TeW1ib2xpY0NvbG9yc1tpXS5jb2xvciAmIDB4ZmYwMDAwMDApICAvKiBQQUxFVFRFSU5ERVggKi8KICAgICAgICAgICAgIE9CTV9Db2xvcnNbaV0ucGl4ZWwgPSBDT0xPUl9Ub1BoeXNpY2FsKCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0U3lzQ29sb3IoT0JNX1N5bWJvbGljQ29sb3JzW2ldLmNvbG9yICYgMHhmZikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN5c0NvbG9yMzIoT0JNX1N5bWJvbGljQ29sb3JzW2ldLmNvbG9yICYgMHhmZikpOwogICAgICAgICBlbHNlICAvKiBSR0IqLwogICAgICAgICAgICAgT0JNX0NvbG9yc1tpXS5waXhlbCA9IENPTE9SX1RvUGh5c2ljYWwoIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0JNX1N5bWJvbGljQ29sb3JzW2ldLmNvbG9yICk7CmRpZmYgLS1naXQgYS9vYmplY3RzL3BhbGV0dGUuYyBiL29iamVjdHMvcGFsZXR0ZS5jCmluZGV4IDUzMDg5YTkuLjVjMzhkMjMgMTAwNjQ0Ci0tLSBhL29iamVjdHMvcGFsZXR0ZS5jCisrKyBiL29iamVjdHMvcGFsZXR0ZS5jCkBAIC01LDYgKzUsOCBAQAogICogQ29weXJpZ2h0IDE5OTYgQWxleCBLb3JvYmthCiAgKgogICovCisKKyNkZWZpbmUgTk9fVFJBTlNJVElPTl9UWVBFUyAgLyogVGhpcyBmaWxlIGlzIFdpbjMyLWNsZWFuICovCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8WDExL1hsaWIuaD4KQEAgLTE3LDExICsxOSwxMCBAQAogLyogI2RlZmluZSBERUJVR19QQUxFVFRFICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAotZXh0ZXJuIGludCAgICAgICAgICAgICAgQ09MT1JfTG9va3VwU3lzdGVtUGl4ZWwoQ09MT1JSRUYpOyAgICAgIC8qIGxvb2t1cCBwaXhlbCBhbW9uZyBzdGF0aWMgZW50cmllcyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvZiB0aGUgc3lzdGVtIHBhbGV0dGUgKi8KLWV4dGVybiBDT0xPUlJFRgkJQ09MT1JfR2V0U3lzdGVtUGFsZXR0ZUVudHJ5KEJZVEUpOworIC8qIGxvb2t1cCBwaXhlbCBhbW9uZyBzdGF0aWMgZW50cmllcyBvZiB0aGUgc3lzdGVtIHBhbGV0dGUgKi8KK2V4dGVybiBpbnQgQ09MT1JfTG9va3VwU3lzdGVtUGl4ZWwoQ09MT1JSRUYpOwogCi1zdGF0aWMgV09SRCBTeXN0ZW1QYWxldHRlVXNlID0gU1lTUEFMX1NUQVRJQzsJLyogY3VycmVudGx5IG5vdCBjb25zaWRlcmVkICovCitzdGF0aWMgVUlOVDMyIFN5c3RlbVBhbGV0dGVVc2UgPSBTWVNQQUxfU1RBVElDOyAgLyogY3VycmVudGx5IG5vdCBjb25zaWRlcmVkICovCiAKIHN0YXRpYyBIUEFMRVRURTE2IGhQcmltYXJ5UGFsZXR0ZSA9IDA7IC8qIHVzZWQgZm9yIFdNX1BBTEVUVEVDSEFOR0VEICovCiBzdGF0aWMgSFBBTEVUVEUxNiBoTGFzdFJlYWxpemVkUGFsZXR0ZSA9IDA7IC8qIFVucmVhbGl6ZU9iamVjdCgpIG5lZWRzIGl0ICovCkBAIC0zOSwxNyArNDAsMjUgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBDcmVhdGVQYWxldHRlICAgIChHREkuMzYwKQorICogICAgICAgICAgIENyZWF0ZVBhbGV0dGUxNiAgICAoR0RJLjM2MCkKICAqLwotSFBBTEVUVEUxNiBDcmVhdGVQYWxldHRlKCBjb25zdCBMT0dQQUxFVFRFKiBwYWxldHRlICkKK0hQQUxFVFRFMTYgQ3JlYXRlUGFsZXR0ZTE2KCBjb25zdCBMT0dQQUxFVFRFKiBwYWxldHRlICkKK3sKKyAgICByZXR1cm4gQ3JlYXRlUGFsZXR0ZTMyKCBwYWxldHRlICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgQ3JlYXRlUGFsZXR0ZTMyICAgIChHREkzMi41MykKKyAqLworSFBBTEVUVEUzMiBDcmVhdGVQYWxldHRlMzIoIGNvbnN0IExPR1BBTEVUVEUqIHBhbGV0dGUgKQogewogICAgIFBBTEVUVEVPQkogKiBwYWxldHRlUHRyOwotICAgIEhQQUxFVFRFMTYgaHBhbGV0dGU7CisgICAgSFBBTEVUVEUzMiBocGFsZXR0ZTsKICAgICBpbnQgc2l6ZSA9IHNpemVvZihMT0dQQUxFVFRFKSArIChwYWxldHRlLT5wYWxOdW1FbnRyaWVzIC0gMSkgKiBzaXplb2YoUEFMRVRURUVOVFJZKTsKIAotICAgIGRwcmludGZfcGFsZXR0ZShzdGRkZWIsIkNyZWF0ZVBhbGV0dGU6ICIpOwotCi0gICAgZHByaW50Zl9wYWxldHRlKHN0ZGRlYiwiJWkgZW50cmllcywgIiwgcGFsZXR0ZS0+cGFsTnVtRW50cmllcyk7CisgICAgZHByaW50Zl9wYWxldHRlKHN0ZGRlYiwiQ3JlYXRlUGFsZXR0ZTogJWkgZW50cmllcywgIiwKKyAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZS0+cGFsTnVtRW50cmllcyk7CiAKICAgICBocGFsZXR0ZSA9IEdESV9BbGxvY09iamVjdCggc2l6ZSArIHNpemVvZihpbnQqKSArc2l6ZW9mKEdESU9CSkhEUikgLCBQQUxFVFRFX01BR0lDICk7CiAgICAgaWYgKCFocGFsZXR0ZSkgcmV0dXJuIDA7CkBAIC02NiwxNSArNzUsMjYgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBHZXRQYWxldHRlRW50cmllcyAgICAoR0RJLjM2MykKKyAqICAgICAgICAgICBHZXRQYWxldHRlRW50cmllczE2ICAgIChHREkuMzYzKQogICovCi1XT1JEIEdldFBhbGV0dGVFbnRyaWVzKCBIUEFMRVRURTE2IGhwYWxldHRlLCBXT1JEIHN0YXJ0LCBXT1JEIGNvdW50LAotCQkgICAgICAgIExQUEFMRVRURUVOVFJZIGVudHJpZXMgKQorVUlOVDE2IEdldFBhbGV0dGVFbnRyaWVzMTYoIEhQQUxFVFRFMTYgaHBhbGV0dGUsIFVJTlQxNiBzdGFydCwgVUlOVDE2IGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQUEFMRVRURUVOVFJZIGVudHJpZXMgKQoreworICAgIHJldHVybiBHZXRQYWxldHRlRW50cmllczMyKCBocGFsZXR0ZSwgc3RhcnQsIGNvdW50LCBlbnRyaWVzICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2V0UGFsZXR0ZUVudHJpZXMzMiAgICAoR0RJMzIuMjA5KQorICovCitVSU5UMzIgR2V0UGFsZXR0ZUVudHJpZXMzMiggSFBBTEVUVEUzMiBocGFsZXR0ZSwgVUlOVDMyIHN0YXJ0LCBVSU5UMzIgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBQQUxFVFRFRU5UUlkgZW50cmllcyApCiB7CiAgICAgUEFMRVRURU9CSiAqIHBhbFB0cjsKLSAgICBpbnQgbnVtRW50cmllczsKKyAgICBJTlQzMiBudW1FbnRyaWVzOwogCi0gICAgZHByaW50Zl9wYWxldHRlKHN0ZGRlYiwiR2V0UGFsZXR0ZUVudHJpZXM6IGhwYWwgPSAlMDR4LCAlaSBlbnRyaWVzXG4iLCBocGFsZXR0ZSwgY291bnQpOworICAgIGRwcmludGZfcGFsZXR0ZSggc3RkZGViLCJHZXRQYWxldHRlRW50cmllczogaHBhbCA9ICUwNHgsICVpIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgICAgICBocGFsZXR0ZSwgY291bnQgKTsKICAgICAgICAgCiAgICAgcGFsUHRyID0gKFBBTEVUVEVPQkogKikgR0RJX0dldE9ialB0ciggaHBhbGV0dGUsIFBBTEVUVEVfTUFHSUMgKTsKICAgICBpZiAoIXBhbFB0cikgcmV0dXJuIDA7CkBAIC04NSwyMSArMTA1LDMzIEBACiAgICAgbWVtY3B5KCBlbnRyaWVzLCAmcGFsUHRyLT5sb2dwYWxldHRlLnBhbFBhbEVudHJ5W3N0YXJ0XSwKIAkgICAgY291bnQgKiBzaXplb2YoUEFMRVRURUVOVFJZKSApOwogICAgIGZvciggbnVtRW50cmllcyA9IDA7IG51bUVudHJpZXMgPCBjb3VudCA7IG51bUVudHJpZXMrKyApCi0gICAgICAgICBpZiggZW50cmllc1tudW1FbnRyaWVzXS5wZUZsYWdzICYgMHhGMCApIGVudHJpZXNbbnVtRW50cmllc10ucGVGbGFncyA9IDA7CisgICAgICAgICBpZiAoZW50cmllc1tudW1FbnRyaWVzXS5wZUZsYWdzICYgMHhGMCkKKyAgICAgICAgICAgICBlbnRyaWVzW251bUVudHJpZXNdLnBlRmxhZ3MgPSAwOwogICAgIHJldHVybiBjb3VudDsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBTZXRQYWxldHRlRW50cmllcyAgICAoR0RJLjM2NCkKKyAqICAgICAgICAgICBTZXRQYWxldHRlRW50cmllczE2ICAgIChHREkuMzY0KQogICovCi1XT1JEIFNldFBhbGV0dGVFbnRyaWVzKCBIUEFMRVRURTE2IGhwYWxldHRlLCBXT1JEIHN0YXJ0LCBXT1JEIGNvdW50LAotCQkgICAgICAgIExQUEFMRVRURUVOVFJZIGVudHJpZXMgKQorVUlOVDE2IFNldFBhbGV0dGVFbnRyaWVzMTYoIEhQQUxFVFRFMTYgaHBhbGV0dGUsIFVJTlQxNiBzdGFydCwgVUlOVDE2IGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQUEFMRVRURUVOVFJZIGVudHJpZXMgKQoreworICAgIHJldHVybiBTZXRQYWxldHRlRW50cmllczMyKCBocGFsZXR0ZSwgc3RhcnQsIGNvdW50LCBlbnRyaWVzICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgU2V0UGFsZXR0ZUVudHJpZXMzMiAgICAoR0RJMzIuMzI2KQorICovCitVSU5UMzIgU2V0UGFsZXR0ZUVudHJpZXMzMiggSFBBTEVUVEUzMiBocGFsZXR0ZSwgVUlOVDMyIHN0YXJ0LCBVSU5UMzIgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBQQUxFVFRFRU5UUlkgZW50cmllcyApCiB7CiAgICAgUEFMRVRURU9CSiAqIHBhbFB0cjsKLSAgICBpbnQgbnVtRW50cmllczsKKyAgICBJTlQzMiBudW1FbnRyaWVzOwogCi0gICAgZHByaW50Zl9wYWxldHRlKHN0ZGRlYiwiU2V0UGFsZXR0ZUVudHJpZXM6IGhwYWwgPSAlMDR4LCAlaSBlbnRyaWVzXG4iLCBocGFsZXR0ZSwgY291bnQpOworICAgIGRwcmludGZfcGFsZXR0ZSggc3RkZGViLCJTZXRQYWxldHRlRW50cmllczogaHBhbCA9ICUwNHgsICVpIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgICAgICBocGFsZXR0ZSwgY291bnQgKTsKIAogICAgIHBhbFB0ciA9IChQQUxFVFRFT0JKICopIEdESV9HZXRPYmpQdHIoIGhwYWxldHRlLCBQQUxFVFRFX01BR0lDICk7CiAgICAgaWYgKCFwYWxQdHIpIHJldHVybiAwOwpAQCAtMTE3LDEzICsxNDksMjMgQEAKICAgICByZXR1cm4gY291bnQ7CiB9CiAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgUmVzaXplUGFsZXR0ZSAgICAgICAgICAoR0RJLjM2OCkKKyAqICAgICAgICAgICBSZXNpemVQYWxldHRlMTYgICAoR0RJLjM2OCkKICAqLwotQk9PTCBSZXNpemVQYWxldHRlKEhQQUxFVFRFMTYgaFBhbCwgVUlOVCBjRW50cmllcykKK0JPT0wxNiBSZXNpemVQYWxldHRlMTYoIEhQQUxFVFRFMTYgaFBhbCwgVUlOVDE2IGNFbnRyaWVzICkKK3sKKyAgICByZXR1cm4gUmVzaXplUGFsZXR0ZTMyKCBoUGFsLCBjRW50cmllcyApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIFJlc2l6ZVBhbGV0dGUzMiAgIChHREkzMi4yODkpCisgKi8KK0JPT0wzMiBSZXNpemVQYWxldHRlMzIoIEhQQUxFVFRFMzIgaFBhbCwgVUlOVDMyIGNFbnRyaWVzICkKIHsKICAgICBQQUxFVFRFT0JKICogcGFsUHRyID0gKFBBTEVUVEVPQkogKikgR0RJX0dldE9ialB0ciggaFBhbCwgUEFMRVRURV9NQUdJQyApOwotICAgIFVJTlQJIGNQcmV2RW50LCBwcmV2VmVyOworICAgIFVJTlQzMgkgY1ByZXZFbnQsIHByZXZWZXI7CiAgICAgaW50CQkgcHJldnNpemUsIHNpemUgPSBzaXplb2YoTE9HUEFMRVRURSkgKyAoY0VudHJpZXMgLSAxKSAqIHNpemVvZihQQUxFVFRFRU5UUlkpOwogICAgIGludCoJIG1hcHBpbmcgPSBOVUxMOwogCkBAIC0xNTYsNDQgKzE5OCw4NSBAQAogICAgIHJldHVybiBUUlVFOwogfQogCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEFuaW1hdGVQYWxldHRlICAgICAgICAgIChHREkuMzY3KQorICogICAgICAgICAgIEFuaW1hdGVQYWxldHRlMTYgICAoR0RJLjM2NykKICAqLwotQk9PTCBBbmltYXRlUGFsZXR0ZShIUEFMRVRURTE2IGhQYWwsIFVJTlQgU3RhcnRJbmRleCwgVUlOVCBOdW1FbnRyaWVzLAotCQkgICAgTFBQQUxFVFRFRU5UUlkgUGFsZXR0ZUNvbG9ycykKK0JPT0wxNiBBbmltYXRlUGFsZXR0ZTE2KCBIUEFMRVRURTE2IGhQYWwsIFVJTlQxNiBTdGFydEluZGV4LCBVSU5UMTYgTnVtRW50cmllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBMUFBBTEVUVEVFTlRSWSBQYWxldHRlQ29sb3JzICkKK3sKKyAgICByZXR1cm4gQW5pbWF0ZVBhbGV0dGUzMiggaFBhbCwgU3RhcnRJbmRleCwgTnVtRW50cmllcywgUGFsZXR0ZUNvbG9ycyApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEFuaW1hdGVQYWxldHRlMzIgICAoR0RJMzIuNikKKyAqLworQk9PTDMyIEFuaW1hdGVQYWxldHRlMzIoIEhQQUxFVFRFMzIgaFBhbCwgVUlOVDMyIFN0YXJ0SW5kZXgsIFVJTlQzMiBOdW1FbnRyaWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIExQUEFMRVRURUVOVFJZIFBhbGV0dGVDb2xvcnMgKQogewogICAgIGZwcmludGYoc3RkbmltcCwiQW5pbWF0ZVBhbGV0dGU6IGVtcHR5IHN0dWIhIFxuIik7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIFNldFN5c3RlbVBhbGV0dGVVc2UgICAgKEdESS4zNzMpCi0gKi8KLVdPUkQgU2V0U3lzdGVtUGFsZXR0ZVVzZSggSERDMTYgaGRjLCBXT1JEIHVzZSkKLXsKLQkgV09SRCBvbGQ9U3lzdGVtUGFsZXR0ZVVzZTsKLQkgZnByaW50ZihzdGRuaW1wLCJTZXRTeXN0ZW1QYWxldHRlVXNlKCUwNHgsJTA0eCkgLy8gZW1wdHkgc3R1YiAhISFcbiIsIGhkYywgdXNlKTsKLQkgU3lzdGVtUGFsZXR0ZVVzZT11c2U7Ci0JIHJldHVybiBvbGQ7Ci19CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEdldFN5c3RlbVBhbGV0dGVVc2UgICAgKEdESS4zNzQpCisgKiAgICAgICAgICAgU2V0U3lzdGVtUGFsZXR0ZVVzZTE2ICAgKEdESS4zNzMpCiAgKi8KLVdPUkQgR2V0U3lzdGVtUGFsZXR0ZVVzZSggSERDMTYgaGRjICkKK1VJTlQxNiBTZXRTeXN0ZW1QYWxldHRlVXNlMTYoIEhEQzE2IGhkYywgVUlOVDE2IHVzZSApCiB7Ci0JZnByaW50ZihzdGRuaW1wLCJHZXRTeXN0ZW1QYWxldHRlVXNlKCUwNHgpIC8vIGVtcHR5IHN0dWIgISEhXG4iLCBoZGMpOwotCXJldHVybiBTeXN0ZW1QYWxldHRlVXNlOworICAgIHJldHVybiBTZXRTeXN0ZW1QYWxldHRlVXNlMzIoIGhkYywgdXNlICk7CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgR2V0U3lzdGVtUGFsZXR0ZUVudHJpZXMgICAgKEdESS4zNzUpCisgKiAgICAgICAgICAgU2V0U3lzdGVtUGFsZXR0ZVVzZTMyICAgKEdESTMyLjMzNSkKICAqLwotV09SRCBHZXRTeXN0ZW1QYWxldHRlRW50cmllcyggSERDMTYgaGRjLCBXT1JEIHN0YXJ0LCBXT1JEIGNvdW50LAotCQkJICAgICAgTFBQQUxFVFRFRU5UUlkgZW50cmllcyApCitVSU5UMzIgU2V0U3lzdGVtUGFsZXR0ZVVzZTMyKCBIREMzMiBoZGMsIFVJTlQzMiB1c2UgKQogewotICAgIFdPUkQgaTsKKyAgICBVSU5UMzIgb2xkID0gU3lzdGVtUGFsZXR0ZVVzZTsKKyAgICBmcHJpbnRmKCBzdGRuaW1wLCJTZXRTeXN0ZW1QYWxldHRlVXNlKCUwNHgsJTA0eCkgLy8gZW1wdHkgc3R1YiAhISFcbiIsCisgICAgICAgICAgICAgaGRjLCB1c2UgKTsKKyAgICBTeXN0ZW1QYWxldHRlVXNlID0gdXNlOworICAgIHJldHVybiBvbGQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2V0U3lzdGVtUGFsZXR0ZVVzZTE2ICAgKEdESS4zNzQpCisgKi8KK1VJTlQxNiBHZXRTeXN0ZW1QYWxldHRlVXNlMTYoIEhEQzE2IGhkYyApCit7CisgICAgcmV0dXJuIFN5c3RlbVBhbGV0dGVVc2U7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2V0U3lzdGVtUGFsZXR0ZVVzZTMyICAgKEdESTMyLjIyMykKKyAqLworVUlOVDMyIEdldFN5c3RlbVBhbGV0dGVVc2UzMiggSERDMzIgaGRjICkKK3sKKyAgICByZXR1cm4gU3lzdGVtUGFsZXR0ZVVzZTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHZXRTeXN0ZW1QYWxldHRlRW50cmllczE2ICAgKEdESS4zNzUpCisgKi8KK1VJTlQxNiBHZXRTeXN0ZW1QYWxldHRlRW50cmllczE2KCBIREMxNiBoZGMsIFVJTlQxNiBzdGFydCwgVUlOVDE2IGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQUEFMRVRURUVOVFJZIGVudHJpZXMgKQoreworICAgIHJldHVybiBHZXRTeXN0ZW1QYWxldHRlRW50cmllczMyKCBoZGMsIHN0YXJ0LCBjb3VudCwgZW50cmllcyApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdldFN5c3RlbVBhbGV0dGVFbnRyaWVzMzIgICAoR0RJMzIuMjIyKQorICovCitVSU5UMzIgR2V0U3lzdGVtUGFsZXR0ZUVudHJpZXMzMiggSERDMzIgaGRjLCBVSU5UMzIgc3RhcnQsIFVJTlQzMiBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFBBTEVUVEVFTlRSWSBlbnRyaWVzICkKK3sKKyAgICBVSU5UMzIgaTsKICAgICBEQyAqZGM7CiAKICAgICBkcHJpbnRmX3BhbGV0dGUoc3RkZGViLCJHZXRTeXN0ZW1QYWxldHRlRW50cmllczogaGRjID0gJTA0eCwgY291bmQgPSAlaSIsIGhkYywgY291bnQgKTsKQEAgLTIwNCwyNyArMjg3LDM2IEBACiAJY291bnQgPSBkYy0+dy5kZXZDYXBzLT5zaXplUGFsZXR0ZSAtIHN0YXJ0OwogICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgIHsKLQkqKENPTE9SUkVGKikoZW50cmllcyArIGkpID0gQ09MT1JfR2V0U3lzdGVtUGFsZXR0ZUVudHJ5KChCWVRFKShzdGFydCArIGkpKTsKKwkqKENPTE9SUkVGKikoZW50cmllcyArIGkpID0gQ09MT1JfR2V0U3lzdGVtUGFsZXR0ZUVudHJ5KCBzdGFydCArIGkgKTsKIAotICAgICAgICBkcHJpbnRmX3BhbGV0dGUoc3RkZGViLCJcdGlkeCglMDJ4KSAtPiBSR0IoJTA4bHgpXG4iLCAodW5zaWduZWQgY2hhcikoc3RhcnQgKyBpKSwgCi0JCQkJCQkJICAgICooQ09MT1JSRUYqKShlbnRyaWVzICsgaSkgKTsKKyAgICAgICAgZHByaW50Zl9wYWxldHRlKCBzdGRkZWIsIlx0aWR4KCUwMngpIC0+IFJHQiglMDhseClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKyBpLCAqKENPTE9SUkVGKikoZW50cmllcyArIGkpICk7CiAgICAgfQogICAgIHJldHVybiBjb3VudDsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBHZXROZWFyZXN0UGFsZXR0ZUluZGV4ICAgIChHREkuMzcwKQorICogICAgICAgICAgIEdldE5lYXJlc3RQYWxldHRlSW5kZXgxNiAgIChHREkuMzcwKQogICovCi1XT1JEIEdldE5lYXJlc3RQYWxldHRlSW5kZXgoIEhQQUxFVFRFMTYgaHBhbGV0dGUsIENPTE9SUkVGIGNvbG9yICkKK1VJTlQxNiBHZXROZWFyZXN0UGFsZXR0ZUluZGV4MTYoIEhQQUxFVFRFMTYgaHBhbGV0dGUsIENPTE9SUkVGIGNvbG9yICkKIHsKLSAgICBQQUxFVFRFT0JKKglwYWxPYmogPSAoUEFMRVRURU9CSiopIEdESV9HZXRPYmpQdHIoIGhwYWxldHRlLCBQQUxFVFRFX01BR0lDICk7Ci0gICAgV09SRAlpbmRleCAgPSAwOworICAgIHJldHVybiBHZXROZWFyZXN0UGFsZXR0ZUluZGV4MzIoIGhwYWxldHRlLCBjb2xvciApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdldE5lYXJlc3RQYWxldHRlSW5kZXgzMiAgIChHREkzMi4yMDMpCisgKi8KK1VJTlQzMiBHZXROZWFyZXN0UGFsZXR0ZUluZGV4MzIoIEhQQUxFVFRFMzIgaHBhbGV0dGUsIENPTE9SUkVGIGNvbG9yICkKK3sKKyAgICBQQUxFVFRFT0JKKglwYWxPYmogPSAoUEFMRVRURU9CSiopR0RJX0dldE9ialB0ciggaHBhbGV0dGUsIFBBTEVUVEVfTUFHSUMgKTsKKyAgICBVSU5UMzIgaW5kZXggID0gMDsKIAogICAgIGlmKCBwYWxPYmogKQogICAgICAgICBpbmRleCA9IENPTE9SX1BhbGV0dGVMb29rdXBQaXhlbCggcGFsT2JqLT5sb2dwYWxldHRlLnBhbFBhbEVudHJ5LCAKLQkJCQkgICAgICAgICAgcGFsT2JqLT5sb2dwYWxldHRlLnBhbE51bUVudHJpZXMsIE5VTEwsCi0JCQkJCSAgY29sb3IsIEZBTFNFICk7CisJCQkJICAgICAgICAgIHBhbE9iai0+bG9ncGFsZXR0ZS5wYWxOdW1FbnRyaWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgY29sb3IsIEZBTFNFICk7CiAKICAgICBkcHJpbnRmX3BhbGV0dGUoc3RkZGViLCJHZXROZWFyZXN0UGFsZXR0ZUluZGV4KCUwNHgsJTA2bHgpOiByZXR1cm5pbmcgJWRcbiIsIAogICAgICAgICAgICAgICAgICAgICBocGFsZXR0ZSwgY29sb3IsIGluZGV4ICk7CkBAIC0yMzMsOSArMzI1LDE4IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgR2V0TmVhcmVzdENvbG9yICAgIChHREkuMTU0KQorICogICAgICAgICAgIEdldE5lYXJlc3RDb2xvcjE2ICAgKEdESS4xNTQpCiAgKi8KLUNPTE9SUkVGIEdldE5lYXJlc3RDb2xvciggSERDMTYgaGRjLCBDT0xPUlJFRiBjb2xvciApCitDT0xPUlJFRiBHZXROZWFyZXN0Q29sb3IxNiggSERDMTYgaGRjLCBDT0xPUlJFRiBjb2xvciApCit7CisgICAgcmV0dXJuIEdldE5lYXJlc3RDb2xvcjMyKCBoZGMsIGNvbG9yICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2V0TmVhcmVzdENvbG9yMzIgICAoR0RJMzIuMjAyKQorICovCitDT0xPUlJFRiBHZXROZWFyZXN0Q29sb3IzMiggSERDMzIgaGRjLCBDT0xPUlJFRiBjb2xvciApCiB7CiAgICAgQ09MT1JSRUYgCSBuZWFyZXN0ID0gMHhGQURFQ0FGRTsKICAgICBEQyAJCSpkYzsKQEAgLTMxOCwxMiArNDE5LDExIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIEdESVJlYWxpemVQYWxldHRlICAgIChHREkuMzYyKQotICoKICAqLwotVUlOVCBHRElSZWFsaXplUGFsZXR0ZSggSERDMTYgaGRjICkKK1VJTlQxNiBHRElSZWFsaXplUGFsZXR0ZSggSERDMTYgaGRjICkKIHsKICAgICBQQUxFVFRFT0JKKiBwYWxQdHI7Ci0gICAgaW50CQlyZWFsaXplZCA9IDA7CisgICAgaW50IHJlYWxpemVkID0gMDsKICAgICBEQyoJCWRjID0gKERDICopIEdESV9HZXRPYmpQdHIoIGhkYywgRENfTUFHSUMgKTsKICAgICBpZiAoIWRjKSAKICAgICB7CkBAIC0zNDcsMTQgKzQ0NywxNCBAQAogICAgIGVsc2UgZHByaW50Zl9wYWxldHRlKHN0ZGRlYiwgIiBza2lwcGluZyAiKTsKICAgICAKICAgICBkcHJpbnRmX3BhbGV0dGUoc3RkbmltcCwgIiByZWFsaXplZCAlaSBjb2xvcnNcbiIsIHJlYWxpemVkICk7Ci0gICAgcmV0dXJuIChVSU5UKXJlYWxpemVkOworICAgIHJldHVybiAoVUlOVDE2KXJlYWxpemVkOwogfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIFJlYWxpemVEZWZhdWx0UGFsZXR0ZSAgICAoR0RJLjM2NSkKICAqLwotV09SRCBSZWFsaXplRGVmYXVsdFBhbGV0dGUoIEhEQzE2IGhkYyApCitVSU5UMTYgUmVhbGl6ZURlZmF1bHRQYWxldHRlKCBIREMxNiBoZGMgKQogewogICAgIERDICAgICAgICAgICpkYzsKICAgICBQQUxFVFRFT0JKKiAgcGFsUHRyOwpAQCAtMzkyLDE2ICs0OTIsMjggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIElzRENDdXJyZW50UGFsZXR0ZSAgIChHREkuNDEyKQogICovCi1CT09MIElzRENDdXJyZW50UGFsZXR0ZShIREMxNiBoREMpCitCT09MMTYgSXNEQ0N1cnJlbnRQYWxldHRlKEhEQzE2IGhEQykKIHsKICAgICBEQyogZGMgPSAoREMgKilHRElfR2V0T2JqUHRyKCBoREMsIERDX01BR0lDICk7CiAgICAgcmV0dXJuIChkYyk/KGRjLT53LmhQYWxldHRlID09IGhQcmltYXJ5UGFsZXR0ZSk6RkFMU0U7CiB9CiAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgU2VsZWN0UGFsZXR0ZSAgICAoVVNFUi4yODIpCisgKiAgICAgICAgICAgU2VsZWN0UGFsZXR0ZTE2ICAgIChVU0VSLjI4MikKICAqLwotSFBBTEVUVEUxNiBTZWxlY3RQYWxldHRlKCBIREMxNiBoREMsIEhQQUxFVFRFMTYgaFBhbCwgQk9PTCBiRm9yY2VCYWNrZ3JvdW5kICkKK0hQQUxFVFRFMTYgU2VsZWN0UGFsZXR0ZTE2KCBIREMxNiBoREMsIEhQQUxFVFRFMTYgaFBhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MMTYgYkZvcmNlQmFja2dyb3VuZCApCit7CisgICAgcmV0dXJuIFNlbGVjdFBhbGV0dGUzMiggaERDLCBoUGFsLCBiRm9yY2VCYWNrZ3JvdW5kICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgU2VsZWN0UGFsZXR0ZTMyICAgIChHREkzMi4zMDApCisgKi8KK0hQQUxFVFRFMzIgU2VsZWN0UGFsZXR0ZTMyKCBIREMzMiBoREMsIEhQQUxFVFRFMzIgaFBhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MMzIgYkZvcmNlQmFja2dyb3VuZCApCiB7CiAgICAgV09SRAl3QmtnUGFsZXR0ZSA9IDE7CiAgICAgUEFMRVRURU9CSiogbHB0ID0gKFBBTEVUVEVPQkoqKSBHRElfR2V0T2JqUHRyKCBoUGFsLCBQQUxFVFRFX01BR0lDICk7CkBAIC00MjksMTEgKzU0MSwyMCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIFJlYWxpemVQYWxldHRlICAgIChVU0VSLjI4MykgKEdESTMyLjI4MCkKKyAqICAgICAgICAgICBSZWFsaXplUGFsZXR0ZTE2ICAgIChVU0VSLjI4MykKICAqLwotVUlOVDE2IFJlYWxpemVQYWxldHRlKCBIREMzMiBoREMgKQorVUlOVDE2IFJlYWxpemVQYWxldHRlMTYoIEhEQzE2IGhEQyApCiB7Ci0gICAgVUlOVDE2IHJlYWxpemVkID0gR0RJUmVhbGl6ZVBhbGV0dGUoIGhEQyApOworICAgIHJldHVybiBSZWFsaXplUGFsZXR0ZTMyKCBoREMgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBSZWFsaXplUGFsZXR0ZTMyICAgIChHREkzMi4yODApCisgKi8KK1VJTlQzMiBSZWFsaXplUGFsZXR0ZTMyKCBIREMzMiBoREMgKQoreworICAgIFVJTlQzMiByZWFsaXplZCA9IEdESVJlYWxpemVQYWxldHRlKCBoREMgKTsKIAogICAgIC8qIGRvIG5vdCBzZW5kIGFueXRoaW5nIGlmIG5vIGNvbG9ycyB3ZXJlIGNoYW5nZWQgKi8KIApAQCAtNDYyLDcgKzU4Myw3IEBACiAgICAgICogYnV0IGl0IHdvdWxkIHRha2UgZm9yZXZlciBnaXZlbiB0aGUgc3BlZWQgb2YgWEdldC9QdXRQaXhlbC4KICAgICAgKi8KICAgICBpZiAoaFduZCAmJiAhKENPTE9SX0dldFN5c3RlbVBhbGV0dGVGbGFncygpICYgQ09MT1JfVklSVFVBTCkgKSAKLQlJbnZhbGlkYXRlUmVjdDE2KCBoV25kLCBOVUxMLCBGQUxTRSApOworCUludmFsaWRhdGVSZWN0MzIoIGhXbmQsIE5VTEwsIEZBTFNFICk7CiAgICAgcmV0dXJuIDB4NjY2OwogfQogCmRpZmYgLS1naXQgYS9vYmplY3RzL3RleHQuYyBiL29iamVjdHMvdGV4dC5jCmluZGV4IGQxNzhhMzUuLjFmY2Y2MjIgMTAwNjQ0Ci0tLSBhL29iamVjdHMvdGV4dC5jCisrKyBiL29iamVjdHMvdGV4dC5jCkBAIC0zOTAsMTggKzM5MCwxOSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEdyYXlTdHJpbmcgICAoVVNFUi4xODUpCisgKiAgICAgICAgICAgR3JheVN0cmluZzE2ICAgKFVTRVIuMTg1KQogICovCi1CT09MIEdyYXlTdHJpbmcoSERDMTYgaGRjLCBIQlJVU0gxNiBoYnIsIEdSQVlTVFJJTkdQUk9DMTYgZ3NwcmMsIExQQVJBTSBsUGFyYW0sIAotCQlJTlQgY2NoLCBJTlQgeCwgSU5UIHksIElOVCBjeCwgSU5UIGN5KQorQk9PTDE2IEdyYXlTdHJpbmcxNiggSERDMTYgaGRjLCBIQlJVU0gxNiBoYnIsIEdSQVlTVFJJTkdQUk9DMTYgZ3NwcmMsCisgICAgICAgICAgICAgICAgICAgICBMUEFSQU0gbFBhcmFtLCBJTlQxNiBjY2gsIElOVDE2IHgsIElOVDE2IHksCisgICAgICAgICAgICAgICAgICAgICBJTlQxNiBjeCwgSU5UMTYgY3kgKQogewotICAgIEJPT0wgcmV0OworICAgIEJPT0wxNiByZXQ7CiAgICAgQ09MT1JSRUYgY3VycmVudF9jb2xvcjsKIAogICAgIGlmICghY2NoKSBjY2ggPSBsc3RybGVuMTYoIChMUENTVFIpUFRSX1NFR19UT19MSU4obFBhcmFtKSApOwogICAgIGlmIChnc3ByYykgcmV0dXJuIGdzcHJjKCBoZGMsIGxQYXJhbSwgY2NoICk7CiAgICAgY3VycmVudF9jb2xvciA9IEdldFRleHRDb2xvcjMyKCBoZGMgKTsKLSAgICBTZXRUZXh0Q29sb3IoIGhkYywgR2V0U3lzQ29sb3IoQ09MT1JfR1JBWVRFWFQpICk7CisgICAgU2V0VGV4dENvbG9yKCBoZGMsIEdldFN5c0NvbG9yMzIoQ09MT1JfR1JBWVRFWFQpICk7CiAgICAgcmV0ID0gVGV4dE91dDE2KCBoZGMsIHgsIHksIChMUENTVFIpUFRSX1NFR19UT19MSU4obFBhcmFtKSwgY2NoICk7CiAgICAgU2V0VGV4dENvbG9yKCBoZGMsIGN1cnJlbnRfY29sb3IgKTsKICAgICByZXR1cm4gcmV0OwpAQCAtNDA5LDI0ICs0MTAsNjUgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHcmF5U3RyaW5nMzJBICAgKFVTRVIzMi4zMTQpCisgKi8KK0JPT0wzMiBHcmF5U3RyaW5nMzJBKCBIREMzMiBoZGMsIEhCUlVTSDMyIGhiciwgR1JBWVNUUklOR1BST0MzMiBnc3ByYywKKyAgICAgICAgICAgICAgICAgICAgICBMUEFSQU0gbFBhcmFtLCBJTlQzMiBjY2gsIElOVDMyIHgsIElOVDMyIHksCisgICAgICAgICAgICAgICAgICAgICAgSU5UMzIgY3gsIElOVDMyIGN5ICkKK3sKKyAgICBCT09MMzIgcmV0OworICAgIENPTE9SUkVGIGN1cnJlbnRfY29sb3I7CisKKyAgICBpZiAoIWNjaCkgY2NoID0gbHN0cmxlbjMyQSggKExQQ1NUUilsUGFyYW0gKTsKKyAgICBpZiAoZ3NwcmMpIHJldHVybiBnc3ByYyggaGRjLCBsUGFyYW0sIGNjaCApOworICAgIGN1cnJlbnRfY29sb3IgPSBHZXRUZXh0Q29sb3IzMiggaGRjICk7CisgICAgU2V0VGV4dENvbG9yKCBoZGMsIEdldFN5c0NvbG9yMzIoQ09MT1JfR1JBWVRFWFQpICk7CisgICAgcmV0ID0gVGV4dE91dDMyQSggaGRjLCB4LCB5LCAoTFBDU1RSKWxQYXJhbSwgY2NoICk7CisgICAgU2V0VGV4dENvbG9yKCBoZGMsIGN1cnJlbnRfY29sb3IgKTsKKyAgICByZXR1cm4gcmV0OworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdyYXlTdHJpbmczMlcgICAoVVNFUjMyLjMxNSkKKyAqLworQk9PTDMyIEdyYXlTdHJpbmczMlcoIEhEQzMyIGhkYywgSEJSVVNIMzIgaGJyLCBHUkFZU1RSSU5HUFJPQzMyIGdzcHJjLAorICAgICAgICAgICAgICAgICAgICAgIExQQVJBTSBsUGFyYW0sIElOVDMyIGNjaCwgSU5UMzIgeCwgSU5UMzIgeSwKKyAgICAgICAgICAgICAgICAgICAgICBJTlQzMiBjeCwgSU5UMzIgY3kgKQoreworICAgIEJPT0wzMiByZXQ7CisgICAgQ09MT1JSRUYgY3VycmVudF9jb2xvcjsKKworICAgIGlmICghY2NoKSBjY2ggPSBsc3RybGVuMzJXKCAoTFBDV1NUUilsUGFyYW0gKTsKKyAgICBpZiAoZ3NwcmMpIHJldHVybiBnc3ByYyggaGRjLCBsUGFyYW0sIGNjaCApOworICAgIGN1cnJlbnRfY29sb3IgPSBHZXRUZXh0Q29sb3IzMiggaGRjICk7CisgICAgU2V0VGV4dENvbG9yKCBoZGMsIEdldFN5c0NvbG9yMzIoQ09MT1JfR1JBWVRFWFQpICk7CisgICAgcmV0ID0gVGV4dE91dDMyVyggaGRjLCB4LCB5LCAoTFBDV1NUUilsUGFyYW0sIGNjaCApOworICAgIFNldFRleHRDb2xvciggaGRjLCBjdXJyZW50X2NvbG9yICk7CisgICAgcmV0dXJuIHJldDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBURVhUX1RhYmJlZFRleHRPdXQKICAqCiAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIFRhYmJlZFRleHRPdXQoKSBhbmQgR2V0VGFiYmVkVGV4dEV4dGVudCgpLgogICogTm90ZTogdGhpcyBkb2Vzbid0IHdvcmsgdG9vIHdlbGwgZm9yIHRleHQtYWxpZ25tZW50IG1vZGVzIG90aGVyCiAgKiAgICAgICB0aGFuIFRBX0xFRlR8VEFfVE9QLiBCdXQgd2Ugd2FudCBidWctZm9yLWJ1ZyBjb21wYXRpYmlsaXR5IDotKQogICovCi1MT05HIFRFWFRfVGFiYmVkVGV4dE91dCggSERDMTYgaGRjLCBpbnQgeCwgaW50IHksIExQU1RSIGxwc3RyLCBpbnQgY291bnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjVGFiU3RvcHMsIExQSU5UMTYgbHBUYWJQb3MsIGludCBuVGFiT3JnLAotICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgZkRpc3BsYXlUZXh0KQorTE9ORyBURVhUX1RhYmJlZFRleHRPdXQoIEhEQzMyIGhkYywgSU5UMzIgeCwgSU5UMzIgeSwgTFBDU1RSIGxwc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgIElOVDMyIGNvdW50LCBJTlQzMiBjVGFiU3RvcHMsIGNvbnN0IElOVDE2ICpscFRhYlBvczE2LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVDMyICpscFRhYlBvczMyLCBJTlQzMiBuVGFiT3JnLAorICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wzMiBmRGlzcGxheVRleHQgKQogewotICAgIFdPUkQgZGVmV2lkdGg7CisgICAgSU5UMzIgZGVmV2lkdGg7CiAgICAgRFdPUkQgZXh0ZW50ID0gMDsKICAgICBpbnQgaSwgdGFiUG9zID0geDsKICAgICBpbnQgc3RhcnQgPSB4OwogCiAgICAgaWYgKGNUYWJTdG9wcyA9PSAxKQogICAgIHsKLSAgICAgICAgZGVmV2lkdGggPSAqbHBUYWJQb3M7CisgICAgICAgIGRlZldpZHRoID0gbHBUYWJQb3MzMiA/ICpscFRhYlBvczMyIDogKmxwVGFiUG9zMTY7CiAgICAgICAgIGNUYWJTdG9wcyA9IDA7CiAgICAgfQogICAgIGVsc2UKQEAgLTQ0MSwyNCArNDgzLDM3IEBACiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICAgICAgaWYgKGxwc3RyW2ldID09ICdcdCcpIGJyZWFrOwogICAgICAgICBleHRlbnQgPSBHZXRUZXh0RXh0ZW50KCBoZGMsIGxwc3RyLCBpICk7Ci0gICAgICAgIHdoaWxlICgoY1RhYlN0b3BzID4gMCkgJiYgKG5UYWJPcmcgKyAqbHBUYWJQb3MgPD0geCArIExPV09SRChleHRlbnQpKSkKKyAgICAgICAgaWYgKGxwVGFiUG9zMzIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxwVGFiUG9zKys7Ci0gICAgICAgICAgICBjVGFiU3RvcHMtLTsKKyAgICAgICAgICAgIHdoaWxlICgoY1RhYlN0b3BzID4gMCkgJiYKKyAgICAgICAgICAgICAgICAgICAoblRhYk9yZyArICpscFRhYlBvczMyIDw9IHggKyBMT1dPUkQoZXh0ZW50KSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbHBUYWJQb3MzMisrOworICAgICAgICAgICAgICAgIGNUYWJTdG9wcy0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKChjVGFiU3RvcHMgPiAwKSAmJgorICAgICAgICAgICAgICAgICAgIChuVGFiT3JnICsgKmxwVGFiUG9zMTYgPD0geCArIExPV09SRChleHRlbnQpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBscFRhYlBvczE2Kys7CisgICAgICAgICAgICAgICAgY1RhYlN0b3BzLS07CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKGkgPT0gY291bnQpCiAgICAgICAgICAgICB0YWJQb3MgPSB4ICsgTE9XT1JEKGV4dGVudCk7CiAgICAgICAgIGVsc2UgaWYgKGNUYWJTdG9wcyA+IDApCi0gICAgICAgICAgICB0YWJQb3MgPSBuVGFiT3JnICsgKmxwVGFiUG9zOworICAgICAgICAgICAgdGFiUG9zID0gblRhYk9yZyArIChscFRhYlBvczMyID8gKmxwVGFiUG9zMzIgOiAqbHBUYWJQb3MxNik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRhYlBvcyA9IG5UYWJPcmcgKyAoKHggKyBMT1dPUkQoZXh0ZW50KSAtIG5UYWJPcmcpIC8gZGVmV2lkdGggKyAxKSAqIGRlZldpZHRoOwogICAgICAgICBpZiAoZkRpc3BsYXlUZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBSRUNUMTYgcjsKLSAgICAgICAgICAgIFNldFJlY3QxNiggJnIsIHgsIHksIHRhYlBvcywgeStISVdPUkQoZXh0ZW50KSApOwotICAgICAgICAgICAgRXh0VGV4dE91dDE2KCBoZGMsIHgsIHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEdldEJrTW9kZTMyKGhkYykgPT0gT1BBUVVFID8gRVRPX09QQVFVRSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZyLCBscHN0ciwgaSwgTlVMTCApOworICAgICAgICAgICAgUkVDVDMyIHI7CisgICAgICAgICAgICBTZXRSZWN0MzIoICZyLCB4LCB5LCB0YWJQb3MsIHkrSElXT1JEKGV4dGVudCkgKTsKKyAgICAgICAgICAgIEV4dFRleHRPdXQzMkEoIGhkYywgeCwgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEJrTW9kZTMyKGhkYykgPT0gT1BBUVVFID8gRVRPX09QQVFVRSA6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmciwgbHBzdHIsIGksIE5VTEwgKTsKICAgICAgICAgfQogICAgICAgICB4ID0gdGFiUG9zOwogICAgICAgICBjb3VudCAtPSBpKzE7CkBAIC00NjksMjYgKzUyNCw4MyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIFRhYmJlZFRleHRPdXQgICAgKFVTRVIuMTk2KQorICogICAgICAgICAgIFRhYmJlZFRleHRPdXQxNiAgICAoVVNFUi4xOTYpCiAgKi8KLUxPTkcgVGFiYmVkVGV4dE91dCggSERDMTYgaGRjLCBzaG9ydCB4LCBzaG9ydCB5LCBMUFNUUiBscHN0ciwgc2hvcnQgY291bnQsIAotICAgICAgICAgICAgICAgICAgICBzaG9ydCBjVGFiU3RvcHMsIExQSU5UMTYgbHBUYWJQb3MsIHNob3J0IG5UYWJPcmcgKQorTE9ORyBUYWJiZWRUZXh0T3V0MTYoIEhEQzE2IGhkYywgSU5UMTYgeCwgSU5UMTYgeSwgTFBDU1RSIGxwc3RyLCBJTlQxNiBjb3VudCwgCisgICAgICAgICAgICAgICAgICAgICAgSU5UMTYgY1RhYlN0b3BzLCBjb25zdCBJTlQxNiAqbHBUYWJQb3MsIElOVDE2IG5UYWJPcmcgKQogewotICAgIGRwcmludGZfdGV4dCggc3RkZGViLCAiVGFiYmVkVGV4dE91dDogJTA0eCAlZCwlZCAnJSouKnMnICVkXG4iLAotICAgICAgICAgICAgICAgICAgaGRjLCB4LCB5LCBjb3VudCwgY291bnQsIGxwc3RyLCBjb3VudCApOworICAgIGRwcmludGZfdGV4dCggc3RkZGViLCAiVGFiYmVkVGV4dE91dDE2OiAlMDR4ICVkLCVkICclLipzJyAlZFxuIiwKKyAgICAgICAgICAgICAgICAgIGhkYywgeCwgeSwgY291bnQsIGxwc3RyLCBjb3VudCApOwogICAgIHJldHVybiBURVhUX1RhYmJlZFRleHRPdXQoIGhkYywgeCwgeSwgbHBzdHIsIGNvdW50LCBjVGFiU3RvcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHBUYWJQb3MsIG5UYWJPcmcsIFRSVUUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscFRhYlBvcywgTlVMTCwgblRhYk9yZywgVFJVRSApOwogfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEdldFRhYmJlZFRleHRFeHRlbnQgICAgKFVTRVIuMTk3KQorICogICAgICAgICAgIFRhYmJlZFRleHRPdXQzMkEgICAgKFVTRVIzMi41NDEpCiAgKi8KLURXT1JEIEdldFRhYmJlZFRleHRFeHRlbnQoIEhEQzE2IGhkYywgTFBTVFIgbHBzdHIsIGludCBjb3VudCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjVGFiU3RvcHMsIExQSU5UMTYgbHBUYWJQb3MgKQorTE9ORyBUYWJiZWRUZXh0T3V0MzJBKCBIREMzMiBoZGMsIElOVDMyIHgsIElOVDMyIHksIExQQ1NUUiBscHN0ciwgSU5UMzIgY291bnQsIAorICAgICAgICAgICAgICAgICAgICAgICBJTlQzMiBjVGFiU3RvcHMsIGNvbnN0IElOVDMyICpscFRhYlBvcywgSU5UMzIgblRhYk9yZyApCiB7Ci0gICAgZHByaW50Zl90ZXh0KCBzdGRkZWIsICJHZXRUYWJiZWRUZXh0RXh0ZW50OiAlMDR4ICclKi4qcycgJWRcbiIsCi0gICAgICAgICAgICAgICAgICBoZGMsIGNvdW50LCBjb3VudCwgbHBzdHIsIGNvdW50ICk7CisgICAgZHByaW50Zl90ZXh0KCBzdGRkZWIsICJUYWJiZWRUZXh0T3V0MzJBOiAlMDR4ICVkLCVkICclLipzJyAlZFxuIiwKKyAgICAgICAgICAgICAgICAgIGhkYywgeCwgeSwgY291bnQsIGxwc3RyLCBjb3VudCApOworICAgIHJldHVybiBURVhUX1RhYmJlZFRleHRPdXQoIGhkYywgeCwgeSwgbHBzdHIsIGNvdW50LCBjVGFiU3RvcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgbHBUYWJQb3MsIG5UYWJPcmcsIFRSVUUgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBUYWJiZWRUZXh0T3V0MzJXICAgIChVU0VSMzIuNTQyKQorICovCitMT05HIFRhYmJlZFRleHRPdXQzMlcoIEhEQzMyIGhkYywgSU5UMzIgeCwgSU5UMzIgeSwgTFBDV1NUUiBzdHIsIElOVDMyIGNvdW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgSU5UMzIgY1RhYlN0b3BzLCBjb25zdCBJTlQzMiAqbHBUYWJQb3MsIElOVDMyIG5UYWJPcmcgKQoreworICAgIExPTkcgcmV0OworICAgIExQU1RSIHAgPSBIRUFQX3hhbGxvYyggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgY291bnQgKyAxICk7CisgICAgbHN0cmNweW5XdG9BKCBwLCBzdHIsIGNvdW50ICsgMSApOworICAgIHJldCA9IFRhYmJlZFRleHRPdXQzMkEoIGhkYywgeCwgeSwgcCwgY291bnQsIGNUYWJTdG9wcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBscFRhYlBvcywgblRhYk9yZyApOworICAgIEhlYXBGcmVlKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBwICk7CisgICAgcmV0dXJuIHJldDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHZXRUYWJiZWRUZXh0RXh0ZW50MTYgICAgKFVTRVIuMTk3KQorICovCitEV09SRCBHZXRUYWJiZWRUZXh0RXh0ZW50MTYoIEhEQzE2IGhkYywgTFBDU1RSIGxwc3RyLCBJTlQxNiBjb3VudCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVDE2IGNUYWJTdG9wcywgY29uc3QgSU5UMTYgKmxwVGFiUG9zICkKK3sKKyAgICBkcHJpbnRmX3RleHQoIHN0ZGRlYiwgIkdldFRhYmJlZFRleHRFeHRlbnQ6ICUwNHggJyUuKnMnICVkXG4iLAorICAgICAgICAgICAgICAgICAgaGRjLCBjb3VudCwgbHBzdHIsIGNvdW50ICk7CiAgICAgcmV0dXJuIFRFWFRfVGFiYmVkVGV4dE91dCggaGRjLCAwLCAwLCBscHN0ciwgY291bnQsIGNUYWJTdG9wcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscFRhYlBvcywgMCwgRkFMU0UgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscFRhYlBvcywgTlVMTCwgMCwgRkFMU0UgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHZXRUYWJiZWRUZXh0RXh0ZW50MzJBICAgIChVU0VSMzIuMjkyKQorICovCitEV09SRCBHZXRUYWJiZWRUZXh0RXh0ZW50MzJBKCBIREMzMiBoZGMsIExQQ1NUUiBscHN0ciwgSU5UMzIgY291bnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UMzIgY1RhYlN0b3BzLCBjb25zdCBJTlQzMiAqbHBUYWJQb3MgKQoreworICAgIGRwcmludGZfdGV4dCggc3RkZGViLCAiR2V0VGFiYmVkVGV4dEV4dGVudDogJTA0eCAnJS4qcycgJWRcbiIsCisgICAgICAgICAgICAgICAgICBoZGMsIGNvdW50LCBscHN0ciwgY291bnQgKTsKKyAgICByZXR1cm4gVEVYVF9UYWJiZWRUZXh0T3V0KCBoZGMsIDAsIDAsIGxwc3RyLCBjb3VudCwgY1RhYlN0b3BzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGxwVGFiUG9zLCAwLCBGQUxTRSApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdldFRhYmJlZFRleHRFeHRlbnQzMlcgICAgKFVTRVIzMi4yOTMpCisgKi8KK0RXT1JEIEdldFRhYmJlZFRleHRFeHRlbnQzMlcoIEhEQzMyIGhkYywgTFBDV1NUUiBscHN0ciwgSU5UMzIgY291bnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UMzIgY1RhYlN0b3BzLCBjb25zdCBJTlQzMiAqbHBUYWJQb3MgKQoreworICAgIExPTkcgcmV0OworICAgIExQU1RSIHAgPSBIRUFQX3hhbGxvYyggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgY291bnQgKyAxICk7CisgICAgbHN0cmNweW5XdG9BKCBwLCBscHN0ciwgY291bnQgKyAxICk7CisgICAgcmV0ID0gR2V0VGFiYmVkVGV4dEV4dGVudDMyQSggaGRjLCBwLCBjb3VudCwgY1RhYlN0b3BzLCBscFRhYlBvcyApOworICAgIEhlYXBGcmVlKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBwICk7CisgICAgcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3Byb2dtYW4vQ2hhbmdlTG9nIGIvcHJvZ3JhbXMvcHJvZ21hbi9DaGFuZ2VMb2cKaW5kZXggYWVlYTNlMi4uOGUxZmFjMCAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvcHJvZ21hbi9DaGFuZ2VMb2cKKysrIGIvcHJvZ3JhbXMvcHJvZ21hbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4IEBACitXZWQgRmViIDEyIDAwOjU4OjM3IDE5OTcgIEVsa2VyIENhdmluYSA8ZWxrZXJAbWFpbC5hc2lhbmV0Lml0PgorCisJKiBbSXQucmNdIChuZXcpCisJQWRkZWQgSXRhbGlhbiBsYW5ndWFnZSBzdXBwb3J0LgorCiBGcmkgSmFuIDI0IDExOjIxOjMwIDE5OTcgIEJhbmcgSnVuLVlvdW5nICA8YmFuZ2p5QG5vd251cmkubm93Y29tLmNvLmtyPgogCiAJKiBbS28ucmNdIChuZXcpCmRpZmYgLS1naXQgYS9wcm9ncmFtcy9wcm9nbWFuL0h1LnJjIGIvcHJvZ3JhbXMvcHJvZ21hbi9IdS5yYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmM1NjdhCi0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3JhbXMvcHJvZ21hbi9IdS5yYwpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIFByb2dyYW0gTWFuYWdlcgorICoKKyAqIENvcHlyaWdodCAxOTk2IFVscmljaCBTY2htaWQKKyAqLworCisjZGVmaW5lIExBTkdVQUdFX0lEICAgICAgICAgICAgICAgICAgSHUKKyNkZWZpbmUgTEFOR1VBR0VfTlVNQkVSICAgICAgICAgICAgICA3CisjZGVmaW5lIExBTkdVQUdFX01FTlVfSVRFTSAgICAgICAgICAgIiZNYWd5YXIiCisKKy8qIE1lbnUgKi8KKworI2RlZmluZSBNRU5VX0ZJTEUgICAgICAgICAgICAgICAgICAgICImRmlsZSIKKyNkZWZpbmUgTUVOVV9GSUxFX05FVyAgICAgICAgICAgICAgICAiJtpqLi4uIgorI2RlZmluZSBNRU5VX0ZJTEVfT1BFTiAgICAgICAgICAgICAgICImTWVnbnlpdOFzXHRFbnRlciIKKyNkZWZpbmUgTUVOVV9GSUxFX01PVkUgICAgICAgICAgICAgICAiTSZvemdhdOFzLi4uXHRGNyIKKyNkZWZpbmUgTUVOVV9GSUxFX0NPUFkgICAgICAgICAgICAgICAiTeEmc29s4XMuLi5cdEY4IgorI2RlZmluZSBNRU5VX0ZJTEVfREVMRVRFICAgICAgICAgICAgICImVPZybOlzXHREZWwiCisjZGVmaW5lIE1FTlVfRklMRV9BVFRSSUJVVEVTICAgICAgICAgIiZKZWxsZW169WsuLi5cdEFsdCtFbnRlciIKKyNkZWZpbmUgTUVOVV9GSUxFX0VYRUNVVEUgICAgICAgICAgICAiJkZ1dHRhdOFzLi4uIgorI2RlZmluZSBNRU5VX0ZJTEVfRVhJVCAgICAgICAgICAgICAgICImS2ls6XDpcyBhIFdpbmRvd3MtYvNsLi4uIgorCisjZGVmaW5lIE1FTlVfT1BUSU9OUyAgICAgICAgICAgICAgICAgIiZCZeFsbO104XNvayIKKyNkZWZpbmUgTUVOVV9PUFRJT05TX0FVVE9fQVJSQU5HRSAgICAiJkF1dG9tYXRpa3VzIGVscmVuZGV66XMiCisjZGVmaW5lIE1FTlVfT1BUSU9OU19NSU5fT05fUlVOICAgICAgIiZNaW5pbWFsaXrhbOFzIGZ1dHRhdOFza29yIgorI2RlZmluZSBNRU5VX09QVElPTlNfU0FWRV9TRVRUSU5HUyAgICImQmXhbGztdOFzb2sgbWVudOlzZSBraWzpcOlza29yIgorCisjZGVmaW5lIE1FTlVfV0lORE9XUyAgICAgICAgICAgICAgICAgIiZBYmxha29rIgorI2RlZmluZSBNRU5VX1dJTkRPV1NfT1ZFUkxBUCAgICAgICAgICLBJnRsYXBvbOFzXHRTaGlmdCtGNSIKKyNkZWZpbmUgTUVOVV9XSU5ET1dTX1NJREVfQllfU0lERSAgICAiJkVneW3hcyBtZWxs6SByYWvhc1x0U2hpZnQrRjQiCisjZGVmaW5lIE1FTlVfV0lORE9XU19BUlJBTkdFICAgICAgICAgIiZJa29ub2sgcmVuZGV66XNlIgorCisjZGVmaW5lIE1FTlVfTEFOR1VBR0UgICAgICAgICAgICAgICAgIiZOeWVsdiIKKworI2RlZmluZSBNRU5VX0hFTFAgICAgICAgICAgICAgICAgICAgICImU2Vn7XRz6WciCisjZGVmaW5lIE1FTlVfSEVMUF9DT05URU5UUyAgICAgICAgICAgIiZUYXJ0YWxvbSIKKyNkZWZpbmUgTUVOVV9IRUxQX1NFQVJDSCAgICAgICAgICAgICAiJktlcmVz6XMuLi4iCisjZGVmaW5lIE1FTlVfSEVMUF9IRUxQX09OX0hFTFAgICAgICAgIiZTZWftdHPpZyBhIFNlZ+10c+lncvVsIgorI2RlZmluZSBNRU5VX0hFTFBfVFVUT1JJQUwgICAgICAgICAgICJUJmFu7XTzIgorCisjZGVmaW5lIE1FTlVfSU5GTyAgICAgICAgICAgICAgICAgICAgIiZJbmZvcm3hY2nzLi4uIgorI2RlZmluZSBNRU5VX0lORk9fTElDRU5TRSAgICAgICAgICAgICImTGljZW5zeiIKKyNkZWZpbmUgTUVOVV9JTkZPX05PX1dBUlJBTlRZICAgICAgICAiJlNFTU1JIEdBUkFOQ0lBIgorI2RlZmluZSBNRU5VX0lORk9fQUJPVVRfV0lORSAgICAgICAgICImQSBXSU5FLXLzbCIKKworLyogRGlhbG9ncyAqLworCisjZGVmaW5lIERJQUxPR19PSyAgICAgICAgICAgICAgICAgICAgIk9LIgorI2RlZmluZSBESUFMT0dfQ0FOQ0VMICAgICAgICAgICAgICAgICJN6WdzZW0iCisjZGVmaW5lIERJQUxPR19CUk9XU0UgICAgICAgICAgICAgICAgIiZW4WxvZ2F04XMiCisjZGVmaW5lIERJQUxPR19IRUxQICAgICAgICAgICAgICAgICAgIiZTZWftdHPpZyIKKworI2RlZmluZSBESUFMT0dfTkVXX0NBUFRJT04gICAgICAgICAgICLaaiBwcm9ncmFtIG9iamVrdHVtIgorI2RlZmluZSBESUFMT0dfTkVXX05FVyAgICAgICAgICAgICAgICLaaiIKKyNkZWZpbmUgRElBTE9HX05FV19HUk9VUCAgICAgICAgICAgICAiUHJvZ3JhbSAmY3NvcG9ydCIKKyNkZWZpbmUgRElBTE9HX05FV19QUk9HUkFNICAgICAgICAgICAiJlByb2dyYW0iCisKKyNkZWZpbmUgRElBTE9HX01PVkVfQ0FQVElPTiAgICAgICAgICAiUHJvZ3JhbSBtb3pnYXThc2EiCisjZGVmaW5lIERJQUxPR19NT1ZFX1BST0dSQU0gICAgICAgICAgIk1vemdhdGFuZPMgJnByb2dyYW06IgorI2RlZmluZSBESUFMT0dfTU9WRV9GUk9NX0dST1VQICAgICAgICImTWVseWlrIGNzb3BvcnRi82w6IgorI2RlZmluZSBESUFMT0dfTU9WRV9UT19HUk9VUCAgICAgICAgICJNJmVseWlrIGNzb3BvcnRiYToiCisKKyNkZWZpbmUgRElBTE9HX0NPUFlfQ0FQVElPTiAgICAgICAgICAiUHJvZ3JhbSBt4XNvbOFzYSIKKyNkZWZpbmUgRElBTE9HX0NPUFlfUFJPR1JBTSAgICAgICAgICAiTeFzb2xhbmTzIHByb2dyYW06IgorI2RlZmluZSBESUFMT0dfQ09QWV9GUk9NX0dST1VQICAgICAgIERJQUxPR19NT1ZFX0ZST01fR1JPVVAKKyNkZWZpbmUgRElBTE9HX0NPUFlfVE9fR1JPVVAgICAgICAgICBESUFMT0dfTU9WRV9UT19HUk9VUAorCisjZGVmaW5lIERJQUxPR19HUk9VUF9DQVBUSU9OICAgICAgICAgIlByb2dyYW0gY3NvcG9ydCBqZWxsZW169WkiCisjZGVmaW5lIERJQUxPR19HUk9VUF9ERVNDUklQVElPTiAgICAgIiZMZe1y4XM6IgorI2RlZmluZSBESUFMT0dfR1JPVVBfRklMRSAgICAgICAgICAgICImQ3NvcG9ydCBmaWxlOiIKKworI2RlZmluZSBESUFMT0dfUFJPR1JBTV9DQVBUSU9OICAgICAgICJQcm9ncmFtIGplbGxlbXr1aSIKKyNkZWZpbmUgRElBTE9HX1BST0dSQU1fREVTQ1JJUFRJT04gICBESUFMT0dfR1JPVVBfREVTQ1JJUFRJT04KKyNkZWZpbmUgRElBTE9HX1BST0dSQU1fQ09NTUFORF9MSU5FICAiJlBhcmFuY3Nzb3I6IgorI2RlZmluZSBESUFMT0dfUFJPR1JBTV9ESVJFQ1RPUlkgICAgICImTftr9mTpc2kga/ZueXZ04XI6IgorI2RlZmluZSBESUFMT0dfUFJPR1JBTV9IT1RfS0VZICAgICAgICImQmlsbGVudHn7IGtvbWJpbuFjafM6IgorI2RlZmluZSBESUFMT0dfUFJPR1JBTV9TWU1CT0wgICAgICAgICImSWtvbmvpbnQgZnV0dGF0IgorI2RlZmluZSBESUFMT0dfUFJPR1JBTV9PVEhFUl9TWU1CT0wgICImTeFzIGlrb24uLi4iCisKKyNkZWZpbmUgRElBTE9HX1NZTUJPTF9DQVBUSU9OICAgICAgICAiSWtvbiBraXbhbGFzenThc2EiCisjZGVmaW5lIERJQUxPR19TWU1CT0xfRklMRSAgICAgICAgICAgIiZGaWxlbul2OiIKKyNkZWZpbmUgRElBTE9HX1NZTUJPTF9DVVJSRU5UICAgICAgICAiJkplbGVubGVnaSBpa29uOiIKKworI2RlZmluZSBESUFMT0dfRVhFQ1VURV9DQVBUSU9OICAgICAgICJQcm9ncmFtIHbpZ3JlaGFqdOFzYSIKKyNkZWZpbmUgRElBTE9HX0VYRUNVVEVfQ09NTUFORF9MSU5FICBESUFMT0dfUFJPR1JBTV9DT01NQU5EX0xJTkUKKyNkZWZpbmUgRElBTE9HX0VYRUNVVEVfU1lNQk9MICAgICAgICBESUFMT0dfUFJPR1JBTV9TWU1CT0wKKworLyogU3RyaW5ncyAqLworCisjZGVmaW5lIFNUUklOR19QUk9HUkFNX01BTkFHRVIgICAgICAgICAgICAiUHJvZ3JhbWtlemVs9SIKKyNkZWZpbmUgU1RSSU5HX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICJISUJBIgorI2RlZmluZSBTVFJJTkdfV0FSTklORyAgICAgICAgICAgICAgICAgICAgIkZJR1lFTE1FWlRFVMlTIgorI2RlZmluZSBTVFJJTkdfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgIkluZm9ybeFjafMiCisjZGVmaW5lIFNUUklOR19ERUxFVEUgICAgICAgICAgICAgICAgICAgICAiVPZybOlzIgorI2RlZmluZSBTVFJJTkdfREVMRVRFX0dST1VQX3MgICAgICAgICAgICAgIlT2cvZsamVtIGEgYCVzJyBjc29wb3J0b3QgPyIKKyNkZWZpbmUgU1RSSU5HX0RFTEVURV9QUk9HUkFNX3MgICAgICAgICAgICJU9nL2bGplbSBhIGAlcycgcHJvZ3JhbW90ID8iCisjZGVmaW5lIFNUUklOR19OT1RfSU1QTEVNRU5URUQgICAgICAgICAgICAiTmluY3MgaW1wbGVtZW504Wx2YSIKKyNkZWZpbmUgU1RSSU5HX0ZJTEVfUkVBRF9FUlJPUl9zICAgICAgICAgICJIaWJhIGEgYCVzJyBvbHZhc+Fz4W7hbCIKKyNkZWZpbmUgU1RSSU5HX0ZJTEVfV1JJVEVfRVJST1JfcyAgICAgICAgICJIaWJhIGEgYCVzJyDtcuFz4W7hbCIKKworI2RlZmluZSBTVFJJTkdfR1JQRklMRV9SRUFEX0VSUk9SX3MgICAgICAgIlwKK05lbSB0dWRvbSBtZWdueWl0bmkgYSBgJXMnIGNzb3BvcnQgZmlsZS10LlxuXAorVG924WJi4SBpcyBtZWdwcvNi4WxqYW0gbWFqZD8iCisKKyNkZWZpbmUgU1RSSU5HX09VVF9PRl9NRU1PUlkgICAgICAgICAgICAgICJOaW5jcyBlbOlnIG1lbfNyaWEiCisjZGVmaW5lIFNUUklOR19XSU5IRUxQX0VSUk9SICAgICAgICAgICAgICAiU2Vn7XRz6WcgbmVtIGVs6XJoZXT1IgorI2RlZmluZSBTVFJJTkdfVU5LTk9XTl9GRUFUVVJFX3MgICAgICAgICAgIklzbWVyZXRsZW4gZmVhdHVyZSAlcy1iZW4iCisjZGVmaW5lIFNUUklOR19GSUxFX05PVF9PVkVSV1JJVFRFTl9zICAgICAiQSBgJXMnIG3hciBs6XRlemlrLiBOZW0g7XJ0YW0gZmVs/GwuIgorI2RlZmluZSBTVFJJTkdfU0FWRV9HUk9VUF9BU19zICAgICAgICAgICAgImAlcycta+ludCBtZW50cyBlbCBhIGNzb3BvcnRvdCwgaG9neSBtZWdlbPV6ZCBhIGZpbGUgZmVs/GztcuFz4XQiCisKKyNkZWZpbmUgU1RSSU5HX05PX0hPVF9LRVkgICAgICAgICAgICAgICAgICJOb25lIgorCisjZGVmaW5lIFNUUklOR19BTExfRklMRVMgICAgICAgICAgICAgICAgICAiTWluZGVuIGZpbGUgKCouKikiCisjZGVmaW5lIFNUUklOR19QUk9HUkFNUyAgICAgICAgICAgICAgICAgICAiUHJvZ3JhbW9rIgorI2RlZmluZSBTVFJJTkdfTElCUkFSSUVTX0RMTCAgICAgICAgICAgICAgIkxpYnJhcnktayAoKi5kbGwpIgorI2RlZmluZSBTVFJJTkdfU1lNQk9MX0ZJTEVTICAgICAgICAgICAgICAgIklrb24gZmlsZS1vayIKKyNkZWZpbmUgU1RSSU5HX1NZTUJPTFNfSUNPICAgICAgICAgICAgICAgICJJa29ub2sgKCouaWNvKSIKKworI2luY2x1ZGUgIlh4LnJjIgpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvcHJvZ21hbi9JdC5yYyBiL3Byb2dyYW1zL3Byb2dtYW4vSXQucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2ZDk2MgotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dyYW1zL3Byb2dtYW4vSXQucmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBQcm9ncmFtIE1hbmFnZXIKKyAqCisgKiBDb3B5cmlnaHQgMTk5NiBVbHJpY2ggU2NobWlkCisgKi8KKworI2RlZmluZSBMQU5HVUFHRV9JRCAgICAgICAgICAgICAgICAgIEl0CisjZGVmaW5lIExBTkdVQUdFX05VTUJFUiAgICAgICAgICAgICAgOQorI2RlZmluZSBMQU5HVUFHRV9NRU5VX0lURU0gICAgICAgICAgICImSXRhbGlhbm8iCisKKy8qIE1lbnUgKi8KKworI2RlZmluZSBNRU5VX0ZJTEUgICAgICAgICAgICAgICAgICAgICImRmlsZSIKKyNkZWZpbmUgTUVOVV9GSUxFX05FVyAgICAgICAgICAgICAgICAiJk51b3ZvLi4uIgorI2RlZmluZSBNRU5VX0ZJTEVfT1BFTiAgICAgICAgICAgICAgICImQXByaVx0RW50ZXIiCisjZGVmaW5lIE1FTlVfRklMRV9NT1ZFICAgICAgICAgICAgICAgIiZTcG9zdGEuLi5cdEY3IgorI2RlZmluZSBNRU5VX0ZJTEVfQ09QWSAgICAgICAgICAgICAgICImQ29waWEuLi5cdEY4IgorI2RlZmluZSBNRU5VX0ZJTEVfREVMRVRFICAgICAgICAgICAgICJFJmxpbWluYVx0RW50ZiIKKyNkZWZpbmUgTUVOVV9GSUxFX0FUVFJJQlVURVMgICAgICAgICAiUHImb3ByaWV0YScuLi5cdEFsdCtFbnRlciIKKyNkZWZpbmUgTUVOVV9GSUxFX0VYRUNVVEUgICAgICAgICAgICAiJkVzZWd1aS4uLiIKKyNkZWZpbmUgTUVOVV9GSUxFX0VYSVQgICAgICAgICAgICAgICAiRXNjJmkiCisKKyNkZWZpbmUgTUVOVV9PUFRJT05TICAgICAgICAgICAgICAgICAiJk9wemlvbmkiCisjZGVmaW5lIE1FTlVfT1BUSU9OU19BVVRPX0FSUkFOR0UgICAgIiZEaXNwb3NpemlvbmUgYXV0b21hdGljYSIKKyNkZWZpbmUgTUVOVV9PUFRJT05TX01JTl9PTl9SVU4gICAgICAiJlJpZHVjaSBhIGljb25hIGluIGVzZWN1emlvbmUiCisjZGVmaW5lIE1FTlVfT1BUSU9OU19TQVZFX1NFVFRJTkdTICAgIiZTYWx2YSBpbXBvc3RhemlvbmkgaW4gdXNjaXRhIgorCisjZGVmaW5lIE1FTlVfV0lORE9XUyAgICAgICAgICAgICAgICAgIkYmaW5lc3RyYSIKKyNkZWZpbmUgTUVOVV9XSU5ET1dTX09WRVJMQVAgICAgICAgICAiJlNvdnJhcHBvbmlcdFNoaWZ0K0Y1IgorI2RlZmluZSBNRU5VX1dJTkRPV1NfU0lERV9CWV9TSURFICAgICJBJmZmaWFuY2FcdFNoaWZ0K0Y0IgorI2RlZmluZSBNRU5VX1dJTkRPV1NfQVJSQU5HRSAgICAgICAgICImRGlzcG9uaSBpY29uZSIKKworI2RlZmluZSBNRU5VX0xBTkdVQUdFICAgICAgICAgICAgICAgICImTGluZ3VhIgorCisjZGVmaW5lIE1FTlVfSEVMUCAgICAgICAgICAgICAgICAgICAgIiY/IgorI2RlZmluZSBNRU5VX0hFTFBfQ09OVEVOVFMgICAgICAgICAgICImU29tbWFyaW8iCisjZGVmaW5lIE1FTlVfSEVMUF9TRUFSQ0ggICAgICAgICAgICAgIiZSaWNlcmNhLi4uIgorI2RlZmluZSBNRU5VX0hFTFBfSEVMUF9PTl9IRUxQICAgICAgICImQWl1dG8gc3VsbGEgR3VpZGEiCisjZGVmaW5lIE1FTlVfSEVMUF9UVVRPUklBTCAgICAgICAgICAgIiZUdXRvcmlhbCIKKworI2RlZmluZSBNRU5VX0lORk8gICAgICAgICAgICAgICAgICAgICImSW5mb3JtYXppb25pIHN1Li4uIgorI2RlZmluZSBNRU5VX0lORk9fTElDRU5TRSAgICAgICAgICAgICImTGljZW56YSIKKyNkZWZpbmUgTUVOVV9JTkZPX05PX1dBUlJBTlRZICAgICAgICAiJk5FU1NVTkEgR0FSQU5aSUEiCisjZGVmaW5lIE1FTlVfSU5GT19BQk9VVF9XSU5FICAgICAgICAgIiZJbmZvcm1hemlvbmkgc3UgV0lORSIKKworLyogRGlhbG9ncyAqLworCisjZGVmaW5lIERJQUxPR19PSyAgICAgICAgICAgICAgICAgICAgIk9LIgorI2RlZmluZSBESUFMT0dfQ0FOQ0VMICAgICAgICAgICAgICAgICJBbm51bGxhIgorI2RlZmluZSBESUFMT0dfQlJPV1NFICAgICAgICAgICAgICAgICJTJmZvZ2xpYSIKKyNkZWZpbmUgRElBTE9HX0hFTFAgICAgICAgICAgICAgICAgICAiJj8iCisKKyNkZWZpbmUgRElBTE9HX05FV19DQVBUSU9OICAgICAgICAgICAiTnVvdm8gZWxlbWVudG8iCisjZGVmaW5lIERJQUxPR19ORVdfTkVXICAgICAgICAgICAgICAgIk51b3ZvIgorI2RlZmluZSBESUFMT0dfTkVXX0dST1VQICAgICAgICAgICAgICImR3J1cHBvIGRpIHByb2dyYW1taSIKKyNkZWZpbmUgRElBTE9HX05FV19QUk9HUkFNICAgICAgICAgICAiJlByb2dyYW1tYSIKKworI2RlZmluZSBESUFMT0dfTU9WRV9DQVBUSU9OICAgICAgICAgICJTcG9zdGEgcHJvZ3JhbW1hIgorI2RlZmluZSBESUFMT0dfTU9WRV9QUk9HUkFNICAgICAgICAgICJTcG9zdGEgcHJvZ3JhbW1hOiIKKyNkZWZpbmUgRElBTE9HX01PVkVfRlJPTV9HUk9VUCAgICAgICAiRGFsIGdydXBwbzoiCisjZGVmaW5lIERJQUxPR19NT1ZFX1RPX0dST1VQICAgICAgICAgIiZBbCBncnVwcG86IgorCisjZGVmaW5lIERJQUxPR19DT1BZX0NBUFRJT04gICAgICAgICAgIkNvcGlhIHByb2dyYW1tYSIKKyNkZWZpbmUgRElBTE9HX0NPUFlfUFJPR1JBTSAgICAgICAgICAiQ29waWEgcHJvZ3JhbW1hOiIKKyNkZWZpbmUgRElBTE9HX0NPUFlfRlJPTV9HUk9VUCAgICAgICBESUFMT0dfTU9WRV9GUk9NX0dST1VQCisjZGVmaW5lIERJQUxPR19DT1BZX1RPX0dST1VQICAgICAgICAgRElBTE9HX01PVkVfVE9fR1JPVVAKKworI2RlZmluZSBESUFMT0dfR1JPVVBfQ0FQVElPTiAgICAgICAgICJQcm9wcmlldGEnIGRlbCBncnVwcG8gZGkgcHJvZ3JhbW1pIgorI2RlZmluZSBESUFMT0dfR1JPVVBfREVTQ1JJUFRJT04gICAgICImRGVzY3JpemlvbmU6IgorI2RlZmluZSBESUFMT0dfR1JPVVBfRklMRSAgICAgICAgICAgICImRmlsZSBkaSBncnVwcG86IgorCisjZGVmaW5lIERJQUxPR19QUk9HUkFNX0NBUFRJT04gICAgICAgIlByb3ByaWV0YScgZGVsIHByb2dyYW1tYSIKKyNkZWZpbmUgRElBTE9HX1BST0dSQU1fREVTQ1JJUFRJT04gICBESUFMT0dfR1JPVVBfREVTQ1JJUFRJT04KKyNkZWZpbmUgRElBTE9HX1BST0dSQU1fQ09NTUFORF9MSU5FICAiJlJpZ2EgZGkgY29tYW5kbzoiCisjZGVmaW5lIERJQUxPR19QUk9HUkFNX0RJUkVDVE9SWSAgICAgIkRpcmVjdG9yeSBkaSAmbGF2b3JvOiIKKyNkZWZpbmUgRElBTE9HX1BST0dSQU1fSE9UX0tFWSAgICAgICAiJlRhc3RvIGRpIHNjZWx0YSByYXBpZGEiCisjZGVmaW5lIERJQUxPR19QUk9HUkFNX1NZTUJPTCAgICAgICAgIiZBdnZpYSByaWRvdHRvIGEgaWNvbmEiCisjZGVmaW5lIERJQUxPR19QUk9HUkFNX09USEVSX1NZTUJPTCAgIiZDYW1iaWEgaWNvbmEuLi4iCisKKyNkZWZpbmUgRElBTE9HX1NZTUJPTF9DQVBUSU9OICAgICAgICAiQ2FtYmlhIGljb25hIgorI2RlZmluZSBESUFMT0dfU1lNQk9MX0ZJTEUgICAgICAgICAgICImTm9tZSBkZWwgZmlsZToiCisjZGVmaW5lIERJQUxPR19TWU1CT0xfQ1VSUkVOVCAgICAgICAgIkkmY29uYSBjb3JyZW50ZToiCisKKyNkZWZpbmUgRElBTE9HX0VYRUNVVEVfQ0FQVElPTiAgICAgICAiRXhlY3V0ZSBQcm9ncmFtIgorI2RlZmluZSBESUFMT0dfRVhFQ1VURV9DT01NQU5EX0xJTkUgIERJQUxPR19QUk9HUkFNX0NPTU1BTkRfTElORQorI2RlZmluZSBESUFMT0dfRVhFQ1VURV9TWU1CT0wgICAgICAgIERJQUxPR19QUk9HUkFNX1NZTUJPTAorCisvKiBTdHJpbmdzICovCisKKyNkZWZpbmUgU1RSSU5HX1BST0dSQU1fTUFOQUdFUiAgICAgICAgICAgICJQcm9ncmFtIE1hbmFnZXIiCisjZGVmaW5lIFNUUklOR19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAiRVJST1JFIgorI2RlZmluZSBTVFJJTkdfV0FSTklORyAgICAgICAgICAgICAgICAgICAgIkFUVEVOWk9ORSIKKyNkZWZpbmUgU1RSSU5HX0lORk8gICAgICAgICAgICAgICAgICAgICAgICJJbmZvcm1hemlvbmUiCisjZGVmaW5lIFNUUklOR19ERUxFVEUgICAgICAgICAgICAgICAgICAgICAiRWxpbWluYSIKKyNkZWZpbmUgU1RSSU5HX0RFTEVURV9HUk9VUF9zICAgICAgICAgICAgICJFbGltaW5hcmUgaWwgZ3J1cHBvIGAlcyc/IgorI2RlZmluZSBTVFJJTkdfREVMRVRFX1BST0dSQU1fcyAgICAgICAgICAgIkVsaW1pbmFyZSBgJXMnPyIKKyNkZWZpbmUgU1RSSU5HX05PVF9JTVBMRU1FTlRFRCAgICAgICAgICAgICJOb24gYW5jb3JhIGltcGxlbWVudGF0byIKKyNkZWZpbmUgU1RSSU5HX0ZJTEVfUkVBRF9FUlJPUl9zICAgICAgICAgICJFcnJvcmUgZGkgbGV0dHVyYSBgJXMnIgorI2RlZmluZSBTVFJJTkdfRklMRV9XUklURV9FUlJPUl9zICAgICAgICAgIkVycm9yZSBkaSBzY3JpdHR1cmEgYCVzJyIKKworI2RlZmluZSBTVFJJTkdfR1JQRklMRV9SRUFEX0VSUk9SX3MgICAgICAgIlwKK0lsIGZpbGUgZGkgZ3J1cHBvIGAlcycgbm9uIHB1bycgZXNzZXJlIGFwZXJ0by5cblwKK1Byb3ZhcmUgYWQgYXByaXJsbyBpbiBmdXR1cm8/IgorCisjZGVmaW5lIFNUUklOR19PVVRfT0ZfTUVNT1JZICAgICAgICAgICAgICAiTWVtb3JpYSBlc2F1cml0YSIKKyNkZWZpbmUgU1RSSU5HX1dJTkhFTFBfRVJST1IgICAgICAgICAgICAgICJHdWlkYSBub24gZGlzcG9uaWJpbGUiCisjZGVmaW5lIFNUUklOR19VTktOT1dOX0ZFQVRVUkVfcyAgICAgICAgICAiRnVuemlvbmUgc2Nvbm9zY2l1dGEgbmVsIGZpbGUgJXMiCisjZGVmaW5lIFNUUklOR19GSUxFX05PVF9PVkVSV1JJVFRFTl9zICAgICAiSWwgZmlsZSBgJXMnIGVzaXN0ZS4gU292cmFzY3JpdmVybG8uIgorI2RlZmluZSBTVFJJTkdfU0FWRV9HUk9VUF9BU19zICAgICAgICAgICAgIlNhbHZhcmUgaWwgZ3J1cHBvIGNvbWUgYCVzJyBwZXIgbm9uIHNvdnJhc2NyaXZlcmUgaSBmaWxlIG9yaWdpbmFsaSIKKworI2RlZmluZSBTVFJJTkdfTk9fSE9UX0tFWSAgICAgICAgICAgICAgICAgIk5lc3N1bm8iCisKKyNkZWZpbmUgU1RSSU5HX0FMTF9GSUxFUyAgICAgICAgICAgICAgICAgICJUdXR0aSBpIGZpbGVzICgqLiopIgorI2RlZmluZSBTVFJJTkdfUFJPR1JBTVMgICAgICAgICAgICAgICAgICAgIlByb2dyYW1taSIKKyNkZWZpbmUgU1RSSU5HX0xJQlJBUklFU19ETEwgICAgICAgICAgICAgICJMaWJyZXJpZSAoKi5kbGwpIgorI2RlZmluZSBTVFJJTkdfU1lNQk9MX0ZJTEVTICAgICAgICAgICAgICAgIkZpbGUgaWNvbmEiCisjZGVmaW5lIFNUUklOR19TWU1CT0xTX0lDTyAgICAgICAgICAgICAgICAiSWNvbmUgKCouaWNvKSIKKworI2luY2x1ZGUgIlh4LnJjIgpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvcHJvZ21hbi9Lby5yYyBiL3Byb2dyYW1zL3Byb2dtYW4vS28ucmMKaW5kZXggZDZkOTJhNC4uNDA3M2IzYSAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvcHJvZ21hbi9Lby5yYworKysgYi9wcm9ncmFtcy9wcm9nbWFuL0tvLnJjCkBAIC01LDcgKzUsNyBAQAogICovCiAKICNkZWZpbmUgTEFOR1VBR0VfSUQgICAgICAgICAgICAgICAgICBLbwotI2RlZmluZSBMQU5HVUFHRV9OVU1CRVIgICAgICAgICAgICAgIDYKKyNkZWZpbmUgTEFOR1VBR0VfTlVNQkVSICAgICAgICAgICAgICBBCiAjZGVmaW5lIExBTkdVQUdFX01FTlVfSVRFTSAgICAgICAgICAgIiZLb3JlYW4iCiAKIC8qIE1lbnUgKi8KZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3Byb2dtYW4vTWFrZWZpbGUuaW4gYi9wcm9ncmFtcy9wcm9nbWFuL01ha2VmaWxlLmluCmluZGV4IDE2ZDExNjcuLjUyZTM4MGUgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3Byb2dtYW4vTWFrZWZpbGUuaW4KKysrIGIvcHJvZ3JhbXMvcHJvZ21hbi9NYWtlZmlsZS5pbgpAQCAtOCw3ICs4LDcgQEAKIERFRlMgICAgICA9IC1JJChTUkNESVIpCiBSQ0ZMQUdTICAgPSAtdzMyCiAKLUxBTkdVQUdFUyAgID0gRW4gRGUgRnIgRmkgS28KK0xBTkdVQUdFUyAgID0gRW4gRGUgRnIgRmkgS28gSHUgSXQKIExJQ0VOU0VMQU5HID0gRW4KIAogIyBJbnN0YWxsYXRpb24gaW5mb3MKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3Byb2dtYW4vbWFpbi5jIGIvcHJvZ3JhbXMvcHJvZ21hbi9tYWluLmMKaW5kZXggYWJmYzQzMC4uYmM5Yjg0MyAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvcHJvZ21hbi9tYWluLmMKKysrIGIvcHJvZ3JhbXMvcHJvZ21hbi9tYWluLmMKQEAgLTE3LDYgKzE3LDkgQEAKIHZvaWQgTElCV0lORV9SZWdpc3Rlcl9FbigpOwogdm9pZCBMSUJXSU5FX1JlZ2lzdGVyX0ZpKCk7CiB2b2lkIExJQldJTkVfUmVnaXN0ZXJfRnIoKTsKK3ZvaWQgTElCV0lORV9SZWdpc3Rlcl9JdCgpOwordm9pZCBMSUJXSU5FX1JlZ2lzdGVyX0tvKCk7Cit2b2lkIExJQldJTkVfUmVnaXN0ZXJfSHUoKTsKICNlbmRpZgogCiBHTE9CQUxTIEdsb2JhbHM7CkBAIC00Niw2ICs0OSw5IEBACiAgIExJQldJTkVfUmVnaXN0ZXJfRW4oKTsKICAgTElCV0lORV9SZWdpc3Rlcl9GaSgpOwogICBMSUJXSU5FX1JlZ2lzdGVyX0ZyKCk7CisgIExJQldJTkVfUmVnaXN0ZXJfSXQoKTsKKyAgTElCV0lORV9SZWdpc3Rlcl9LbygpOworICBMSUJXSU5FX1JlZ2lzdGVyX0h1KCk7CiAjZW5kaWYKIAogI2lmbmRlZiBXSU5FTElCCmRpZmYgLS1naXQgYS9wcm9ncmFtcy93aW5oZWxwL0NoYW5nZUxvZyBiL3Byb2dyYW1zL3dpbmhlbHAvQ2hhbmdlTG9nCmluZGV4IGY4NmU0YzYuLjM4NDVhZTMgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3dpbmhlbHAvQ2hhbmdlTG9nCisrKyBiL3Byb2dyYW1zL3dpbmhlbHAvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOCBAQAorV2VkIEZlYiAxMiAwMDo1ODozNyAxOTk3ICBFbGtlciBDYXZpbmEgPGVsa2VyQG1haWwuYXNpYW5ldC5pdD4KKworCSogW0l0LnJjXSAobmV3KQorCUFkZGVkIEl0YWxpYW4gbGFuZ3VhZ2Ugc3VwcG9ydC4KKwogRnJpIEphbiAyNCAxMToyNzozNyAxOTk3ICBCYW5nIEp1bi1Zb3VuZyAgPGJhbmdqeUBub3dudXJpLm5vd2NvbS5jby5rcj4KIAogCSogW0tvLnJjXSAobmV3KQpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvd2luaGVscC9IdS5yYyBiL3Byb2dyYW1zL3dpbmhlbHAvSHUucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM5OGE3YQotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dyYW1zL3dpbmhlbHAvSHUucmMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIEhlbHAgVmlld2VyCisgKgorICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAorICovCisKKy8qIFRoaXMgZmlsZSBpcyBub3QgeWV0IGNvbXBsZXRlICEhICovCisKKyNkZWZpbmUgTEFOR1VBR0VfSUQgICAgICAgICAgICAgICAgICBIdQorI2RlZmluZSBMQU5HVUFHRV9OVU1CRVIgICAgICAgICAgICAgIDcKKworLyogTWVudSAqLworCisjZGVmaW5lIE1FTlVfRklMRSAgICAgICAgICAgICAgICAgICAgIiZGaWxlIgorI2RlZmluZSBNRU5VX0ZJTEVfT1BFTiAgICAgICAgICAgICAgICImTWVnbnlpdOFzLi4uIgorI2RlZmluZSBNRU5VX0ZJTEVfUFJJTlQgICAgICAgICAgICAgICImTnlvbXRhdOFzIgorI2RlZmluZSBNRU5VX0ZJTEVfUFJJTlRFUl9TRVRVUCAgICAgICJOeW9tdGF08yAmYmXhbGztdOFzLi4uIgorI2RlZmluZSBNRU5VX0ZJTEVfRVhJVCAgICAgICAgICAgICAgICImS2ls6XDpcyIKKworI2RlZmluZSBNRU5VX0VESVQgICAgICAgICAgICAgICAgICAgICImU3plcmtlc3p06XMiCisjZGVmaW5lIE1FTlVfRURJVF9DT1BZX0RJQUxPRyAgICAgICAgIiZN4XNvbOFzLi4uIgorI2RlZmluZSBNRU5VX0VESVRfQU5OT1RBVEUgICAgICAgICAgICImQW5ub3RhdGUuLi4iCisKKyNkZWZpbmUgTUVOVV9CT09LTUFSSyAgICAgICAgICAgICAgICAiJkv2bnl2amVsevUiCisjZGVmaW5lIE1FTlVfQk9PS01BUktfREVGSU5FICAgICAgICAgIiZEZWZpbmnhbOFzLi4uIgorCisjZGVmaW5lIE1FTlVfSEVMUCAgICAgICAgICAgICAgICAgICAgIiZTZWftdHPpZyIKKyNkZWZpbmUgTUVOVV9IRUxQX09OX0hFTFAgICAgICAgICAgICAiU2Vn7XRz6WcgJmEgc2Vn7XRz6Wdy9WwiCisjZGVmaW5lIE1FTlVfSEVMUF9PTl9UT1AgICAgICAgICAgICAgIk1pbmRpZyAmbGVnZmVs/GwiCisjZGVmaW5lIE1FTlVfSEVMUF9JTkZPICAgICAgICAgICAgICAgIiZJbmZvcm3hY2nzLi4uIgorI2RlZmluZSBNRU5VX0hFTFBfQUJPVVRfV0lORSAgICAgICAgICImQSBXSU5FLXLzbCIKKworLyogU3RyaW5ncyAqLworCisjZGVmaW5lIFNUUklOR19XSU5FX0hFTFAgICAgICAgICAgICAgIldJTkUgc2Vn7XRz6WciCisjZGVmaW5lIFNUUklOR19FUlJPUiAgICAgICAgICAgICAgICAgIkhJQkEiCisjZGVmaW5lIFNUUklOR19XQVJOSU5HICAgICAgICAgICAgICAgIkZJR1lFTE1FWlRFVMlTIgorI2RlZmluZSBTVFJJTkdfSU5GTyAgICAgICAgICAgICAgICAgICJJbmZvcm3hY2nzIgorI2RlZmluZSBTVFJJTkdfTk9UX0lNUExFTUVOVEVEICAgICAgICJOaW5jcyBpbXBsZW1lbnThbHZhIgorI2RlZmluZSBTVFJJTkdfSExQRklMRV9FUlJPUl9zICAgICAgICJIaWJhIGEgYCVzJyBmaWxlIG9sdmFz4XNha29yIgorI2RlZmluZSBTVFJJTkdfQ09OVEVOVFMgICAgICAgICAgICAgICImVGFydGFsb20iCisjZGVmaW5lIFNUUklOR19TRUFSQ0ggICAgICAgICAgICAgICAgIiZLZXJlc+lzIgorI2RlZmluZSBTVFJJTkdfQkFDSyAgICAgICAgICAgICAgICAgICImVmlzc3phIgorI2RlZmluZSBTVFJJTkdfSElTVE9SWSAgICAgICAgICAgICAgICImSGlzdG9yeSIKKyNkZWZpbmUgU1RSSU5HX0FMTF9GSUxFUyAgICAgICAgICAgICAiTWluZGVuIGZpbGUgKCouKikiCisjZGVmaW5lIFNUUklOR19IRUxQX0ZJTEVTX0hMUCAgICAgICAgIlNlZ+10c+lnIGZpbGUtb2sgKCouaGxwKSIKKworI2luY2x1ZGUgIlh4LnJjIgpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvd2luaGVscC9JdC5yYyBiL3Byb2dyYW1zL3dpbmhlbHAvSXQucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1NWQ3YQotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dyYW1zL3dpbmhlbHAvSXQucmMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIEhlbHAgVmlld2VyCisgKgorICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAorICovCisKKy8qIFRoaXMgZmlsZSBpcyBub3QgeWV0IGNvbXBsZXRlICEhICovCisKKyNkZWZpbmUgTEFOR1VBR0VfSUQgICAgICAgICAgICAgICAgICBJdAorI2RlZmluZSBMQU5HVUFHRV9OVU1CRVIgICAgICAgICAgICAgIDkKKworLyogTWVudSAqLworCisjZGVmaW5lIE1FTlVfRklMRSAgICAgICAgICAgICAgICAgICAgIiZGaWxlIgorI2RlZmluZSBNRU5VX0ZJTEVfT1BFTiAgICAgICAgICAgICAgICImQXByaS4uLiIKKyNkZWZpbmUgTUVOVV9GSUxFX1BSSU5UICAgICAgICAgICAgICAicyZ0YW1wYSIKKyNkZWZpbmUgTUVOVV9GSUxFX1BSSU5URVJfU0VUVVAgICAgICAiJlNldHVwIHN0YW1wYW50ZS4uLiIKKyNkZWZpbmUgTUVOVV9GSUxFX0VYSVQgICAgICAgICAgICAgICAiJkVzY2kiCisKKyNkZWZpbmUgTUVOVV9FRElUICAgICAgICAgICAgICAgICAgICAiJk1vZGlmaWNhIgorI2RlZmluZSBNRU5VX0VESVRfQ09QWV9ESUFMT0cgICAgICAgICImQ29waWEuLi4iCisjZGVmaW5lIE1FTlVfRURJVF9BTk5PVEFURSAgICAgICAgICAgIiZBbm5vdGEuLi4iCisKKyNkZWZpbmUgTUVOVV9CT09LTUFSSyAgICAgICAgICAgICAgICAiJlNlZ25hbGlicm8iCisjZGVmaW5lIE1FTlVfQk9PS01BUktfREVGSU5FICAgICAgICAgIiZEZWZpbmlzY2kuLi4iCisKKyNkZWZpbmUgTUVOVV9IRUxQICAgICAgICAgICAgICAgICAgICAiJj8iCisjZGVmaW5lIE1FTlVfSEVMUF9PTl9IRUxQICAgICAgICAgICAgIiZBaXV0byBzdWxsYSBndWlkYSIKKyNkZWZpbmUgTUVOVV9IRUxQX09OX1RPUCAgICAgICAgICAgICAiU2VtcHJlIGluIHByaW1vICZwaWFubyIKKyNkZWZpbmUgTUVOVV9IRUxQX0lORk8gICAgICAgICAgICAgICAiJkluZm9ybWF6aW9uaSBzdS4uLiIKKyNkZWZpbmUgTUVOVV9IRUxQX0FCT1VUX1dJTkUgICAgICAgICAiJkluZm9ybWF6aW9uIHN1IFdJTkUiCisKKy8qIFN0cmluZ3MgKi8KKworI2RlZmluZSBTVFJJTkdfV0lORV9IRUxQICAgICAgICAgICAgICJHdWlkYSBkaSBXSU5FIgorI2RlZmluZSBTVFJJTkdfRVJST1IgICAgICAgICAgICAgICAgICJFUlJPUkUiCisjZGVmaW5lIFNUUklOR19XQVJOSU5HICAgICAgICAgICAgICAgIkFUVEVOWklPTkUiCisjZGVmaW5lIFNUUklOR19JTkZPICAgICAgICAgICAgICAgICAgIkluZm9ybWF6aW9uZSIKKyNkZWZpbmUgU1RSSU5HX05PVF9JTVBMRU1FTlRFRCAgICAgICAiTm9uIGFuY29yYSBpbXBsZW1lbnRhdG8iCisjZGVmaW5lIFNUUklOR19ITFBGSUxFX0VSUk9SX3MgICAgICAgIkVycm9yZSBkaSBsZXR0dXJhIEhlbHBGaWxlIGAlcyciCisjZGVmaW5lIFNUUklOR19DT05URU5UUyAgICAgICAgICAgICAgIiZTb21tYXJpbyIKKyNkZWZpbmUgU1RSSU5HX1NFQVJDSCAgICAgICAgICAgICAgICAiJlJpY2VyY2EiCisjZGVmaW5lIFNUUklOR19CQUNLICAgICAgICAgICAgICAgICAgIiZQcmVjZWRlbnRlIgorI2RlZmluZSBTVFJJTkdfSElTVE9SWSAgICAgICAgICAgICAgICImSW5kaWNlIgorI2RlZmluZSBTVFJJTkdfQUxMX0ZJTEVTICAgICAgICAgICAgICJUdXR0aSBpIGZpbGUgKCouKikiCisjZGVmaW5lIFNUUklOR19IRUxQX0ZJTEVTX0hMUCAgICAgICAgIkhlbHBGaWxlcyAoKi5obHApIgorCisjaW5jbHVkZSAiWHgucmMiCmRpZmYgLS1naXQgYS9wcm9ncmFtcy93aW5oZWxwL0tvLnJjIGIvcHJvZ3JhbXMvd2luaGVscC9Lby5yYwppbmRleCA0YmIyM2FlLi5mMTJiNTlhIDEwMDY0NAotLS0gYS9wcm9ncmFtcy93aW5oZWxwL0tvLnJjCisrKyBiL3Byb2dyYW1zL3dpbmhlbHAvS28ucmMKQEAgLTcsNyArNyw3IEBACiAvKiBUaGlzIGZpbGUgaXMgbm90IHlldCBjb21wbGV0ZSAhISAqLwogCiAjZGVmaW5lIExBTkdVQUdFX0lEICAgICAgICAgICAgICAgICAgS28KLSNkZWZpbmUgTEFOR1VBR0VfTlVNQkVSICAgICAgICAgICAgICA2CisjZGVmaW5lIExBTkdVQUdFX05VTUJFUiAgICAgICAgICAgICAgQQogCiAvKiBNZW51ICovCiAKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3dpbmhlbHAvTWFrZWZpbGUuaW4gYi9wcm9ncmFtcy93aW5oZWxwL01ha2VmaWxlLmluCmluZGV4IDU2ZWQyOWEuLjlhOWVkZmQgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3dpbmhlbHAvTWFrZWZpbGUuaW4KKysrIGIvcHJvZ3JhbXMvd2luaGVscC9NYWtlZmlsZS5pbgpAQCAtNyw3ICs3LDcgQEAKIEFMTF9MSUJTICA9ICQoV0lORUxJQikgJChYX0xJQlMpICQoWFBNX0xJQikgJChYTElCKSAkKExETElCUykKIFJDRkxBR1MgICA9IC13MzIKIAotTEFOR1VBR0VTICAgPSBFbiBEZSBGciBGaSBLbworTEFOR1VBR0VTICAgPSBFbiBEZSBGciBGaSBLbyBIdSBJdAogCiAjIEluc3RhbGxhdGlvbiBpbmZvcwogCmRpZmYgLS1naXQgYS9wcm9ncmFtcy93aW5oZWxwL3dpbmhlbHAuYyBiL3Byb2dyYW1zL3dpbmhlbHAvd2luaGVscC5jCmluZGV4IGVjOTQzNmEuLjhjMzM4ZTMgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3dpbmhlbHAvd2luaGVscC5jCisrKyBiL3Byb2dyYW1zL3dpbmhlbHAvd2luaGVscC5jCkBAIC0xOCw2ICsxOCw5IEBACiBWT0lEIExJQldJTkVfUmVnaXN0ZXJfRW4odm9pZCk7CiBWT0lEIExJQldJTkVfUmVnaXN0ZXJfRmkodm9pZCk7CiBWT0lEIExJQldJTkVfUmVnaXN0ZXJfRnIodm9pZCk7CitWT0lEIExJQldJTkVfUmVnaXN0ZXJfSXQodm9pZCk7CitWT0lEIExJQldJTkVfUmVnaXN0ZXJfS28odm9pZCk7CitWT0lEIExJQldJTkVfUmVnaXN0ZXJfSHUodm9pZCk7CiAKIHN0YXRpYyBCT09MICAgIFdJTkhFTFBfUmVnaXN0ZXJXaW5DbGFzc2VzKCk7CiBzdGF0aWMgTFJFU1VMVCBXSU5IRUxQX01haW5XbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKQEAgLTU2LDYgKzU5LDkgQEAKICAgTElCV0lORV9SZWdpc3Rlcl9FbigpOwogICBMSUJXSU5FX1JlZ2lzdGVyX0ZpKCk7CiAgIExJQldJTkVfUmVnaXN0ZXJfRnIoKTsKKyAgTElCV0lORV9SZWdpc3Rlcl9JdCgpOworICBMSUJXSU5FX1JlZ2lzdGVyX0tvKCk7CisgIExJQldJTkVfUmVnaXN0ZXJfSHUoKTsKICNlbmRpZgogCiAgIEdsb2JhbHMuaEluc3RhbmNlID0gaEluc3RhbmNlOwpkaWZmIC0tZ2l0IGEvcmVzb3VyY2VzL01ha2VmaWxlLmluIGIvcmVzb3VyY2VzL01ha2VmaWxlLmluCmluZGV4IDI0MjUxZWMuLmU1NGE3NWYgMTAwNjQ0Ci0tLSBhL3Jlc291cmNlcy9NYWtlZmlsZS5pbgorKysgYi9yZXNvdXJjZXMvTWFrZWZpbGUuaW4KQEAgLTE1LDYgKzE1LDcgQEAKIAlzeXNyZXNfRXMuYyBcCiAJc3lzcmVzX0ZpLmMgXAogCXN5c3Jlc19Gci5jIFwKKwlzeXNyZXNfSHUuYyBcCiAJc3lzcmVzX0l0LmMgXAogCXN5c3Jlc19Lby5jIFwKIAlzeXNyZXNfTm8uYwpkaWZmIC0tZ2l0IGEvcmVzb3VyY2VzL3N5c3Jlcy5jIGIvcmVzb3VyY2VzL3N5c3Jlcy5jCmluZGV4IDg3MTRlZTEuLjBiYzM1MTQgMTAwNjQ0Ci0tLSBhL3Jlc291cmNlcy9zeXNyZXMuYworKysgYi9yZXNvdXJjZXMvc3lzcmVzLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJzeXNyZXNfRW8uaCIKICNpbmNsdWRlICJzeXNyZXNfSXQuaCIKICNpbmNsdWRlICJzeXNyZXNfS28uaCIKKyNpbmNsdWRlICJzeXNyZXNfSHUuaCIKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqIGNvbnN0ICogU1lTUkVTX1Jlc291cmNlc1tdID0KIHsKQEAgLTMzLDcgKzM0LDggQEAKICAgICBzeXNyZXNfQ3pfVGFibGUsICAvKiBMQU5HX0N6ICovCiAgICAgc3lzcmVzX0VvX1RhYmxlLCAgLyogTEFOR19FbyAqLwogICAgIHN5c3Jlc19JdF9UYWJsZSwgIC8qIExBTkdfSXQgKi8KLSAgICBzeXNyZXNfS29fVGFibGUgICAvKiBMQU5HX0tvICovCisgICAgc3lzcmVzX0tvX1RhYmxlLCAgLyogTEFOR19LbyAqLworICAgIHN5c3Jlc19IdV9UYWJsZSAgIC8qIExBTkdfSHUgKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvcmVzb3VyY2VzL3N5c3Jlc19IdS5yYyBiL3Jlc291cmNlcy9zeXNyZXNfSHUucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZTZjMgotLS0gL2Rldi9udWxsCisrKyBiL3Jlc291cmNlcy9zeXNyZXNfSHUucmMKQEAgLTAsMCArMSwyNDQgQEAKK1NZU01FTlUgTUVOVSBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFCitCRUdJTgorIE1FTlVJVEVNICImVmlzc3ph4Wxs7XThcyIsIDYxNzI4CisgTUVOVUlURU0gIiZNb3pnYXThcyIsIDYxNDU2CisgTUVOVUlURU0gIsEmdG3pcmV0ZXrpcyIsIDYxNDQwCisgTUVOVUlURU0gIiZLaWNzaW557XTpcyIsIDYxNDcyCisgTUVOVUlURU0gIiZOYWd57XThcyIsIDYxNDg4CisgTUVOVUlURU0gU0VQQVJBVE9SCisgTUVOVUlURU0gIiZCZXrhcuFzXHRBbHQtRjQiLCA2MTUzNgorIE1FTlVJVEVNIFNFUEFSQVRPUgorIE1FTlVJVEVNICJUYSZzemt24Wx04XMuLi5cdEN0cmwtRXNjIiwgNjE3NDQKKyBNRU5VSVRFTSBTRVBBUkFUT1IKKyBNRU5VSVRFTSAiQSAmV0lORS1y82wgLi4uIiwgNjE3NjEKK0VORAorCitFRElUTUVOVSBNRU5VIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUKK0JFR0lOCisgICAgICAgIFBPUFVQICIiCisgICAgICAgIEJFR0lOCisgICAgICAgICAgICAgICAgTUVOVUlURU0gIiZWaXNzemF2b27hcyIsIEVNX1VORE8zMgorICAgICAgICAgICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgorICAgICAgICAgICAgICAgIE1FTlVJVEVNICImS2l24WfhcyIsIFdNX0NVVAorICAgICAgICAgICAgICAgIE1FTlVJVEVNICImTeFzb2zhcyIsIFdNX0NPUFkKKyAgICAgICAgICAgICAgICBNRU5VSVRFTSAiJkJlaWxsZXN6dOlzIiwgV01fUEFTVEUKKyAgICAgICAgICAgICAgICBNRU5VSVRFTSAiJlT2cmzpcyIsIFdNX0NMRUFSCisgICAgICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCisgICAgICAgICAgICAgICAgTUVOVUlURU0gIk0maW5kZW4ga2lqZWz2bOlzZSIsIEVNX1NFVFNFTDMyCisgICAgICAgIEVORAorRU5ECisKK01TR0JPWCBESUFMT0cgMTAwLCA4MCwgMjE2LCAxNjgKK1NUWUxFIERTX1NZU01PREFMIHwgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitCRUdJTgorICAgICAgICBJQ09OICIiLCAxMDg4LCA4LCAyMCwgMTYsIDE2LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUKKyAgICAgICAgTFRFWFQgIiIsIDEwMCwgMzIsIDQsIDE3NiwgNDgsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQCisgICAgICAgIFBVU0hCVVRUT04gIiZPayIsIDEsIDE2LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCisgICAgICAgIFBVU0hCVVRUT04gIiZN6WdzZW0iLCAyLCA2NCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAorICAgICAgICBQVVNIQlVUVE9OICImQWJvcnThbOFzIiwgMywgMTEyLCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCisgICAgICAgIFBVU0hCVVRUT04gItpqcmEgJnBy82LhbCIsIDQsIDE2MCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAorICAgICAgICBQVVNIQlVUVE9OICJJJmdub3LhbOFzIiwgNSwgMjA4LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCisgICAgICAgIFBVU0hCVVRUT04gIiZJZ2VuIiwgNiwgMjU2LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCisgICAgICAgIFBVU0hCVVRUT04gIiZOZW0iLCA3LCAzMDQsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKK0VORAorCitTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgNTAsIDQ0LCAyMjMsIDI3MAorU1RZTEUgRFNfTE9DQUxFRElUIHwgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJBICVzLXL1bCIKK0ZPTlQgMTAsICJTeXN0ZW0iCit7CisgREVGUFVTSEJVVFRPTiAiT0siLCAxLCA5MSwgMjUwLCA0MCwgMTQKKyBDT05UUk9MICIiLCAtMSwgIlNUQVRJQyIsIFNTX0JMQUNLRlJBTUUgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19ESVNBQkxFRCwgNCwgMzUsIDIxNSwgMjEwCisgTFRFWFQgIlRleHQiLCAxMDAsIDExLCA0MCwgMjAwLCAyMDAsIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKKyBJQ09OICIiLCAxMDg4LCAxOTUsIDEwLCAxOCwgMjAKK30KKworCitPUEVOX0ZJTEUgRElBTE9HIDM2LCAyNCwgMjc1LCAxMzQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJNZWdueWl04XMiCitGT05UIDgsICJIZWx2IgorQkVHSU4KKyAgICAgICAgTFRFWFQgIkZpbGUgJm5ldmU6IiwgMTA5MCwgNiwgNiwgNzYsIDkKKyAgICAgICAgRURJVFRFWFQgMTE1MiwgNiwgMTYsIDkwLCAxMiwgRVNfQVVUT0hTQ1JPTEwgfCBFU19PRU1DT05WRVJUIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAorICAgICAgICBMSVNUQk9YIDExMjAsIDYsIDMyLCA5MCwgNjgsIExCU19TVEFOREFSRCB8IExCU19PV05FUkRSQVdGSVhFRCB8IExCU19IQVNTVFJJTkdTIHwgTEJTX0RJU0FCTEVOT1NDUk9MTCB8IFdTX1RBQlNUT1AKKyAgICAgICAgTFRFWFQgIiZL9m55dnThcmFrOiIsIC0xLCAxMTAsIDYsIDkyLCA5CisgICAgICAgIENPTlRST0wgIiIsIDEwODgsICJTVEFUSUMiLCBTU19OT1BSRUZJWCB8IFdTX0dST1VQLCAxMTAsIDE4LCA5MiwgOQorICAgICAgICBMSVNUQk9YIDExMjEsIDExMCwgMzIsIDkyLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUAorICAgICAgICBMVEVYVCAiRmlsZSAmdO1wdXNvazoiLCAxMDg5LCA2LCAxMDQsIDkwLCA5CisgICAgICAgIENPTlRST0wgIiIsIDExMzYsICJDT01CT0JPWCIsIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfQVVUT0hTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUCwgNiwgMTE0LCA5MCwgMzYKKyAgICAgICAgTFRFWFQgIiZNZWdoYWp082s6IiwgMTA5MSwgMTEwLCAxMDQsIDkyLCA5CisgICAgICAgIENPTlRST0wgIiIsIDExMzcsICJDT01CT0JPWCIsIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfU09SVCB8IENCU19IQVNTVFJJTkdTIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AsIDExMCwgMTE0LCA5MiwgNjgKKyAgICAgICAgQ09OVFJPTCAiTWVnbnlpdOFzIiwgMSwgIkJVVFRPTiIsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AsIDIwOCwgNiwgNTYsIDE0CisgICAgICAgIENPTlRST0wgIk3pZ3NlbSIsIDIsICJCVVRUT04iLCBXU19HUk9VUCB8IFdTX1RBQlNUT1AsIDIwOCwgMjQsIDU2LCAxNAorICAgICAgICBDT05UUk9MICImU2Vn7XRz6WciLCAxMDM4LCAiQlVUVE9OIiwgV1NfR1JPVVAgfCBXU19UQUJTVE9QLCAyMDgsIDQ2LCA1NiwgMTQKKyAgICAgICAgQ09OVFJPTCAiJkNzYWsgb2x2YXNoYXTzIiwgMTA0MCwgIkJVVFRPTiIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUCwgMjA4LCA2OCwgNjMsIDEyCitFTkQKKworU0FWRV9GSUxFIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjc1LCAxMzQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJNZW506XMg+mogbul2ZW4gLi4uIgorRk9OVCA4LCAiSGVsdiIKK3sKKyBMVEVYVCAiRmlsZSAmbmV2ZToiLCAxMDkwLCA2LCA2LCA3NiwgOQorIEVESVRURVhUIDExNTIsIDYsIDE2LCA5MCwgMTIsIEVTX0FVVE9IU0NST0xMIHwgRVNfT0VNQ09OVkVSVCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKKyBMSVNUQk9YIDExMjAsIDYsIDMyLCA5MCwgNjgsIExCU19TVEFOREFSRCB8IExCU19PV05FUkRSQVdGSVhFRCB8IExCU19IQVNTVFJJTkdTIHwgTEJTX0RJU0FCTEVOT1NDUk9MTCB8IFdTX1RBQlNUT1AKKyBMVEVYVCAiJkv2bnl2dOFyYWs6IiwgLTEsIDExMCwgNiwgOTIsIDkKKyBMVEVYVCAiIiwgMTA4OCwgMTEwLCAxOCwgOTIsIDksIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKKyBMSVNUQk9YIDExMjEsIDExMCwgMzIsIDkyLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUAorIExURVhUICJGaWxlICZ07XB1c29rOiIsIDEwODksIDYsIDEwNCwgOTAsIDkKKyBDT01CT0JPWCAxMTM2LCA2LCAxMTQsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVCB8IENCU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIiZNZWdoYWp082s6IiwgMTA5MSwgMTEwLCAxMDQsIDkyLCA5CisgQ09NQk9CT1ggMTEzNywgMTEwLCAxMTQsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorIERFRlBVU0hCVVRUT04gIk1lbnTpcyD6aiBu6XZlbiIsIDEsIDIwOCwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiTelnc2VtIiwgMiwgMjA4LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImU2Vn7XRz6WciLCAxMDM4LCAyMDgsIDQ2LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICImQ3NhayBvbHZhc2hhdPMiLCAxMDQwLCAyMDgsIDY4LCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorfQorCisKK1BSSU5UIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAxMzQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJOeW9tdGF04XMiCitGT05UIDgsICJIZWx2IgoreworIExURVhUICJOeW9tdGF08zoiLCAxMDg4LCA2LCA2LCA0MCwgOQorIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5CisgR1JPVVBCT1ggIk55b210YXRhbmTzIHRlcvxsZXQiLCAxMDcyLCA2LCAzMCwgMTYwLCA2NSwgQlNfR1JPVVBCT1gKKyBSQURJT0JVVFRPTiAiJk1pbmQiLCAxMDU2LCAxNiwgNDUsIDYwLCAxMgorIFJBRElPQlVUVE9OICImS2l24Wxhc3p0b3R0IiwgMTA1NywgMTYsIDYwLCA2MCwgMTIKKyBSQURJT0JVVFRPTiAiJkxhcG9rIiwgMTA1OCwgMTYsIDc1LCA2MCwgMTIKKyBERUZQVVNIQlVUVE9OICJOeW9tdGF04XMiLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIk3pZ3NlbSIsIDIsIDIwNiwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJkJl4Wxs7XThcyIsIDEwMjQsIDIwNiwgNDYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgTFRFWFQgIi0mdPNsOiIsIDEwOTAsIDYwLCA4MCwgMzAsIDkKKyBMVEVYVCAiLSZpZzoiLCAxMDkxLCAxMjAsIDgwLCAzMCwgOQorIExURVhUICJNaSZu9XPpZzoiLCAxMDkyLCA2LCAxMDAsIDc2LCA5CisgQ09NQk9CT1ggMTEzNiwgODAsIDEwMCwgOTIsIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIiZGaWxlLWJhIG55b210YXQiLCAxMDQwLCAyMCwgMTAwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICJT+3L7IiwgMTA0MSwgMTYwLCAxMDAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCit9CisKKworUFJJTlRfU0VUVVAgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDEzNAorU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIk55b210YXTzIGJl4Wxs7XThc2EiCitGT05UIDgsICJIZWx2IgoreworIEdST1VQQk9YICJOeW9tdGF08yIsIDEwNzIsIDYsIDEwLCAxODAsIDY1LCBCU19HUk9VUEJPWAorIFJBRElPQlVUVE9OICImQWxhcOlydGVsbWV6ZXR0IG55b210YXTzIiwgMTA1NiwgMTYsIDIwLCA4MCwgMTIKKyBMVEVYVCAiW25pbmNzXSIsIDEwODgsIDM1LCAzNSwgMTIwLCA5CisgUkFESU9CVVRUT04gIiZBZG90dCBueW9tdGF08yIsIDEwNTcsIDE2LCA1MCwgODAsIDEyCisgQ09NQk9CT1ggMTEzNiwgMzUsIDY1LCAxNDksIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgREVGUFVTSEJVVFRPTiAiT2siLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIk3pZ3NlbSIsIDIsIDIwNiwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJkJl4Wxs7XThcyIsIDEwMjQsIDIwNiwgNDYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgR1JPVVBCT1ggIk9sZGFsZmVrdulzIiwgMTA3MywgNiwgODUsIDEwMCwgNTAsIEJTX0dST1VQQk9YCisgUkFESU9CVVRUT04gIsEmbGzzIiwgMTA1OCwgNTAsIDEwMCwgNDAsIDEyCisgUkFESU9CVVRUT04gIiZGZWt29SIsIDEwNTksIDUwLCAxMTUsIDQwLCAxMgorIElDT04gIkxBTkRTQ0FQIiwgMTA5NywgMTAsIDk1LCAzMiwgMzIKKyBJQ09OICJQT1JUUkFJVCIsIDEwOTgsIDEwLCA5NSwgMzIsIDMyCisgR1JPVVBCT1ggIlBhcO1yIiwgMTA3NCwgMTIwLCA4NSwgMTgwLCA1MCwgQlNfR1JPVVBCT1gKKyBMVEVYVCAiJk3pcmV0ZSIsIDEwODksIDEzMCwgOTUsIDMwLCA5CisgTFRFWFQgIkZvJnJy4XNhIiwgMTA5MCwgMTMwLCAxMTAsIDMwLCA5CisgQ09NQk9CT1ggMTEzNywgMTU1LCA5NSwgOTIsIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgQ09NQk9CT1ggMTEzOCwgMTU1LCAxMTAsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorfQorCisKK0NIT09TRV9GT05UIERJQUxPRyBESVNDQVJEQUJMRSAgMTMsIDU0LCAyNjQsIDE0NworU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIkZvbnQiCitGT05UIDgsICJIZWx2IgoreworICAgIExURVhUICAgICAgICAgICAiJkZvbnQ6IiwxMDg4ICw2LDMsNDAsOQorICAgIENPTUJPQk9YICAgICAgICAxMTM2ICw2LDEzLDk0LDU0LCAgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0hBU1NUUklOR1MgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwKKyAgICAgICAgICAgICAgICAgICAgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUCB8IENCU19TSU1QTEUKKyAgICBMVEVYVCAgICAgICAgICAgIkZvbnQgJnN07Wx1czoiLDEwODkgLDEwOCwzLDQ0LDkKKyAgICBDT01CT0JPWCAgICAgICAgMTEzNywxMDgsMTMsNjQsNTQsIENCU19PV05FUkRSQVdGSVhFRCB8IENCU19IQVNTVFJJTkdTIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8CisgICAgICAgICAgICAgICAgICAgIFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QIHwgQ0JTX1NJTVBMRQorICAgIExURVhUICAgICAgICAgICAiJk3pcmV0OiIsMTA5MCwxNzksMywzMCw5CisgICAgQ09NQk9CT1ggICAgICAgIDExMzgsMTc5LDEzLDMyLDU0LCBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfSEFTU1RSSU5HUyB8IENCU19ESVNBQkxFTk9TQ1JPTEwgfAorICAgICAgICAgICAgICAgICAgICBXU19WU0NST0xMIHwgV1NfVEFCU1RPUCB8IENCU19TSU1QTEUgfCBDQlNfU09SVAorICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMjE4LDYsNDAsMTQsV1NfR1JPVVAKKyAgICBQVVNIQlVUVE9OICAgICAgIk3pZ3NlbSIsSURDQU5DRUwsMjE4LDIzLDQwLDE0LFdTX0dST1VQCisgICAgUFVTSEJVVFRPTiAgICAgICImQWxrYWxtYXoiLCAxMDI2LDIxOCw0MCw0MCwxNCxXU19HUk9VUAorICAgIFBVU0hCVVRUT04gICAgICAiJlNlZ+10c+lnIiAsIDEwMzgsMjE4LDU3LDQwLDE0LFdTX0dST1VQCisgICAgR1JPVVBCT1ggICAgICAgICJFZmZla3R1c29rIiwxMDcyLDYsNzIsODQsMzQsV1NfR1JPVVAKKyAgICBDSEVDS0JPWCAgICAgICAgIsEmdGj6em90dCIsIDEwNDAsIDEwLDgyLDUwLDEwLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QCisgICAgQ0hFQ0tCT1ggICAgICAgICImQWzhaPp6b3R0IiwgMTA0MSwgMTAsOTQsNTAsMTAsIEJTX0FVVE9DSEVDS0JPWAorICAgIExURVhUICAgICAgICAgICAiJlN67W46IiwgMTA5MSAsNiwxMTAsMzAsOQorICAgIENPTUJPQk9YICAgICAgICAxMTM5LDYsMTIwLDg0LDEwMCxDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0hBU1NUUklOR1MgfAorICAgICAgICAgICAgICAgICAgICBDQlNfQVVUT0hTQ1JPTEwgfCAgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKKyAgICBHUk9VUEJPWCAgICAgICAgIk1pbnRhIiwxMDczLDk4LDcyLDE2MCw0OSxXU19HUk9VUAorICAgIENURVhUICAgICAgICAgICAiQWFCYll5WnrB4dX1yekiLDEwOTMsMTA0LDgxLDE0OSwzNyxTU19OT1BSRUZJWCB8IFdTX1ZJU0lCTEUKK30KKworCitDSE9PU0VfQ09MT1IgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAzMDAsIDIwMAorU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIlN67W4iCitGT05UIDgsICJIZWx2IgoreworIExURVhUICImQWxhcCBzeu1uZWs6IiwgICAxMDg4LCA0LCAgICA0LCAgMTQwLCAxMAorIExURVhUICImRWd5ZWRpIHN67W5lazoiLCAgMTA4OSwgNCwgICAxMDYsIDE0MCwgMTAKKyBMVEVYVCAiU3rtbiB8ICAmVPZt9nIiLCAgMTA5MCwgMTUwLCAxNTEsICA0OCwgMTAKKyBMVEVYVCAgICImVvZy9nM6IiwgNzI2IC8qMTA5NCovLDI0OSwxMjYsMjQsMTAKKyBFRElUVEVYVCA3MDYsIDI3NSwxMjQsMTgsMTIsIFdTX0JPUkRFUiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICAgIiZa9mxkOiIsNzI3LyoxMDk1Ki8sMjQ5LDE0MCwyNCwxMAorIEVESVRURVhUIDcwNywgMjc1LDEzOCwxOCwxMiwgV1NfQk9SREVSIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgTFRFWFQgICAiJkvpazoiLDcyOCAvKjEwOTYqLywyNDksMTU0LDI0LDEwCisgRURJVFRFWFQgNzA4LCAyNzUsMTUyLDE4LDEyLCBXU19CT1JERVIgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBMVEVYVCAgIiZIdWU6IiAsNzIzIC8qMTA5MSovLDIwMiwxMjYsMjIsMTAKKyBFRElUVEVYVCA3MDMsIDIyNiwxMjQsMTgsMTIsIFdTX0JPUkRFUiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICAiJlNhdDoiICw3MjQgLyoxMDkyKi8sMjAyLDE0MCwyMiwxMAorIEVESVRURVhUIDcwNCwgMjI2LDEzOCwxOCwxMiwgV1NfQk9SREVSIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgTFRFWFQgICImTHVtOiIgLDcyNSAvKjEwOTMqLywyMDIsMTU0LDIyLDEwCisgRURJVFRFWFQgNzA1LCAyMjYsMTUyLDE4LDEyLCBXU19CT1JERVIgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBDT05UUk9MICIiICw3MjAsIlNUQVRJQyIsU1NfU0lNUExFfFdTX1RBQlNUT1B8V1NfR1JPVVAsNCwxNCwxNDAsODYKKyBDT05UUk9MICIiICw3MjEsIlNUQVRJQyIsU1NfU0lNUExFfFdTX1RBQlNUT1B8V1NfR1JPVVAsNCwxMTYsMTQwLDI4CisgQ09OVFJPTCAiIiAsNzEwLCJTVEFUSUMiLFdTX0JPUkRFUnxTU19TSU1QTEV8V1NfVEFCU1RPUHxXU19HUk9VUCwgMTUyLDQsMTE4LDExNgorIENPTlRST0wgIiIgLDcwMiwiU1RBVElDIixTU19TSU1QTEV8V1NfVEFCU1RPUHxXU19HUk9VUCwgMjc4LDQsOCwxMTYKKyBDT05UUk9MICIiICw3MDksIlNUQVRJQyIsU1NfU0lNUExFfFdTX1RBQlNUT1B8V1NfR1JPVVAsIDE1MiwxMjQsNDAsMjYKKyBERUZQVVNIQlVUVE9OICJPayIsICAxLCAgNCwgMTY2LCA0NCwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJN6WdzZW0iLCAyLCA1MiwgMTY2LCA0NCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIlNlZ+10c+lnIiwgMTAzOCwxMDAsMTY2LCA0NCwgMTQKKyBQVVNIQlVUVE9OICImRWd5ZWRpIHN67W5la2hleiBhZOFzIiwgICAgNzEyLyoxMDI0Ki8sIDE1MiwgMTY2LCAxNDIsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJFJmd5ZWRpIHN67W4gZGVmaW5p4WzhcyA+PiIsIDcxOS8qMTAyNSovLCAgIDQsIDE1MCwgMTQyLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAgIiZ0Iiw3MTMsMzAwLDIwMCw0LDE0ICAgLyoganVzdCBhIGR1bW15OiAgJ2knIGlzICBsaWtlICAmaSAgaW4gInNvbCZpZCIgICovCit9CisKK0ZJTkRfVEVYVCBESUFMT0cgMzYsIDI0LCAyMzYsIDYyCitTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQorQ0FQVElPTiAiS2VyZXPpcyIKK0ZPTlQgOCwgIkhlbHYiCitCRUdJTgorICAgICAgICBMVEVYVCAiJk1pdCBrZXJlc3NlbjoiLCAtMSwgNCwgOCwgNDgsIDgKKyAgICAgICAgRURJVFRFWFQgMTE1MiwgNTEsIDcsIDEyNCwgMTIsIEVTX0FVVE9IU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgICAgICAgIENPTlRST0wgIlRlbGplcyAmc3phdmFrIGtlcmVz6XNlIiwgMTA0MCwgIkJVVFRPTiIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUCwgNCwgMjYsIDEwMCwgMTIKKyAgICAgICAgQ09OVFJPTCAiS2lzLyZuYWd5YmV0+yBr/Gz2bmIuIiwgMTA0MSwgIkJVVFRPTiIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX1RBQlNUT1AsIDQsIDQyLCA5MiwgMTIKKyAgICAgICAgR1JPVVBCT1ggIkly4W55IiwgMTA3MiwgOTcsIDI2LCA3OCwgMjgKKyAgICAgICAgQ09OVFJPTCAiJlZpc3N6YSIsIDEwNTYsICJCVVRUT04iLCBCU19BVVRPUkFESU9CVVRUT04gfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AsIDEwMiwgMzgsIDMyLCAxMgorICAgICAgICBDT05UUk9MICImRWz1cmUiLCAxMDU3LCAiQlVUVE9OIiwgQlNfQVVUT1JBRElPQlVUVE9OIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUCwgMTM4LCAzOCwgMzAsIDEyCisgICAgICAgIENPTlRST0wgIiZL9nZldGtlevUiLCAxLCAiQlVUVE9OIiwgV1NfR1JPVVAgfCBXU19UQUJTVE9QLCAxODIsIDUsIDUwLCAxNAorICAgICAgICBDT05UUk9MICJN6WdzZW0iLCAyLCAiQlVUVE9OIiwgV1NfR1JPVVAgfCBXU19UQUJTVE9QLCAxODIsIDIzLCA1MCwgMTQKKyAgICAgICAgUFVTSEJVVFRPTiAiJlNlZ+10c+lnIiwgMTAzOCwgMTgyLCA0NSwgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKK0VORAorCitSRVBMQUNFX1RFWFQgRElBTE9HIDM2LCAyNCwgMjMwLCA5NAorU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIkNzZXLpbOlzIgorRk9OVCA4LCAiSGVsdiIKK0JFR0lOCisgICAgICAgIExURVhUICImTWl0IGtlcmVzc2VuOiIsIC0xLCA0LCA5LCA0OCwgOAorICAgICAgICBFRElUVEVYVCAxMTUyLCA1NywgNywgMTExLCAxMiwgRVNfQVVUT0hTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyAgICAgICAgTFRFWFQgIk1pcmUgJmNzZXLpbGplbToiLCAtMSwgNCwgMjYsIDUzLCA4CisgICAgICAgIEVESVRURVhUIDExNTMsIDU3LCAyNCwgMTExLCAxMiwgRVNfQVVUT0hTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyAgICAgICAgQ09OVFJPTCAiVGVsamVzICZzemF2YWsga2VyZXPpc2UiLCAxMDQwLCAiQlVUVE9OIiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QLCA1LCA0NiwgMTA0LCAxMgorICAgICAgICBDT05UUk9MICJLaXMvJm5hZ3liZXT7IGv8bPZuYi4iLCAxMDQxLCAiQlVUVE9OIiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUCwgNSwgNjIsIDk5LCAxMgorICAgICAgICBDT05UUk9MICImS/Z2ZXRrZXr1IiwgMSwgIkJVVFRPTiIsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AsIDE3NCwgNCwgNTMsIDE0CisgICAgICAgIENPTlRST0wgIkMmc2Vy6WwiLCAxMDI0LCAiQlVUVE9OIiwgV1NfR1JPVVAgfCBXU19UQUJTVE9QLCAxNzQsIDIxLCA1MywgMTQKKyAgICAgICAgQ09OVFJPTCAiTSZpbmRlbnQgY3NlculsIiwgMTAyNSwgIkJVVFRPTiIsIFdTX0dST1VQIHwgV1NfVEFCU1RPUCwgMTc0LCAzOCwgNTMsIDE0CisgICAgICAgIENPTlRST0wgIk3pZ3NlbSIsIDIsICJCVVRUT04iLCBXU19HUk9VUCB8IFdTX1RBQlNUT1AsIDE3NCwgNTUsIDUzLCAxNAorICAgICAgICBDT05UUk9MICImU2Vn7XRz6WciLCAxMDM4LCAiQlVUVE9OIiwgV1NfR1JPVVAgfCBXU19UQUJTVE9QLCAxNzQsIDc1LCA1MywgMTQKK0VORApkaWZmIC0tZ2l0IGEvc2NoZWR1bGVyL3Byb2Nlc3MuYyBiL3NjaGVkdWxlci9wcm9jZXNzLmMKaW5kZXggYTdlMTk5MS4uYzQ3NGQ1NCAxMDA2NDQKLS0tIGEvc2NoZWR1bGVyL3Byb2Nlc3MuYworKysgYi9zY2hlZHVsZXIvcHJvY2Vzcy5jCkBAIC01NDAsNiArNTQwLDkzIEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRXhwYW5kRW52aXJvbm1lbnRWYXJpYWJsZXNBICAgKEtFUk5FTDMyLjEwMykKKyAqLworRFdPUkQgRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzMzJBKCBMUENTVFIgc3JjLCBMUFNUUiBkc3QsIERXT1JEIGxlbikgeworCUxQQ1NUUiBzOworICAgICAgICBMUFNUUiBkOworCUhBTkRMRTMyCWhlYXAgPSBHZXRQcm9jZXNzSGVhcCgpOworCUxQU1RSCQl4ZHN0ID0gSGVhcEFsbG9jKGhlYXAsMCwxMCk7CisJRFdPUkQJCWN1cnNpemUgPSAxMDsKKwlEV09SRAkJcmV0OworCisJZnByaW50ZihzdGRlcnIsIkV4cGFuZEVudmlyb25tZW50U3RyaW5nczMyQSglcylcbiIsc3JjKTsKKwlzPXNyYzsKKwlkPXhkc3Q7CisJbWVtc2V0KGRzdCwnXDAnLGxlbik7CisjZGVmaW5lIENIRUNLX0ZSRUUobikgIHsJCQkJXAorCURXT1JECV9uZWVkZWQgPSAobik7CQkJCVwKKwkJCQkJCQlcCisJd2hpbGUgKGN1cnNpemUtKGQteGRzdCk8X25lZWRlZCkgewkJXAorCQlEV09SRAlpbmQgPSBkLXhkc3Q7CQkJXAorCQkJCQkJCVwKKwkJY3Vyc2l6ZSs9MTAwOwkJCQlcCisJCXhkc3Q9KExQU1RSKUhlYXBSZUFsbG9jKGhlYXAsMCx4ZHN0LGN1cnNpemUpO1wKKwkJZCA9IHhkc3QraW5kOwkJCQlcCisJfQkJCQkJCVwKK30KKworCXdoaWxlICgqcykgeworCQlpZiAoKnM9PSclJykgeworCQkJTFBDU1RSIGVuZDsKKworCQkJZW5kID0gcztkbyB7IGVuZCsrOyB9IHdoaWxlICgqZW5kICYmICplbmQhPSclJyk7CisJCQlpZiAoKmVuZD09JyUnKSB7CisJCQkJTFBTVFIJeCA9IEhlYXBBbGxvYyhoZWFwLDAsZW5kLXMrMSk7CisJCQkJY2hhcglidWZbMl07CisKKwkJCQlsc3RyY3B5bjMyQSh4LHMrMSxlbmQtcy0xKTsKKwkJCQl4W2VuZC1zLTFdPTA7CisKKwkJCQkvKiBwdXQgZXhwYW5kZWQgdmFyaWFibGUgZGlyZWN0bHkgaW50byAKKwkJCQkgKiBkZXN0aW5hdGlvbiBzdHJpbmcsIHNvIHdlIGRvbid0IGhhdmUKKwkJCQkgKiB0byB1c2UgdGVtcG9yYXJ5IGJ1ZmZlcnMuCisJCQkJICovCisJCQkJcmV0ID0gR2V0RW52aXJvbm1lbnRWYXJpYWJsZTMyQSh4LGJ1ZiwyKTsKKwkJCQlDSEVDS19GUkVFKHJldCsyKTsKKwkJCQlyZXQgPSBHZXRFbnZpcm9ubWVudFZhcmlhYmxlMzJBKHgsZCxkLXhkc3QpOworCQkJCWlmIChyZXQpIHsKKwkJCQkJZCs9c3RybGVuKGQpOworCQkJCX0gZWxzZSB7CisJCQkJCUNIRUNLX0ZSRUUoc3RybGVuKHgpKzIpOworCQkJCQkqZCsrPSclJzsKKwkJCQkJbHN0cmNweTMyQShkLHgpOworCQkJCQlkKz1zdHJsZW4oeCk7CisJCQkJCSpkKys9JyUnOworCQkJCX0KKwkJCQlIZWFwRnJlZShoZWFwLDAseCk7CisJCQl9IGVsc2UKKwkJCQkqZD0qczsKKworCQkJcysrO2QrKzsKKwkJfSBlbHNlIHsKKwkJCUNIRUNLX0ZSRUUoMSk7CisJCQkqZCsrPSpzKys7CisJCX0KKwl9CisJKmQJPSAnXDAnOworCXJldAk9IGxzdHJsZW4zMkEoeGRzdCkrMTsKKwlpZiAoZC14ZHN0PGxlbikKKwkJbHN0cmNweTMyQShkc3QseGRzdCk7CisJSGVhcEZyZWUoaGVhcCwwLHhkc3QpOworCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEV4cGFuZEVudmlyb25tZW50VmFyaWFibGVzQSAgIChLRVJORUwzMi4xMDQpCisgKi8KK0RXT1JEIEV4cGFuZEVudmlyb25tZW50U3RyaW5nczMyVyggTFBDV1NUUiBzcmMsIExQV1NUUiBkc3QsIERXT1JEIGxlbikgeworCUhBTkRMRTMyCWhlYXAgPSBHZXRQcm9jZXNzSGVhcCgpOworCUxQU1RSCQlzcmNBID0gSEVBUF9zdHJkdXBXdG9BKGhlYXAsMCxzcmMpOworCUxQU1RSCQlkc3RBID0gSGVhcEFsbG9jKGhlYXAsMCxsZW4pOworCURXT1JECQlyZXQgPSBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MzMkEoc3JjQSxkc3RBLGxlbik7CisKKwlsc3RyY3B5QXRvVyhkc3QsZHN0QSk7CisJSGVhcEZyZWUoaGVhcCwwLGRzdEEpOworCUhlYXBGcmVlKGhlYXAsMCxzcmNBKTsKKwlyZXR1cm4gcmV0OworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBHZXRQcm9jZXNzSGVhcCAgICAoS0VSTkVMMzIuMjU5KQpkaWZmIC0tZ2l0IGEvd2luMzIvTWFrZWZpbGUuaW4gYi93aW4zMi9NYWtlZmlsZS5pbgppbmRleCBlMDllOGVhLi5kYmRhZTJhIDEwMDY0NAotLS0gYS93aW4zMi9NYWtlZmlsZS5pbgorKysgYi93aW4zMi9NYWtlZmlsZS5pbgpAQCAtMTksNiArMTksNyBAQAogCW1lbW9yeS5jIFwKIAluZXdmbnMuYyBcCiAJcHJvY2Vzcy5jIFwKKwlzZWN1cml0eS5jIFwKIAlzdHJpbmczMi5jIFwKIAlzdHJ1Y3QzMi5jIFwKIAl0aHJlYWQuYyBcCmRpZmYgLS1naXQgYS93aW4zMi9tZW1vcnkuYyBiL3dpbjMyL21lbW9yeS5jCmluZGV4IDlhMjI2MTUuLjhjYjFhZTUgMTAwNjQ0Ci0tLSBhL3dpbjMyL21lbW9yeS5jCisrKyBiL3dpbjMyL21lbW9yeS5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTI4Myw2ICsyODQsMTUgQEAKIAlyZXR1cm4gVFJVRTsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgVmlydHVhbFByb3RlY3QgICAgICAgICAgICAgICAoS0VSTkVMMzIuNTUyKQorICovCitCT09MMzIgVmlydHVhbFByb3RlY3QoTFBWT0lEIGxwQWRkcmVzcyxEV09SRCBkd1NpemUsRFdPUkQgZmxOZXdQcm90ZWN0LExQRFdPUkQgbHBmbE9sZFByb3RlY3QpIHsKKwkvKiBGSVhNRTogZG8gcHJvdGVjdGlvbiAuLi4gc2VlIG1wcm90ZWN0KCkuICovCisJcmV0dXJuIFRSVUU7Cit9CisKKwogaW50IFRyYW5zbGF0ZVByb3RlY3Rpb25GbGFncyhEV09SRCBwcm90ZWN0aW9uX2ZsYWdzKQogewogICAgIGludCBwcm90OwpkaWZmIC0tZ2l0IGEvd2luMzIvc2VjdXJpdHkuYyBiL3dpbjMyL3NlY3VyaXR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhlOWFmYQotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL3NlY3VyaXR5LmMKQEAgLTAsMCArMSwxODIgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgIm50ZGxsLmgiCisjaW5jbHVkZSAieG1hbGxvYy5oIgorI2luY2x1ZGUgInN0ZGRlYnVnLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKworQk9PTDMyIElzVmFsaWRTaWQgKExQU0lEIHBTaWQpOworQk9PTDMyIEVxdWFsU2lkIChMUFNJRCBwU2lkMSwgTFBTSUQgcFNpZDIpOworQk9PTDMyIEVxdWFsUHJlZml4U2lkIChMUFNJRCBwU2lkMSwgTFBTSUQgcFNpZDIpOworRFdPUkQgR2V0U2lkTGVuZ3RoUmVxdWlyZWQgKEJZVEUgblN1YkF1dGhvcml0eUNvdW50KTsKK0JPT0wzMiBBbGxvY2F0ZUFuZEluaXRpYWxpemVTaWQgKExQU0lEX0lERU5USUZJRVJfQVVUSE9SSVRZIHBJZGVudGlmaWVyQXV0aG9yaXR5LCBCWVRFIG5TdWJBdXRob3JpdHlDb3VudCwgRFdPUkQgblN1YkF1dGhvcml0eTAsIERXT1JEIG5TdWJBdXRob3JpdHkxLCBEV09SRCBuU3ViQXV0aG9yaXR5MiwgRFdPUkQgblN1YkF1dGhvcml0eTMsICAgIERXT1JEIG5TdWJBdXRob3JpdHk0LCBEV09SRCBuU3ViQXV0aG9yaXR5NSwgRFdPUkQgblN1YkF1dGhvcml0eTYsIERXT1JEIG5TdWJBdXRob3JpdHk3LCBMUFNJRCAqcFNpZCk7CitWT0lEICpGcmVlU2lkKExQU0lEIHBTaWQpOworQk9PTDMyIEluaXRpYWxpemVTaWQgKExQU0lEIHBTaWQsIExQU0lEX0lERU5USUZJRVJfQVVUSE9SSVRZIHBJZGVudGlmaWVyQXV0aG9yaXR5LCBCWVRFIG5TdWJBdXRob3JpdHlDb3VudCk7CitMUFNJRF9JREVOVElGSUVSX0FVVEhPUklUWSBHZXRTaWRJZGVudGlmaWVyQXV0aG9yaXR5IChMUFNJRCBwU2lkKTsKK0RXT1JEICpHZXRTaWRTdWJBdXRob3JpdHkgKExQU0lEIHBTaWQsIERXT1JEIG5TdWJBdXRob3JpdHkpOworQllURSAqR2V0U2lkU3ViQXV0aG9yaXR5Q291bnQgKExQU0lEIHBTaWQpOworRFdPUkQgR2V0TGVuZ3RoU2lkIChMUFNJRCBwU2lkKTsKK0JPT0wzMiBDb3B5U2lkIChEV09SRCBuRGVzdGluYXRpb25TaWRMZW5ndGgsIExQU0lEIHBEZXN0aW5hdGlvblNpZCwgTFBTSUQgcFNvdXJjZVNpZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIElzVmFsaWRTaWQgIChBRFZBUEkuODApCisgKi8KK0JPT0wzMiBJc1ZhbGlkU2lkIChMUFNJRCBwU2lkKSB7CisgICAgaWYgKCFwU2lkIHx8IHBTaWQtPlJldmlzaW9uICE9IFNJRF9SRVZJU0lPTikKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEVxdWFsU2lkICAoQURWQVBJLjQwKQorICovCitCT09MMzIgRXF1YWxTaWQgKExQU0lEIHBTaWQxLCBMUFNJRCBwU2lkMikgeworICAgIGlmICghSXNWYWxpZFNpZChwU2lkMSkgfHwgIUlzVmFsaWRTaWQocFNpZDIpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBpZiAoKkdldFNpZFN1YkF1dGhvcml0eUNvdW50KHBTaWQxKSAhPSAqR2V0U2lkU3ViQXV0aG9yaXR5Q291bnQocFNpZDIpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBpZiAobWVtY21wKHBTaWQxLCBwU2lkMiwgR2V0TGVuZ3RoU2lkKHBTaWQxKSkgIT0gMCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEVxdWFsUHJlZml4U2lkICAoQURWQVBJLjM5KQorICovCitCT09MMzIgRXF1YWxQcmVmaXhTaWQgKExQU0lEIHBTaWQxLCBMUFNJRCBwU2lkMikgeworICAgIGlmICghSXNWYWxpZFNpZChwU2lkMSkgfHwgIUlzVmFsaWRTaWQocFNpZDIpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBpZiAoKkdldFNpZFN1YkF1dGhvcml0eUNvdW50KHBTaWQxKSAhPSAqR2V0U2lkU3ViQXV0aG9yaXR5Q291bnQocFNpZDIpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBpZiAobWVtY21wKHBTaWQxLCBwU2lkMiwgR2V0U2lkTGVuZ3RoUmVxdWlyZWQocFNpZDEtPlN1YkF1dGhvcml0eUNvdW50IC0gMSkpCisgIT0gMCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdldFNpZExlbmd0aFJlcXVpcmVkICAoQURWQVBJLjYzKQorICovCitEV09SRCBHZXRTaWRMZW5ndGhSZXF1aXJlZCAoQllURSBuU3ViQXV0aG9yaXR5Q291bnQpIHsKKyAgICByZXR1cm4gc2l6ZW9mIChTSUQpICsgKG5TdWJBdXRob3JpdHlDb3VudCAtIDEgKiBzaXplb2YgKERXT1JEKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZCAgKEFEVkFQSS4xMSkKKyAqLworQk9PTDMyIEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZCAoTFBTSURfSURFTlRJRklFUl9BVVRIT1JJVFkgcElkZW50aWZpZXJBdXRob3JpdHksCisgICAgQllURSBuU3ViQXV0aG9yaXR5Q291bnQsCisgICAgRFdPUkQgblN1YkF1dGhvcml0eTAsIERXT1JEIG5TdWJBdXRob3JpdHkxLAorICAgIERXT1JEIG5TdWJBdXRob3JpdHkyLCBEV09SRCBuU3ViQXV0aG9yaXR5MywKKyAgICBEV09SRCBuU3ViQXV0aG9yaXR5NCwgRFdPUkQgblN1YkF1dGhvcml0eTUsCisgICAgRFdPUkQgblN1YkF1dGhvcml0eTYsIERXT1JEIG5TdWJBdXRob3JpdHk3LAorICAgIExQU0lEICpwU2lkKSB7CisKKyAgICAqcFNpZCA9IHhtYWxsb2MoR2V0U2lkTGVuZ3RoUmVxdWlyZWQoblN1YkF1dGhvcml0eUNvdW50KSk7CisgICAgKCpwU2lkKS0+UmV2aXNpb24gPSBTSURfUkVWSVNJT047CisgICAgaWYgKHBJZGVudGlmaWVyQXV0aG9yaXR5KQorICAgICAgICBtZW1jcHkoJigqcFNpZCktPklkZW50aWZpZXJBdXRob3JpdHksIHBJZGVudGlmaWVyQXV0aG9yaXR5LAorICAgICAgICAgICAgICAgc2l6ZW9mIChTSURfSURFTlRJRklFUl9BVVRIT1JJVFkpKTsKKyAgICAqR2V0U2lkU3ViQXV0aG9yaXR5Q291bnQoKnBTaWQpID0gblN1YkF1dGhvcml0eUNvdW50OworCisgICAgaWYgKG5TdWJBdXRob3JpdHlDb3VudCA+IDApCisgICAgICAgICpHZXRTaWRTdWJBdXRob3JpdHkoKnBTaWQsIDApID0gblN1YkF1dGhvcml0eTA7CisgICAgaWYgKG5TdWJBdXRob3JpdHlDb3VudCA+IDEpCisgICAgICAgICpHZXRTaWRTdWJBdXRob3JpdHkoKnBTaWQsIDEpID0gblN1YkF1dGhvcml0eTE7CisgICAgaWYgKG5TdWJBdXRob3JpdHlDb3VudCA+IDIpCisgICAgICAgICpHZXRTaWRTdWJBdXRob3JpdHkoKnBTaWQsIDIpID0gblN1YkF1dGhvcml0eTI7CisgICAgaWYgKG5TdWJBdXRob3JpdHlDb3VudCA+IDMpCisgICAgICAgICpHZXRTaWRTdWJBdXRob3JpdHkoKnBTaWQsIDMpID0gblN1YkF1dGhvcml0eTM7CisgICAgaWYgKG5TdWJBdXRob3JpdHlDb3VudCA+IDQpCisgICAgICAgICpHZXRTaWRTdWJBdXRob3JpdHkoKnBTaWQsIDQpID0gblN1YkF1dGhvcml0eTQ7CisgICAgaWYgKG5TdWJBdXRob3JpdHlDb3VudCA+IDUpCisgICAgICAgICpHZXRTaWRTdWJBdXRob3JpdHkoKnBTaWQsIDUpID0gblN1YkF1dGhvcml0eTU7CisgICAgaWYgKG5TdWJBdXRob3JpdHlDb3VudCA+IDYpCisgICAgICAgICpHZXRTaWRTdWJBdXRob3JpdHkoKnBTaWQsIDYpID0gblN1YkF1dGhvcml0eTY7CisgICAgaWYgKG5TdWJBdXRob3JpdHlDb3VudCA+IDcpCisgICAgICAgICpHZXRTaWRTdWJBdXRob3JpdHkoKnBTaWQsIDcpID0gblN1YkF1dGhvcml0eTc7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRnJlZVNpZCAgKEFEVkFQSS40MikKKyAqLworVk9JRCAqRnJlZVNpZChMUFNJRCBwU2lkKSB7CisgICAgZnJlZShwU2lkKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgSW5pdGlhbGl6ZVNpZCAgKEFEVkFQSS43NCkKKyAqLworQk9PTDMyIEluaXRpYWxpemVTaWQgKExQU0lEIHBTaWQsIExQU0lEX0lERU5USUZJRVJfQVVUSE9SSVRZIHBJZGVudGlmaWVyQXV0aG9yaXR5LAorICAgICAgICAgICAgICAgICAgICBCWVRFIG5TdWJBdXRob3JpdHlDb3VudCkgeworICAgIGludCBpOworCisgICAgcFNpZC0+UmV2aXNpb24gPSBTSURfUkVWSVNJT047CisgICAgaWYgKHBJZGVudGlmaWVyQXV0aG9yaXR5KQorICAgICAgICBtZW1jcHkoJnBTaWQtPklkZW50aWZpZXJBdXRob3JpdHksIHBJZGVudGlmaWVyQXV0aG9yaXR5LAorICAgICAgICAgICAgICAgc2l6ZW9mIChTSURfSURFTlRJRklFUl9BVVRIT1JJVFkpKTsKKyAgICAqR2V0U2lkU3ViQXV0aG9yaXR5Q291bnQocFNpZCkgPSBuU3ViQXV0aG9yaXR5Q291bnQ7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgblN1YkF1dGhvcml0eUNvdW50OyBpKyspCisgICAgICAgICpHZXRTaWRTdWJBdXRob3JpdHkocFNpZCwgaSkgPSAwOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdldFNpZElkZW50aWZpZXJBdXRob3JpdHkgIChBRFZBUEkuNjIpCisgKi8KK0xQU0lEX0lERU5USUZJRVJfQVVUSE9SSVRZIEdldFNpZElkZW50aWZpZXJBdXRob3JpdHkgKExQU0lEIHBTaWQpIHsKKyAgICByZXR1cm4gJnBTaWQtPklkZW50aWZpZXJBdXRob3JpdHk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdldFNpZFN1YkF1dGhvcml0eSAgKEFEVkFQSS42NCkKKyAqLworRFdPUkQgKkdldFNpZFN1YkF1dGhvcml0eSAoTFBTSUQgcFNpZCwgRFdPUkQgblN1YkF1dGhvcml0eSkgeworICAgIHJldHVybiAmcFNpZC0+U3ViQXV0aG9yaXR5W25TdWJBdXRob3JpdHldOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHZXRTaWRTdWJBdXRob3JpdHlDb3VudCAgKEFEVkFQSS42NSkKKyAqLworQllURSAqR2V0U2lkU3ViQXV0aG9yaXR5Q291bnQgKExQU0lEIHBTaWQpIHsKKyAgICByZXR1cm4gJnBTaWQtPlN1YkF1dGhvcml0eUNvdW50OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHZXRMZW5ndGhTaWQgIChBRFZBUEkuNDgpCisgKi8KK0RXT1JEIEdldExlbmd0aFNpZCAoTFBTSUQgcFNpZCkgeworICAgIHJldHVybiBHZXRTaWRMZW5ndGhSZXF1aXJlZCgqR2V0U2lkU3ViQXV0aG9yaXR5Q291bnQocFNpZCkpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBDb3B5U2lkICAoQURWQVBJLjI0KQorICovCitCT09MMzIgQ29weVNpZCAoRFdPUkQgbkRlc3RpbmF0aW9uU2lkTGVuZ3RoLCBMUFNJRCBwRGVzdGluYXRpb25TaWQsCisgICAgICAgICAgICAgIExQU0lEIHBTb3VyY2VTaWQpIHsKKworICAgIGlmICghSXNWYWxpZFNpZChwU291cmNlU2lkKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaWYgKG5EZXN0aW5hdGlvblNpZExlbmd0aCA8IEdldExlbmd0aFNpZChwU291cmNlU2lkKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgbWVtY3B5KHBEZXN0aW5hdGlvblNpZCwgcFNvdXJjZVNpZCwgR2V0TGVuZ3RoU2lkKHBTb3VyY2VTaWQpKTsKKworICAgIHJldHVybiBUUlVFOworfQpkaWZmIC0tZ2l0IGEvd2luMzIvc3RydWN0MzIuYyBiL3dpbjMyL3N0cnVjdDMyLmMKaW5kZXggNzc5NWM5ZS4uZjA2MzFlMCAxMDA2NDQKLS0tIGEvd2luMzIvc3RydWN0MzIuYworKysgYi93aW4zMi9zdHJ1Y3QzMi5jCkBAIC0xMyw3ICsxMyw3IEBACiAKIHZvaWQgU1RSVUNUMzJfTVNHMTZ0bzMyKGNvbnN0IE1TRzE2ICptc2cxNixNU0czMiAqbXNnMzIpCiB7Ci0JbXNnMzItPmh3bmQ9KERXT1JEKW1zZzE2LT5od25kOworCW1zZzMyLT5od25kPShIV05EMzIpbXNnMTYtPmh3bmQ7CiAJbXNnMzItPm1lc3NhZ2U9bXNnMTYtPm1lc3NhZ2U7CiAJbXNnMzItPndQYXJhbT1tc2cxNi0+d1BhcmFtOwogCW1zZzMyLT5sUGFyYW09bXNnMTYtPmxQYXJhbTsKQEAgLTI0LDcgKzI0LDcgQEAKIAogdm9pZCBTVFJVQ1QzMl9NU0czMnRvMTYoY29uc3QgTVNHMzIgKm1zZzMyLE1TRzE2ICptc2cxNikKIHsKLQltc2cxNi0+aHduZD0oSFdORCltc2czMi0+aHduZDsKKwltc2cxNi0+aHduZD0oSFdORDE2KW1zZzMyLT5od25kOwogCW1zZzE2LT5tZXNzYWdlPW1zZzMyLT5tZXNzYWdlOwogCW1zZzE2LT53UGFyYW09bXNnMzItPndQYXJhbTsKIAltc2cxNi0+bFBhcmFtPW1zZzMyLT5sUGFyYW07CmRpZmYgLS1naXQgYS93aW4zMi91c2VyMzIuYyBiL3dpbjMyL3VzZXIzMi5jCmluZGV4IDRkNjQzNDMuLmI3ZGZmOWMgMTAwNjQ0Ci0tLSBhL3dpbjMyL3VzZXIzMi5jCisrKyBiL3dpbjMyL3VzZXIzMi5jCkBAIC0yMiw2MSArMjIsMTggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgR2V0TWVzc2FnZUEgICAgICAgICAgKFVTRVIzMi4yNjkpCiAgKi8KLUJPT0wgVVNFUjMyX0dldE1lc3NhZ2VBKE1TRzMyKiBscG1zZyxEV09SRCBod25kLERXT1JEIG1pbixEV09SRCBtYXgpCitCT09MIFVTRVIzMl9HZXRNZXNzYWdlQShNU0czMiogbHBtc2csSFdORDMyIGh3bmQsRFdPUkQgbWluLERXT1JEIG1heCkKIHsKIAlCT09MIHJldDsKIAlNU0cxNiAqbXNnID0gU0VHUFRSX05FVyhNU0cxNik7CiAgICAgICAgIGlmICghbXNnKSByZXR1cm4gMDsKLSAgICAgICAgcmV0PUdldE1lc3NhZ2UoU0VHUFRSX0dFVChtc2cpLChIV05EKWh3bmQsbWluLG1heCk7CisgICAgICAgIHJldD1HZXRNZXNzYWdlKFNFR1BUUl9HRVQobXNnKSwoSFdORDE2KWh3bmQsbWluLG1heCk7CiAJU1RSVUNUMzJfTVNHMTZ0bzMyKG1zZyxscG1zZyk7CiAgICAgICAgIFNFR1BUUl9GUkVFKG1zZyk7CiAJcmV0dXJuIHJldDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICBJc0RpYWxvZ01lc3NhZ2VBICAgICAoVVNFUjMyLjM0MSkKLSAqLwotQk9PTCBJc0RpYWxvZ01lc3NhZ2UzMkEoRFdPUkQgaHduZCwgTVNHMzIqIGxwbXNnKQotewotCU1TRzE2IG1zZzsKLQlTVFJVQ1QzMl9NU0czMnRvMTYobHBtc2csICZtc2cpOwotCXJldHVybiBJc0RpYWxvZ01lc3NhZ2UoaHduZCwgJm1zZyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgSXNEaWFsb2dNZXNzYWdlMzJXICAgICAoVVNFUjMyLjM0MikKLSAqLwotQk9PTCBJc0RpYWxvZ01lc3NhZ2UzMlcoRFdPUkQgaHduZCwgTVNHMzIqIGxwbXNnKQotewotCU1TRzE2IG1zZzsKLQlTVFJVQ1QzMl9NU0czMnRvMTYobHBtc2csICZtc2cpOwotCXJldHVybiBJc0RpYWxvZ01lc3NhZ2UoaHduZCwgJm1zZyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICBEaXNwYXRjaE1lc3NhZ2VBICAgICAgIChVU0VSMzIuMTQwKQotICovCi1MT05HIFVTRVIzMl9EaXNwYXRjaE1lc3NhZ2VBKE1TRzMyKiBscG1zZykKLXsKLQlNU0cxNiBtc2c7Ci0JTE9ORyByZXQ7Ci0JU1RSVUNUMzJfTVNHMzJ0bzE2KGxwbXNnLCZtc2cpOwotCXJldD1EaXNwYXRjaE1lc3NhZ2UoJm1zZyk7Ci0JU1RSVUNUMzJfTVNHMTZ0bzMyKCZtc2csbHBtc2cpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICBUcmFuc2xhdGVNZXNzYWdlICAgICAgIChVU0VSMzIuNTU1KQotICovCi1CT09MIFVTRVIzMl9UcmFuc2xhdGVNZXNzYWdlKE1TRzMyKiBscG1zZykKLXsKLQlNU0cxNiBtc2c7Ci0JU1RSVUNUMzJfTVNHMzJ0bzE2KGxwbXNnLCZtc2cpOwotCXJldHVybiBUcmFuc2xhdGVNZXNzYWdlKCZtc2cpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgUGVla01lc3NhZ2VBCiAgKi8KIEJPT0wzMiBQZWVrTWVzc2FnZTMyQSggTFBNU0czMiBscG1zZywgSFdORDMyIGh3bmQsCmRpZmYgLS1naXQgYS93aW5kb3dzL2NhcmV0LmMgYi93aW5kb3dzL2NhcmV0LmMKaW5kZXggMjQxOWQ5Ni4uMGZkYzZlZiAxMDA2NDQKLS0tIGEvd2luZG93cy9jYXJldC5jCisrKyBiL3dpbmRvd3MvY2FyZXQuYwpAQCAtMTQ1LDEwICsxNDUsMTEgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgQ2FyZXQud2lkdGggPSB3aWR0aCA/IHdpZHRoIDogR2V0U3lzdGVtTWV0cmljcyhTTV9DWEJPUkRFUik7Ci0gICAgICAgIENhcmV0LmhlaWdodCA9IGhlaWdodCA/IGhlaWdodCA6IEdldFN5c3RlbU1ldHJpY3MoU01fQ1lCT1JERVIpOwotICAgICAgICBDYXJldC5oQnJ1c2ggPSBDcmVhdGVTb2xpZEJydXNoMzIoYml0bWFwID8gR2V0U3lzQ29sb3IoQ09MT1JfR1JBWVRFWFQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0U3lzQ29sb3IoQ09MT1JfV0lORE9XKSApOworICAgICAgICBDYXJldC53aWR0aCA9IHdpZHRoID8gd2lkdGggOiBHZXRTeXN0ZW1NZXRyaWNzMzIoU01fQ1hCT1JERVIpOworICAgICAgICBDYXJldC5oZWlnaHQgPSBoZWlnaHQgPyBoZWlnaHQgOiBHZXRTeXN0ZW1NZXRyaWNzMzIoU01fQ1lCT1JERVIpOworICAgICAgICBDYXJldC5oQnJ1c2ggPSBDcmVhdGVTb2xpZEJydXNoMzIoYml0bWFwID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN5c0NvbG9yMzIoQ09MT1JfR1JBWVRFWFQpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN5c0NvbG9yMzIoQ09MT1JfV0lORE9XKSApOwogICAgIH0KIAogICAgIENhcmV0Lmh3bmQgPSBod25kOwpAQCAtMjA0LDkgKzIwNSwxOCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEhpZGVDYXJldCAgIChVU0VSLjE2NikgKFVTRVIzMi4zMTYpCisgKiAgICAgICAgICAgSGlkZUNhcmV0MTYgICAoVVNFUi4xNjYpCiAgKi8KLUJPT0wxNiBIaWRlQ2FyZXQoIEhXTkQzMiBod25kICkKK0JPT0wxNiBIaWRlQ2FyZXQxNiggSFdORDE2IGh3bmQgKQoreworICAgIHJldHVybiBIaWRlQ2FyZXQzMiggaHduZCApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEhpZGVDYXJldDMyICAgKFVTRVIzMi4zMTYpCisgKi8KK0JPT0wzMiBIaWRlQ2FyZXQzMiggSFdORDMyIGh3bmQgKQogewogICAgIGlmICghQ2FyZXQuaHduZCkgcmV0dXJuIEZBTFNFOwogICAgIGlmIChod25kICYmIChDYXJldC5od25kICE9IGh3bmQpKSByZXR1cm4gRkFMU0U7CkBAIC0yMjIsOSArMjMyLDE4IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgU2hvd0NhcmV0ICAgKFVTRVIuMTY3KSAoVVNFUjMyLjUyOCkKKyAqICAgICAgICAgICBTaG93Q2FyZXQxNiAgIChVU0VSLjE2NykKICAqLwotQk9PTDE2IFNob3dDYXJldCggSFdORDMyIGh3bmQgKQorQk9PTDE2IFNob3dDYXJldDE2KCBIV05EMTYgaHduZCApCit7CisgICAgcmV0dXJuIFNob3dDYXJldDMyKCBod25kICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgU2hvd0NhcmV0MzIgICAoVVNFUjMyLjUyOCkKKyAqLworQk9PTDMyIFNob3dDYXJldDMyKCBIV05EMzIgaHduZCApCiB7CiAgICAgaWYgKCFDYXJldC5od25kKSByZXR1cm4gRkFMU0U7CiAgICAgaWYgKGh3bmQgJiYgKENhcmV0Lmh3bmQgIT0gaHduZCkpIHJldHVybiBGQUxTRTsKZGlmZiAtLWdpdCBhL3dpbmRvd3MvZGVmZGxnLmMgYi93aW5kb3dzL2RlZmRsZy5jCmluZGV4IDBlYzVjNDQuLmQ1ZDJmMzMgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvZGVmZGxnLmMKKysrIGIvd2luZG93cy9kZWZkbGcuYwpAQCAtMTk2LDcgKzE5Niw3IEBACiAJICAgIHJldHVybiBkbGdJbmZvLT5oVXNlckZvbnQ7CiAKICAgICAgICAgY2FzZSBXTV9DTE9TRToKLSAgICAgICAgICAgIEVuZERpYWxvZyggaHduZCwgVFJVRSApOworICAgICAgICAgICAgRW5kRGlhbG9nMzIoIGh3bmQsIFRSVUUgKTsKICAgICAgICAgICAgIERlc3Ryb3lXaW5kb3czMiggaHduZCApOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvd2luZG93cy9kZWZ3bmQuYyBiL3dpbmRvd3MvZGVmd25kLmMKaW5kZXggZDQwODQzMi4uNTU4MWJmNyAxMDA2NDQKLS0tIGEvd2luZG93cy9kZWZ3bmQuYworKysgYi93aW5kb3dzL2RlZnduZC5jCkBAIC05Myw2ICs5MywyNSBAQAogICAgIGNhc2UgV01fTkNMQlVUVE9OREJMQ0xLOgogCXJldHVybiBOQ19IYW5kbGVOQ0xCdXR0b25EYmxDbGsoIHduZFB0ciwgd1BhcmFtLCBsUGFyYW0gKTsKIAorICAgIGNhc2UgV01fUkJVVFRPTkRPV046CisgICAgY2FzZSBXTV9OQ1JCVVRUT05ET1dOOgorICAgICAgICBpZiggd25kUHRyLT5mbGFncyAmIFdJTl9JU1dJTjMyICkgCisgICAgICAgIHsKKwkgICAgQ2xpZW50VG9TY3JlZW4xNih3bmRQdHItPmh3bmRTZWxmLCAoTFBQT0lOVDE2KSZsUGFyYW0pOworICAgICAgICAgICAgU2VuZE1lc3NhZ2UzMkEoIHduZFB0ci0+aHduZFNlbGYsIFdNX0NPTlRFWFRNRU5VLAorCQkJICAgIHduZFB0ci0+aHduZFNlbGYsIGxQYXJhbSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdNX0NPTlRFWFRNRU5VOgorCWlmKCB3bmRQdHItPmR3U3R5bGUgJiBXU19DSElMRCApCisJICAgIFNlbmRNZXNzYWdlMzJBKCB3bmRQdHItPnBhcmVudC0+aHduZFNlbGYsIG1zZywgd1BhcmFtLCBsUGFyYW0gKTsKKworICAgICAvKiBlbHNlIAorICAgICAgKiAgICAgRklYTUU6IFRyYWNrIHN5c3RlbSBwb3B1cCBpZiBjbGljayB3YXMgaW4gdGhlIGNhcHRpb24gYXJlYS4gKi8KKworCWJyZWFrOworCiAgICAgY2FzZSBXTV9OQ0FDVElWQVRFOgogCXJldHVybiBOQ19IYW5kbGVOQ0FjdGl2YXRlKCB3bmRQdHIsIHdQYXJhbSApOwogCkBAIC0xMTksNyArMTM4LDcgQEAKIAkJCVNZU01FVFJJQ1NfQ1lJQ09OKS8yOwogCQlkcHJpbnRmX3dpbihzdGRkZWIsIlBhaW50aW5nIGNsYXNzIGljb246IHZpcyByZWN0PSglaSwlaSAtICVpLCVpKVxuIiwKIAkJcHMucmNQYWludC5sZWZ0LCBwcy5yY1BhaW50LnRvcCwgcHMucmNQYWludC5yaWdodCwgcHMucmNQYWludC5ib3R0b20gKTsKLQkgICAgICAgIERyYXdJY29uKCBoZGMsIHgsIHksIHduZFB0ci0+Y2xhc3MtPmhJY29uICk7CisJICAgICAgICBEcmF3SWNvbjMyKCBoZGMsIHgsIHksIHduZFB0ci0+Y2xhc3MtPmhJY29uICk7CiAJICAgICAgfQogCSAgICAgIEVuZFBhaW50MTYoIHduZFB0ci0+aHduZFNlbGYsICZwcyApOwogCSAgICB9CkBAIC0xNzIsMTUgKzE5MSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIREMxNil3UGFyYW0sIHN5c0NvbG9yT2JqZWN0cy5oYnJ1c2hBY3RpdmVDYXB0aW9uICk7CiAJCSAgIHJldHVybiAxOwogCQkgfQotCi0JCSAvKiBGSVhNRTogc2hvdWxkIGRyYXcgcGFyZW50JyBiYWNrZ3JvdW5kIHNvbWVob3cKLQkJCSAgICAgKGUuZyBmb3IgdGV4dHVyZWQgZGVza3RvcCkgPyAqLwogCSAgICB9CiAKIAkgICAgaWYgKHduZFB0ci0+Y2xhc3MtPmhickJhY2tncm91bmQgPD0gKEhCUlVTSDE2KShDT0xPUl9NQVgrMSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgSEJSVVNIMzIgaGJydXNoID0gQ3JlYXRlU29saWRCcnVzaDMyKCAKLQkJCSBHZXRTeXNDb2xvcigoKERXT1JEKXduZFB0ci0+Y2xhc3MtPmhickJhY2tncm91bmQpLTEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgR2V0U3lzQ29sb3IzMigoKERXT1JEKXduZFB0ci0+Y2xhc3MtPmhickJhY2tncm91bmQpLTEpKTsKICAgICAgICAgICAgICAgICAgRmlsbFdpbmRvdyggR2V0UGFyZW50MTYod25kUHRyLT5od25kU2VsZiksIHduZFB0ci0+aHduZFNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIREMxNil3UGFyYW0sIGhicnVzaCk7CiAgICAgICAgICAgICAgICAgIERlbGV0ZU9iamVjdDMyKCBoYnJ1c2ggKTsKQEAgLTE5OSw4ICsyMTUsOCBAQAogICAgIGNhc2UgV01fQ1RMQ09MT1JCVE46CiAgICAgY2FzZSBXTV9DVExDT0xPUkRMRzoKICAgICBjYXNlIFdNX0NUTENPTE9SU1RBVElDOgotICAgICAgICBTZXRCa0NvbG9yKCAoSERDMzIpd1BhcmFtLCBHZXRTeXNDb2xvcihDT0xPUl9XSU5ET1cpICk7Ci0gICAgICAgIFNldFRleHRDb2xvciggKEhEQzMyKXdQYXJhbSwgR2V0U3lzQ29sb3IoQ09MT1JfV0lORE9XVEVYVCkgKTsKKyAgICAgICAgU2V0QmtDb2xvciggKEhEQzMyKXdQYXJhbSwgR2V0U3lzQ29sb3IzMihDT0xPUl9XSU5ET1cpICk7CisgICAgICAgIFNldFRleHRDb2xvciggKEhEQzMyKXdQYXJhbSwgR2V0U3lzQ29sb3IzMihDT0xPUl9XSU5ET1dURVhUKSApOwogICAgICAgICByZXR1cm4gKExSRVNVTFQpc3lzQ29sb3JPYmplY3RzLmhicnVzaFdpbmRvdzsKIAogICAgIGNhc2UgV01fQ1RMQ09MT1JTQ1JPTExCQVI6CkBAIC0yMjAsOCArMjM2LDggQEAKIAkgICAgfQogCSAgICBlbHNlCiAJICAgIHsKLQkJU2V0QmtDb2xvciggKEhEQzMyKXdQYXJhbSwgR2V0U3lzQ29sb3IoQ09MT1JfV0lORE9XKSApOwotCQlTZXRUZXh0Q29sb3IoIChIREMzMil3UGFyYW0sIEdldFN5c0NvbG9yKENPTE9SX1dJTkRPV1RFWFQpICk7CisJCVNldEJrQ29sb3IoIChIREMzMil3UGFyYW0sIEdldFN5c0NvbG9yMzIoQ09MT1JfV0lORE9XKSApOworCQlTZXRUZXh0Q29sb3IoIChIREMzMil3UGFyYW0sIEdldFN5c0NvbG9yMzIoQ09MT1JfV0lORE9XVEVYVCkgKTsKIAkJcmV0dXJuIChMUkVTVUxUKXN5c0NvbG9yT2JqZWN0cy5oYnJ1c2hXaW5kb3c7CiAJICAgIH0KIAl9CkBAIC0yOTMsNyArMzA5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV1BBUkFNMTYpU0NfS0VZTUVOVSwgKExQQVJBTSkoRFdPUkQpd1BhcmFtICk7CiAgICAgICAgIH0gCiAJZWxzZSAvKiBjaGVjayBmb3IgQ3RybC1Fc2MgKi8KLSAgICAgICAgICAgIGlmICh3UGFyYW0gIT0gVktfRVNDQVBFKSBNZXNzYWdlQmVlcCgwKTsKKyAgICAgICAgICAgIGlmICh3UGFyYW0gIT0gVktfRVNDQVBFKSBNZXNzYWdlQmVlcDMyKDApOwogCWJyZWFrOwogCiAgICAgY2FzZSBXTV9TSE9XV0lORE9XOgpkaWZmIC0tZ2l0IGEvd2luZG93cy9kaWFsb2cuYyBiL3dpbmRvd3MvZGlhbG9nLmMKaW5kZXggN2JlMDdmZS4uMTdkMTY4MCAxMDA2NDQKLS0tIGEvd2luZG93cy9kaWFsb2cuYworKysgYi93aW5kb3dzL2RpYWxvZy5jCkBAIC03NDUsMTAgKzc0NSwxMCBAQAogICAgIHdoaWxlIChNU0dfSW50ZXJuYWxHZXRNZXNzYWdlKCZtc2csIGh3bmQsIG93bmVyLCBNU0dGX0RJQUxPR0JPWCwgUE1fUkVNT1ZFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEod25kUHRyLT5kd1N0eWxlICYgRFNfTk9JRExFTVNHKSApKQogICAgIHsKLQlpZiAoIUlzRGlhbG9nTWVzc2FnZSggaHduZCwgJm1zZykpCisJaWYgKCFJc0RpYWxvZ01lc3NhZ2UxNiggaHduZCwgJm1zZykpCiAJewotCSAgICBUcmFuc2xhdGVNZXNzYWdlKCAmbXNnICk7Ci0JICAgIERpc3BhdGNoTWVzc2FnZSggJm1zZyApOworCSAgICBUcmFuc2xhdGVNZXNzYWdlMTYoICZtc2cgKTsKKwkgICAgRGlzcGF0Y2hNZXNzYWdlMTYoICZtc2cgKTsKIAl9CiAJaWYgKGRsZ0luZm8tPmZFbmQpIGJyZWFrOwogICAgIH0KQEAgLTg1OSw5ICs4NTksMTggQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBFbmREaWFsb2cgICAoVVNFUi44OCkgKFVTRVIzMi4xNzMpCisgKiAgICAgICAgICAgRW5kRGlhbG9nMTYgICAoVVNFUjMyLjE3MykKICAqLwotQk9PTDE2IEVuZERpYWxvZyggSFdORDMyIGh3bmQsIElOVDMyIHJldHZhbCApCitCT09MMTYgRW5kRGlhbG9nMTYoIEhXTkQxNiBod25kLCBJTlQxNiByZXR2YWwgKQoreworICAgIHJldHVybiBFbmREaWFsb2czMiggaHduZCwgcmV0dmFsICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRW5kRGlhbG9nMzIgICAoVVNFUjMyLjE3MykKKyAqLworQk9PTDMyIEVuZERpYWxvZzMyKCBIV05EMzIgaHduZCwgSU5UMzIgcmV0dmFsICkKIHsKICAgICBXTkQgKiB3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggaHduZCApOwogICAgIERJQUxPR0lORk8gKiBkbGdJbmZvID0gKERJQUxPR0lORk8gKil3bmRQdHItPndFeHRyYTsKQEAgLTg3Myw0MCArODgyLDQxIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgSXNEaWFsb2dNZXNzYWdlICAgKFVTRVIuOTApCisgKiAgICAgICAgICAgRElBTE9HX0lzRGlhbG9nTWVzc2FnZQogICovCi1CT09MMTYgSXNEaWFsb2dNZXNzYWdlKCBIV05EMTYgaHduZERsZywgTFBNU0cxNiBtc2cgKQorc3RhdGljIEJPT0wzMiBESUFMT0dfSXNEaWFsb2dNZXNzYWdlKCBIV05EMzIgaHduZCwgSFdORDMyIGh3bmREbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQzMiBtZXNzYWdlLCBXUEFSQU0zMiB3UGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQQVJBTSBsUGFyYW0sIEJPT0wzMiAqdHJhbnNsYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MMzIgKmRpc3BhdGNoICkKIHsKLSAgICBXTkQgKiB3bmRQdHI7Ci0gICAgaW50IGRsZ0NvZGU7CisgICAgSU5UMzIgZGxnQ29kZTsKIAotICAgIGlmICghKHduZFB0ciA9IFdJTl9GaW5kV25kUHRyKCBod25kRGxnICkpKSByZXR1cm4gRkFMU0U7Ci0gICAgaWYgKChod25kRGxnICE9IG1zZy0+aHduZCkgJiYgIUlzQ2hpbGQxNiggaHduZERsZywgbXNnLT5od25kICkpIHJldHVybiBGQUxTRTsKKyAgICAqdHJhbnNsYXRlID0gKmRpc3BhdGNoID0gRkFMU0U7CiAKICAgICAgIC8qIE9ubHkgdGhlIGtleSBtZXNzYWdlcyBnZXQgc3BlY2lhbCBwcm9jZXNzaW5nICovCi0gICAgaWYgKChtc2ctPm1lc3NhZ2UgIT0gV01fS0VZRE9XTikgJiYKLSAgICAgICAgKG1zZy0+bWVzc2FnZSAhPSBXTV9TWVNDSEFSKSAmJgotCShtc2ctPm1lc3NhZ2UgIT0gV01fQ0hBUikpCisgICAgaWYgKChtZXNzYWdlICE9IFdNX0tFWURPV04pICYmCisgICAgICAgIChtZXNzYWdlICE9IFdNX1NZU0NIQVIpICYmCisJKG1lc3NhZ2UgIT0gV01fQ0hBUikpCiAgICAgICAgIHJldHVybiBGQUxTRTsKIAotICAgIGRsZ0NvZGUgPSBTZW5kTWVzc2FnZTE2KCBtc2ctPmh3bmQsIFdNX0dFVERMR0NPREUsIDAsIDAgKTsKKyAgICBkbGdDb2RlID0gU2VuZE1lc3NhZ2UzMkEoIGh3bmQsIFdNX0dFVERMR0NPREUsIDAsIDAgKTsKICAgICBpZiAoZGxnQ29kZSAmIERMR0NfV0FOVE1FU1NBR0UpCiAgICAgewotICAgICAgICBEaXNwYXRjaE1lc3NhZ2UoIG1zZyApOworICAgICAgICAqZGlzcGF0Y2ggPSBUUlVFOwogICAgICAgICByZXR1cm4gVFJVRTsKICAgICB9CiAKLSAgICBzd2l0Y2gobXNnLT5tZXNzYWdlKQorICAgIHN3aXRjaChtZXNzYWdlKQogICAgIHsKICAgICBjYXNlIFdNX0tFWURPV046CiAgICAgICAgIGlmIChkbGdDb2RlICYgRExHQ19XQU5UQUxMS0VZUykgYnJlYWs7Ci0gICAgICAgIHN3aXRjaChtc2ctPndQYXJhbSkKKyAgICAgICAgc3dpdGNoKHdQYXJhbSkKICAgICAgICAgewogICAgICAgICBjYXNlIFZLX1RBQjoKICAgICAgICAgICAgIGlmICghKGRsZ0NvZGUgJiBETEdDX1dBTlRUQUIpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNlbmRNZXNzYWdlMTYoIGh3bmREbGcsIFdNX05FWFRETEdDVEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHZXRLZXlTdGF0ZTMyKFZLX1NISUZUKSAmIDB4ODAwMCksIDAgKTsKKyAgICAgICAgICAgICAgICBTZW5kTWVzc2FnZTMyQSggaHduZERsZywgV01fTkVYVERMR0NUTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdldEtleVN0YXRlMzIoVktfU0hJRlQpICYgMHg4MDAwKSwgMCApOwogICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC05NDksOCArOTU5LDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCi0JZGVmYXVsdDogCi0JICAgIFRyYW5zbGF0ZU1lc3NhZ2UoIG1zZyApOworCWRlZmF1bHQ6CisgICAgICAgICAgICAqdHJhbnNsYXRlID0gVFJVRTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOyAgLyogY2FzZSBXTV9LRVlET1dOICovCiAKQEAgLTk2NCwxMyArOTc1LDcwIEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBtZXNzYWdlIGhhcyBub3QgYmVlbiB0cmVhdGVkIHNwZWNpYWxseSAqLwotICAgICAgLyogYW5kIGNhbiBiZSBzZW50IHRvIGl0cyBkZXN0aW5hdGlvbiB3aW5kb3cuICovCi0gICAgRGlzcGF0Y2hNZXNzYWdlKCBtc2cgKTsKKyAgICAvKiBJZiB3ZSBnZXQgaGVyZSwgdGhlIG1lc3NhZ2UgaGFzIG5vdCBiZWVuIHRyZWF0ZWQgc3BlY2lhbGx5ICovCisgICAgLyogYW5kIGNhbiBiZSBzZW50IHRvIGl0cyBkZXN0aW5hdGlvbiB3aW5kb3cuICovCisgICAgKmRpc3BhdGNoID0gVFJVRTsKICAgICByZXR1cm4gVFJVRTsKIH0KIAogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBJc0RpYWxvZ01lc3NhZ2UxNiAgIChVU0VSLjkwKQorICovCitCT09MMTYgSXNEaWFsb2dNZXNzYWdlMTYoIEhXTkQxNiBod25kRGxnLCBMUE1TRzE2IG1zZyApCit7CisgICAgQk9PTDMyIHJldCwgdHJhbnNsYXRlLCBkaXNwYXRjaDsKKworICAgIGlmICgoaHduZERsZyAhPSBtc2ctPmh3bmQpICYmICFJc0NoaWxkMTYoIGh3bmREbGcsIG1zZy0+aHduZCApKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICByZXQgPSBESUFMT0dfSXNEaWFsb2dNZXNzYWdlKCBtc2ctPmh3bmQsIGh3bmREbGcsIG1zZy0+bWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ctPndQYXJhbSwgbXNnLT5sUGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRyYW5zbGF0ZSwgJmRpc3BhdGNoICk7CisgICAgaWYgKHRyYW5zbGF0ZSkgVHJhbnNsYXRlTWVzc2FnZTE2KCBtc2cgKTsKKyAgICBpZiAoZGlzcGF0Y2gpIERpc3BhdGNoTWVzc2FnZTE2KCBtc2cgKTsKKyAgICByZXR1cm4gcmV0OworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIElzRGlhbG9nTWVzc2FnZTMyQSAgIChVU0VSMzIuMzQxKQorICovCitCT09MMzIgSXNEaWFsb2dNZXNzYWdlMzJBKCBIV05EMzIgaHduZERsZywgTFBNU0czMiBtc2cgKQoreworICAgIEJPT0wzMiByZXQsIHRyYW5zbGF0ZSwgZGlzcGF0Y2g7CisKKyAgICBpZiAoKGh3bmREbGcgIT0gbXNnLT5od25kKSAmJiAhSXNDaGlsZDMyKCBod25kRGxnLCBtc2ctPmh3bmQgKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcmV0ID0gRElBTE9HX0lzRGlhbG9nTWVzc2FnZSggbXNnLT5od25kLCBod25kRGxnLCBtc2ctPm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLT53UGFyYW0sIG1zZy0+bFBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFuc2xhdGUsICZkaXNwYXRjaCApOworICAgIGlmICh0cmFuc2xhdGUpIFRyYW5zbGF0ZU1lc3NhZ2UzMiggbXNnICk7CisgICAgaWYgKGRpc3BhdGNoKSBEaXNwYXRjaE1lc3NhZ2UzMkEoIG1zZyApOworICAgIHJldHVybiByZXQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgSXNEaWFsb2dNZXNzYWdlMzJXICAgKFVTRVIzMi4zNDIpCisgKi8KK0JPT0wzMiBJc0RpYWxvZ01lc3NhZ2UzMlcoIEhXTkQzMiBod25kRGxnLCBMUE1TRzMyIG1zZyApCit7CisgICAgQk9PTDMyIHJldCwgdHJhbnNsYXRlLCBkaXNwYXRjaDsKKworICAgIGlmICgoaHduZERsZyAhPSBtc2ctPmh3bmQpICYmICFJc0NoaWxkMzIoIGh3bmREbGcsIG1zZy0+aHduZCApKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICByZXQgPSBESUFMT0dfSXNEaWFsb2dNZXNzYWdlKCBtc2ctPmh3bmQsIGh3bmREbGcsIG1zZy0+bWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ctPndQYXJhbSwgbXNnLT5sUGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRyYW5zbGF0ZSwgJmRpc3BhdGNoICk7CisgICAgaWYgKHRyYW5zbGF0ZSkgVHJhbnNsYXRlTWVzc2FnZTMyKCBtc2cgKTsKKyAgICBpZiAoZGlzcGF0Y2gpIERpc3BhdGNoTWVzc2FnZTMyVyggbXNnICk7CisgICAgcmV0dXJuIHJldDsKK30KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICBHZXREbGdDdHJsSUQxNiAgIChVU0VSLjI3NykKICAqLwpkaWZmIC0tZ2l0IGEvd2luZG93cy9ldmVudC5jIGIvd2luZG93cy9ldmVudC5jCmluZGV4IGQ4ZTZkZmIuLjQ4MDBhZWQgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvZXZlbnQuYworKysgYi93aW5kb3dzL2V2ZW50LmMKQEAgLTYxLDYgKzYxLDcgQEAKIHN0YXRpYyBJTlQxNiAgY2FwdHVyZUhUID0gSFRDTElFTlQ7CiBzdGF0aWMgSFdORDMyIGNhcHR1cmVXbmQgPSAwOwogc3RhdGljIEJPT0wzMiBJbnB1dEVuYWJsZWQgPSBUUlVFOworc3RhdGljIEJPT0wzMiBTd2FwcGVkQnV0dG9ucyA9IEZBTFNFOwogCiBzdGF0aWMgQXRvbSB3bVByb3RvY29scyA9IE5vbmU7CiBzdGF0aWMgQXRvbSB3bURlbGV0ZVdpbmRvdyA9IE5vbmU7CkBAIC04NCwyMyArODUsMjMgQEAKIHN0YXRpYyB2b2lkIEVWRU5UX0J1dHRvblByZXNzKCBYQnV0dG9uRXZlbnQgKmV2ZW50ICk7CiBzdGF0aWMgdm9pZCBFVkVOVF9CdXR0b25SZWxlYXNlKCBYQnV0dG9uRXZlbnQgKmV2ZW50ICk7CiBzdGF0aWMgdm9pZCBFVkVOVF9Nb3Rpb25Ob3RpZnkoIFhNb3Rpb25FdmVudCAqZXZlbnQgKTsKLXN0YXRpYyB2b2lkIEVWRU5UX0ZvY3VzSW4oIEhXTkQgaHduZCwgWEZvY3VzQ2hhbmdlRXZlbnQgKmV2ZW50ICk7Ci1zdGF0aWMgdm9pZCBFVkVOVF9Gb2N1c091dCggSFdORCBod25kLCBYRm9jdXNDaGFuZ2VFdmVudCAqZXZlbnQgKTsKK3N0YXRpYyB2b2lkIEVWRU5UX0ZvY3VzSW4oIEhXTkQzMiBod25kLCBYRm9jdXNDaGFuZ2VFdmVudCAqZXZlbnQgKTsKK3N0YXRpYyB2b2lkIEVWRU5UX0ZvY3VzT3V0KCBIV05EMzIgaHduZCwgWEZvY3VzQ2hhbmdlRXZlbnQgKmV2ZW50ICk7CiBzdGF0aWMgdm9pZCBFVkVOVF9FeHBvc2UoIFdORCAqcFduZCwgWEV4cG9zZUV2ZW50ICpldmVudCApOwogc3RhdGljIHZvaWQgRVZFTlRfR3JhcGhpY3NFeHBvc2UoIFdORCAqcFduZCwgWEdyYXBoaWNzRXhwb3NlRXZlbnQgKmV2ZW50ICk7Ci1zdGF0aWMgdm9pZCBFVkVOVF9Db25maWd1cmVOb3RpZnkoIEhXTkQgaHduZCwgWENvbmZpZ3VyZUV2ZW50ICpldmVudCApOworc3RhdGljIHZvaWQgRVZFTlRfQ29uZmlndXJlTm90aWZ5KCBIV05EMzIgaHduZCwgWENvbmZpZ3VyZUV2ZW50ICpldmVudCApOwogc3RhdGljIHZvaWQgRVZFTlRfU2VsZWN0aW9uUmVxdWVzdCggV05EICpwV25kLCBYU2VsZWN0aW9uUmVxdWVzdEV2ZW50ICpldmVudCk7CiBzdGF0aWMgdm9pZCBFVkVOVF9TZWxlY3Rpb25Ob3RpZnkoIFhTZWxlY3Rpb25FdmVudCAqZXZlbnQpOwogc3RhdGljIHZvaWQgRVZFTlRfU2VsZWN0aW9uQ2xlYXIoIFdORCAqcFduZCwgWFNlbGVjdGlvbkNsZWFyRXZlbnQgKmV2ZW50KTsKIHN0YXRpYyB2b2lkIEVWRU5UX0NsaWVudE1lc3NhZ2UoIFdORCAqcFduZCwgWENsaWVudE1lc3NhZ2VFdmVudCAqZXZlbnQgKTsKLXN0YXRpYyB2b2lkIEVWRU5UX01hcE5vdGlmeSggSFdORCBod25kLCBYTWFwRXZlbnQgKmV2ZW50ICk7CitzdGF0aWMgdm9pZCBFVkVOVF9NYXBOb3RpZnkoIEhXTkQzMiBod25kLCBYTWFwRXZlbnQgKmV2ZW50ICk7CiAKIC8qIFVzYWJsZSBvbmx5IHdpdGggT0xWV00gLSBjb21waWxlIG9wdGlvbiBwZXJoYXBzPwogc3RhdGljIHZvaWQgRVZFTlRfRW50ZXJOb3RpZnkoIFdORCAqcFduZCwgWENyb3NzaW5nRXZlbnQgKmV2ZW50ICk7CiAqLwogCiBleHRlcm4gdm9pZCBGT0NVU19TZXRYRm9jdXMoIEhXTkQzMiApOwotZXh0ZXJuIEJPT0wxNiBEUkFHX1F1ZXJ5VXBkYXRlKCBIV05ELCBTRUdQVFIsIEJPT0wzMiApOworZXh0ZXJuIEJPT0wxNiBEUkFHX1F1ZXJ5VXBkYXRlKCBIV05EMTYsIFNFR1BUUiwgQk9PTDMyICk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIEVWRU5UX1Byb2Nlc3NFdmVudApAQCAtMzMzLDcgKzMzNCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopJnBXbmQgKSB8fCAoZXZlbnQudHlwZSA9PSBOb0V4cG9zZSkpCiAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0JICAvKiBjaGVjayBmb3IgdGhlICJzYWZlIiBoYXJkd2FyZSBldmVudHMgKi8KKwkgIC8qIENoZWNrIG9ubHkgZm9yIHRob3NlIGV2ZW50cyB3aGljaCBjYW4gYmUgcHJvY2Vzc2VkCisJICAgKiBpbnRlcm5hbGx5LiAqLwogCiAJICBpZiggZXZlbnQudHlwZSA9PSBNb3Rpb25Ob3RpZnkgfHwKIAkgICAgICBldmVudC50eXBlID09IEJ1dHRvblByZXNzIHx8IGV2ZW50LnR5cGUgPT0gQnV0dG9uUmVsZWFzZSB8fApAQCAtNDkxLDYgKzQ5Myw3IEBACiAgICAgaW50IGJ1dHRvbk51bSA9IGV2ZW50LT5idXR0b24gLSAxOwogCiAgICAgaWYgKGJ1dHRvbk51bSA+PSBOQl9CVVRUT05TKSByZXR1cm47CisgICAgaWYgKFN3YXBwZWRCdXR0b25zKSBidXR0b25OdW0gPSBOQl9CVVRUT05TIC0gMSAtIGJ1dHRvbk51bTsKICAgICBNb3VzZUJ1dHRvbnNTdGF0ZXNbYnV0dG9uTnVtXSA9IDB4ODAwMDsKICAgICBBc3luY01vdXNlQnV0dG9uc1N0YXRlc1tidXR0b25OdW1dID0gMHg4MDAwOwogICAgIGhhcmR3YXJlX2V2ZW50KCBtZXNzYWdlc1tidXR0b25OdW1dLApAQCAtNTEwLDYgKzUxMyw3IEBACiAgICAgaW50IGJ1dHRvbk51bSA9IGV2ZW50LT5idXR0b24gLSAxOwogCiAgICAgaWYgKGJ1dHRvbk51bSA+PSBOQl9CVVRUT05TKSByZXR1cm47ICAgIAorICAgIGlmIChTd2FwcGVkQnV0dG9ucykgYnV0dG9uTnVtID0gTkJfQlVUVE9OUyAtIDEgLSBidXR0b25OdW07CiAgICAgTW91c2VCdXR0b25zU3RhdGVzW2J1dHRvbk51bV0gPSBGQUxTRTsKICAgICBoYXJkd2FyZV9ldmVudCggbWVzc2FnZXNbYnV0dG9uTnVtXSwKIAkJICAgIEVWRU5UX1hTdGF0ZVRvS2V5U3RhdGUoIGV2ZW50LT5zdGF0ZSApLCAwTCwKQEAgLTUyMSw3ICs1MjUsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICBFVkVOVF9Gb2N1c0luCiAgKi8KLXN0YXRpYyB2b2lkIEVWRU5UX0ZvY3VzSW4gKEhXTkQgaHduZCwgWEZvY3VzQ2hhbmdlRXZlbnQgKmV2ZW50ICkKK3N0YXRpYyB2b2lkIEVWRU5UX0ZvY3VzSW4oIEhXTkQzMiBod25kLCBYRm9jdXNDaGFuZ2VFdmVudCAqZXZlbnQgKQogewogICAgIGlmIChldmVudC0+ZGV0YWlsID09IE5vdGlmeVBvaW50ZXIpIHJldHVybjsKICAgICBpZiAoaHduZCAhPSBHZXRBY3RpdmVXaW5kb3czMigpKSBXSU5QT1NfQ2hhbmdlQWN0aXZlV2luZG93KCBod25kLCBGQUxTRSApOwpAQCAtNTM1LDcgKzUzOSw3IEBACiAgKgogICogTm90ZTogb25seSB0b3AtbGV2ZWwgb3ZlcnJpZGUtcmVkaXJlY3Qgd2luZG93cyBnZXQgRm9jdXNPdXQgZXZlbnRzLgogICovCi1zdGF0aWMgdm9pZCBFVkVOVF9Gb2N1c091dCggSFdORCBod25kLCBYRm9jdXNDaGFuZ2VFdmVudCAqZXZlbnQgKQorc3RhdGljIHZvaWQgRVZFTlRfRm9jdXNPdXQoIEhXTkQzMiBod25kLCBYRm9jdXNDaGFuZ2VFdmVudCAqZXZlbnQgKQogewogICAgIGlmIChldmVudC0+ZGV0YWlsID09IE5vdGlmeVBvaW50ZXIpIHJldHVybjsKICAgICBpZiAoaHduZCA9PSBHZXRBY3RpdmVXaW5kb3czMigpKSBXSU5QT1NfQ2hhbmdlQWN0aXZlV2luZG93KCAwLCBGQUxTRSApOwpAQCAtNTQzLDYgKzU0NywyMSBAQAogICAgICAgICBTZXRGb2N1czMyKCAwICk7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgRVZFTlRfQ2hlY2tGb2N1cworICovCitCT09MMzIgRVZFTlRfQ2hlY2tGb2N1cyh2b2lkKQoreworICAgIFdORCogICBwV25kOworICAgIFdpbmRvdyB4VzsKKyAgICBpbnQJICAgc3RhdGU7CisKKyAgICBYR2V0SW5wdXRGb2N1cyhkaXNwbGF5LCAmeFcsICZzdGF0ZSk7CisgICAgaWYoIHhXID09IE5vbmUgfHwKKyAgICAgICAgWEZpbmRDb250ZXh0KGRpc3BsYXksIHhXLCB3aW5Db250ZXh0LCAoY2hhciAqKikmcFduZCkgKSAKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIHJldHVybiBUUlVFOworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgIEVWRU5UX0NvbmZpZ3VyZU5vdGlmeQpAQCAtNTUwLDcgKzU2OSw3IEBACiAgKiBUaGUgQ29uZmlndXJlTm90aWZ5IGV2ZW50IGlzIG9ubHkgc2VsZWN0ZWQgb24gdGhlIGRlc2t0b3Agd2luZG93CiAgKiBhbmQgb24gdG9wLWxldmVsIHdpbmRvd3Mgd2hlbiB0aGUgLW1hbmFnZWQgZmxhZyBpcyB1c2VkLgogICovCi1zdGF0aWMgdm9pZCBFVkVOVF9Db25maWd1cmVOb3RpZnkoIEhXTkQgaHduZCwgWENvbmZpZ3VyZUV2ZW50ICpldmVudCApCitzdGF0aWMgdm9pZCBFVkVOVF9Db25maWd1cmVOb3RpZnkoIEhXTkQzMiBod25kLCBYQ29uZmlndXJlRXZlbnQgKmV2ZW50ICkKIHsKICAgICAvKiBGSVhNRTogd2l0aCAtZGVza3RvcCB4eHggd2UgZ2V0IHRoaXMgZXZlbnQgX2JlZm9yZV8gZGVza3RvcCAKICAgICAgKiB3aW5kb3cgc3RydWN0dXJlIGlzIGNyZWF0ZWQuIFdJTl9HZXREZXNrdG9wKCkgY2hlY2sgaXMgYSBoYWNrLgpAQCAtNTc0LDEwICs1OTMsNiBAQAogCQogICAgICAgICBpZiAoISh3aW5wb3MgPSBTRUdQVFJfTkVXKFdJTkRPV1BPUzE2KSkpIHJldHVybjsKIAotLyoJWFRyYW5zbGF0ZUNvb3JkaW5hdGVzKGRpc3BsYXksIGV2ZW50LT53aW5kb3csIHJvb3RXaW5kb3csCi0JICAgIGV2ZW50LT54LCBldmVudC0+eSwgJmV2ZW50LT54LCAmZXZlbnQtPnksICZjaGlsZCk7Ci0gICAgICAgICAgICAqLwotCiAJLyogRmlsbCBXSU5ET1dQT1Mgc3RydWN0ICovCiAJd2lucG9zLT5mbGFncyA9IFNXUF9OT0FDVElWQVRFIHwgU1dQX05PWk9SREVSOwogCXdpbnBvcy0+aHduZCA9IGh3bmQ7CkBAIC02NTIsOCArNjY3LDggQEAKIAl7CiAgICAgICAgICAgICAvKiBvcGVuIHRvIG1ha2Ugc3VyZSB0aGF0IGNsaXBib2FyZCBpcyBhdmFpbGFibGUgKi8KIAotCSAgICBCT09MIAljb3VsZE9wZW4gPSBPcGVuQ2xpcGJvYXJkKCBwV25kLT5od25kU2VsZiApOwotCSAgICBjaGFyKglscHN0ciA9IDA7CisJICAgIEJPT0wzMiBjb3VsZE9wZW4gPSBPcGVuQ2xpcGJvYXJkMzIoIHBXbmQtPmh3bmRTZWxmICk7CisJICAgIGNoYXIqIGxwc3RyID0gMDsKIAogCSAgICBoVGV4dCA9IEdldENsaXBib2FyZERhdGEoQ0ZfVEVYVCk7CiAJICAgIHRleHQgPSBHbG9iYWxMb2NrMTYoaFRleHQpOwpAQCAtNjc3LDcgKzY5Miw3IEBACiAKIAkgICAgLyogY2xvc2Ugb25seSBpZiB3ZSBvcGVuZWQgYmVmb3JlICovCiAKLQkgICAgaWYoY291bGRPcGVuKSBDbG9zZUNsaXBib2FyZCgpOworCSAgICBpZihjb3VsZE9wZW4pIENsb3NlQ2xpcGJvYXJkMzIoKTsKIAl9CiAgICAgfQogCkBAIC04NTgsNyArODczLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJRVZFTlRfTWFwTm90aWZ5CiAgKi8KLXZvaWQgRVZFTlRfTWFwTm90aWZ5KCBIV05EIGhXbmQsIFhNYXBFdmVudCAqZXZlbnQgKQordm9pZCBFVkVOVF9NYXBOb3RpZnkoIEhXTkQzMiBoV25kLCBYTWFwRXZlbnQgKmV2ZW50ICkKIHsKICAgICBIV05EMzIgaHduZEZvY3VzID0gR2V0Rm9jdXMzMigpOwogCkBAIC04NzcsMjcgKzg5MiwzNiBAQAogSFdORDMyIEVWRU5UX0NhcHR1cmUoSFdORDMyIGh3bmQsIElOVDE2IGh0KQogewogICAgIFdpbmRvdyB3aW47Ci0gICAgSFdORDMyIG9sZF9jYXB0dXJlX3duZCA9IGNhcHR1cmVXbmQ7CisgICAgSFdORDMyIGNhcHR1cmVQcmV2ID0gY2FwdHVyZVduZDsKIAogICAgIGlmICghaHduZCkKICAgICB7Ci0gICAgICAgIFJlbGVhc2VDYXB0dXJlKCk7Ci0gICAgICAgIHJldHVybiBvbGRfY2FwdHVyZV93bmQ7CisgICAgICAgIFhVbmdyYWJQb2ludGVyKGRpc3BsYXksIEN1cnJlbnRUaW1lICk7CisgICAgICAgIGNhcHR1cmVXbmQgPSBOVUxMOyBjYXB0dXJlSFQgPSAwOyAKICAgICB9Ci0gICAgaWYgKCh3aW4gPSBXSU5fR2V0WFdpbmRvdyggaHduZCApKSkKKyAgICBlbHNlIGlmICgod2luID0gV0lOX0dldFhXaW5kb3coIGh3bmQgKSkpCiAgICAgewotICAgICAgICBpZiAoWEdyYWJQb2ludGVyKGRpc3BsYXksIHdpbiwgRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICBCdXR0b25QcmVzc01hc2sgfCBCdXR0b25SZWxlYXNlTWFzayB8IFBvaW50ZXJNb3Rpb25NYXNrLAotICAgICAgICAgICAgICAgICAgICAgR3JhYk1vZGVBc3luYywgR3JhYk1vZGVBc3luYywKLSAgICAgICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsIEN1cnJlbnRUaW1lICkgPT0gR3JhYlN1Y2Nlc3MpCisJV05EKiB3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggaHduZCApOworCisgICAgICAgIGlmICggd25kUHRyICYmIAorCSAgICAgKFhHcmFiUG9pbnRlcihkaXNwbGF5LCB3aW4sIEZhbHNlLCAKKwkJCSAgIEJ1dHRvblByZXNzTWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrIHwgUG9pbnRlck1vdGlvbk1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFiTW9kZUFzeW5jLCBHcmFiTW9kZUFzeW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgQ3VycmVudFRpbWUgKSA9PSBHcmFiU3VjY2VzcykgKQogCXsKLSAgICAgICAgICAgIGRwcmludGZfd2luKHN0ZGRlYiwgIlNldENhcHR1cmU6ICUwNHhcbiIsIGh3bmQpOworICAgICAgICAgICAgZHByaW50Zl93aW4oc3RkZGViLCAiU2V0Q2FwdHVyZSgweCUwNHgpXG4iLCBod25kICk7CiAgICAgICAgICAgICBjYXB0dXJlV25kICAgPSBod25kOwogCSAgICBjYXB0dXJlSFQgICAgPSBodDsKLSAgICAgICAgICAgIHJldHVybiBvbGRfY2FwdHVyZV93bmQ7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIDA7CisKKyAgICBpZiggY2FwdHVyZVByZXYgJiYgY2FwdHVyZVByZXYgIT0gY2FwdHVyZVduZCApCisgICAgeworCVdORCogd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGNhcHR1cmVQcmV2ICk7CisgICAgICAgIGlmKCB3bmRQdHIgJiYgKHduZFB0ci0+ZmxhZ3MgJiBXSU5fSVNXSU4zMikgKQorICAgICAgICAgICAgU2VuZE1lc3NhZ2UzMkEoIGNhcHR1cmVQcmV2LCBXTV9DQVBUVVJFQ0hBTkdFRCwgMEwsIGh3bmQpOworICAgIH0KKyAgICByZXR1cm4gY2FwdHVyZVByZXY7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC05MzEsMTAgKzk1NSw4IEBACiAgKi8KIHZvaWQgUmVsZWFzZUNhcHR1cmUodm9pZCkKIHsKLSAgICBpZiAoY2FwdHVyZVduZCA9PSAwKSByZXR1cm47Ci0gICAgWFVuZ3JhYlBvaW50ZXIoIGRpc3BsYXksIEN1cnJlbnRUaW1lICk7Ci0gICAgY2FwdHVyZVduZCA9IDA7Ci0gICAgZHByaW50Zl93aW4oc3RkZGViLCAiUmVsZWFzZUNhcHR1cmVcbiIpOworICAgIGRwcmludGZfd2luKHN0ZGRlYiwgIlJlbGVhc2VDYXB0dXJlKCkgWyUwNHhdXG4iLCBjYXB0dXJlV25kICk7CisgICAgaWYoIGNhcHR1cmVXbmQgKSBFVkVOVF9DYXB0dXJlKCAwLCAwICk7CiB9CiAKIApAQCAtOTQzLDcgKzk2NSw3IEBACiAgKi8KIEhXTkQxNiBHZXRDYXB0dXJlMTYodm9pZCkKIHsKLSAgICByZXR1cm4gKEhXTkQxNiljYXB0dXJlV25kOworICAgIHJldHVybiBjYXB0dXJlV25kOwogfQogCiAKQEAgLTEwMTgsMyArMTA0MCwyNCBAQAogICByZXR1cm4gYk9sZFN0YXRlOwogfQogCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJICAgICBTd2FwTW91c2VCdXR0b24xNiAgIChVU0VSLjE4NikKKyAqLworQk9PTDE2IFN3YXBNb3VzZUJ1dHRvbjE2KCBCT09MMTYgZlN3YXAgKQoreworICAgIEJPT0wxNiByZXQgPSBTd2FwcGVkQnV0dG9uczsKKyAgICBTd2FwcGVkQnV0dG9ucyA9IGZTd2FwOworICAgIHJldHVybiByZXQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkgICAgIFN3YXBNb3VzZUJ1dHRvbjMyICAgKFVTRVIzMi41MzYpCisgKi8KK0JPT0wzMiBTd2FwTW91c2VCdXR0b24zMiggQk9PTDMyIGZTd2FwICkKK3sKKyAgICBCT09MMzIgcmV0ID0gU3dhcHBlZEJ1dHRvbnM7CisgICAgU3dhcHBlZEJ1dHRvbnMgPSBmU3dhcDsKKyAgICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvd2luZG93cy9mb2N1cy5jIGIvd2luZG93cy9mb2N1cy5jCmluZGV4IGY0MGM1ZGIuLjA2NDY3YTYgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvZm9jdXMuYworKysgYi93aW5kb3dzL2ZvY3VzLmMKQEAgLTYwLDExICs2MCwyMSBAQAogewogICAgIGh3bmRGb2N1cyA9IGhGb2N1c1RvOwogCisjaWYgMAogICAgIGlmIChoRm9jdXNGcm9tKSBTZW5kTWVzc2FnZTMyQSggaEZvY3VzRnJvbSwgV01fS0lMTEZPQ1VTLCBoRm9jdXNUbywgMCApOworI2Vsc2UKKyAgICAvKiBGSVhNRTogbXVzdCBiZSBTZW5kTWVzc2FnZTE2KCkgYmVjYXVzZSAzMkEgZG9lc24ndCBkbworICAgICAqIGludGVydGFzayBhdCB0aGlzIHRpbWUgKi8KKyAgICBpZiAoaEZvY3VzRnJvbSkgU2VuZE1lc3NhZ2UxNiggaEZvY3VzRnJvbSwgV01fS0lMTEZPQ1VTLCBoRm9jdXNUbywgMCApOworI2VuZGlmCiAgICAgaWYoICFoRm9jdXNUbyB8fCBoRm9jdXNUbyAhPSBod25kRm9jdXMgKQogCXJldHVybjsKIAorI2lmIDAKICAgICBTZW5kTWVzc2FnZTMyQSggaEZvY3VzVG8sIFdNX1NFVEZPQ1VTLCBoRm9jdXNGcm9tLCAwICk7CisjZWxzZQorICAgIFNlbmRNZXNzYWdlMTYoIGhGb2N1c1RvLCBXTV9TRVRGT0NVUywgaEZvY3VzRnJvbSwgMCApOworI2VuZGlmCiAgICAgRk9DVVNfU2V0WEZvY3VzKCBoRm9jdXNUbyApOwogfQogCmRpZmYgLS1naXQgYS93aW5kb3dzL2hvb2suYyBiL3dpbmRvd3MvaG9vay5jCmluZGV4IDFhOWI3OTMuLjU5ZmZkMjAgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvaG9vay5jCisrKyBiL3dpbmRvd3MvaG9vay5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAidXNlci5oIgogI2luY2x1ZGUgImhlYXAuaCIKICNpbmNsdWRlICJzdHJ1Y3QzMi5oIgorI2luY2x1ZGUgIndpbnByb2MuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKQEAgLTM1LDggKzM2LDcgQEAKICAgICBJTlQxNiAgICAgIGlkOyAgICAgICAgICAgICAgICAgLyogMDYgSG9vayBpZCAoV0hfeHh4KSAqLwogICAgIEhRVUVVRTE2ICAgb3duZXJRdWV1ZTsgICAgICAgICAvKiAwOCBPd25lciBxdWV1ZSAoMCBmb3Igc3lzdGVtIGhvb2spICovCiAgICAgSE1PRFVMRTE2ICBvd25lck1vZHVsZTsgICAgICAgIC8qIDBhIE93bmVyIG1vZHVsZSAqLwotICAgIFdPUkQgICAgICAgaW5Ib29rUHJvYzsgICAgICAgICAvKiAwYyBUUlVFIGlmIGluIHRoaXMtPnByb2MgKi8KLSAgICBJTlQzMiAgICAgIGZsYWdzOworICAgIFdPUkQgICAgICAgZmxhZ3M7ICAgICAgICAgICAgICAvKiAwYyBmbGFncyAqLwogfSBIT09LREFUQTsKIAogI3ByYWdtYSBwYWNrKDQpCkBAIC01MCwzMyArNTAsMjkgQEAKIHR5cGVkZWYgVk9JRCAoKkhPT0tfVW5NYXBGdW5jKShJTlQzMiwgSU5UMzIsIFdQQVJBTTMyLCBMUEFSQU0sIFdQQVJBTTMyLAogCQkJICAgICAgIExQQVJBTSk7CiAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgSG9vayBNYXBwaW5nIEZ1bmN0aW9ucwotICovCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgSE9PS19NYXAxNlRvMzJDb21tb24KICAqLwogc3RhdGljIHZvaWQgSE9PS19NYXAxNlRvMzJDb21tb24oSU5UMzIgaWQsIElOVDMyIGNvZGUsIFdQQVJBTTMyICpwd1BhcmFtLAotCQkJCSBMUEFSQU0gKnBsUGFyYW0pCisJCQkJIExQQVJBTSAqcGxQYXJhbSwgQk9PTDMyIGJBICkKIHsKLSAgICBzd2l0Y2ggKGlkKQotICAgIHsKLSAgICBjYXNlIFdIX01TR0ZJTFRFUjoKLSAgICBjYXNlIFdIX1NZU01TR0ZJTFRFUjoKLSAgICBjYXNlIFdIX0dFVE1FU1NBR0U6Ci0gICAgY2FzZSBXSF9KT1VSTkFMUkVDT1JEOgorCisgICBzd2l0Y2goIGlkICkKKyAgIHsKKwljYXNlIFdIX01TR0ZJTFRFUjoKKwljYXNlIFdIX1NZU01TR0ZJTFRFUjogCisJY2FzZSBXSF9HRVRNRVNTQUdFOiAKKwljYXNlIFdIX0pPVVJOQUxSRUNPUkQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIExQTVNHMTYgbHBtc2cxNiA9IFBUUl9TRUdfVE9fTElOKCpwbFBhcmFtKTsKICAgICAgICAgICAgIExQTVNHMzIgbHBtc2czMiA9IEhlYXBBbGxvYyggU3lzdGVtSGVhcCwgMCwgc2l6ZW9mKCpscG1zZzMyKSApOwogCQogICAgICAgICAgICAgU1RSVUNUMzJfTVNHMTZ0bzMyKCBscG1zZzE2LCBscG1zZzMyICk7CiAgICAgICAgICAgICAqcGxQYXJhbSA9IChMUEFSQU0pbHBtc2czMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgY2FzZSBXSF9KT1VSTkFMUExBWUJBQ0s6CisJICAgIGJyZWFrOworICAgICAgICB9IAorCisJY2FzZSBXSF9KT1VSTkFMUExBWUJBQ0s6CiAgICAgICAgIHsKICAgICAgICAgICAgIExQRVZFTlRNU0cxNiBscGVtMTYgPSBQVFJfU0VHX1RPX0xJTigqcGxQYXJhbSk7CiAgICAgICAgICAgICBMUEVWRU5UTVNHMzIgbHBlbTMyID0gSGVhcEFsbG9jKCBTeXN0ZW1IZWFwLCAwLCBzaXplb2YoKmxwZW0zMikgKTsKQEAgLTg4LDEyICs4NCw2MSBAQAogICAgICAgICAgICAgbHBlbTMyLT5od25kID0gMDsJLyogRklYTUUgKi8KIAogICAgICAgICAgICAgKnBsUGFyYW0gPSAoTFBBUkFNKWxwZW0zMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgY2FzZSBXSF9DQlQ6Ci0Jc3dpdGNoIChjb2RlKQorCSAgICBicmVhazsKKyAgICAgICAgfSAKKworCWNhc2UgV0hfQ0FMTFdORFBST0M6CiAJewotICAgICAgICBjYXNlIEhDQlRfQUNUSVZBVEU6CisJICAgIElOVDMyCSgqbG9jYWxNYXApKFVJTlQxNiwgV1BBUkFNMTYsIFVJTlQzMiosIFdQQVJBTTMyKiwgTFBBUkFNKikKKwkJCSAgPSAoYkEpID8gV0lOUFJPQ19NYXBNc2cxNlRvMzJBIDogV0lOUFJPQ19NYXBNc2cxNlRvMzJXOworCSAgICBMUENXUFNUUlVDVDE2ICAgbHBjd3AxNiA9IFBUUl9TRUdfVE9fTElOKCpwbFBhcmFtKTsKKwkgICAgTFBDV1BTVFJVQ1QzMiAgIGxwY3dwMzIgPSBIZWFwQWxsb2MoIFN5c3RlbUhlYXAsIDAsIHNpemVvZigqbHBjd3AzMikgKTsKKwkgICAgCisJICAgIGxwY3dwMzItPmh3bmQgPSBscGN3cDE2LT5od25kOworCSAgICBscGN3cDMyLT5sUGFyYW0gPSBscGN3cDE2LT5sUGFyYW07CisJICAgIAorCSAgICAoKmxvY2FsTWFwKShscGN3cDE2LT5tZXNzYWdlLCBscGN3cDE2LT53UGFyYW0sIAorCQkgICAgICAgJmxwY3dwMzItPm1lc3NhZ2UsICZscGN3cDMyLT53UGFyYW0sICZscGN3cDMyLT5sUGFyYW0gKTsKKwkgICAgYnJlYWs7CisJfQorCisJY2FzZSBXSF9DQlQ6CisJICBzd2l0Y2ggKGNvZGUpCisJICB7CisJICAgIGNhc2UgSENCVF9DUkVBVEVXTkQ6CisJICAgIHsKKwkJTFBDQlRfQ1JFQVRFV05EMTYgIGxwY2J0Y3cxNiA9IFBUUl9TRUdfVE9fTElOKCpwbFBhcmFtKTsKKwkJTFBDUkVBVEVTVFJVQ1QxNiAgIGxwY3MxNiA9IFBUUl9TRUdfVE9fTElOKGxwY2J0Y3cxNi0+bHBjcyk7CisJCUxQQ0JUX0NSRUFURVdORDMyQSBscGNidGN3MzIgPSBIZWFwQWxsb2MoIFN5c3RlbUhlYXAsIDAsCisJCQkJCQkJICBzaXplb2YoKmxwY2J0Y3czMikgKTsKKwkJbHBjYnRjdzMyLT5scGNzID0gSGVhcEFsbG9jKCBTeXN0ZW1IZWFwLCAwLAorCQkJCQkgICAgIHNpemVvZigqbHBjYnRjdzMyLT5scGNzKSApOworCisJCVNUUlVDVDMyX0NSRUFURVNUUlVDVDE2dG8zMkEoIGxwY3MxNiwKKwkJCQkJICAgICAoTFBDUkVBVEVTVFJVQ1QzMkEpbHBjYnRjdzMyLT5scGNzICk7CisKKwkJaWYgKEhJV09SRChscGNzMTYtPmxwc3pOYW1lKSkKKwkJICAgIGxwY2J0Y3czMi0+bHBjcy0+bHBzek5hbWUgPSAKKwkJCShiQSkgPyBQVFJfU0VHX1RPX0xJTihscGNzMTYtPmxwc3pOYW1lKQorCQkJICAgICA6IEhFQVBfc3RyZHVwQXRvVyggU3lzdGVtSGVhcCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBUUl9TRUdfVE9fTElOKGxwY3MxNi0+bHBzek5hbWUpICk7CisJCWVsc2UKKwkJICAgIGxwY2J0Y3czMi0+bHBjcy0+bHBzek5hbWUgPSAoTFBDU1RSKWxwY3MxNi0+bHBzek5hbWU7CisKKwkJaWYgKEhJV09SRChscGNzMTYtPmxwc3pDbGFzcykpCisJCSAgICBscGNidGN3MzItPmxwY3MtPmxwc3pDbGFzcyA9CisJCQkoYkEpID8gUFRSX1NFR19UT19MSU4obHBjczE2LT5scHN6Q2xhc3MpCisJCQkgICAgIDogSEVBUF9zdHJkdXBBdG9XKCBTeXN0ZW1IZWFwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFRSX1NFR19UT19MSU4obHBjczE2LT5scHN6Q2xhc3MpICk7CisJCWVsc2UKKwkJICAgIGxwY2J0Y3czMi0+bHBjcy0+bHBzekNsYXNzID0gKExQQ1NUUilscGNzMTYtPmxwc3pDbGFzczsKKworCQlscGNidGN3MzItPmh3bmRJbnNlcnRBZnRlciA9IGxwY2J0Y3cxNi0+aHduZEluc2VydEFmdGVyOworCisJCSpwbFBhcmFtID0gKExQQVJBTSlscGNidGN3MzI7CisJCWJyZWFrOworCSAgICB9IAorCSAgICBjYXNlIEhDQlRfQUNUSVZBVEU6CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgTFBDQlRBQ1RJVkFURVNUUlVDVDE2IGxwY2FzMTYgPSBQVFJfU0VHX1RPX0xJTigqcGxQYXJhbSk7CiAgICAgICAgICAgICAgICAgTFBDQlRBQ1RJVkFURVNUUlVDVDMyIGxwY2FzMzIgPSBIZWFwQWxsb2MoIFN5c3RlbUhlYXAsIDAsCkBAIC0xMDMsNyArMTQ4LDcgQEAKICAgICAgICAgICAgICAgICAqcGxQYXJhbSA9IChMUEFSQU0pbHBjYXMzMjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSBIQ0JUX0NMSUNLU0tJUFBFRDoKKyAgICAgICAgICAgIGNhc2UgSENCVF9DTElDS1NLSVBQRUQ6CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgTFBNT1VTRUhPT0tTVFJVQ1QxNiBscG1zMTYgPSBQVFJfU0VHX1RPX0xJTigqcGxQYXJhbSk7CiAgICAgICAgICAgICAgICAgTFBNT1VTRUhPT0tTVFJVQ1QzMiBscG1zMzIgPSBIZWFwQWxsb2MoIFN5c3RlbUhlYXAsIDAsCkBAIC0xMjAsNyArMTY1LDcgQEAKICAgICAgICAgICAgICAgICAqcGxQYXJhbSA9IChMUEFSQU0pbHBtczMyOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICBjYXNlIEhDQlRfTU9WRVNJWkU6CisgICAgICAgICAgICBjYXNlIEhDQlRfTU9WRVNJWkU6CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgTFBSRUNUMTYgbHByZWN0MTYgPSBQVFJfU0VHX1RPX0xJTigqcGxQYXJhbSk7CiAgICAgICAgICAgICAgICAgTFBSRUNUMzIgbHByZWN0MzIgPSBIZWFwQWxsb2MoIFN5c3RlbUhlYXAsIDAsCkBAIC0xMzAsOSArMTc1LDEwIEBACiAgICAgICAgICAgICAgICAgKnBsUGFyYW0gPSAoTFBBUkFNKWxwcmVjdDMyOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCX0KLQlicmVhazsKLSAgICBjYXNlIFdIX01PVVNFOgorCSAgICBicmVhazsKKwkgIH0gCisKKwljYXNlIFdIX01PVVNFOgogICAgICAgICB7CiAgICAgICAgICAgICBMUE1PVVNFSE9PS1NUUlVDVDE2IGxwbXMxNiA9IFBUUl9TRUdfVE9fTElOKCpwbFBhcmFtKTsKICAgICAgICAgICAgIExQTU9VU0VIT09LU1RSVUNUMzIgbHBtczMyID0gSGVhcEFsbG9jKCBTeXN0ZW1IZWFwLCAwLApAQCAtMTQ2LDkgKzE5MiwxMCBAQAogICAgICAgICAgICAgbHBtczMyLT5kd0V4dHJhSW5mbyA9IGxwbXMxNi0+ZHdFeHRyYUluZm87CiAgICAgICAgICAgICBscG1zMzItPmh3bmQgPSBscG1zMTYtPmh3bmQ7CiAgICAgICAgICAgICAqcGxQYXJhbSA9IChMUEFSQU0pbHBtczMyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICBjYXNlIFdIX0RFQlVHOgorCSAgICBicmVhazsKKyAgICAgICAgfSAKKworCWNhc2UgV0hfREVCVUc6CiAgICAgICAgIHsKICAgICAgICAgICAgIExQREVCVUdIT09LSU5GTzE2IGxwZGgxNiA9IFBUUl9TRUdfVE9fTElOKCpwbFBhcmFtKTsKICAgICAgICAgICAgIExQREVCVUdIT09LSU5GTzMyIGxwZGgzMiA9IEhlYXBBbGxvYyggU3lzdGVtSGVhcCwgMCwKQEAgLTE2NCwxOSArMjExLDE3IEBACiAgICAgICAgICAgICBpZiAoKnB3UGFyYW0gPT0gMHhmZmZmKSAqcHdQYXJhbSA9IFdIX01TR0ZJTFRFUjsKIAogICAgICAgICAgICAgKnBsUGFyYW0gPSAoTFBBUkFNKWxwZGgzMjsKLSAgICAgICAgICAgIGJyZWFrOworCSAgICBicmVhazsKICAgICAgICAgfQotICAgIGNhc2UgV0hfU0hFTEw6Ci0gICAgY2FzZSBXSF9LRVlCT0FSRDoKLQlicmVhazsKIAotICAgIGNhc2UgV0hfQ0FMTFdORFBST0M6Ci0gICAgY2FzZSBXSF9IQVJEV0FSRToKLQlicmVhazsJLyogTllJICovCisJY2FzZSBXSF9TSEVMTDoKKwljYXNlIFdIX0tFWUJPQVJEOgorCSAgICBicmVhazsKIAotICAgIGRlZmF1bHQ6Ci0JZnByaW50ZihzdGRlcnIsICJVbmtub3duIGhvb2sgaWQ6ICVkXG4iLCBpZCk7Ci0JcmV0dXJuOworCWNhc2UgV0hfSEFSRFdBUkU6IAorCWNhc2UgV0hfRk9SRUdST1VORElETEU6IAorCWNhc2UgV0hfQ0FMTFdORFBST0NSRVQ6CisJICAgIGZwcmludGYoc3RkZXJyLCAiXHRbJWldIDE2dG8zMiB0cmFuc2xhdGlvbiB1bmltcGxlbWVudGVkXG4iLCBpZCk7CiAgICAgfQogfQogCkBAIC0xODcsMzQgKzIzMiw3IEBACiBzdGF0aWMgdm9pZCBIT09LX01hcDE2VG8zMkEoSU5UMzIgaWQsIElOVDMyIGNvZGUsIFdQQVJBTTMyICpwd1BhcmFtLAogCQkJICAgIExQQVJBTSAqcGxQYXJhbSkKIHsKLSAgICBpZiAoaWQgPT0gV0hfQ0JUICYmIGNvZGUgPT0gSENCVF9DUkVBVEVXTkQpCi0gICAgewotCUxQQ0JUX0NSRUFURVdORDE2IGxwY2J0Y3cxNiA9IFBUUl9TRUdfVE9fTElOKCpwbFBhcmFtKTsKLQlMUENCVF9DUkVBVEVXTkQzMkEgbHBjYnRjdzMyID0gSGVhcEFsbG9jKCBTeXN0ZW1IZWFwLCAwLAotCQkJCQkJICBzaXplb2YoKmxwY2J0Y3czMikgKTsKLQlscGNidGN3MzItPmxwY3MgPSBIZWFwQWxsb2MoIFN5c3RlbUhlYXAsIDAsCi0JCQkJICAgICBzaXplb2YoKmxwY2J0Y3czMi0+bHBjcykgKTsKLQotCVNUUlVDVDMyX0NSRUFURVNUUlVDVDE2dG8zMkEoIGxwY2J0Y3cxNi0+bHBjcywgbHBjYnRjdzMyLT5scGNzICk7Ci0KLQlpZiAoSElXT1JEKGxwY2J0Y3cxNi0+bHBjcy0+bHBzek5hbWUpKQotICAgICAgICAgICAgbHBjYnRjdzMyLT5scGNzLT5scHN6TmFtZQotICAgICAgICAgICAgICAgID0gUFRSX1NFR19UT19MSU4obHBjYnRjdzE2LT5scGNzLT5scHN6TmFtZSk7Ci0JZWxzZQotICAgICAgICAgICAgbHBjYnRjdzMyLT5scGNzLT5scHN6TmFtZSA9IChMUFNUUilscGNidGN3MTYtPmxwY3MtPmxwc3pOYW1lOwotCi0JaWYgKEhJV09SRChscGNidGN3MTYtPmxwY3MtPmxwc3pDbGFzcykpCi0gICAgICAgICAgICBscGNidGN3MzItPmxwY3MtPmxwc3pDbGFzcwotICAgICAgICAgICAgICAgID0gUFRSX1NFR19UT19MSU4obHBjYnRjdzE2LT5scGNzLT5scHN6Q2xhc3MpOwotCWVsc2UKLSAgICAgICAgICAgIGxwY2J0Y3czMi0+bHBjcy0+bHBzekNsYXNzID0gKExQU1RSKWxwY2J0Y3cxNi0+bHBjcy0+bHBzekNsYXNzOwotCi0JbHBjYnRjdzMyLT5od25kSW5zZXJ0QWZ0ZXIgPSBscGNidGN3MTYtPmh3bmRJbnNlcnRBZnRlcjsKLQotCSpwbFBhcmFtID0gKExQQVJBTSlscGNidGN3MzI7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgSE9PS19NYXAxNlRvMzJDb21tb24oIGlkLCBjb2RlLCBwd1BhcmFtLCBwbFBhcmFtICk7CisgICAgSE9PS19NYXAxNlRvMzJDb21tb24oIGlkLCBjb2RlLCBwd1BhcmFtLCBwbFBhcmFtLCBUUlVFICk7CiB9CiAKIApAQCAtMjI0LDM1ICsyNDIsNyBAQAogc3RhdGljIHZvaWQgSE9PS19NYXAxNlRvMzJXKElOVDMyIGlkLCBJTlQzMiBjb2RlLCBXUEFSQU0zMiAqcHdQYXJhbSwKIAkJCSAgICBMUEFSQU0gKnBsUGFyYW0pCiB7Ci0gICAgaWYgKGlkID09IFdIX0NCVCAmJiBjb2RlID09IEhDQlRfQ1JFQVRFV05EKQotICAgIHsKLQlMUENCVF9DUkVBVEVXTkQxNiBscGNidGN3MTYgPSBQVFJfU0VHX1RPX0xJTigqcGxQYXJhbSk7Ci0JTFBDUkVBVEVTVFJVQ1QxNiBscGNzMTYgPSBQVFJfU0VHX1RPX0xJTihscGNidGN3MTYtPmxwY3MpOwotCUxQQ0JUX0NSRUFURVdORDMyVyBscGNidGN3MzIgPSBIZWFwQWxsb2MoIFN5c3RlbUhlYXAsIDAsCi0JCQkJCQkgIHNpemVvZigqbHBjYnRjdzMyKSApOwotCWxwY2J0Y3czMi0+bHBjcyA9IEhlYXBBbGxvYyggU3lzdGVtSGVhcCwgMCwKLQkJCQkgICAgIHNpemVvZigqbHBjYnRjdzMyLT5scGNzKSApOwotCi0JU1RSVUNUMzJfQ1JFQVRFU1RSVUNUMTZ0bzMyQSggbHBjczE2LAotCQkJCSAgICAgIChMUENSRUFURVNUUlVDVDMyQSlscGNidGN3MzItPmxwY3MgKTsKLQotCWlmIChISVdPUkQobHBjczE2LT5scHN6TmFtZSkpCi0gICAgICAgICAgICBscGNidGN3MzItPmxwY3MtPmxwc3pOYW1lID0gSEVBUF9zdHJkdXBBdG9XKCBTeXN0ZW1IZWFwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVFJfU0VHX1RPX0xJTihscGNzMTYtPmxwc3pOYW1lKSApOwotCWVsc2UKLSAgICAgICAgICAgIGxwY2J0Y3czMi0+bHBjcy0+bHBzek5hbWUgPSAoTFBXU1RSKWxwY3MxNi0+bHBzek5hbWU7Ci0KLQlpZiAoSElXT1JEKGxwY3MxNi0+bHBzekNsYXNzKSkKLSAgICAgICAgICAgIGxwY2J0Y3czMi0+bHBjcy0+bHBzekNsYXNzID0gSEVBUF9zdHJkdXBBdG9XKCBTeXN0ZW1IZWFwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBUUl9TRUdfVE9fTElOKGxwY3MxNi0+bHBzekNsYXNzKSApOwotCWVsc2UKLSAgICAgICAgICAgIGxwY2J0Y3czMi0+bHBjcy0+bHBzekNsYXNzID0gKExQV1NUUilscGNzMTYtPmxwc3pDbGFzczsKLQotCWxwY2J0Y3czMi0+aHduZEluc2VydEFmdGVyID0gbHBjYnRjdzE2LT5od25kSW5zZXJ0QWZ0ZXI7Ci0KLQkqcGxQYXJhbSA9IChMUEFSQU0pbHBjYnRjdzMyOwotICAgIH0KLSAgICBlbHNlIEhPT0tfTWFwMTZUbzMyQ29tbW9uKCBpZCwgY29kZSwgcHdQYXJhbSwgcGxQYXJhbSApOworICAgIEhPT0tfTWFwMTZUbzMyQ29tbW9uKCBpZCwgY29kZSwgcHdQYXJhbSwgcGxQYXJhbSwgRkFMU0UgKTsKIH0KIAogCkBAIC0yNjEsNTYgKzI1MSw4MiBAQAogICovCiBzdGF0aWMgdm9pZCBIT09LX1VuTWFwMTZUbzMyQ29tbW9uKElOVDMyIGlkLCBJTlQzMiBjb2RlLCBXUEFSQU0zMiB3UGFyYW1PcmlnLAogCQkJCSAgIExQQVJBTSBsUGFyYW1PcmlnLCBXUEFSQU0zMiB3UGFyYW0sCi0JCQkJICAgTFBBUkFNIGxQYXJhbSkKKwkJCQkgICBMUEFSQU0gbFBhcmFtLCBCT09MMzIgYkEpCiB7CiAgICAgc3dpdGNoIChpZCkKICAgICB7Ci0gICAgICBjYXNlIFdIX01TR0ZJTFRFUjoKLSAgICAgIGNhc2UgV0hfU1lTTVNHRklMVEVSOgotICAgICAgY2FzZSBXSF9KT1VSTkFMUkVDT1JEOgotICAgICAgY2FzZSBXSF9KT1VSTkFMUExBWUJBQ0s6Ci0gICAgICB7Ci0JICBIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgKExQVk9JRClsUGFyYW0gKTsKLQkgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIFdIX0dFVE1FU1NBR0U6Ci0gICAgICB7Ci0JICBMUE1TRzE2IGxwbXNnMTYgPSBQVFJfU0VHX1RPX0xJTihsUGFyYW1PcmlnKTsKLQkgIFNUUlVDVDMyX01TRzMydG8xNiggKExQTVNHMzIpbFBhcmFtLCBscG1zZzE2ICk7Ci0JICBIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgKExQVk9JRClsUGFyYW0gKTsKLQkgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIFdIX01PVVNFOgotICAgICAgY2FzZSBXSF9ERUJVRzoKLQlIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgKExQVk9JRClsUGFyYW0gKTsKLQlicmVhazsKLQotCS8qIEkgZG9uJ3QgdGhpbmsgYW55IG9mIHRoZXNlIG5lZWQgdG8gYmUgY29waWVkICovCi0gICAgICBjYXNlIFdIX0NCVDoKLQlzd2l0Y2ggKGNvZGUpCi0JewotCSAgY2FzZSBIQ0JUX0FDVElWQVRFOgotCSAgY2FzZSBIQ0JUX0NMSUNLU0tJUFBFRDoKLQkgIGNhc2UgSENCVF9NT1ZFU0laRToKLQkgICAgSGVhcEZyZWUoIFN5c3RlbUhlYXAsIDAsIChMUFZPSUQpbFBhcmFtKTsKKwljYXNlIFdIX01TR0ZJTFRFUjoKKwljYXNlIFdIX1NZU01TR0ZJTFRFUjoKKwljYXNlIFdIX0pPVVJOQUxSRUNPUkQ6CisJY2FzZSBXSF9KT1VSTkFMUExBWUJBQ0s6CisgICAgICAKKwkgICAgSGVhcEZyZWUoIFN5c3RlbUhlYXAsIDAsIChMUFZPSUQpbFBhcmFtICk7CiAJICAgIGJyZWFrOworCisJY2FzZSBXSF9DQUxMV05EUFJPQzoKKwl7CisgICAgICAgICAgICB2b2lkICAgICAgICAgICgqbG9jYWxVbk1hcCkoVUlOVDMyLCBXUEFSQU0zMiwgTFBBUkFNKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gKGJBKSA/IFdJTlBST0NfVW5tYXBNc2cxNlRvMzJBIDogV0lOUFJPQ19Vbm1hcE1zZzE2VG8zMlc7CisgICAgICAgICAgICBMUENXUFNUUlVDVDMyICAgbHBjd3AzMiA9IChMUENXUFNUUlVDVDMyKWxQYXJhbTsKKworICAgICAgICAgICAgKCpsb2NhbFVuTWFwKShscGN3cDMyLT5tZXNzYWdlLCBscGN3cDMyLT53UGFyYW0sIGxwY3dwMzItPmxQYXJhbSApOworCSAgICBIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgbHBjd3AzMiApOworICAgICAgICAgICAgYnJlYWs7CiAJfQotCWJyZWFrOwogCi0gICAgICBjYXNlIFdIX1NIRUxMOgotICAgICAgY2FzZSBXSF9LRVlCT0FSRDoKLQlicmVhazsKKwljYXNlIFdIX0dFVE1FU1NBR0U6CisgICAgICAgIHsKKwkgICAgTFBNU0cxNiBscG1zZzE2ID0gUFRSX1NFR19UT19MSU4obFBhcmFtT3JpZyk7CisJICAgIFNUUlVDVDMyX01TRzMydG8xNiggKExQTVNHMzIpbFBhcmFtLCBscG1zZzE2ICk7CisJICAgIEhlYXBGcmVlKCBTeXN0ZW1IZWFwLCAwLCAoTFBWT0lEKWxQYXJhbSApOworCSAgICBicmVhazsKKyAgICAgICAgfQogCi0gICAgICBjYXNlIFdIX0NBTExXTkRQUk9DOgotICAgICAgY2FzZSBXSF9IQVJEV0FSRToKLQlmcHJpbnRmKHN0ZGVyciwgIkNhbid0IG1hcCBob29rIGlkOiAlZFxuIiwgaWQpOwotCWJyZWFrOworICAgICAgICBjYXNlIFdIX01PVVNFOgorICAgICAgICBjYXNlIFdIX0RFQlVHOgogCi0gICAgICBkZWZhdWx0OgotCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBob29rIGlkOiAlZFxuIiwgaWQpOwotCXJldHVybjsKKwkgICAgSGVhcEZyZWUoIFN5c3RlbUhlYXAsIDAsIChMUFZPSUQpbFBhcmFtICk7CisJICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgV0hfQ0JUOgorCSAgICBzd2l0Y2ggKGNvZGUpCisgIAkgICAgeworCSAgICAgIGNhc2UgSENCVF9DUkVBVEVXTkQ6CisJICAgICAgeworCQlMUENCVF9DUkVBVEVXTkQzMkEgbHBjYnRjdzMyID0gKExQQ0JUX0NSRUFURVdORDMyQSlsUGFyYW07CisJCUxQQ0JUX0NSRUFURVdORDE2ICBscGNidGN3MTYgPSBQVFJfU0VHX1RPX0xJTihsUGFyYW1PcmlnKTsKKworCQlpZiggIWJBICkKKwkJeworCQkgICBpZiAoSElXT1JEKGxwY2J0Y3czMi0+bHBjcy0+bHBzek5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICBIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgKExQV1NUUilscGNidGN3MzItPmxwY3MtPmxwc3pOYW1lICk7CisJCSAgIGlmIChISVdPUkQobHBjYnRjdzMyLT5scGNzLT5scHN6Q2xhc3MpKQorICAgICAgICAgICAgICAgICAgICAgICBIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgKExQV1NUUilscGNidGN3MzItPmxwY3MtPmxwc3pDbGFzcyApOworCQl9CisKKwkJbHBjYnRjdzE2LT5od25kSW5zZXJ0QWZ0ZXIgPSBscGNidGN3MzItPmh3bmRJbnNlcnRBZnRlcjsKKworCQlIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgbHBjYnRjdzMyLT5scGNzICk7CisJICAgICAgfSAvKiBmYWxsIHRocm91Z2ggKi8KKworCSAgICAgIGNhc2UgSENCVF9BQ1RJVkFURToKKwkgICAgICBjYXNlIEhDQlRfQ0xJQ0tTS0lQUEVEOgorCSAgICAgIGNhc2UgSENCVF9NT1ZFU0laRToKKworCSAgICAgICAgSGVhcEZyZWUoIFN5c3RlbUhlYXAsIDAsIChMUFZPSUQpbFBhcmFtKTsKKwkgICAgICAgIGJyZWFrOworCSAgICB9CisgIAkgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBXSF9TSEVMTDoKKyAgICAgICAgY2FzZSBXSF9LRVlCT0FSRDoKKwkgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBXSF9IQVJEV0FSRToKKwljYXNlIFdIX0ZPUkVHUk9VTkRJRExFOgorCWNhc2UgV0hfQ0FMTFdORFBST0NSRVQ6CisJICAgIGZwcmludGYoc3RkZXJyLCAiXHRbJWldIHNraXBwaW5nIHVubWFwXG4iLCBpZCk7CisgIAkgICAgYnJlYWs7CiAgICAgfQogfQogCkBAIC0zMjIsMTYgKzMzOCw4IEBACiAJCQkgICAgICBMUEFSQU0gbFBhcmFtT3JpZywgV1BBUkFNMzIgd1BhcmFtLAogCQkJICAgICAgTFBBUkFNIGxQYXJhbSkKIHsKLSAgICBpZiAoaWQgPT0gV0hfQ0JUICYmIGNvZGUgPT0gSENCVF9DUkVBVEVXTkQpCi0gICAgewotCUxQQ0JUX0NSRUFURVdORDMyQSBscGNidGN3MzIgPSAoTFBDQlRfQ1JFQVRFV05EMzJBKWxQYXJhbTsKLQlIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgbHBjYnRjdzMyLT5scGNzICk7Ci0JSGVhcEZyZWUoIFN5c3RlbUhlYXAsIDAsIGxwY2J0Y3czMiApOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBIT09LX1VuTWFwMTZUbzMyQ29tbW9uKCBpZCwgY29kZSwgd1BhcmFtT3JpZywgbFBhcmFtT3JpZywgd1BhcmFtLAotCQkJICAgICAgbFBhcmFtKTsKLSAgICByZXR1cm47CisgICAgSE9PS19Vbk1hcDE2VG8zMkNvbW1vbiggaWQsIGNvZGUsIHdQYXJhbU9yaWcsIGxQYXJhbU9yaWcsIHdQYXJhbSwKKwkJCSAgICBsUGFyYW0sIFRSVUUgKTsKIH0KIAogCkBAIC0zNDIsMTggKzM1MCw4IEBACiAJCQkgICAgICBMUEFSQU0gbFBhcmFtT3JpZywgV1BBUkFNMzIgd1BhcmFtLAogCQkJICAgICAgTFBBUkFNIGxQYXJhbSkKIHsKLSAgICBpZiAoaWQgPT0gV0hfQ0JUICYmIGNvZGUgPT0gSENCVF9DUkVBVEVXTkQpCi0gICAgewotCUxQQ0JUX0NSRUFURVdORDMyVyBscGNidGN3MzIgPSAoTFBDQlRfQ1JFQVRFV05EMzJXKWxQYXJhbTsKLQlpZiAoSElXT1JEKGxwY2J0Y3czMi0+bHBjcy0+bHBzek5hbWUpKQotICAgICAgICAgICAgSGVhcEZyZWUoIFN5c3RlbUhlYXAsIDAsIChMUFdTVFIpbHBjYnRjdzMyLT5scGNzLT5scHN6TmFtZSApOwotCWlmIChISVdPUkQobHBjYnRjdzMyLT5scGNzLT5scHN6Q2xhc3MpKQotICAgICAgICAgICAgSGVhcEZyZWUoIFN5c3RlbUhlYXAsIDAsIChMUFdTVFIpbHBjYnRjdzMyLT5scGNzLT5scHN6Q2xhc3MgKTsKLQlIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgbHBjYnRjdzMyLT5scGNzICk7Ci0JSGVhcEZyZWUoIFN5c3RlbUhlYXAsIDAsIGxwY2J0Y3czMiApOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBIT09LX1VuTWFwMTZUbzMyQ29tbW9uKGlkLCBjb2RlLCB3UGFyYW1PcmlnLCBsUGFyYW1PcmlnLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgSE9PS19Vbk1hcDE2VG8zMkNvbW1vbiggaWQsIGNvZGUsIHdQYXJhbU9yaWcsIGxQYXJhbU9yaWcsIHdQYXJhbSwgCisJCQkgICAgbFBhcmFtLCBGQUxTRSApOwogfQogCiAKQEAgLTM2MSw3ICszNTksNyBAQAogICogICAgICAgICAgIEhPT0tfTWFwMzJUbzE2Q29tbW9uCiAgKi8KIHN0YXRpYyB2b2lkIEhPT0tfTWFwMzJUbzE2Q29tbW9uKElOVDMyIGlkLCBJTlQzMiBjb2RlLCBXUEFSQU0zMiAqcHdQYXJhbSwKLQkJCQkgTFBBUkFNICpwbFBhcmFtKQorCQkJCSBMUEFSQU0gKnBsUGFyYW0sIEJPT0wzMiBiQSkKIHsKICAgICBzd2l0Y2ggKGlkKQogICAgIHsKQEAgLTM5Myw2ICszOTEsMjIgQEAKIAkgIGJyZWFrOwogICAgICAgfQogCisgICAgICBjYXNlIFdIX0NBTExXTkRQUk9DOgorICAgICAgeworICAgICAgICAgIElOVDMyICAgICAgICgqbG9jYWxNYXApKFVJTlQzMiwgV1BBUkFNMzIsIFVJTlQxNiosIFdQQVJBTTE2KiwgTFBBUkFNKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPSAoYkEpID8gV0lOUFJPQ19NYXBNc2czMkFUbzE2IDogV0lOUFJPQ19NYXBNc2czMldUbzE2OworICAgICAgICAgIExQQ1dQU1RSVUNUMzIgICBscGN3cDMyID0gKExQQ1dQU1RSVUNUMzIpKnBsUGFyYW07CisJICBMUENXUFNUUlVDVDE2ICAgbHBjd3AxNiA9IFNFR1BUUl9ORVcoIENXUFNUUlVDVDE2ICk7CisKKyAgICAgICAgICBscGN3cDE2LT5od25kID0gbHBjd3AzMi0+aHduZDsKKyAgICAgICAgICBscGN3cDE2LT5sUGFyYW0gPSBscGN3cDMyLT5sUGFyYW07CisKKyAgICAgICAgICgqbG9jYWxNYXApKGxwY3dwMzItPm1lc3NhZ2UsIGxwY3dwMzItPndQYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgJmxwY3dwMTYtPm1lc3NhZ2UsICZscGN3cDE2LT53UGFyYW0sICZscGN3cDE2LT5sUGFyYW0gKTsKKwkgICpwbFBhcmFtID0gKExQQVJBTSlTRUdQVFJfR0VUKCBscGN3cDE2ICk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKICAgICAgIGNhc2UgV0hfQ0JUOgogCXN3aXRjaCAoY29kZSkKIAl7CkBAIC00MDIsOCArNDE2LDggQEAKIAkgICAgICBMUENCVEFDVElWQVRFU1RSVUNUMTYgbHBjYXMxNiA9U0VHUFRSX05FVyggQ0JUQUNUSVZBVEVTVFJVQ1QxNiApOwogCiAJICAgICAgbHBjYXMxNi0+Zk1vdXNlICAgICA9IGxwY2FzMzItPmZNb3VzZTsKLQkgICAgICBscGNhczE2LT5oV25kQWN0aXZlID0gbHBjYXMzMi0+aFduZEFjdGl2ZQotOworCSAgICAgIGxwY2FzMTYtPmhXbmRBY3RpdmUgPSBscGNhczMyLT5oV25kQWN0aXZlOworCiAJICAgICAgKnBsUGFyYW0gPSAoTFBBUkFNKVNFR1BUUl9HRVQoIGxwY2FzMTYgKTsKIAkgICAgICBicmVhazsKIAkgIH0KQEAgLTQ3MCwxNCArNDg0LDEwIEBACiAgICAgICBjYXNlIFdIX0tFWUJPQVJEOgogCWJyZWFrOwogCi0gICAgICBjYXNlIFdIX0NBTExXTkRQUk9DOgogICAgICAgY2FzZSBXSF9IQVJEV0FSRToKLQlmcHJpbnRmKHN0ZGVyciwgIkNhbid0IG1hcCBob29rIGlkOiAlZFxuIiwgaWQpOwotCWJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBob29rIGlkOiAlZFxuIiwgaWQpOwotCXJldHVybjsKKyAgICAgIGNhc2UgV0hfRk9SRUdST1VORElETEU6CisgICAgICBjYXNlIFdIX0NBTExXTkRQUk9DUkVUOgorCWZwcmludGYoc3RkZXJyLCJcdFslaV0gMzJ0bzE2IHRyYW5zbGF0aW9uIHVuaW1wbGVtZW50ZWRcbiIsIGlkKTsKICAgICB9CiB9CiAKQEAgLTUxMyw3ICs1MjMsNyBAQAogCiAJKnBsUGFyYW0gPSAoTFBBUkFNKVNFR1BUUl9HRVQoIGxwY2J0Y3cxNiApOwogICAgIH0KLSAgICBlbHNlIEhPT0tfTWFwMzJUbzE2Q29tbW9uKGlkLCBjb2RlLCBwd1BhcmFtLCBwbFBhcmFtKTsKKyAgICBlbHNlIEhPT0tfTWFwMzJUbzE2Q29tbW9uKGlkLCBjb2RlLCBwd1BhcmFtLCBwbFBhcmFtLCBUUlVFKTsKIH0KIAogCkBAIC01NDIsNyArNTUyLDcgQEAKIAogCSpwbFBhcmFtID0gKExQQVJBTSlTRUdQVFJfR0VUKCBscGNidGN3MTYgKTsKICAgICB9Ci0gICAgZWxzZSBIT09LX01hcDMyVG8xNkNvbW1vbihpZCwgY29kZSwgcHdQYXJhbSwgcGxQYXJhbSk7CisgICAgZWxzZSBIT09LX01hcDMyVG8xNkNvbW1vbihpZCwgY29kZSwgcHdQYXJhbSwgcGxQYXJhbSwgRkFMU0UpOwogfQogCiAKQEAgLTU1MSw3ICs1NjEsNyBAQAogICovCiBzdGF0aWMgdm9pZCBIT09LX1VuTWFwMzJUbzE2Q29tbW9uKElOVDMyIGlkLCBJTlQzMiBjb2RlLCBXUEFSQU0zMiB3UGFyYW1PcmlnLAogCQkJCSAgIExQQVJBTSBsUGFyYW1PcmlnLCBXUEFSQU0zMiB3UGFyYW0sCi0JCQkJICAgTFBBUkFNIGxQYXJhbSkKKwkJCQkgICBMUEFSQU0gbFBhcmFtLCBCT09MMzIgYkEpCiB7CiAgICAgc3dpdGNoIChpZCkKICAgICB7CkBAIC01NjQsNiArNTc0LDE4IEBACiAJU0VHUFRSX0ZSRUUoIFBUUl9TRUdfVE9fTElOKGxQYXJhbSkgKTsKIAlicmVhazsKIAorICAgICAgY2FzZSBXSF9DQUxMV05EUFJPQzoKKyAgICAgIHsKKyAgICAgICAgICB2b2lkICAgICAgICAgICgqbG9jYWxVbk1hcCkoVUlOVDMyLCBXUEFSQU0xNiwgTFBBUkFNKQorICAgICAgICAgICAgICAgICAgICAgICAgICA9IChiQSkgPyBXSU5QUk9DX1VubWFwTXNnMzJBVG8xNiA6IFdJTlBST0NfVW5tYXBNc2czMldUbzE2OworICAgICAgICAgIExQQ1dQU1RSVUNUMTYgICBscGN3cDE2ID0gKExQQ1dQU1RSVUNUMTYpUFRSX1NFR19UT19MSU4obFBhcmFtKTsKKwkgIExQQ1dQU1RSVUNUMzIgICBscGN3cDMyID0gKExQQ1dQU1RSVUNUMzIpbFBhcmFtT3JpZzsKKworICAgICAgICAgICgqbG9jYWxVbk1hcCkobHBjd3AzMi0+bWVzc2FnZSwgbHBjd3AxNi0+d1BhcmFtLCBscGN3cDE2LT5sUGFyYW0gKTsKKwkgIFNFR1BUUl9GUkVFKCBQVFJfU0VHX1RPX0xJTihsUGFyYW0pICk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKICAgICAgIGNhc2UgV0hfR0VUTUVTU0FHRToKICAgICAgIHsKIAkgIExQTVNHMzIgbHBtc2czMiA9IChMUE1TRzMyKWxQYXJhbU9yaWc7CkBAIC01NzYsMTEgKzU5OCwyOSBAQAogICAgICAgY2FzZSBXSF9DQlQ6CiAJc3dpdGNoIChjb2RlKQogCXsKKwkgIGNhc2UgSENCVF9DUkVBVEVXTkQ6CisJICB7CisJICAgICAgIExQQ0JUX0NSRUFURVdORDMyQSBscGNidGN3MzIgPSAoTFBDQlRfQ1JFQVRFV05EMzJBKShsUGFyYW1PcmlnKTsKKyAgICAgICAgICAgICAgIExQQ0JUX0NSRUFURVdORDE2IGxwY2J0Y3cxNiA9IFBUUl9TRUdfVE9fTElOKGxQYXJhbSk7CisgICAgICAgICAgICAgICBMUENSRUFURVNUUlVDVDE2ICBscGNzMTYgPSBQVFJfU0VHX1RPX0xJTihscGNidGN3MTYtPmxwY3MpOworCisgICAgICAgICAgICAgICBpZiAoSElXT1JEKGxwY3MxNi0+bHBzek5hbWUpKQorICAgICAgICAgICAgICAgICAgIFNFR1BUUl9GUkVFKCBQVFJfU0VHX1RPX0xJTihscGNzMTYtPmxwc3pOYW1lKSApOworCisgICAgICAgICAgICAgICBpZiAoSElXT1JEKGxwY3MxNi0+bHBzekNsYXNzKSkKKyAgICAgICAgICAgICAgICAgICBTRUdQVFJfRlJFRSggUFRSX1NFR19UT19MSU4obHBjczE2LT5scHN6Q2xhc3MpICk7CisKKwkgICAgICAgbHBjYnRjdzMyLT5od25kSW5zZXJ0QWZ0ZXIgPSBscGNidGN3MTYtPmh3bmRJbnNlcnRBZnRlcjsKKworICAgICAgICAgICAgICAgU0VHUFRSX0ZSRUUoIGxwY3MxNiApOworCSAgfSAvKiBmYWxsIHRocm91Z2ggKi8KKwogCSAgY2FzZSBIQ0JUX0FDVElWQVRFOgogCSAgY2FzZSBIQ0JUX0NMSUNLU0tJUFBFRDoKIAkgIGNhc2UgSENCVF9NT1ZFU0laRToKLQkgICAgU0VHUFRSX0ZSRUUoIChMUFZPSUQpbFBhcmFtICk7Ci0JICAgIGJyZWFrOworCisJICAgICAgIFNFR1BUUl9GUkVFKCBQVFJfU0VHX1RPX0xJTihsUGFyYW0pICk7CisJICAgICAgIGJyZWFrOwogCX0KIAlicmVhazsKIApAQCAtNTg4LDE0ICs2MjgsMTAgQEAKICAgICAgIGNhc2UgV0hfS0VZQk9BUkQ6CiAJYnJlYWs7CiAKLSAgICAgIGNhc2UgV0hfQ0FMTFdORFBST0M6CiAgICAgICBjYXNlIFdIX0hBUkRXQVJFOgotCWZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgbWFwIGhvb2sgaWQ6ICVkXG4iLCBpZCk7Ci0JYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0JZnByaW50ZihzdGRlcnIsICJVbmtub3duIGhvb2sgaWQ6ICVkXG4iLCBpZCk7Ci0JcmV0dXJuOworICAgICAgY2FzZSBXSF9GT1JFR1JPVU5ESURMRToKKyAgICAgIGNhc2UgV0hfQ0FMTFdORFBST0NSRVQ6CisJZnByaW50ZihzdGRlcnIsICJcdFslaV0gc2tpcHBpbmcgdW5tYXBcbiIsIGlkKTsKICAgICB9CiB9CiAKQEAgLTYwNywyNCArNjQzLDggQEAKIAkJCSAgICAgIExQQVJBTSBsUGFyYW1PcmlnLCBXUEFSQU0zMiB3UGFyYW0sCiAJCQkgICAgICBMUEFSQU0gbFBhcmFtKQogewotICAgIGlmIChpZCA9PSBXSF9DQlQgJiYgY29kZSA9PSBIQ0JUX0NSRUFURVdORCkKLSAgICB7Ci0JTFBDQlRfQ1JFQVRFV05EMTYgbHBjYnRjdzE2ID0gUFRSX1NFR19UT19MSU4obFBhcmFtKTsKLQlMUENSRUFURVNUUlVDVDE2IGxwY3MxNiA9IFBUUl9TRUdfVE9fTElOKGxwY2J0Y3cxNi0+bHBjcyk7Ci0KLQlpZiAoSElXT1JEKGxwY3MxNi0+bHBzek5hbWUpKQotCSAgU0VHUFRSX0ZSRUUoIFBUUl9TRUdfVE9fTElOKGxwY3MxNi0+bHBzek5hbWUpICk7Ci0KLQlpZiAoSElXT1JEKGxwY3MxNi0+bHBzekNsYXNzKSkKLQkgIFNFR1BUUl9GUkVFKCBQVFJfU0VHX1RPX0xJTihscGNzMTYtPmxwc3pDbGFzcykgKTsKLQotCVNFR1BUUl9GUkVFKCBscGNzMTYgKTsKLQlTRUdQVFJfRlJFRSggbHBjYnRjdzE2ICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBIT09LX1VuTWFwMzJUbzE2Q29tbW9uKCBpZCwgY29kZSwgd1BhcmFtT3JpZywgbFBhcmFtT3JpZywgd1BhcmFtLAotCQkJCSAgICAgbFBhcmFtICk7Ci0gICAgcmV0dXJuOworICAgIEhPT0tfVW5NYXAzMlRvMTZDb21tb24oIGlkLCBjb2RlLCB3UGFyYW1PcmlnLCBsUGFyYW1PcmlnLCB3UGFyYW0sCisJCQkgICAgbFBhcmFtLCBUUlVFICk7CiB9CiAKIApAQCAtNjM1LDcgKzY1NSw4IEBACiAJCQkgICAgICBMUEFSQU0gbFBhcmFtT3JpZywgV1BBUkFNMzIgd1BhcmFtLAogCQkJICAgICAgTFBBUkFNIGxQYXJhbSkKIHsKLSAgICBIT09LX1VuTWFwMzJBVG8xNiggaWQsIGNvZGUsIHdQYXJhbU9yaWcsIGxQYXJhbU9yaWcsIHdQYXJhbSwgbFBhcmFtICk7CisgICAgSE9PS19Vbk1hcDMyVG8xNkNvbW1vbiggaWQsIGNvZGUsIHdQYXJhbU9yaWcsIGxQYXJhbU9yaWcsIHdQYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsUGFyYW0sIEZBTFNFICk7CiB9CiAKIApAQCAtODQxLDcgKzg2Miw2IEBACiAgICAgZGF0YS0+aWQgICAgICAgICAgPSBpZDsKICAgICBkYXRhLT5vd25lclF1ZXVlICA9IGhRdWV1ZTsKICAgICBkYXRhLT5vd25lck1vZHVsZSA9IGhJbnN0OwotICAgIGRhdGEtPmluSG9va1Byb2MgID0gMDsKICAgICBkYXRhLT5mbGFncyAgICAgICA9IHR5cGU7CiAKICAgICAvKiBJbnNlcnQgaXQgaW4gdGhlIGNvcnJlY3QgbGlua2VkIGxpc3QgKi8KQEAgLTg3Niw3ICs4OTYsNyBAQAogICAgIGRwcmludGZfaG9vayggc3RkZGViLCAiUmVtb3ZpbmcgaG9vayAlMDR4XG4iLCBob29rICk7CiAKICAgICBpZiAoIShkYXRhID0gKEhPT0tEQVRBICopVVNFUl9IRUFQX0xJTl9BRERSKGhvb2spKSkgcmV0dXJuIEZBTFNFOwotICAgIGlmIChkYXRhLT5pbkhvb2tQcm9jKQorICAgIGlmIChkYXRhLT5mbGFncyAmIEhPT0tfSU5VU0UpCiAgICAgewogICAgICAgICAvKiBNYXJrIGl0IGZvciBkZWxldGlvbiBsYXRlciBvbiAqLwogICAgICAgICBkcHJpbnRmX2hvb2soIHN0ZGRlYiwgIkhvb2sgc3RpbGwgcnVubmluZywgZGVsZXRpb24gZGVsYXllZFxuIiApOwpAQCAtOTUyLDcgKzk3Miw3IEBACiAgICAgaWYgKCEocXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jazE2KCBHZXRUYXNrUXVldWUoMCkgKSkpIHJldHVybiAwOwogICAgIHByZXZIb29rID0gcXVldWUtPmhDdXJIb29rOwogICAgIHF1ZXVlLT5oQ3VySG9vayA9IGhvb2s7Ci0gICAgZGF0YS0+aW5Ib29rUHJvYyA9IFRSVUU7CisgICAgZGF0YS0+ZmxhZ3MgfD0gSE9PS19JTlVTRTsKIAogICAgIGRwcmludGZfaG9vayggc3RkZGViLCAiQ2FsbGluZyBob29rICUwNHg6ICVkICUwOHggJTA4bHhcbiIsCiAgICAgICAgICAgICAgICAgICBob29rLCBjb2RlLCB3UGFyYW0sIGxQYXJhbSApOwpAQCAtOTY1LDcgKzk4NSw3IEBACiAKICAgICBkcHJpbnRmX2hvb2soIHN0ZGRlYiwgIlJldCBob29rICUwNHggPSAlMDhseFxuIiwgaG9vaywgcmV0ICk7CiAKLSAgICBkYXRhLT5pbkhvb2tQcm9jID0gRkFMU0U7CisgICAgZGF0YS0+ZmxhZ3MgJj0gfkhPT0tfSU5VU0U7CiAgICAgcXVldWUtPmhDdXJIb29rID0gcHJldkhvb2s7CiAKICAgICBpZiAoVW5NYXBGdW5jKQpAQCAtMTEwMCw3ICsxMTIwLDcgQEAKIAkgICAgICBuZXh0ID0gaHB0ci0+bmV4dDsKIAkgICAgICBpZiggaHB0ci0+b3duZXJNb2R1bGUgPT0gaE1vZHVsZSApCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaHB0ci0+aW5Ib29rUHJvYyA9IDA7CisgICAgICAgICAgICAgICAgICBocHRyLT5mbGFncyAmPSBIT09LX01BUFRZUEU7CiAgICAgICAgICAgICAgICAgICBIT09LX1JlbW92ZUhvb2soaG9vayk7CiAgICAgICAgICAgICAgICAgfQogCSAgICAgIGhvb2sgPSBuZXh0OwpAQCAtMTEzMCw3ICsxMTUwLDcgQEAKIAkgIGhwdHIgPSAoSE9PS0RBVEEgKilVU0VSX0hFQVBfTElOX0FERFIoaG9vayk7CiAJICBpZiggaHB0ciAmJiBocHRyLT5vd25lclF1ZXVlID09IGhRdWV1ZSApCiAJICAgIHsKLQkgICAgICBocHRyLT5pbkhvb2tQcm9jID0gMDsKKwkgICAgICBocHRyLT5mbGFncyAmPSBIT09LX01BUFRZUEU7CiAJICAgICAgSE9PS19SZW1vdmVIb29rKGhvb2spOwogCSAgICB9CiAJICBob29rID0gbmV4dDsKZGlmZiAtLWdpdCBhL3dpbmRvd3Mva2V5Ym9hcmQuYyBiL3dpbmRvd3Mva2V5Ym9hcmQuYwppbmRleCBmODNjYzE2Li44ZWQ5ZWViIDEwMDY0NAotLS0gYS93aW5kb3dzL2tleWJvYXJkLmMKKysrIGIvd2luZG93cy9rZXlib2FyZC5jCkBAIC04NjQsMTUgKzg2NCwyNyBAQAogCXJldHVybiAwOwogfQogCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKglHZXRLYkNvZGVQYWdlICAgKEtFWUJPQVJELjEzMikKKyAqCUdldEtCQ29kZVBhZ2UxNiAgIChLRVlCT0FSRC4xMzIpCiAgKi8KLUlOVDE2IEdldEtiQ29kZVBhZ2UoVk9JRCkKK0lOVDE2IEdldEtCQ29kZVBhZ2UxNih2b2lkKQogewotICAgIAlkcHJpbnRmX2tleWJvYXJkKHN0ZGRlYiwiR2V0S2JDb2RlUGFnZSgpXG4iKTsKLQlyZXR1cm4gODUwOworICAgIGRwcmludGZfa2V5Ym9hcmQoc3RkZGViLCJHZXRLQkNvZGVQYWdlKClcbiIpOworICAgIHJldHVybiA4NTA7CiB9CiAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCUdldEtCQ29kZVBhZ2UzMiAgIChVU0VSMzIuMjQ1KQorICovCitVSU5UMzIgR2V0S0JDb2RlUGFnZTMyKHZvaWQpCit7CisgICAgZHByaW50Zl9rZXlib2FyZChzdGRkZWIsIkdldEtiQ29kZVBhZ2UoKVxuIik7CisgICAgcmV0dXJuIDg1MDsKK30KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJR2V0S2V5TmFtZVRleHQzMlcgICAoVVNFUjMyLjI0NykKICAqLwpkaWZmIC0tZ2l0IGEvd2luZG93cy9tZGkuYyBiL3dpbmRvd3MvbWRpLmMKaW5kZXggMzE3YzhhZS4uMzk1YTRlYSAxMDA2NDQKLS0tIGEvd2luZG93cy9tZGkuYworKysgYi93aW5kb3dzL21kaS5jCkBAIC0zNywyNSArMzcsMjUgQEAKIERXT1JEIFNDUk9MTF9TZXROQ1NiU3RhdGUoV05EKixpbnQsaW50LGludCxpbnQsaW50LGludCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tIGRlY2xhcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBNRElfVXBkYXRlRnJhbWVUZXh0KFdORCAqLCBIV05ELCBCT09MLCBMUENTVFIpOwotQk9PTCBNRElfQXVnbWVudEZyYW1lTWVudShNRElDTElFTlRJTkZPKiwgV05EICosIEhXTkQpOwotQk9PTCBNRElfUmVzdG9yZUZyYW1lTWVudShXTkQgKiwgSFdORCk7CitzdGF0aWMgdm9pZCBNRElfVXBkYXRlRnJhbWVUZXh0KFdORCAqLCBIV05EMTYsIEJPT0wzMiwgTFBDU1RSKTsKK3N0YXRpYyBCT09MMzIgTURJX0F1Z21lbnRGcmFtZU1lbnUoTURJQ0xJRU5USU5GTyosIFdORCAqLCBIV05EMTYpOworc3RhdGljIEJPT0wzMiBNRElfUmVzdG9yZUZyYW1lTWVudShXTkQgKiwgSFdORDE2KTsKIAotc3RhdGljIExPTkcgTURJX0NoaWxkQWN0aXZhdGUoV05EKiAsSFdORCApOworc3RhdGljIExPTkcgTURJX0NoaWxkQWN0aXZhdGUoV05EKiAsSFdORDE2ICk7CiAKIC8qIC0tLS0tLS0tIE1pc2NlbGxhbmVvdXMgc2VydmljZSBmdW5jdGlvbnMgLS0tLS0tLS0tLQogICoKICAqCQkJTURJX0dldENoaWxkQnlJRAogICovCiAKLXN0YXRpYyBIV05EIE1ESV9HZXRDaGlsZEJ5SUQoV05EKiB3bmRQdHIsaW50IGlkKQorc3RhdGljIEhXTkQxNiBNRElfR2V0Q2hpbGRCeUlEKFdORCogd25kUHRyLGludCBpZCkKIHsKICAgICBmb3IgKHduZFB0ciA9IHduZFB0ci0+Y2hpbGQ7IHduZFB0cjsgd25kUHRyID0gd25kUHRyLT5uZXh0KQogICAgICAgICBpZiAod25kUHRyLT53SURtZW51ID09IGlkKSByZXR1cm4gd25kUHRyLT5od25kU2VsZjsKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgTURJX1Bvc3RVcGRhdGUoSFdORCBod25kLCBNRElDTElFTlRJTkZPKiBjaSwgV09SRCByZWNhbGMpCitzdGF0aWMgdm9pZCBNRElfUG9zdFVwZGF0ZShIV05EMTYgaHduZCwgTURJQ0xJRU5USU5GTyogY2ksIFdPUkQgcmVjYWxjKQogewogIGlmKCAhY2ktPnNiTmVlZFVwZGF0ZSApCiAgICB7CkBAIC02OSw3ICs2OSw3IEBACiAgKgkJCU1ESV9NZW51QXBwZW5kSXRlbQogICovCiAjaWZkZWYgU1VQRVJGTFVPVVNfRlVOQ1RJT05TCi1zdGF0aWMgQk9PTCBNRElfTWVudUFwcGVuZEl0ZW0oV05EICpjbGllbnRXbmQsIEhXTkQgaFduZENoaWxkKQorc3RhdGljIEJPT0wgTURJX01lbnVBcHBlbmRJdGVtKFdORCAqY2xpZW50V25kLCBIV05EMTYgaFduZENoaWxkKQogewogIGNoYXIgYnVmZmVyWzEyOF07CiAgTURJQ0xJRU5USU5GTyAgKmNsaWVudEluZm8gPSAoTURJQ0xJRU5USU5GTyopY2xpZW50V25kLT53RXh0cmE7CkBAIC04OCw3ICs4OCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQlNRElfTWVudU1vZGlmeUl0ZW0KICAqLwotc3RhdGljIEJPT0wgTURJX01lbnVNb2RpZnlJdGVtKFdORCogY2xpZW50V25kLCBIV05EIGhXbmRDaGlsZCApCitzdGF0aWMgQk9PTCBNRElfTWVudU1vZGlmeUl0ZW0oV05EKiBjbGllbnRXbmQsIEhXTkQxNiBoV25kQ2hpbGQgKQogewogIGNoYXIgICAgICAgICAgICBidWZmZXJbMTI4XTsKICBNRElDTElFTlRJTkZPICAqY2xpZW50SW5mbyA9IChNRElDTElFTlRJTkZPKiljbGllbnRXbmQtPndFeHRyYTsKQEAgLTExMSw3ICsxMTEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJTURJX01lbnVEZWxldGVJdGVtCiAgKi8KLXN0YXRpYyBCT09MIE1ESV9NZW51RGVsZXRlSXRlbShXTkQqIGNsaWVudFduZCwgSFdORCBoV25kQ2hpbGQgKQorc3RhdGljIEJPT0wgTURJX01lbnVEZWxldGVJdGVtKFdORCogY2xpZW50V25kLCBIV05EMTYgaFduZENoaWxkICkKIHsKICBjaGFyICAgIAkgYnVmZmVyWzEyOF07CiAgTURJQ0xJRU5USU5GTyAgKmNsaWVudEluZm8gPSAoTURJQ0xJRU5USU5GTyopY2xpZW50V25kLT53RXh0cmE7CkBAIC0xNTYsNyArMTU2LDcgQEAKICAqCiAgKiByZXR1cm5zICJhY3RpdmF0ZWFibGUiIGNoaWxkICBvciB6ZXJvCiAgKi8KLUhXTkQgTURJX0dldFdpbmRvdyhXTkQgICpjbGllbnRXbmQsIEhXTkQgaFduZCwgV09SRCB3VG8gKQorc3RhdGljIEhXTkQxNiBNRElfR2V0V2luZG93KFdORCAgKmNsaWVudFduZCwgSFdORDE2IGhXbmQsIFdPUkQgd1RvICkKIHsKICAgICBNRElDTElFTlRJTkZPICpjbGllbnRJbmZvID0gKE1ESUNMSUVOVElORk8qKWNsaWVudFduZC0+d0V4dHJhOwogICAgIFdORCAqd25kUHRyLCAqcFduZCwgKnBXbmRMYXN0OwpAQCAtMTk0LDEwICsxOTQsMTEgQEAKICAqCiAgKiAgSXQgc2VlbXMgdGhhdCBkZWZhdWx0IGhlaWdodCBpcyAyLzMgb2YgY2xpZW50IHJlY3QKICAqLwotdm9pZCBNRElfQ2FsY0RlZmF1bHRDaGlsZFBvcyhXTkQqIHcsIFdPUkQgbiwgTFBQT0lOVDE2IGxwUG9zLCBJTlQgZGVsdGEpCitzdGF0aWMgdm9pZCBNRElfQ2FsY0RlZmF1bHRDaGlsZFBvcyhXTkQqIHcsIFdPUkQgbiwgTFBQT0lOVDE2IGxwUG9zLCBJTlQgZGVsdGEpCiB7CiAgUkVDVDE2IHJlY3QgPSB3LT5yZWN0Q2xpZW50OwotIElOVCAgc3BhY2luZyA9IEdldFN5c3RlbU1ldHJpY3MoU01fQ1lDQVBUSU9OKSArIEdldFN5c3RlbU1ldHJpY3MoU01fQ1lGUkFNRSkgLSAxOyAKKyBJTlQgIHNwYWNpbmcgPSBHZXRTeXN0ZW1NZXRyaWNzMzIoU01fQ1lDQVBUSU9OKSArCisgICAgICAgICAgICAgICAgR2V0U3lzdGVtTWV0cmljczMyKFNNX0NZRlJBTUUpIC0gMTsgCiAgSU5UICBuc3RhZ2dlcjsKIAogIGlmKCByZWN0LmJvdHRvbSAtIHJlY3QudG9wIC0gZGVsdGEgPj0gc3BhY2luZyApIApAQCAtMjEwLDEwICsyMTEsMTAgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJCQlNRElTZXRNZW51CisgKiAgICAgICAgICAgIE1ESVNldE1lbnUKICAqLwotSE1FTlUxNiBNRElTZXRNZW51KEhXTkQgaHduZCwgQk9PTCBmUmVmcmVzaCwgSE1FTlUxNiBobWVudUZyYW1lLAotICAgICAgICAgICAgICAgICAgIEhNRU5VMTYgaG1lbnVXaW5kb3cpCitzdGF0aWMgSE1FTlUxNiBNRElTZXRNZW51KEhXTkQxNiBod25kLCBCT09MMzIgZlJlZnJlc2gsIEhNRU5VMTYgaG1lbnVGcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSE1FTlUxNiBobWVudVdpbmRvdykKIHsKICAgICBXTkQgICAgICAgICAgICp3ICAgICAgICAgPSBXSU5fRmluZFduZFB0cihod25kKTsKICAgICBNRElDTElFTlRJTkZPICpjaTsKQEAgLTIyNSw3ICsyMjYsNyBAQAogCiAgICAgaWYgKCFmUmVmcmVzaCkgCiAgICAgICAgewotCUhXTkQgaHduZEZyYW1lID0gR2V0UGFyZW50MTYoaHduZCk7CisJSFdORDE2IGh3bmRGcmFtZSA9IEdldFBhcmVudDE2KGh3bmQpOwogCUhNRU5VMzIgb2xkRnJhbWVNZW51ID0gR2V0TWVudTMyKGh3bmRGcmFtZSk7CiAgICAgICAgIAogCWlmKCBjaS0+aHduZENoaWxkTWF4aW1pemVkICYmIGhtZW51RnJhbWUgJiYgaG1lbnVGcmFtZSE9b2xkRnJhbWVNZW51ICkKQEAgLTI4MCw5ICsyODEsOSBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkJCU1ESUljb25BcnJhbmdlCisgKiAgICAgICAgICAgIE1ESUljb25BcnJhbmdlCiAgKi8KLVdPUkQgTURJSWNvbkFycmFuZ2UoSFdORCBwYXJlbnQpCitzdGF0aWMgV09SRCBNRElJY29uQXJyYW5nZShIV05EMTYgcGFyZW50KQogewogICByZXR1cm4gQXJyYW5nZUljb25pY1dpbmRvd3MxNihwYXJlbnQpOwkvKiBBbnkgcmVhc29uIHdoeSB0aGUgICAgKi8KIAkJCQkJCS8qIGV4aXN0aW5nIGljb24gYXJyYW5nZSAqLwpAQCAtMjk3LDIwICsyOTgsMTUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQkJTURJQ3JlYXRlQ2hpbGQKICAqLwotSFdORCBNRElDcmVhdGVDaGlsZChXTkQgKncsIE1ESUNMSUVOVElORk8gKmNpLCBIV05EIHBhcmVudCwgTFBBUkFNIGxQYXJhbSApCitzdGF0aWMgSFdORDE2IE1ESUNyZWF0ZUNoaWxkKCBXTkQgKncsIE1ESUNMSUVOVElORk8gKmNpLCBIV05EMTYgcGFyZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQTURJQ1JFQVRFU1RSVUNUMTYgY3MsIExQQVJBTSBsUGFyYW0gKQogewogICAgIFBPSU5UMTYgICAgICAgICAgcG9zWzJdOyAKLSAgICBNRElDUkVBVEVTVFJVQ1QxNiAqY3MgPSAoTURJQ1JFQVRFU1RSVUNUMTYgKilQVFJfU0VHX1RPX0xJTihsUGFyYW0pOwogICAgIERXT1JECSAgICAgc3R5bGUgPSBjcy0+c3R5bGUgfCAoV1NfQ0hJTEQgfCBXU19DTElQU0lCTElOR1MpOwotICAgIEhXTkQgCSAgICAgaHduZCwgaHduZE1heCA9IDA7CisgICAgSFdORDE2IAkgICAgIGh3bmQsIGh3bmRNYXggPSAwOwogICAgIFdPUkQJICAgICB3SURtZW51ID0gY2ktPmlkRmlyc3RDaGlsZCArIGNpLT5uQWN0aXZlQ2hpbGRyZW47CiAgICAgY2hhcgkgICAgIGxwc3RyRGVmW109Imp1bmshIjsKIAotICAgIC8qCi0gICAgICogQ3JlYXRlIGNoaWxkIHdpbmRvdwotICAgICAqCi0gICAgICovCi0KICAgICBkcHJpbnRmX21kaShzdGRuaW1wLCJNRElDcmVhdGVDaGlsZDogb3JpZ2luICVpLCVpIC0gZGltICVpLCVpLCBzdHlsZSAlMDh4XG4iLCAKIAkJCQkJIGNzLT54LCBjcy0+eSwgY3MtPmN4LCBjcy0+Y3ksICh1bnNpZ25lZCljcy0+c3R5bGUpOyAgICAKICAgICAvKiBjYWxjdWxhdGUgcGxhY2VtZW50ICovCkBAIC0zNTMsOSArMzQ5LDkgQEAKIAogICAgIGh3bmQgPSBDcmVhdGVXaW5kb3cxNiggKExQQ1NUUilQVFJfU0VHX1RPX0xJTihjcy0+c3pDbGFzcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTFBDU1RSKVBUUl9TRUdfVE9fTElOKGNzLT5zelRpdGxlKSwgc3R5bGUsIAotCQkJICBjcy0+eCwgY3MtPnksIGNzLT5jeCwgY3MtPmN5LCBwYXJlbnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgIChITUVOVTE2KXdJRG1lbnUsIHctPmhJbnN0YW5jZSwgCi0JCQkgKExQVk9JRClsUGFyYW0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgY3MtPngsIGNzLT55LCBjcy0+Y3gsIGNzLT5jeSwgcGFyZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChITUVOVTE2KXdJRG1lbnUsIHctPmhJbnN0YW5jZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoTFBWT0lEKWxQYXJhbSk7CiAKICAgICAvKiBNREkgd2luZG93cyBhcmUgV1NfQ0hJTEQgc28gdGhleSB3b24ndCBiZSBhY3RpdmF0ZWQgYnkgQ3JlYXRlV2luZG93ICovCiAKQEAgLTM5Nyw3ICszOTMsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJTURJX0NoaWxkR2V0TWluTWF4SW5mbwogICovCi12b2lkIE1ESV9DaGlsZEdldE1pbk1heEluZm8oV05EKiBjbGllbnRXbmQsIEhXTkQgaHduZCwgTUlOTUFYSU5GTzE2KiBscE1pbk1heCApCitzdGF0aWMgdm9pZCBNRElfQ2hpbGRHZXRNaW5NYXhJbmZvKCBXTkQqIGNsaWVudFduZCwgSFdORDE2IGh3bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU5NQVhJTkZPMTYqIGxwTWluTWF4ICkKIHsKICBXTkQqCWNoaWxkV25kID0gV0lOX0ZpbmRXbmRQdHIoaHduZCk7CiAgUkVDVDE2CXJlY3QgCSA9IGNsaWVudFduZC0+cmVjdENsaWVudDsKQEAgLTQyNiwxMSArNDIzLDEyIEBACiAgKgkgIHdUbyBpcyBiYXNpY2FsbHkgbFBhcmFtIG9mIFdNX01ESU5FWFQgbWVzc2FnZSBvciBleHBsaWNpdCAKICAqICAgICAgICB3aW5kb3cgaGFuZGxlCiAgKi8KLXZvaWQgTURJX1N3aXRjaEFjdGl2ZUNoaWxkKEhXTkQgY2xpZW50SHduZCwgSFdORCBjaGlsZEh3bmQsIEJPT0wgd1RvICkKK3N0YXRpYyB2b2lkIE1ESV9Td2l0Y2hBY3RpdmVDaGlsZCggSFdORDE2IGNsaWVudEh3bmQsIEhXTkQxNiBjaGlsZEh3bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wzMiB3VG8gKQogewogICAgIFdORAkJICAqdwkgICAgID0gV0lOX0ZpbmRXbmRQdHIoY2xpZW50SHduZCk7Ci0gICAgSFdORAkgICBod25kVG8gICAgPSAwOwotICAgIEhXTkQJICAgaHduZFByZXYgID0gMDsKKyAgICBIV05EMTYJICAgaHduZFRvICAgID0gMDsKKyAgICBIV05EMTYJICAgaHduZFByZXYgID0gMDsKICAgICBNRElDTElFTlRJTkZPICpjaTsKIAogICAgIGh3bmRUbyA9IE1ESV9HZXRXaW5kb3codyxjaGlsZEh3bmQsKFdPUkQpd1RvKTsKQEAgLTQ3MCw4ICs0NjgsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRElEZXN0cm95Q2hpbGQKICAqLwotSFdORCBNRElEZXN0cm95Q2hpbGQoV05EICp3X3BhcmVudCwgTURJQ0xJRU5USU5GTyAqY2ksIEhXTkQgcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgSFdORCBjaGlsZCwgQk9PTCBmbGFnRGVzdHJveSkKK3N0YXRpYyBIV05EMTYgTURJRGVzdHJveUNoaWxkKCBXTkQgKndfcGFyZW50LCBNRElDTElFTlRJTkZPICpjaSwgSFdORDE2IHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV05EMTYgY2hpbGQsIEJPT0wzMiBmbGFnRGVzdHJveSApCiB7CiAgICAgV05EICAgICAgICAgKmNoaWxkUHRyID0gV0lOX0ZpbmRXbmRQdHIoY2hpbGQpOwogCkBAIC01MTYsMTAgKzUxNCwxMCBAQAogICoKICAqIE5vdGU6IGhXbmRDaGlsZCBpcyBOVUxMIHdoZW4gbGFzdCBjaGlsZCBpcyBiZWluZyBkZXN0cm95ZWQKICAqLwotTE9ORyBNRElfQ2hpbGRBY3RpdmF0ZShXTkQgKmNsaWVudFB0ciwgSFdORCBoV25kQ2hpbGQpCitzdGF0aWMgTE9ORyBNRElfQ2hpbGRBY3RpdmF0ZSggV05EICpjbGllbnRQdHIsIEhXTkQxNiBoV25kQ2hpbGQgKQogewogICAgIE1ESUNMSUVOVElORk8gICAgICAgKmNsaWVudEluZm8gPSAoTURJQ0xJRU5USU5GTyopY2xpZW50UHRyLT53RXh0cmE7IAotICAgIEhXTkQgICAgICAgICAgICAgICAgIHByZXZBY3RpdmVXbmQgPSBjbGllbnRJbmZvLT5od25kQWN0aXZlQ2hpbGQ7CisgICAgSFdORDE2ICAgICAgICAgICAgICAgICBwcmV2QWN0aXZlV25kID0gY2xpZW50SW5mby0+aHduZEFjdGl2ZUNoaWxkOwogICAgIFdORCAgICAgICAgICAgICAgICAgKnduZFB0ciA9IFdJTl9GaW5kV25kUHRyKCBoV25kQ2hpbGQgKTsKICAgICBXTkQJCQkqd25kUHJldiA9IFdJTl9GaW5kV25kUHRyKCBwcmV2QWN0aXZlV25kICk7CiAgICAgQk9PTAkJIGlzQWN0aXZlRnJhbWVXbmQgPSAwOwkgCkBAIC02MTAsNyArNjA4LDcgQEAKICAqCiAgKiAgaVRvdGFsIHJldHVybnMgbnVtYmVyIG9mIGNoaWxkcmVuIGF2YWlsYWJsZSBmb3IgdGlsaW5nIG9yIGNhc2NhZGluZwogICovCi1NRElXQ0wqIE1ESV9CdWlsZFdDTChXTkQqIGNsaWVudFduZCwgSU5UMTYqIGlUb3RhbCkKK3N0YXRpYyBNRElXQ0wqIE1ESV9CdWlsZFdDTChXTkQqIGNsaWVudFduZCwgSU5UMTYqIGlUb3RhbCkKIHsKICAgICBNRElXQ0wgKmxpc3RUb3AsKmxpc3ROZXh0OwogICAgIFdORCAgICAqY2hpbGRXbmQ7CkBAIC02MjgsNiArNjI2LDkgQEAKICAgICB7CiAJbGlzdE5leHQgPSAoTURJV0NMKil4bWFsbG9jKHNpemVvZihNRElXQ0wpKTsKIAkKKwkvKiBGSVhNRTogcGF5IGF0dGVudGlvbiB0byBNRElUSUxFX1NLSVBESVNBQkxFRCAKKwkgKiAgICAgICAgd2hlbiBXSU5fSVNXSU4zMiBpcyBzZXQuCisJICovCiAJaWYoIChjaGlsZFduZC0+ZHdTdHlsZSAmIFdTX0RJU0FCTEVEKSB8fAogCSAgICAoY2hpbGRXbmQtPmR3U3R5bGUgJiBXU19NSU5JTUlaRSkgfHwKIAkgICAgIShjaGlsZFduZC0+ZHdTdHlsZSAmIFdTX1ZJU0lCTEUpICAgKQpAQCAtNjYxLDcgKzY2Miw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJQ3JlYXRlTURJTWVudUJpdG1hcAogICovCi1IQklUTUFQMTYgQ3JlYXRlTURJTWVudUJpdG1hcCh2b2lkKQorc3RhdGljIEhCSVRNQVAxNiBDcmVhdGVNRElNZW51Qml0bWFwKHZvaWQpCiB7CiAgSERDMzIgCQloRENTcmMgID0gQ3JlYXRlQ29tcGF0aWJsZURDMzIoMCk7CiAgSERDMzIJCWhEQ0Rlc3QJPSBDcmVhdGVDb21wYXRpYmxlREMzMihoRENTcmMpOwpAQCAtNjg5LDcgKzY5MCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJTURJQ2FzY2FkZQogICovCi1MT05HIE1ESUNhc2NhZGUoV05EKiBjbGllbnRXbmQsIE1ESUNMSUVOVElORk8gKmNpKQorc3RhdGljIExPTkcgTURJQ2FzY2FkZShXTkQqIGNsaWVudFduZCwgTURJQ0xJRU5USU5GTyAqY2kpCiB7CiAgICAgTURJV0NMCSAqbGlzdFRvcCwqbGlzdFByZXY7CiAgICAgSU5UMTYJICBkZWx0YSA9IDAsaVRvUG9zaXRpb24gPSAwLCBuID0gMDsKQEAgLTczMyw3ICs3MzQsNyBAQAogICoJCQkJCU1ESVRpbGUKICAqCiAgKi8KLUxPTkcgTURJVGlsZShXTkQqIHduZENsaWVudCwgTURJQ0xJRU5USU5GTyAqY2ksV09SRCB3UGFyYW0pCitzdGF0aWMgTE9ORyBNRElUaWxlKFdORCogd25kQ2xpZW50LCBNRElDTElFTlRJTkZPICpjaSxXT1JEIHdQYXJhbSkKIHsKICAgICBNRElXQ0wgICAgICAgKmxpc3RUb3AsKmxpc3RQcmV2OwogICAgIFJFQ1QxNiAgICAgICAgcmVjdDsKQEAgLTgzNSw3ICs4MzYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCQlNRElfQXVnbWVudEZyYW1lTWVudQogICovCi1CT09MIE1ESV9BdWdtZW50RnJhbWVNZW51KE1ESUNMSUVOVElORk8qIGNpLCBXTkQgKmZyYW1lLCBIV05EIGhDaGlsZCkKK3N0YXRpYyBCT09MMzIgTURJX0F1Z21lbnRGcmFtZU1lbnUoIE1ESUNMSUVOVElORk8qIGNpLCBXTkQgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdORDE2IGhDaGlsZCApCiB7CiAgV05EKgkJY2hpbGQgPSBXSU5fRmluZFduZFB0cihoQ2hpbGQpOwogIEhNRU5VMTYgIAloU3lzUG9wdXAgPSAwOwpAQCAtODc1LDcgKzg3Nyw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJCU1ESV9SZXN0b3JlRnJhbWVNZW51CiAgKi8KLUJPT0wgTURJX1Jlc3RvcmVGcmFtZU1lbnUoIFdORCAqZnJhbWVXbmQsIEhXTkQgaENoaWxkKQorc3RhdGljIEJPT0wzMiBNRElfUmVzdG9yZUZyYW1lTWVudSggV05EICpmcmFtZVduZCwgSFdORDE2IGhDaGlsZCApCiB7CiAgSU5UMzIgbkl0ZW1zID0gR2V0TWVudUl0ZW1Db3VudDMyKGZyYW1lV25kLT53SURtZW51KSAtIDE7CiAKQEAgLTkwMCw3ICs5MDIsOCBAQAogICoKICAqIE5vdGU6IGxwVGl0bGUgY2FuIGJlIE5VTEwKICAqLwotdm9pZCBNRElfVXBkYXRlRnJhbWVUZXh0KFdORCAqZnJhbWVXbmQsIEhXTkQgaENsaWVudCwgQk9PTCByZXBhaW50LCBMUENTVFIgbHBUaXRsZSkKK3N0YXRpYyB2b2lkIE1ESV9VcGRhdGVGcmFtZVRleHQoIFdORCAqZnJhbWVXbmQsIEhXTkQxNiBoQ2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTDMyIHJlcGFpbnQsIExQQ1NUUiBscFRpdGxlICkKIHsKICBjaGFyICAgbHBCdWZmZXJbTURJX01BWFRJVExFTEVOR1RIKzFdOwogIFdORCogCWNsaWVudFduZCA9IFdJTl9GaW5kV25kUHRyKGhDbGllbnQpOwpAQCAtOTcyLDcgKzk3NSw3IEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgaGFuZGxlciBmb3IgYWxsIE1ESSByZXF1ZXN0cy4KICAqLwotTFJFU1VMVCBNRElDbGllbnRXbmRQcm9jKEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitMUkVTVUxUIE1ESUNsaWVudFduZFByb2MoSFdORDE2IGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICAgIExQQ1JFQVRFU1RSVUNUMTYgICAgIGNzOwogICAgIExQQ0xJRU5UQ1JFQVRFU1RSVUNUMTYgY2NzOwpAQCAtOTg3LDggKzk5MCwxNiBAQAogICAgIHN3aXRjaCAobWVzc2FnZSkKICAgICB7CiAgICAgICBjYXNlIFdNX0NSRUFURToKLQljcyAgICAgICAgICAgICAgICAgICAgICA9IChMUENSRUFURVNUUlVDVDE2KSBQVFJfU0VHX1RPX0xJTihsUGFyYW0pOwotCWNjcyAgICAgICAgICAgICAgICAgICAgID0gKExQQ0xJRU5UQ1JFQVRFU1RSVUNUMTYpIFBUUl9TRUdfVE9fTElOKGNzLT5scENyZWF0ZVBhcmFtcyk7CisKKwljcyA9IChMUENSRUFURVNUUlVDVDE2KSBQVFJfU0VHX1RPX0xJTihsUGFyYW0pOworCisJLyogVHJhbnNsYXRpb24gbGF5ZXIgZG9lc24ndCBrbm93IHdoYXQncyBpbiB0aGUgY3MtPmxwQ3JlYXRlUGFyYW1zCisJICogc28gd2UgaGF2ZSB0byBrZWVwIHRyYWNrIG9mIHdoYXQgZW52aXJvbm1lbnQgd2UncmUgaW4uICovCisKKwlpZiggdy0+ZmxhZ3MgJiBXSU5fSVNXSU4zMiApCisJICAgIGNjcyA9IChMUENMSUVOVENSRUFURVNUUlVDVDE2KSBjcy0+bHBDcmVhdGVQYXJhbXM7CisgICAgICAgIGVsc2UgICAgCisJICAgIGNjcyA9IChMUENMSUVOVENSRUFURVNUUlVDVDE2KSBQVFJfU0VHX1RPX0xJTihjcy0+bHBDcmVhdGVQYXJhbXMpOwogCiAJY2ktPmhXaW5kb3dNZW51ICAgICAgICAgPSBjY3MtPmhXaW5kb3dNZW51OwogCWNpLT5pZEZpcnN0Q2hpbGQgICAgICAgID0gY2NzLT5pZEZpcnN0Q2hpbGQ7CkBAIC0xMDI4LDE4ICsxMDM5LDIzIEBACiAJcmV0dXJuIDA7CiAKICAgICAgIGNhc2UgV01fTURJQUNUSVZBVEU6Ci0gICAgICAgIGlmKCBjaS0+aHduZEFjdGl2ZUNoaWxkICE9IChIV05EKXdQYXJhbSApCi0JICAgIFNldFdpbmRvd1BvczMyKChIV05EKXdQYXJhbSwgMCwwLDAsMCwwLCBTV1BfTk9TSVpFIHwgU1dQX05PTU9WRSApOyAKKyAgICAgICAgaWYoIGNpLT5od25kQWN0aXZlQ2hpbGQgIT0gKEhXTkQxNil3UGFyYW0gKQorCSAgICBTZXRXaW5kb3dQb3MzMigoSFdORDMyKXdQYXJhbSwgMCwwLDAsMCwwLCBTV1BfTk9TSVpFIHwgU1dQX05PTU9WRSApOyAKIAlyZXR1cm4gMDsKIAogICAgICAgY2FzZSBXTV9NRElDQVNDQURFOgogCXJldHVybiBNRElDYXNjYWRlKHcsIGNpKTsKIAogICAgICAgY2FzZSBXTV9NRElDUkVBVEU6Ci0JcmV0dXJuIChMT05HKU1ESUNyZWF0ZUNoaWxkKHcsIGNpLCBod25kLCBsUGFyYW0gKTsKKyAgICAgICAgaWYoIGxQYXJhbSApCisJeworCSAgICBNRElDUkVBVEVTVFJVQ1QxNiogY3MgPSAoTURJQ1JFQVRFU1RSVUNUMTYqKSBQVFJfU0VHX1RPX0xJTihsUGFyYW0pOworCSAgICByZXR1cm4gKExPTkcpTURJQ3JlYXRlQ2hpbGQodywgY2ksIGh3bmQsIGNzLCBsUGFyYW0gKTsKKwl9CisJcmV0dXJuIDA7CiAKICAgICAgIGNhc2UgV01fTURJREVTVFJPWToKLQlyZXR1cm4gKExPTkcpTURJRGVzdHJveUNoaWxkKHcsIGNpLCBod25kLCAoSFdORCl3UGFyYW0sIFRSVUUpOworCXJldHVybiAoTE9ORylNRElEZXN0cm95Q2hpbGQodywgY2ksIGh3bmQsIChIV05EMzIpd1BhcmFtLCBUUlVFKTsKIAogICAgICAgY2FzZSBXTV9NRElHRVRBQ1RJVkU6CiAJcmV0dXJuICgoTE9ORykgY2ktPmh3bmRBY3RpdmVDaGlsZCB8IApAQCAtMTA1Nyw3ICsxMDczLDcgQEAKIAlyZXR1cm4gMDsKIAogICAgICAgY2FzZSBXTV9NRElORVhUOgotCU1ESV9Td2l0Y2hBY3RpdmVDaGlsZChod25kLCAoSFdORCl3UGFyYW0sIChsUGFyYW0pPzE6MCk7CisJTURJX1N3aXRjaEFjdGl2ZUNoaWxkKGh3bmQsIChIV05EMTYpd1BhcmFtLCAobFBhcmFtKT8xOjApOwogCWJyZWFrOwogCQogICAgICAgY2FzZSBXTV9NRElSRVNUT1JFOgpAQCAtMTA4MSw3ICsxMDk3LDcgQEAKICAgICAgIGNhc2UgV01fVlNDUk9MTDoKICAgICAgIGNhc2UgV01fSFNDUk9MTDoKIAljaS0+c2JOZWVkVXBkYXRlID0gVFJVRTsKLSAgICAgICAgU2Nyb2xsQ2hpbGRyZW4oaHduZCxtZXNzYWdlLHdQYXJhbSxsUGFyYW0pOworICAgICAgICBTY3JvbGxDaGlsZHJlbjMyKGh3bmQsbWVzc2FnZSx3UGFyYW0sbFBhcmFtKTsKIAljaS0+c2JOZWVkVXBkYXRlID0gRkFMU0U7CiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xMTAzLDIxICsxMTE5LDE0IEBACiAgICAgICAgIGlmKCB3UGFyYW0gPT0gV01fTEJVVFRPTkRPV04gKQogICAgICAgICB7CiAgICAgICAgICAgICBQT0lOVDE2ICBwdCA9IE1BS0VQT0lOVDE2KGxQYXJhbSk7Ci0gICAgICAgICAgICBIV05EICAgICBjaGlsZCA9IENoaWxkV2luZG93RnJvbVBvaW50MTYoaHduZCwgcHQpOworICAgICAgICAgICAgSFdORDE2IGNoaWxkID0gQ2hpbGRXaW5kb3dGcm9tUG9pbnQxNihod25kLCBwdCk7CiAKIAkgICAgZHByaW50Zl9tZGkoc3RkZGViLCJNRElDbGllbnQ6IG5vdGlmaWNhdGlvbiBmcm9tICUwNHggKCVpLCVpKVxuIixjaGlsZCxwdC54LHB0LnkpOwogCi0gICAgICAgICAgICBpZiggY2hpbGQgJiYgY2hpbGQgIT0gaHduZCApCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBXTkQqICAgIHduZCA9IFdJTl9GaW5kV25kUHRyKCBjaGlsZCApOwotCi0gICAgICAgICAgICAgICAgLyogaWYgd2UgZ290IG93bmVkIHBvcHVwICovCi0gICAgICAgICAgICAgICAgaWYoIHduZC0+b3duZXIgKSBjaGlsZCA9IHduZC0+b3duZXItPmh3bmRTZWxmOwotCi0gICAgICAgICAgICAgICAgaWYoIGNoaWxkICE9IGNpLT5od25kQWN0aXZlQ2hpbGQgKQotICAgICAgICAgICAgICAgICAgICBTZXRXaW5kb3dQb3MzMihjaGlsZCwgMCwwLDAsMCwwLCBTV1BfTk9TSVpFIHwgU1dQX05PTU9WRSApOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQorICAgICAgICAgICAgaWYoIGNoaWxkICYmIGNoaWxkICE9IGh3bmQgJiYKKwkJCSBjaGlsZCAhPSBjaS0+aHduZEFjdGl2ZUNoaWxkICkKKyAgICAgICAgICAgICAgICBTZXRXaW5kb3dQb3MzMihjaGlsZCwgMCwwLDAsMCwwLCBTV1BfTk9TSVpFIHwgU1dQX05PTU9WRSApOworICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgICBjYXNlIFdNX1NJWkU6CkBAIC0xMTU1LDcgKzExNjQsNyBAQAogTFJFU1VMVCBEZWZGcmFtZVByb2MxNiggSFdORDE2IGh3bmQsIEhXTkQxNiBod25kTURJQ2xpZW50LCBVSU5UMTYgbWVzc2FnZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0gKQogewotICAgIEhXTkQJICAgICAgICAgY2hpbGRId25kOworICAgIEhXTkQxNgkgICAgICAgICBjaGlsZEh3bmQ7CiAgICAgTURJQ0xJRU5USU5GTyogICAgICAgY2k7CiAgICAgV05EKiAgICAgICAgICAgICAgICAgd25kUHRyOwogCkBAIC0xMTY5LDkgKzExNzgsMTAgQEAKIAogCSAgICAvKiBjaGVjayBmb3IgcG9zc2libGUgc3lzY29tbWFuZHMgZm9yIG1heGltaXplZCBNREkgY2hpbGQgKi8KIAotCSAgICBpZiggd1BhcmFtIDwgIGNpLT5pZEZpcnN0Q2hpbGQgfHwgCi0JCXdQYXJhbSA+PSBjaS0+aWRGaXJzdENoaWxkICsgY2ktPm5BY3RpdmVDaGlsZHJlbiApCi0JICAgICAgeworCSAgICBpZiggY2kgJiYgKAorCSAgICAJd1BhcmFtIDwgIGNpLT5pZEZpcnN0Q2hpbGQgfHwgCisJCXdQYXJhbSA+PSBjaS0+aWRGaXJzdENoaWxkICsgY2ktPm5BY3RpdmVDaGlsZHJlbgorCSAgICApKXsKIAkJaWYoICh3UGFyYW0gLSAweEYwMDApICYgMHhGMDBGICkgYnJlYWs7CiAJCXN3aXRjaCggd1BhcmFtICkKIAkJICB7CkBAIC0xMjY1LDkgKzEyNzUsMTUgQEAKIAkgICAgU2VuZE1lc3NhZ2UzMkEoaHduZE1ESUNsaWVudCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwogCSAgICBicmVhazsKIAotCSAgY2FzZSBXTV9TRVRURVhUOgotICAgICAgICAgICAgICByZXR1cm4gRGVmRnJhbWVQcm9jMTYoIGh3bmQsIGh3bmRNRElDbGllbnQsIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhcmFtLCAoTFBBUkFNKVBUUl9TRUdfVE9fTElOKGxQYXJhbSkgKTsKKwkgIGNhc2UgV01fU0VUVEVYVDogeworCSAgCUxSRVNVTFQJcmV0OworCQlMUFNUUglzZWdzdHIgPSBTRUdQVFJfU1RSRFVQKChMUFNUUilsUGFyYW0pOworCisgICAgICAgICAgICAgICAgcmV0ID0gRGVmRnJhbWVQcm9jMTYoaHduZCwgaHduZE1ESUNsaWVudCwgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFyYW0sIChMUEFSQU0pU0VHUFRSX0dFVChzZWdzdHIpICk7CisJICAgICAgICBTRUdQVFJfRlJFRShzZWdzdHIpOworCQlyZXR1cm4gcmV0OworCSAgfQogCQogCSAgY2FzZSBXTV9TRVRGT0NVUzoKIAkgIGNhc2UgV01fU0laRToKQEAgLTEyOTksMTEgKzEzMTUsMTMgQEAKIAkgICAgU2VuZE1lc3NhZ2UzMlcoaHduZE1ESUNsaWVudCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwogCSAgICBicmVhazsKIAotCSAgY2FzZSBXTV9TRVRURVhUOgotICAgICAgICAgICAgICAvKiBGSVhNRTogVW5pY29kZSAqLwotICAgICAgICAgICAgICByZXR1cm4gRGVmRnJhbWVQcm9jMzJBKCBod25kLCBod25kTURJQ2xpZW50LCBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYXJhbSwgbFBhcmFtICk7Ci0JCisJICBjYXNlIFdNX1NFVFRFWFQ6IHsKKwkgICAgICBMUFNUUiB0eHQgPSBIRUFQX3N0cmR1cFd0b0EoR2V0UHJvY2Vzc0hlYXAoKSwwLChMUFdTVFIpbFBhcmFtKTsKKwkgICAgICBMUkVTVUxUIHJldCA9IERlZkZyYW1lUHJvYzMyQSggaHduZCwgaHduZE1ESUNsaWVudCwgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFyYW0sIChEV09SRCl0eHQgKTsKKwkgICAgICBIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLDAsdHh0KTsKKwkgICAgICByZXR1cm4gcmV0OworCSAgfQogCSAgY2FzZSBXTV9TRVRGT0NVUzoKIAkgIGNhc2UgV01fU0laRToKICAgICAgICAgICAgICAgcmV0dXJuIERlZkZyYW1lUHJvYzMyQSggaHduZCwgaHduZE1ESUNsaWVudCwgbWVzc2FnZSwKQEAgLTE0MDUsNyArMTQyMyw3IEBACiAKIAlpZiggd1BhcmFtID09IFNJWkVfTUFYSU1JWkVEICkKIAkgIHsKLQkgICAgSFdORCBoTWF4Q2hpbGQgPSBjaS0+aHduZENoaWxkTWF4aW1pemVkOworCSAgICBIV05EMTYgaE1heENoaWxkID0gY2ktPmh3bmRDaGlsZE1heGltaXplZDsKIAogCSAgICBpZiggaE1heENoaWxkID09IGh3bmQgKSBicmVhazsKIApAQCAtMTQzMCw3ICsxNDQ4LDcgQEAKIAogCWlmKCB3UGFyYW0gPT0gU0laRV9NSU5JTUlaRUQgKQogCSAgewotCSAgICBIV05EIHN3aXRjaFRvID0gTURJX0dldFdpbmRvdyhjbGllbnRXbmQsIGh3bmQsIDApOworCSAgICBIV05EMTYgc3dpdGNoVG8gPSBNRElfR2V0V2luZG93KGNsaWVudFduZCwgaHduZCwgMCk7CiAKIAkgICAgaWYoIHN3aXRjaFRvICkKIAkgICAgICAgIFNlbmRNZXNzYWdlMTYoIHN3aXRjaFRvLCBXTV9DSElMREFDVElWQVRFLCAwLCAwTCk7CkBAIC0xNTUzLDEwICsxNTcxLDMwIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJCQlUcmFuc2xhdGVNRElTeXNBY2NlbCAoVVNFUi40NTEpCi0gKgorICogICAgICAgICAgICAgIENyZWF0ZU1ESVdpbmRvd0EgKFVTRVIzMi43OCkKICAqLwotQk9PTCBUcmFuc2xhdGVNRElTeXNBY2NlbChIV05EIGh3bmRDbGllbnQsIExQTVNHMTYgbXNnKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgIENyZWF0ZU1ESVdpbmRvd1cgKFVTRVIzMi43OSkKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgVHJhbnNsYXRlTURJU3lzQWNjZWwzMiAgIChVU0VSMzIuNTU0KQorICovCitCT09MMzIgVHJhbnNsYXRlTURJU3lzQWNjZWwzMiggSFdORDMyIGh3bmRDbGllbnQsIExQTVNHMzIgbXNnICkKK3sKKyAgICBNU0cxNiBtc2cxNjsKKyAKKyAgICBTVFJVQ1QzMl9NU0czMnRvMTYobXNnLCZtc2cxNik7CisgICAgLyogTURJQ0xJRU5USU5GTyBpcyBzdGlsbCB0aGUgc2FtZSBmb3Igd2luMzIgYW5kIHdpbjE2IC4uLiAqLworICAgIHJldHVybiBUcmFuc2xhdGVNRElTeXNBY2NlbDE2KGh3bmRDbGllbnQsJm1zZzE2KTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgVHJhbnNsYXRlTURJU3lzQWNjZWwxNiAgIChVU0VSLjQ1MSkKKyAqLworQk9PTDE2IFRyYW5zbGF0ZU1ESVN5c0FjY2VsMTYoIEhXTkQxNiBod25kQ2xpZW50LCBMUE1TRzE2IG1zZyApCiB7CiAgIFdORCogY2xpZW50V25kID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmRDbGllbnQpOwogICBXTkQqIHduZDsKQEAgLTE1ODAsNiArMTYxOCw3IEBACiAJY2FzZSBWS19TRVBBUkFUT1I6CiAJICAgICB3UGFyYW0gPSAoIEdldEtleVN0YXRlMzIoVktfU0hJRlQpICYgMHg4MDAwICk/IFNDX05FWFRXSU5ET1c6IFNDX1BSRVZXSU5ET1c7CiAJICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWS19GNDoKIAljYXNlIFZLX1JCVVRUT046CiAJICAgICB3UGFyYW0gPSBTQ19DTE9TRTsgCiAJICAgICBicmVhazsKQEAgLTE1OTksNyArMTYzOCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDYWxjQ2hpbGRTY3JvbGwgICAoVVNFUi40NjIpCiAgKi8KLXZvaWQgQ2FsY0NoaWxkU2Nyb2xsKCBIV05EIGh3bmQsIFdPUkQgc2Nyb2xsICkKK3ZvaWQgQ2FsY0NoaWxkU2Nyb2xsKCBIV05EMTYgaHduZCwgV09SRCBzY3JvbGwgKQogewogICAgIFJFQ1QxNiBjaGlsZFJlY3QsIGNsaWVudFJlY3Q7CiAgICAgSU5UICB2bWluLCB2bWF4LCBobWluLCBobWF4LCB2cG9zLCBocG9zOwpAQCAtMTY0NSwxOCArMTY4NCwyNCBAQAogICAgICAgfSAgICAKIH0KIAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBTY3JvbGxDaGlsZHJlbiAgIChVU0VSLjQ2MykKKyAqICAgICAgICAgICBTY3JvbGxDaGlsZHJlbjE2ICAgKFVTRVIuNDYzKQogICovCi12b2lkIFNjcm9sbENoaWxkcmVuKEhXTkQgaFduZCwgVUlOVCB1TXNnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit2b2lkIFNjcm9sbENoaWxkcmVuMTYoSFdORDE2IGhXbmQsIFVJTlQxNiB1TXNnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7Ci0gV05ECSp3bmRQdHIgPSBXSU5fRmluZFduZFB0cihoV25kKTsKLSBzaG9ydCAJIG5ld1Bvcz0tMTsKLSBzaG9ydCAJIGN1clBvczsKLSBzaG9ydCAJIGxlbmd0aDsKLSBJTlQzMiAJIG1pblBvczsKLSBJTlQzMiAJIG1heFBvczsKLSBzaG9ydCAgIHNoaWZ0OworICAgIHJldHVybiBTY3JvbGxDaGlsZHJlbjMyKCBoV25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIFNjcm9sbENoaWxkcmVuMzIgICAoVVNFUjMyLjQ0NykKKyAqLwordm9pZCBTY3JvbGxDaGlsZHJlbjMyKEhXTkQzMiBoV25kLCBVSU5UMzIgdU1zZywgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFdORAkqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoaFduZCk7CisgICAgSU5UMzIgbmV3UG9zID0gLTE7CisgICAgSU5UMzIgY3VyUG9zLCBsZW5ndGgsIG1pblBvcywgbWF4UG9zLCBzaGlmdDsKIAogIGlmKCAhd25kUHRyICkgcmV0dXJuOwogCmRpZmYgLS1naXQgYS93aW5kb3dzL21lc3NhZ2UuYyBiL3dpbmRvd3MvbWVzc2FnZS5jCmluZGV4IDRjZWIyNjkuLmRmY2U4YjAgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvbWVzc2FnZS5jCisrKyBiL3dpbmRvd3MvbWVzc2FnZS5jCkBAIC0zMCw5ICszMCw2IEBACiAjZGVmaW5lIFdNX05DTU9VU0VGSVJTVCAgICAgICAgIFdNX05DTU9VU0VNT1ZFCiAjZGVmaW5lIFdNX05DTU9VU0VMQVNUICAgICAgICAgIFdNX05DTUJVVFRPTkRCTENMSwogCi0jZGVmaW5lIEhXTkRfQlJPQURDQVNUMTYgICgoSFdORDE2KTB4ZmZmZikKLSNkZWZpbmUgSFdORF9CUk9BRENBU1QzMiAgKChIV05EMzIpMHhmZmZmZmZmZikKLQogdHlwZWRlZiBlbnVtIHsgU1lTUV9NU0dfQUJBTkRPTiwgU1lTUV9NU0dfU0tJUCwgCiAgICAgICAgICAgICAgICBTWVNRX01TR19BQ0NFUFQsIFNZU1FfTVNHX0NPTlRJTlVFIH0gU1lTUV9TVEFUVVM7CiAKQEAgLTQxLDcgKzM4LDcgQEAKIAogRFdPUkQgTVNHX1dpbmVTdGFydFRpY2tzOyAvKiBUaWNrcyBhdCBXaW5lIHN0YXJ0dXAgKi8KIAotc3RhdGljIFdPUkQgZG91YmxlQ2xpY2tTcGVlZCA9IDQ1MjsKK3N0YXRpYyBVSU5UMzIgZG91YmxlQ2xpY2tTcGVlZCA9IDQ1MjsKIHN0YXRpYyBJTlQzMiBkZWJ1Z1NNUkwgPSAwOyAgICAgICAvKiBpbnRlcnRhc2sgU2VuZE1lc3NhZ2UoKSByZWN1cnNpb24gbGV2ZWwgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNzIsNyArMTY5LDcgQEAKIAllYXRNc2cgPSBzZW5kU0MgPSAxOwogICAgIGVsc2UgaWYoIHJlbW92ZSAmJiBtb3VzZUNsaWNrICkKICAgICB7Ci0gICAgICAgIEhXTkQgaHduZFRvcCA9IFdJTl9HZXRUb3BQYXJlbnQoIGhXbmQgKTsKKyAgICAgICAgSFdORDMyIGh3bmRUb3AgPSBXSU5fR2V0VG9wUGFyZW50KCBoV25kICk7CiAKIAlpZiggbW91c2VDbGljayA9PSAxICkKIAl7CkBAIC0zNzYsNyArMzczLDcgQEAKICAgICAgQXN5bmNLZXlTdGF0ZVRhYmxlW1ZLX0xCVVRUT05dPSBJbnB1dEtleVN0YXRlVGFibGVbVktfTEJVVFRPTl0gPSBNb3VzZUJ1dHRvbnNTdGF0ZXNbMF0gPDwgODsKICAgICAgQXN5bmNLZXlTdGF0ZVRhYmxlW1ZLX01CVVRUT05dPSBJbnB1dEtleVN0YXRlVGFibGVbVktfTUJVVFRPTl0gPSBNb3VzZUJ1dHRvbnNTdGF0ZXNbMV0gPDwgODsKICAgICAgQXN5bmNLZXlTdGF0ZVRhYmxlW1ZLX1JCVVRUT05dPSBJbnB1dEtleVN0YXRlVGFibGVbVktfUkJVVFRPTl0gPSBNb3VzZUJ1dHRvbnNTdGF0ZXNbMl0gPDwgODsKLSAgICAgU2V0Q3Vyc29yUG9zKHRtcE1zZy0+cGFyYW1MLHRtcE1zZy0+cGFyYW1IKTsKKyAgICAgU2V0Q3Vyc29yUG9zMzIodG1wTXNnLT5wYXJhbUwsdG1wTXNnLT5wYXJhbUgpOwogICAgICBsUGFyYW09TUFLRUxPTkcodG1wTXNnLT5wYXJhbUwsdG1wTXNnLT5wYXJhbUgpOwogICAgICB3UGFyYW09MDsgICAgICAgICAgICAgCiAgICAgIGlmIChNb3VzZUJ1dHRvbnNTdGF0ZXNbMF0pIHdQYXJhbSB8PSBNS19MQlVUVE9OOwpAQCAtNTA1LDE4ICs1MDIsMzcgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIFNldERvdWJsZUNsaWNrVGltZSAgIChVU0VSLjIwKQorICogICAgICAgICAgIFNldERvdWJsZUNsaWNrVGltZTE2ICAgKFVTRVIuMjApCiAgKi8KLXZvaWQgU2V0RG91YmxlQ2xpY2tUaW1lKCBXT1JEIGludGVydmFsICkKK3ZvaWQgU2V0RG91YmxlQ2xpY2tUaW1lMTYoIFVJTlQxNiBpbnRlcnZhbCApCiB7Ci0gICAgZG91YmxlQ2xpY2tTcGVlZCA9IGludGVydmFsID8gaW50ZXJ2YWwgOiA1MDA7CisgICAgU2V0RG91YmxlQ2xpY2tUaW1lMzIoIGludGVydmFsICk7CiB9CQkKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEdldERvdWJsZUNsaWNrVGltZSAgIChVU0VSLjIxKQorICogICAgICAgICAgIFNldERvdWJsZUNsaWNrVGltZTMyICAgKFVTRVIzMi40NzkpCiAgKi8KLVdPUkQgR2V0RG91YmxlQ2xpY2tUaW1lKCkKK0JPT0wzMiBTZXREb3VibGVDbGlja1RpbWUzMiggVUlOVDMyIGludGVydmFsICkKK3sKKyAgICBkb3VibGVDbGlja1NwZWVkID0gaW50ZXJ2YWwgPyBpbnRlcnZhbCA6IDUwMDsKKyAgICByZXR1cm4gVFJVRTsKK30JCQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2V0RG91YmxlQ2xpY2tUaW1lMTYgICAoVVNFUi4yMSkKKyAqLworVUlOVDE2IEdldERvdWJsZUNsaWNrVGltZTE2KHZvaWQpCit7CisgICAgcmV0dXJuIGRvdWJsZUNsaWNrU3BlZWQ7Cit9CQkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdldERvdWJsZUNsaWNrVGltZTMyICAgKFVTRVIzMi4yMzgpCisgKi8KK1VJTlQzMiBHZXREb3VibGVDbGlja1RpbWUzMih2b2lkKQogewogICAgIHJldHVybiBkb3VibGVDbGlja1NwZWVkOwogfQkJCkBAIC01MjcsNyArNTQzLDcgQEAKICAqCiAgKiBJbXBsZW1lbnRhdGlvbiBvZiBhbiBpbnRlci10YXNrIFNlbmRNZXNzYWdlLgogICovCi1zdGF0aWMgTFJFU1VMVCBNU0dfU2VuZE1lc3NhZ2UoIEhRVUVVRTE2IGhEZXN0UXVldWUsIEhXTkQgaHduZCwgVUlOVCBtc2csCitzdGF0aWMgTFJFU1VMVCBNU0dfU2VuZE1lc3NhZ2UoIEhRVUVVRTE2IGhEZXN0UXVldWUsIEhXTkQxNiBod25kLCBVSU5UIG1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtICkKIHsKICAgICBJTlQzMgkgIHByZXZTTVJMID0gZGVidWdTTVJMOwpAQCAtNjQzLDcgKzY1OSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBNU0dfUGVla01lc3NhZ2UKICAqLwotc3RhdGljIEJPT0wgTVNHX1BlZWtNZXNzYWdlKCBMUE1TRzE2IG1zZywgSFdORCBod25kLCBXT1JEIGZpcnN0LCBXT1JEIGxhc3QsCitzdGF0aWMgQk9PTCBNU0dfUGVla01lc3NhZ2UoIExQTVNHMTYgbXNnLCBIV05EMTYgaHduZCwgV09SRCBmaXJzdCwgV09SRCBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT1JEIGZsYWdzLCBCT09MIHBlZWsgKQogewogICAgIGludCBwb3MsIG1hc2s7CkBAIC04NzksNyArODk1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIEdldE1lc3NhZ2UgICAoVVNFUi4xMDgpCiAgKi8KLUJPT0wgR2V0TWVzc2FnZSggU0VHUFRSIG1zZywgSFdORCBod25kLCBVSU5UIGZpcnN0LCBVSU5UIGxhc3QgKSAKK0JPT0wgR2V0TWVzc2FnZSggU0VHUFRSIG1zZywgSFdORDE2IGh3bmQsIFVJTlQgZmlyc3QsIFVJTlQgbGFzdCApIAogewogICAgIE1TRzE2ICpscG1zZyA9IChNU0cxNiAqKVBUUl9TRUdfVE9fTElOKG1zZyk7CiAgICAgTVNHX1BlZWtNZXNzYWdlKCBscG1zZywKQEAgLTg5NSw3ICs5MTEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgUG9zdE1lc3NhZ2UgICAoVVNFUi4xMTApCiAgKi8KLUJPT0wgUG9zdE1lc3NhZ2UoIEhXTkQgaHduZCwgV09SRCBtZXNzYWdlLCBXT1JEIHdQYXJhbSwgTE9ORyBsUGFyYW0gKQorQk9PTCBQb3N0TWVzc2FnZSggSFdORDE2IGh3bmQsIFdPUkQgbWVzc2FnZSwgV09SRCB3UGFyYW0sIExPTkcgbFBhcmFtICkKIHsKICAgICBNU0cxNiAJbXNnOwogICAgIFdORCAJKnduZFB0cjsKQEAgLTkxMyw3ICs5MjksNyBAQAogICAgICAgIHJldHVybiBUUlVFOwogI2VuZGlmICAvKiBDT05GSUdfSVBDICovCiAgICAgCi0gICAgaWYgKGh3bmQgPT0gSFdORF9CUk9BRENBU1QxNikKKyAgICBpZiAoaHduZCA9PSBIV05EX0JST0FEQ0FTVCkKICAgICB7CiAgICAgICAgIGRwcmludGZfbXNnKHN0ZGRlYiwiUG9zdE1lc3NhZ2UgLy8gSFdORF9CUk9BRENBU1QgIVxuIik7CiAgICAgICAgIGZvciAod25kUHRyID0gV0lOX0dldERlc2t0b3AoKS0+Y2hpbGQ7IHduZFB0cjsgd25kUHRyID0gd25kUHRyLT5uZXh0KQpAQCAtOTcwLDcgKzk4Niw3IEBACiAgICAgaWYgKERERV9TZW5kTWVzc2FnZSgmRERFX21zZykpIHJldHVybiBUUlVFOwogI2VuZGlmICAvKiBDT05GSUdfSVBDICovCiAKLSAgICBpZiAoaHduZCA9PSBIV05EX0JST0FEQ0FTVDE2KQorICAgIGlmIChod25kID09IEhXTkRfQlJPQURDQVNUKQogICAgIHsKICAgICAgICAgZHByaW50Zl9tc2coc3RkZGViLCJTZW5kTWVzc2FnZSAvLyBIV05EX0JST0FEQ0FTVCAhXG4iKTsKICAgICAgICAgbGlzdCA9IFdJTl9CdWlsZFdpbkFycmF5KCBXSU5fR2V0RGVza3RvcCgpICk7CkBAIC05OTIsMjQgKzEwMDgsMTggQEAKIAogICAgIGlmIChIT09LX0lzSG9va2VkKCBXSF9DQUxMV05EUFJPQyApKQogICAgIHsKLQlzdHJ1Y3QgbXNnc3RydWN0Ci0JewotCSAgICBMUEFSQU0gICBsUGFyYW07Ci0JICAgIFdQQVJBTTE2IHdQYXJhbTsKLQkgICAgVUlOVDE2ICAgd01zZzsKLQkgICAgSFdORDE2ICAgaFduZDsKLQl9ICpwbXNnOworCUxQQ1dQU1RSVUNUMTYgcG1zZzsKIAotCWlmICgocG1zZyA9IFNFR1BUUl9ORVcoc3RydWN0IG1zZ3N0cnVjdCkpKQorCWlmICgocG1zZyA9IFNFR1BUUl9ORVcoQ1dQU1RSVUNUMTYpKSkKIAl7Ci0JICAgIHBtc2ctPmhXbmQgICA9IGh3bmQ7Ci0JICAgIHBtc2ctPndNc2cgICA9IG1zZzsKKwkgICAgcG1zZy0+aHduZCAgID0gaHduZDsKKwkgICAgcG1zZy0+bWVzc2FnZT0gbXNnOwogCSAgICBwbXNnLT53UGFyYW0gPSB3UGFyYW07CiAJICAgIHBtc2ctPmxQYXJhbSA9IGxQYXJhbTsKIAkgICAgSE9PS19DYWxsSG9va3MxNiggV0hfQ0FMTFdORFBST0MsIEhDX0FDVElPTiwgMSwKIAkJCSAgICAgIChMUEFSQU0pU0VHUFRSX0dFVChwbXNnKSApOwotCSAgICBod25kICAgPSBwbXNnLT5oV25kOwotCSAgICBtc2cgICAgPSBwbXNnLT53TXNnOworCSAgICBod25kICAgPSBwbXNnLT5od25kOworCSAgICBtc2cgICAgPSBwbXNnLT5tZXNzYWdlOwogCSAgICB3UGFyYW0gPSBwbXNnLT53UGFyYW07CiAJICAgIGxQYXJhbSA9IHBtc2ctPmxQYXJhbTsKIAkgICAgU0VHUFRSX0ZSRUUoIHBtc2cgKTsKQEAgLTEwMzMsNiArMTA0MywyNiBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCSAgICAgTVNHX0NhbGxXbmRQcm9jSG9vazMyCisgKi8KK3N0YXRpYyB2b2lkICBNU0dfQ2FsbFduZFByb2NIb29rMzIoIExQTVNHMzIgcG1zZywgQk9PTDMyIGJVbmljb2RlICkKK3sKKyAgIENXUFNUUlVDVDMyIGN3cDsKKworICAgY3dwLmxQYXJhbSA9IHBtc2ctPmxQYXJhbTsKKyAgIGN3cC53UGFyYW0gPSBwbXNnLT53UGFyYW07CisgICBjd3AubWVzc2FnZSA9IHBtc2ctPm1lc3NhZ2U7CisgICBjd3AuaHduZCA9IHBtc2ctPmh3bmQ7CisKKyAgIGlmIChiVW5pY29kZSkgSE9PS19DYWxsSG9va3MzMlcoV0hfQ0FMTFdORFBST0MsIEhDX0FDVElPTiwgMSwgKExQQVJBTSkmY3dwKTsKKyAgIGVsc2UgSE9PS19DYWxsSG9va3MzMkEoIFdIX0NBTExXTkRQUk9DLCBIQ19BQ1RJT04sIDEsIChMUEFSQU0pJmN3cCApOworCisgICBwbXNnLT5sUGFyYW0gPSBjd3AubFBhcmFtOworICAgcG1zZy0+d1BhcmFtID0gY3dwLndQYXJhbTsKKyAgIHBtc2ctPm1lc3NhZ2UgPSBjd3AubWVzc2FnZTsKKyAgIHBtc2ctPmh3bmQgPSBjd3AuaHduZDsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgU2VuZE1lc3NhZ2UzMkEgICAoVVNFUjMyLjQ1MykKQEAgLTEwNDMsNyArMTA3Myw3IEBACiAgICAgV05EICoqbGlzdCwgKipwcFduZDsKICAgICBMUkVTVUxUIHJldDsKIAotICAgIGlmIChod25kID09IEhXTkRfQlJPQURDQVNUMzIpCisgICAgaWYgKGh3bmQgPT0gSFdORF9CUk9BRENBU1QpCiAgICAgewogICAgICAgICBsaXN0ID0gV0lOX0J1aWxkV2luQXJyYXkoIFdJTl9HZXREZXNrdG9wKCkgKTsKICAgICAgICAgZm9yIChwcFduZCA9IGxpc3Q7ICpwcFduZDsgcHBXbmQrKykKQEAgLTEwNTcsNyArMTA4Nyw4IEBACiAgICAgICAgIHJldHVybiBUUlVFOwogICAgIH0KIAotICAgIC8qIEZJWE1FOiBjYWxsIGhvb2tzICovCisgICAgaWYgKEhPT0tfSXNIb29rZWQoIFdIX0NBTExXTkRQUk9DICkpCisJTVNHX0NhbGxXbmRQcm9jSG9vazMyKCAoTFBNU0czMikmaHduZCwgRkFMU0UpOwogCiAgICAgaWYgKCEod25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKSkpCiAgICAgewpAQCAtMTA2NSwyNCArMTA5NiwxMiBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpZiAoV0lOUFJPQ19HZXRQcm9jVHlwZSggd25kUHRyLT53aW5wcm9jICkgPT0gV0lOX1BST0NfMTYpCi0gICAgewotICAgICAgICAvKiBVc2UgU2VuZE1lc3NhZ2UxNiBmb3Igbm93IHRvIGdldCBob29rcyByaWdodCAqLwotICAgICAgICBVSU5UMTYgbXNnMTY7Ci0gICAgICAgIFdQQVJBTTE2IHdQYXJhbTE2OwotICAgICAgICBpZiAoV0lOUFJPQ19NYXBNc2czMkFUbzE2KCBtc2csIHdQYXJhbSwgJm1zZzE2LCAmd1BhcmFtMTYsICZsUGFyYW0gKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXQgPSBTZW5kTWVzc2FnZTE2KCBod25kLCBtc2cxNiwgd1BhcmFtMTYsIGxQYXJhbSApOwotICAgICAgICBXSU5QUk9DX1VubWFwTXNnMzJBVG8xNiggbXNnLCB3UGFyYW0xNiwgbFBhcmFtICk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCiAgICAgaWYgKFFVRVVFX0lzRG9vbWVkUXVldWUod25kUHRyLT5obWVtVGFza1EpKQogICAgICAgICByZXR1cm4gMDsgIC8qIERvbid0IHNlbmQgYW55dGhpbmcgaWYgdGhlIHRhc2sgaXMgZHlpbmcgKi8KIAogICAgIGlmICh3bmRQdHItPmhtZW1UYXNrUSAhPSBHZXRUYXNrUXVldWUoMCkpCiAgICAgewotICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJTZW5kTWVzc2FnZTMyQTogaW50ZXJ0YXNrIG1lc3NhZ2Ugbm90IHN1cHBvcnRlZFxuIiApOworICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJTZW5kTWVzc2FnZTMyQTogaW50ZXJ0YXNrIG1lc3NhZ2UgWyUwNHhdIG5vdCBzdXBwb3J0ZWRcbiIsIG1zZyApOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTExMDMsNyArMTEyMiw3IEBACiAgICAgV05EICoqbGlzdCwgKipwcFduZDsKICAgICBMUkVTVUxUIHJldDsKIAotICAgIGlmIChod25kID09IEhXTkRfQlJPQURDQVNUMzIpCisgICAgaWYgKGh3bmQgPT0gSFdORF9CUk9BRENBU1QpCiAgICAgewogICAgICAgICBsaXN0ID0gV0lOX0J1aWxkV2luQXJyYXkoIFdJTl9HZXREZXNrdG9wKCkgKTsKICAgICAgICAgZm9yIChwcFduZCA9IGxpc3Q7ICpwcFduZDsgcHBXbmQrKykKQEAgLTExMTcsNyArMTEzNiw4IEBACiAgICAgICAgIHJldHVybiBUUlVFOwogICAgIH0KIAotICAgIC8qIEZJWE1FOiBjYWxsIGhvb2tzICovCisgICAgaWYgKEhPT0tfSXNIb29rZWQoIFdIX0NBTExXTkRQUk9DICkpCisgICAgICAgIE1TR19DYWxsV25kUHJvY0hvb2szMiggKExQTVNHMzIpJmh3bmQsIFRSVUUpOwogCiAgICAgaWYgKCEod25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKSkpCiAgICAgewpAQCAtMTE0MSw3ICsxMTYxLDcgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBXYWl0TWVzc2FnZSAgICAoVVNFUi4xMTIpCisgKiAgICAgICAgICAgV2FpdE1lc3NhZ2UgICAgKFVTRVIuMTEyKSAoVVNFUjMyLjU3NykKICAqLwogdm9pZCBXYWl0TWVzc2FnZSggdm9pZCApCiB7CkBAIC0xMTQ5LDEyNiArMTE2OSwxNDQgQEAKIH0KIAogCitzdHJ1Y3QgYWNjZW50X2NoYXIKK3sKKyAgICBCWVRFIGFjX2FjY2VudDsKKyAgICBCWVRFIGFjX2NoYXI7CisgICAgQllURSBhY19yZXN1bHQ7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjY2VudF9jaGFyIGFjY2VudF9jaGFyc1tdID0KK3sKKyAgICB7J2AnLCAnQScsICdcMzAwJ30sICB7J2AnLCAnYScsICdcMzQwJ30sCisgICAgeydcJycsICdBJywgJ1wzMDEnfSwgeydcJycsICdhJywgJ1wzNDEnfSwKKyAgICB7J14nLCAnQScsICdcMzAyJ30sICB7J14nLCAnYScsICdcMzQyJ30sCisgICAgeyd+JywgJ0EnLCAnXDMwMyd9LCAgeyd+JywgJ2EnLCAnXDM0Myd9LAorICAgIHsnIicsICdBJywgJ1wzMDQnfSwgIHsnIicsICdhJywgJ1wzNDQnfSwKKyAgICB7J08nLCAnQScsICdcMzA1J30sICB7J28nLCAnYScsICdcMzQ1J30sCisgICAgeycwJywgJ0EnLCAnXDMwNSd9LCAgeycwJywgJ2EnLCAnXDM0NSd9LAorICAgIHsnQScsICdBJywgJ1wzMDUnfSwgIHsnYScsICdhJywgJ1wzNDUnfSwKKyAgICB7J0EnLCAnRScsICdcMzA2J30sICB7J2EnLCAnZScsICdcMzQ2J30sCisgICAgeycsJywgJ0MnLCAnXDMwNyd9LCAgeycsJywgJ2MnLCAnXDM0Nyd9LAorICAgIHsnYCcsICdFJywgJ1wzMTAnfSwgIHsnYCcsICdlJywgJ1wzNTAnfSwKKyAgICB7J1wnJywgJ0UnLCAnXDMxMSd9LCB7J1wnJywgJ2UnLCAnXDM1MSd9LAorICAgIHsnXicsICdFJywgJ1wzMTInfSwgIHsnXicsICdlJywgJ1wzNTInfSwKKyAgICB7JyInLCAnRScsICdcMzEzJ30sICB7JyInLCAnZScsICdcMzUzJ30sCisgICAgeydgJywgJ0knLCAnXDMxNCd9LCAgeydgJywgJ2knLCAnXDM1NCd9LAorICAgIHsnXCcnLCAnSScsICdcMzE1J30sIHsnXCcnLCAnaScsICdcMzU1J30sCisgICAgeydeJywgJ0knLCAnXDMxNid9LCAgeydeJywgJ2knLCAnXDM1Nid9LAorICAgIHsnIicsICdJJywgJ1wzMTcnfSwgIHsnIicsICdpJywgJ1wzNTcnfSwKKyAgICB7Jy0nLCAnRCcsICdcMzIwJ30sICB7Jy0nLCAnZCcsICdcMzYwJ30sCisgICAgeyd+JywgJ04nLCAnXDMyMSd9LCAgeyd+JywgJ24nLCAnXDM2MSd9LAorICAgIHsnYCcsICdPJywgJ1wzMjInfSwgIHsnYCcsICdvJywgJ1wzNjInfSwKKyAgICB7J1wnJywgJ08nLCAnXDMyMyd9LCB7J1wnJywgJ28nLCAnXDM2Myd9LAorICAgIHsnXicsICdPJywgJ1wzMjQnfSwgIHsnXicsICdvJywgJ1wzNjQnfSwKKyAgICB7J34nLCAnTycsICdcMzI1J30sICB7J34nLCAnbycsICdcMzY1J30sCisgICAgeyciJywgJ08nLCAnXDMyNid9LCAgeyciJywgJ28nLCAnXDM2Nid9LAorICAgIHsnLycsICdPJywgJ1wzMzAnfSwgIHsnLycsICdvJywgJ1wzNzAnfSwKKyAgICB7J2AnLCAnVScsICdcMzMxJ30sICB7J2AnLCAndScsICdcMzcxJ30sCisgICAgeydcJycsICdVJywgJ1wzMzInfSwgeydcJycsICd1JywgJ1wzNzInfSwKKyAgICB7J14nLCAnVScsICdcMzMzJ30sICB7J14nLCAndScsICdcMzczJ30sCisgICAgeyciJywgJ1UnLCAnXDMzNCd9LCAgeyciJywgJ3UnLCAnXDM3NCd9LAorICAgIHsnXCcnLCAnWScsICdcMzM1J30sIHsnXCcnLCAneScsICdcMzc1J30sCisgICAgeydUJywgJ0gnLCAnXDMzNid9LCAgeyd0JywgJ2gnLCAnXDM3Nid9LAorICAgIHsncycsICdzJywgJ1wzMzcnfSwgIHsnIicsICd5JywgJ1wzNzcnfSwKKyAgICB7J3MnLCAneicsICdcMzM3J30sICB7J2knLCAnaicsICdcMzc3J30sCit9OworCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIFRyYW5zbGF0ZU1lc3NhZ2UgICAoVVNFUi4xMTMpCisgKiAgICAgICAgICAgTVNHX0RvVHJhbnNsYXRlTWVzc2FnZQogICoKLSAqIFRyYW5sYXRlTWVzc2FnZSB0cmFuc2xhdGUgdmlydHVhbC1rZXkgbWVzc2FnZXMgaW50byBjaGFyYWN0ZXItbWVzc2FnZXMsCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBUcmFuc2xhdGVNZXNzYWdlLgorICoKKyAqIFRyYW5zbGF0ZU1lc3NhZ2UgdHJhbnNsYXRlcyB2aXJ0dWFsLWtleSBtZXNzYWdlcyBpbnRvIGNoYXJhY3Rlci1tZXNzYWdlcywKICAqIGFzIGZvbGxvd3MgOgogICogV01fS0VZRE9XTi9XTV9LRVlVUCBjb21iaW5hdGlvbnMgcHJvZHVjZSBhIFdNX0NIQVIgb3IgV01fREVBRENIQVIgbWVzc2FnZS4KICAqIGRpdHRvIHJlcGxhY2luZyBXTV8qIHdpdGggV01fU1lTKgogICogVGhpcyBwcm9kdWNlcyBXTV9DSEFSIG1lc3NhZ2VzIG9ubHkgZm9yIGtleXMgbWFwcGVkIHRvIEFTQ0lJIGNoYXJhY3RlcnMKICAqIGJ5IHRoZSBrZXlib2FyZCBkcml2ZXIuCiAgKi8KLQotY29uc3Qgc3RydWN0IGFjY2VudF9jaGFyCi0JewotCUJZVEUgYWNfYWNjZW50OwotCUJZVEUgYWNfY2hhcjsKLQlCWVRFIGFjX3Jlc3VsdDsKLQl9IGFjY2VudF9jaGFyc1tdID0KLQl7Ci0JeydgJywgJ0EnLCAnXDMwMCd9LAl7J2AnLCAnYScsICdcMzQwJ30sCi0JeydcJycsICdBJywgJ1wzMDEnfSwJeydcJycsICdhJywgJ1wzNDEnfSwKLQl7J14nLCAnQScsICdcMzAyJ30sCXsnXicsICdhJywgJ1wzNDInfSwKLQl7J34nLCAnQScsICdcMzAzJ30sCXsnficsICdhJywgJ1wzNDMnfSwKLQl7JyInLCAnQScsICdcMzA0J30sCXsnIicsICdhJywgJ1wzNDQnfSwKLQl7J08nLCAnQScsICdcMzA1J30sCXsnbycsICdhJywgJ1wzNDUnfSwKLQl7JzAnLCAnQScsICdcMzA1J30sCXsnMCcsICdhJywgJ1wzNDUnfSwKLQl7J0EnLCAnQScsICdcMzA1J30sCXsnYScsICdhJywgJ1wzNDUnfSwKLQl7J0EnLCAnRScsICdcMzA2J30sCXsnYScsICdlJywgJ1wzNDYnfSwKLQl7JywnLCAnQycsICdcMzA3J30sCXsnLCcsICdjJywgJ1wzNDcnfSwKLQl7J2AnLCAnRScsICdcMzEwJ30sCXsnYCcsICdlJywgJ1wzNTAnfSwKLQl7J1wnJywgJ0UnLCAnXDMxMSd9LAl7J1wnJywgJ2UnLCAnXDM1MSd9LAotCXsnXicsICdFJywgJ1wzMTInfSwJeydeJywgJ2UnLCAnXDM1Mid9LAotCXsnIicsICdFJywgJ1wzMTMnfSwJeyciJywgJ2UnLCAnXDM1Myd9LAotCXsnYCcsICdJJywgJ1wzMTQnfSwJeydgJywgJ2knLCAnXDM1NCd9LAotCXsnXCcnLCAnSScsICdcMzE1J30sCXsnXCcnLCAnaScsICdcMzU1J30sCi0JeydeJywgJ0knLCAnXDMxNid9LAl7J14nLCAnaScsICdcMzU2J30sCi0JeyciJywgJ0knLCAnXDMxNyd9LAl7JyInLCAnaScsICdcMzU3J30sCi0JeyctJywgJ0QnLCAnXDMyMCd9LAl7Jy0nLCAnZCcsICdcMzYwJ30sCi0Jeyd+JywgJ04nLCAnXDMyMSd9LAl7J34nLCAnbicsICdcMzYxJ30sCi0JeydgJywgJ08nLCAnXDMyMid9LAl7J2AnLCAnbycsICdcMzYyJ30sCi0JeydcJycsICdPJywgJ1wzMjMnfSwJeydcJycsICdvJywgJ1wzNjMnfSwKLQl7J14nLCAnTycsICdcMzI0J30sCXsnXicsICdvJywgJ1wzNjQnfSwKLQl7J34nLCAnTycsICdcMzI1J30sCXsnficsICdvJywgJ1wzNjUnfSwKLQl7JyInLCAnTycsICdcMzI2J30sCXsnIicsICdvJywgJ1wzNjYnfSwKLQl7Jy8nLCAnTycsICdcMzMwJ30sCXsnLycsICdvJywgJ1wzNzAnfSwKLQl7J2AnLCAnVScsICdcMzMxJ30sCXsnYCcsICd1JywgJ1wzNzEnfSwKLQl7J1wnJywgJ1UnLCAnXDMzMid9LAl7J1wnJywgJ3UnLCAnXDM3Mid9LAotCXsnXicsICdVJywgJ1wzMzMnfSwJeydeJywgJ3UnLCAnXDM3Myd9LAotCXsnIicsICdVJywgJ1wzMzQnfSwJeyciJywgJ3UnLCAnXDM3NCd9LAotCXsnXCcnLCAnWScsICdcMzM1J30sCXsnXCcnLCAneScsICdcMzc1J30sCi0JeydUJywgJ0gnLCAnXDMzNid9LAl7J3QnLCAnaCcsICdcMzc2J30sCi0JeydzJywgJ3MnLCAnXDMzNyd9LAl7JyInLCAneScsICdcMzc3J30sCi0JeydzJywgJ3onLCAnXDMzNyd9LAl7J2knLCAnaicsICdcMzc3J30sCi0JfTsKLQotQk9PTCBUcmFuc2xhdGVNZXNzYWdlKCBMUE1TRzE2IG1zZyApCitzdGF0aWMgQk9PTDMyIE1TR19Eb1RyYW5zbGF0ZU1lc3NhZ2UoIFVJTlQzMiBtZXNzYWdlLCBIV05EMzIgaHduZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtICkKIHsKLSAgICBVSU5UIG1lc3NhZ2UgPSBtc2ctPm1lc3NhZ2U7Ci0gICAgQllURSB3cGFyYW1bMl07CisgICAgc3RhdGljIGludCBkZWFkX2NoYXI7CisgICAgQllURSB3cFsyXTsKICAgICAKLSAgICBpZiAoKGRlYnVnZ2luZ19tc2cKLQkmJiBtZXNzYWdlICE9IFdNX01PVVNFTU9WRSAmJiBtZXNzYWdlICE9IFdNX1RJTUVSKQotICAgIHx8IChkZWJ1Z2dpbmdfa2V5Ci0JJiYgbWVzc2FnZSA+PSBXTV9LRVlGSVJTVCAmJiBtZXNzYWdlIDw9IFdNX0tFWUxBU1QpKQotCSAgICBmcHJpbnRmKHN0ZGRlYiwgIlRyYW5zbGF0ZU1lc3NhZ2UoJXMsICUwNFgsICUwOGxYKVxuIiwKLQkJU1BZX0dldE1zZ05hbWUobXNnLT5tZXNzYWdlKSwgbXNnLT53UGFyYW0sIG1zZy0+bFBhcmFtKTsKLSAgICBpZiAoKG1lc3NhZ2UgPT0gV01fS0VZRE9XTikgfHwgKG1lc3NhZ2UgPT0gV01fU1lTS0VZRE9XTikpCisgICAgaWYgKChkZWJ1Z2dpbmdfbXNnICYmIG1lc3NhZ2UgIT0gV01fTU9VU0VNT1ZFICYmIG1lc3NhZ2UgIT0gV01fVElNRVIpCisgICAgICAgIHx8IChkZWJ1Z2dpbmdfa2V5CisgICAgICAgICAgICAmJiBtZXNzYWdlID49IFdNX0tFWUZJUlNUICYmIG1lc3NhZ2UgPD0gV01fS0VZTEFTVCkpCisgICAgICAgIGZwcmludGYoc3RkZGViLCAiVHJhbnNsYXRlTWVzc2FnZSglcywgJTA0WCwgJTA4bFgpXG4iLAorCQlTUFlfR2V0TXNnTmFtZShtZXNzYWdlKSwgd1BhcmFtLCBsUGFyYW0gKTsKKworICAgIGlmICgobWVzc2FnZSAhPSBXTV9LRVlET1dOKSAmJiAobWVzc2FnZSAhPSBXTV9TWVNLRVlET1dOKSkgcmV0dXJuIEZBTFNFOworCisgICAgZHByaW50Zl9rZXkoIHN0ZGRlYiwgIlRyYW5zbGF0aW5nIGtleSAlMDRYLCBzY2FuY29kZSAlMDRYXG4iLAorICAgICAgICAgICAgICAgICB3UGFyYW0sIEhJV09SRChsUGFyYW0pICk7CisKKyAgICAvKiBGSVhNRSA6IHNob3VsZCBoYW5kbGUgVG9Bc2NpaSB5aWVsZGluZyAyICovCisgICAgc3dpdGNoIChUb0FzY2lpMzIod1BhcmFtLCBISVdPUkQobFBhcmFtKSwKKyAgICAgICAgICAgICAgICAgICAgICBRdWV1ZUtleVN0YXRlVGFibGUsKExQV09SRCl3cCwgMCkpIAogICAgIHsKLQlzdGF0aWMgZGVhZF9jaGFyOworICAgIGNhc2UgMSA6CisgICAgICAgIG1lc3NhZ2UgPSAobWVzc2FnZSA9PSBXTV9LRVlET1dOKSA/IFdNX0NIQVIgOiBXTV9TWVNDSEFSOworICAgICAgICAvKiBTaG91bGQgZGVhZCBjaGFycyBoYW5kbGluZyBnbyBpbiBUb0FzY2lpID8gKi8KKyAgICAgICAgaWYgKGRlYWRfY2hhcikKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGk7CiAKLQlpZiAoZGVidWdnaW5nX21zZyB8fCBkZWJ1Z2dpbmdfa2V5KQotCSAgICBmcHJpbnRmKHN0ZGRlYiwgIlRyYW5zbGF0aW5nIGtleSAlMDRYLCBzY2FuY29kZSAlMDRYXG4iLAotCQltc2ctPndQYXJhbSwgSElXT1JEKG1zZy0+bFBhcmFtKSApOworICAgICAgICAgICAgaWYgKHdwWzBdID09ICcgJykgd3BbMF0gPSAgZGVhZF9jaGFyOworICAgICAgICAgICAgaWYgKGRlYWRfY2hhciA9PSAweGE4KSBkZWFkX2NoYXIgPSAnIic7CisgICAgICAgICAgICBlbHNlIGlmIChkZWFkX2NoYXIgPT0gMHhiNCkgZGVhZF9jaGFyID0gJ1wnJzsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoYWNjZW50X2NoYXJzKS9zaXplb2YoYWNjZW50X2NoYXJzWzBdKTsgaSsrKQorICAgICAgICAgICAgICAgIGlmICgoYWNjZW50X2NoYXJzW2ldLmFjX2FjY2VudCA9PSBkZWFkX2NoYXIpICYmCisgICAgICAgICAgICAgICAgICAgIChhY2NlbnRfY2hhcnNbaV0uYWNfY2hhciA9PSB3cFswXSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3cFswXSA9IGFjY2VudF9jaGFyc1tpXS5hY19yZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYWRfY2hhciA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZHByaW50Zl9rZXkoc3RkZGViLCAiMSAtPiBQb3N0TWVzc2FnZSglcylcbiIsIFNQWV9HZXRNc2dOYW1lKG1lc3NhZ2UpKTsKKyAgICAgICAgUG9zdE1lc3NhZ2UoIGh3bmQsIG1lc3NhZ2UsIHdwWzBdLCBsUGFyYW0gKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CiAKLQkvKiBGSVhNRSA6IHNob3VsZCBoYW5kbGUgVG9Bc2NpaSB5aWVsZGluZyAyICovCi0Jc3dpdGNoIChUb0FzY2lpMzIobXNnLT53UGFyYW0sIEhJV09SRChtc2ctPmxQYXJhbSksCi0JCVF1ZXVlS2V5U3RhdGVUYWJsZSwoTFBXT1JEKXdwYXJhbSwgMCkpIAotCSAgICB7Ci0JICAgIGNhc2UgMSA6Ci0JCW1lc3NhZ2UgPSBtZXNzYWdlID09IFdNX0tFWURPV04gPyBXTV9DSEFSIDogV01fU1lTQ0hBUjsKLQkJLyogU2hvdWxkIGRlYWQgY2hhcnMgaGFuZGxpbmcgZ28gaW4gVG9Bc2NpaSA/ICovCi0JCWlmIChkZWFkX2NoYXIpCi0JCSAgICB7Ci0JCSAgICBpbnQgaTsKLQotCQkgICAgaWYgKHdwYXJhbVswXSA9PSAnICcpCi0JCQl3cGFyYW1bMF0gPSAgZGVhZF9jaGFyOwotCQkgICAgaWYgKGRlYWRfY2hhciA9PSAweGE4KQotCQkJZGVhZF9jaGFyID0gJyInOwotCQkgICAgZWxzZSBpZiAoZGVhZF9jaGFyID09IDB4YjQpCi0JCQlkZWFkX2NoYXIgPSAnXCcnOwotCQkgICAgZm9yIChpID0gMDsKLQkJCWkgPCBzaXplb2YoYWNjZW50X2NoYXJzKSAvIHNpemVvZihhY2NlbnRfY2hhcnNbMF0pOwotCQkJaSArPSAxKQotCQkJaWYgKGFjY2VudF9jaGFyc1tpXS5hY19hY2NlbnQgPT0gZGVhZF9jaGFyCi0JCQkmJiBhY2NlbnRfY2hhcnNbaV0uYWNfY2hhciA9PSB3cGFyYW1bMF0pCi0JCQkgICAgewotCQkJICAgIHdwYXJhbVswXSA9IGFjY2VudF9jaGFyc1tpXS5hY19yZXN1bHQ7Ci0JCQkgICAgYnJlYWs7Ci0JCQkgICAgfQotCQkgICAgZGVhZF9jaGFyID0gMDsKLQkJICAgIH0KLWRwcmludGZfa2V5KHN0ZGRlYiwgIjEgLT4gUG9zdE1lc3NhZ2UoJXMpXG4iLCBTUFlfR2V0TXNnTmFtZShtZXNzYWdlKSk7Ci0JCVBvc3RNZXNzYWdlKCBtc2ctPmh3bmQsIG1lc3NhZ2UsIHdwYXJhbVswXSwgbXNnLT5sUGFyYW0gKTsKLQkJcmV0dXJuIFRSVUU7Ci0JICAgIGNhc2UgLTEgOgotCQltZXNzYWdlID0gbWVzc2FnZSA9PSBXTV9LRVlET1dOID8gV01fREVBRENIQVIgOiBXTV9TWVNERUFEQ0hBUjsKLQkJZGVhZF9jaGFyID0gd3BhcmFtWzBdOwotZHByaW50Zl9rZXkoc3RkZGViLCAiLTEgLT4gUG9zdE1lc3NhZ2UoJXMpXG4iLCBTUFlfR2V0TXNnTmFtZShtZXNzYWdlKSk7Ci0JCVBvc3RNZXNzYWdlKCBtc2ctPmh3bmQsIG1lc3NhZ2UsIHdwYXJhbVswXSwgbXNnLT5sUGFyYW0gKTsKLQkJcmV0dXJuIFRSVUU7Ci0JICAgIH0KKyAgICBjYXNlIC0xIDoKKyAgICAgICAgbWVzc2FnZSA9IChtZXNzYWdlID09IFdNX0tFWURPV04pID8gV01fREVBRENIQVIgOiBXTV9TWVNERUFEQ0hBUjsKKyAgICAgICAgZGVhZF9jaGFyID0gd3BbMF07CisgICAgICAgIGRwcmludGZfa2V5KCBzdGRkZWIsICItMSAtPiBQb3N0TWVzc2FnZSglcylcbiIsCisgICAgICAgICAgICAgICAgICAgICBTUFlfR2V0TXNnTmFtZShtZXNzYWdlKSk7CisgICAgICAgIFBvc3RNZXNzYWdlKCBod25kLCBtZXNzYWdlLCB3cFswXSwgbFBhcmFtICk7CisgICAgICAgIHJldHVybiBUUlVFOwogICAgIH0KICAgICByZXR1cm4gRkFMU0U7CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgRGlzcGF0Y2hNZXNzYWdlICAgKFVTRVIuMTE0KQorICogICAgICAgICAgIFRyYW5zbGF0ZU1lc3NhZ2UxNiAgIChVU0VSLjExMykKICAqLwotTE9ORyBEaXNwYXRjaE1lc3NhZ2UoIGNvbnN0IE1TRzE2KiBtc2cgKQorQk9PTDE2IFRyYW5zbGF0ZU1lc3NhZ2UxNiggY29uc3QgTVNHMTYgKm1zZyApCit7CisgICAgcmV0dXJuIE1TR19Eb1RyYW5zbGF0ZU1lc3NhZ2UoIG1zZy0+bWVzc2FnZSwgbXNnLT5od25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ctPndQYXJhbSwgbXNnLT5sUGFyYW0gKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBUcmFuc2xhdGVNZXNzYWdlMzIgICAoVVNFUjMyLjU1NSkKKyAqLworQk9PTDMyIFRyYW5zbGF0ZU1lc3NhZ2UzMiggY29uc3QgTVNHMzIgKm1zZyApCit7CisgICAgcmV0dXJuIE1TR19Eb1RyYW5zbGF0ZU1lc3NhZ2UoIG1zZy0+bWVzc2FnZSwgbXNnLT5od25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ctPndQYXJhbSwgbXNnLT5sUGFyYW0gKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBEaXNwYXRjaE1lc3NhZ2UxNiAgIChVU0VSLjExNCkKKyAqLworTE9ORyBEaXNwYXRjaE1lc3NhZ2UxNiggY29uc3QgTVNHMTYqIG1zZyApCiB7CiAgICAgV05EICogd25kUHRyOwogICAgIExPTkcgcmV0dmFsOwpAQCAtMTMxMyw2ICsxMzUxLDEwMCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIERpc3BhdGNoTWVzc2FnZTMyQSAgIChVU0VSMzIuMTQwKQorICovCitMT05HIERpc3BhdGNoTWVzc2FnZTMyQSggY29uc3QgTVNHMzIqIG1zZyApCit7CisgICAgV05EICogd25kUHRyOworICAgIExPTkcgcmV0dmFsOworICAgIGludCBwYWludGluZzsKKyAgICAKKyAgICAgIC8qIFByb2Nlc3MgdGltZXIgbWVzc2FnZXMgKi8KKyAgICBpZiAoKG1zZy0+bWVzc2FnZSA9PSBXTV9USU1FUikgfHwgKG1zZy0+bWVzc2FnZSA9PSBXTV9TWVNUSU1FUikpCisgICAgeworCWlmIChtc2ctPmxQYXJhbSkKKyAgICAgICAgeworLyogICAgICAgICAgICBIT09LX0NhbGxIb29rczMyQSggV0hfQ0FMTFdORFBST0MsIEhDX0FDVElPTiwgMCwgRklYTUUgKTsgKi8KKwkgICAgcmV0dXJuIENhbGxXaW5kb3dQcm9jMzJBKCAoV05EUFJPQzMyKW1zZy0+bFBhcmFtLCBtc2ctPmh3bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy0+bWVzc2FnZSwgbXNnLT53UGFyYW0sIEdldFRpY2tDb3VudCgpICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1zZy0+aHduZCkgcmV0dXJuIDA7CisgICAgaWYgKCEod25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIG1zZy0+aHduZCApKSkgcmV0dXJuIDA7CisgICAgaWYgKCF3bmRQdHItPndpbnByb2MpIHJldHVybiAwOworICAgIHBhaW50aW5nID0gKG1zZy0+bWVzc2FnZSA9PSBXTV9QQUlOVCk7CisgICAgaWYgKHBhaW50aW5nKSB3bmRQdHItPmZsYWdzIHw9IFdJTl9ORUVEU19CRUdJTlBBSU5UOworLyogICAgSE9PS19DYWxsSG9va3MzMkEoIFdIX0NBTExXTkRQUk9DLCBIQ19BQ1RJT04sIDAsIEZJWE1FICk7ICovCisKKyAgICBTUFlfRW50ZXJNZXNzYWdlKCBTUFlfRElTUEFUQ0hNRVNTQUdFMzIsIG1zZy0+aHduZCwgbXNnLT5tZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgIG1zZy0+d1BhcmFtLCBtc2ctPmxQYXJhbSApOworICAgIHJldHZhbCA9IENhbGxXaW5kb3dQcm9jMzJBKCAoV05EUFJPQzMyKXduZFB0ci0+d2lucHJvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLT5od25kLCBtc2ctPm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy0+d1BhcmFtLCBtc2ctPmxQYXJhbSApOworICAgIFNQWV9FeGl0TWVzc2FnZSggU1BZX1JFU1VMVF9PSzMyLCBtc2ctPmh3bmQsIG1zZy0+bWVzc2FnZSwgcmV0dmFsICk7CisKKyAgICBpZiAocGFpbnRpbmcgJiYgKHduZFB0ciA9IFdJTl9GaW5kV25kUHRyKCBtc2ctPmh3bmQgKSkgJiYKKyAgICAgICAgKHduZFB0ci0+ZmxhZ3MgJiBXSU5fTkVFRFNfQkVHSU5QQUlOVCkgJiYgd25kUHRyLT5ocmduVXBkYXRlKQorICAgIHsKKwlmcHJpbnRmKHN0ZGVyciwgIkJlZ2luUGFpbnQgbm90IGNhbGxlZCBvbiBXTV9QQUlOVCBmb3IgaHduZCAlMDR4IVxuIiwgCisJCW1zZy0+aHduZCk7CisJd25kUHRyLT5mbGFncyAmPSB+V0lOX05FRURTX0JFR0lOUEFJTlQ7CisgICAgICAgIC8qIFZhbGlkYXRlIHRoZSB1cGRhdGUgcmVnaW9uIHRvIGF2b2lkIGluZmluaXRlIFdNX1BBSU5UIGxvb3AgKi8KKyAgICAgICAgVmFsaWRhdGVSZWN0MzIoIG1zZy0+aHduZCwgTlVMTCApOworICAgIH0KKyAgICByZXR1cm4gcmV0dmFsOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIERpc3BhdGNoTWVzc2FnZTMyVyAgIChVU0VSMzIuMTQxKQorICovCitMT05HIERpc3BhdGNoTWVzc2FnZTMyVyggY29uc3QgTVNHMzIqIG1zZyApCit7CisgICAgV05EICogd25kUHRyOworICAgIExPTkcgcmV0dmFsOworICAgIGludCBwYWludGluZzsKKyAgICAKKyAgICAgIC8qIFByb2Nlc3MgdGltZXIgbWVzc2FnZXMgKi8KKyAgICBpZiAoKG1zZy0+bWVzc2FnZSA9PSBXTV9USU1FUikgfHwgKG1zZy0+bWVzc2FnZSA9PSBXTV9TWVNUSU1FUikpCisgICAgeworCWlmIChtc2ctPmxQYXJhbSkKKyAgICAgICAgeworLyogICAgICAgICAgICBIT09LX0NhbGxIb29rczMyVyggV0hfQ0FMTFdORFBST0MsIEhDX0FDVElPTiwgMCwgRklYTUUgKTsgKi8KKwkgICAgcmV0dXJuIENhbGxXaW5kb3dQcm9jMzJXKCAoV05EUFJPQzMyKW1zZy0+bFBhcmFtLCBtc2ctPmh3bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy0+bWVzc2FnZSwgbXNnLT53UGFyYW0sIEdldFRpY2tDb3VudCgpICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1zZy0+aHduZCkgcmV0dXJuIDA7CisgICAgaWYgKCEod25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIG1zZy0+aHduZCApKSkgcmV0dXJuIDA7CisgICAgaWYgKCF3bmRQdHItPndpbnByb2MpIHJldHVybiAwOworICAgIHBhaW50aW5nID0gKG1zZy0+bWVzc2FnZSA9PSBXTV9QQUlOVCk7CisgICAgaWYgKHBhaW50aW5nKSB3bmRQdHItPmZsYWdzIHw9IFdJTl9ORUVEU19CRUdJTlBBSU5UOworLyogICAgSE9PS19DYWxsSG9va3MzMlcoIFdIX0NBTExXTkRQUk9DLCBIQ19BQ1RJT04sIDAsIEZJWE1FICk7ICovCisKKyAgICBTUFlfRW50ZXJNZXNzYWdlKCBTUFlfRElTUEFUQ0hNRVNTQUdFMzIsIG1zZy0+aHduZCwgbXNnLT5tZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgIG1zZy0+d1BhcmFtLCBtc2ctPmxQYXJhbSApOworICAgIHJldHZhbCA9IENhbGxXaW5kb3dQcm9jMzJXKCAoV05EUFJPQzMyKXduZFB0ci0+d2lucHJvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLT5od25kLCBtc2ctPm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy0+d1BhcmFtLCBtc2ctPmxQYXJhbSApOworICAgIFNQWV9FeGl0TWVzc2FnZSggU1BZX1JFU1VMVF9PSzMyLCBtc2ctPmh3bmQsIG1zZy0+bWVzc2FnZSwgcmV0dmFsICk7CisKKyAgICBpZiAocGFpbnRpbmcgJiYgKHduZFB0ciA9IFdJTl9GaW5kV25kUHRyKCBtc2ctPmh3bmQgKSkgJiYKKyAgICAgICAgKHduZFB0ci0+ZmxhZ3MgJiBXSU5fTkVFRFNfQkVHSU5QQUlOVCkgJiYgd25kUHRyLT5ocmduVXBkYXRlKQorICAgIHsKKwlmcHJpbnRmKHN0ZGVyciwgIkJlZ2luUGFpbnQgbm90IGNhbGxlZCBvbiBXTV9QQUlOVCBmb3IgaHduZCAlMDR4IVxuIiwgCisJCW1zZy0+aHduZCk7CisJd25kUHRyLT5mbGFncyAmPSB+V0lOX05FRURTX0JFR0lOUEFJTlQ7CisgICAgICAgIC8qIFZhbGlkYXRlIHRoZSB1cGRhdGUgcmVnaW9uIHRvIGF2b2lkIGluZmluaXRlIFdNX1BBSU5UIGxvb3AgKi8KKyAgICAgICAgVmFsaWRhdGVSZWN0MzIoIG1zZy0+aHduZCwgTlVMTCApOworICAgIH0KKyAgICByZXR1cm4gcmV0dmFsOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIFJlZ2lzdGVyV2luZG93TWVzc2FnZTE2ICAgKFVTRVIuMTE4KQogICovCiBXT1JEIFJlZ2lzdGVyV2luZG93TWVzc2FnZTE2KCBTRUdQVFIgc3RyICkKQEAgLTEzNTQsMjQgKzE0ODYsMzMgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBHZXRDdXJyZW50VGltZSAgICAoVVNFUi4xNSkKKyAqICAgICAgICAgICBHZXRDdXJyZW50VGltZTE2ICAgIChVU0VSLjE1KQogICoKICAqIChlZmZlY3RpdmVseSBpZGVudGljYWwgdG8gR2V0VGlja0NvdW50KQogICovCi1EV09SRCBHZXRDdXJyZW50VGltZSh2b2lkKQorRFdPUkQgR2V0Q3VycmVudFRpbWUxNih2b2lkKQogewogICAgIHJldHVybiBHZXRUaWNrQ291bnQoKTsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBJblNlbmRNZXNzYWdlICAgIChVU0VSLjE5MikKKyAqICAgICAgICAgICBJblNlbmRNZXNzYWdlMTYgICAgKFVTRVIuMTkyKQogICovCi1CT09MIEluU2VuZE1lc3NhZ2UoKQorQk9PTDE2IEluU2VuZE1lc3NhZ2UxNih2b2lkKQoreworICAgIHJldHVybiBJblNlbmRNZXNzYWdlMzIoKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBJblNlbmRNZXNzYWdlMzIgICAgKFVTRVIzMi4zMTkpCisgKi8KK0JPT0wzMiBJblNlbmRNZXNzYWdlMzIodm9pZCkKIHsKICAgICBNRVNTQUdFUVVFVUUgKnF1ZXVlOwogCiAgICAgaWYgKCEocXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jazE2KCBHZXRUYXNrUXVldWUoMCkgKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoQk9PTClxdWV1ZS0+SW5TZW5kTWVzc2FnZUhhbmRsZTsKKyAgICByZXR1cm4gKEJPT0wzMilxdWV1ZS0+SW5TZW5kTWVzc2FnZUhhbmRsZTsKIH0KZGlmZiAtLWdpdCBhL3dpbmRvd3MvbXNnYm94LmMgYi93aW5kb3dzL21zZ2JveC5jCmluZGV4IDFhZDU0MGQuLmQ4YTA5NzggMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvbXNnYm94LmMKKysrIGIvd2luZG93cy9tc2dib3guYwpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgIGNhc2UgSURJR05PUkU6CiAgICAgIGNhc2UgSURZRVM6CiAgICAgIGNhc2UgSUROTzoKLSAgICAgIEVuZERpYWxvZyhod25kLCB3UGFyYW0pOworICAgICAgRW5kRGlhbG9nMzIoaHduZCwgd1BhcmFtKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBicmVhazsKZGlmZiAtLWdpdCBhL3dpbmRvd3Mvbm9uY2xpZW50LmMgYi93aW5kb3dzL25vbmNsaWVudC5jCmluZGV4IGJhNWY2Y2MuLmQ0MDAxYTEgMTAwNjQ0Ci0tLSBhL3dpbmRvd3Mvbm9uY2xpZW50LmMKKysrIGIvd2luZG93cy9ub25jbGllbnQuYwpAQCAtMjY4LDcgKzI2OCw3IEBACiAgKiBidXQgd2l0aG91dCB0aGUgYm9yZGVycyAoaWYgYW55KS4KICAqIFRoZSByZWN0YW5nbGUgaXMgaW4gd2luZG93IGNvb3JkaW5hdGVzIChmb3IgZHJhd2luZyB3aXRoIEdldFdpbmRvd0RDKCkpLgogICovCi1zdGF0aWMgdm9pZCBOQ19HZXRJbnNpZGVSZWN0KCBIV05EIGh3bmQsIFJFQ1QzMiAqcmVjdCApCitzdGF0aWMgdm9pZCBOQ19HZXRJbnNpZGVSZWN0KCBIV05EMzIgaHduZCwgUkVDVDMyICpyZWN0ICkKIHsKICAgICBXTkQgKiB3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggaHduZCApOwogCkBAIC00NTcsNyArNDU3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIE5DX0RyYXdNYXhCdXR0b24KICAqLwotc3RhdGljIHZvaWQgTkNfRHJhd01heEJ1dHRvbiggSFdORCBod25kLCBIREMxNiBoZGMsIEJPT0wgZG93biApCitzdGF0aWMgdm9pZCBOQ19EcmF3TWF4QnV0dG9uKCBIV05EMzIgaHduZCwgSERDMTYgaGRjLCBCT09MIGRvd24gKQogewogICAgIFJFQ1QzMiByZWN0OwogICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKTsKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgTkNfRHJhd01pbkJ1dHRvbgogICovCi1zdGF0aWMgdm9pZCBOQ19EcmF3TWluQnV0dG9uKCBIV05EIGh3bmQsIEhEQzE2IGhkYywgQk9PTCBkb3duICkKK3N0YXRpYyB2b2lkIE5DX0RyYXdNaW5CdXR0b24oIEhXTkQzMiBod25kLCBIREMxNiBoZGMsIEJPT0wgZG93biApCiB7CiAgICAgUkVDVDMyIHJlY3Q7CiAgICAgV05EICp3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggaHduZCApOwpAQCAtNTg5LDcgKzU4OSw3IEBACiAgKiBEcmF3IHRoZSB3aW5kb3cgY2FwdGlvbi4KICAqIFRoZSBjb3JyZWN0IHBlbiBmb3IgdGhlIHdpbmRvdyBmcmFtZSBtdXN0IGJlIHNlbGVjdGVkIGluIHRoZSBEQy4KICAqLwotc3RhdGljIHZvaWQgTkNfRHJhd0NhcHRpb24oIEhEQzE2IGhkYywgUkVDVDE2ICpyZWN0LCBIV05EIGh3bmQsCitzdGF0aWMgdm9pZCBOQ19EcmF3Q2FwdGlvbiggSERDMTYgaGRjLCBSRUNUMTYgKnJlY3QsIEhXTkQzMiBod25kLAogCQkJICAgIERXT1JEIHN0eWxlLCBCT09MIGFjdGl2ZSApCiB7CiAgICAgUkVDVDE2IHIgPSAqcmVjdDsKQEAgLTY0Nyw4ICs2NDcsOCBAQAogCiAgICAgaWYgKEdldFdpbmRvd1RleHQzMkEoIGh3bmQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgKSkKICAgICB7Ci0JaWYgKGFjdGl2ZSkgU2V0VGV4dENvbG9yKCBoZGMsIEdldFN5c0NvbG9yKCBDT0xPUl9DQVBUSU9OVEVYVCApICk7Ci0JZWxzZSBTZXRUZXh0Q29sb3IoIGhkYywgR2V0U3lzQ29sb3IoIENPTE9SX0lOQUNUSVZFQ0FQVElPTlRFWFQgKSApOworCWlmIChhY3RpdmUpIFNldFRleHRDb2xvciggaGRjLCBHZXRTeXNDb2xvcjMyKCBDT0xPUl9DQVBUSU9OVEVYVCApICk7CisJZWxzZSBTZXRUZXh0Q29sb3IoIGhkYywgR2V0U3lzQ29sb3IzMiggQ09MT1JfSU5BQ1RJVkVDQVBUSU9OVEVYVCApICk7CiAJU2V0QmtNb2RlMzIoIGhkYywgVFJBTlNQQVJFTlQgKTsKIAlEcmF3VGV4dDE2KCBoZGMsIGJ1ZmZlciwgLTEsICZyLAogICAgICAgICAgICAgICAgICAgICBEVF9TSU5HTEVMSU5FIHwgRFRfQ0VOVEVSIHwgRFRfVkNFTlRFUiB8IERUX05PUFJFRklYICk7CkBAIC04MDUsNyArODA1LDcgQEAKIAkgICAgV09SRCBtc2cgPSBISVdPUkQoIGxQYXJhbSApOwogCSAgICBpZiAoKG1zZyA9PSBXTV9MQlVUVE9ORE9XTikgfHwgKG1zZyA9PSBXTV9NQlVUVE9ORE9XTikgfHwKIAkJKG1zZyA9PSBXTV9SQlVUVE9ORE9XTikpCi0JCU1lc3NhZ2VCZWVwKDApOworCQlNZXNzYWdlQmVlcDMyKDApOwogCX0KIAlicmVhazsKIApAQCAtODE1LDcgKzgxNSw3IEBACiAJICAgIGlmICghKHduZFB0ciA9IFdJTl9GaW5kV25kUHRyKCBod25kICkpKSBicmVhazsKIAkgICAgaWYgKHduZFB0ci0+Y2xhc3MtPmhDdXJzb3IpCiAJICAgIHsKLQkJU2V0Q3Vyc29yKCB3bmRQdHItPmNsYXNzLT5oQ3Vyc29yICk7CisJCVNldEN1cnNvcjE2KCB3bmRQdHItPmNsYXNzLT5oQ3Vyc29yICk7CiAJCXJldHVybiBUUlVFOwogCSAgICB9CiAJICAgIGVsc2UgcmV0dXJuIEZBTFNFOwpAQCAtODIzLDIzICs4MjMsMjMgQEAKIAogICAgIGNhc2UgSFRMRUZUOgogICAgIGNhc2UgSFRSSUdIVDoKLQlyZXR1cm4gKExPTkcpU2V0Q3Vyc29yKCBMb2FkQ3Vyc29yMTYoIDAsIElEQ19TSVpFV0UgKSApOworCXJldHVybiAoTE9ORylTZXRDdXJzb3IxNiggTG9hZEN1cnNvcjE2KCAwLCBJRENfU0laRVdFICkgKTsKIAogICAgIGNhc2UgSFRUT1A6CiAgICAgY2FzZSBIVEJPVFRPTToKLQlyZXR1cm4gKExPTkcpU2V0Q3Vyc29yKCBMb2FkQ3Vyc29yMTYoIDAsIElEQ19TSVpFTlMgKSApOworCXJldHVybiAoTE9ORylTZXRDdXJzb3IxNiggTG9hZEN1cnNvcjE2KCAwLCBJRENfU0laRU5TICkgKTsKIAogICAgIGNhc2UgSFRUT1BMRUZUOgogICAgIGNhc2UgSFRCT1RUT01SSUdIVDoJCi0JcmV0dXJuIChMT05HKVNldEN1cnNvciggTG9hZEN1cnNvcjE2KCAwLCBJRENfU0laRU5XU0UgKSApOworCXJldHVybiAoTE9ORylTZXRDdXJzb3IxNiggTG9hZEN1cnNvcjE2KCAwLCBJRENfU0laRU5XU0UgKSApOwogCiAgICAgY2FzZSBIVFRPUFJJR0hUOgogICAgIGNhc2UgSFRCT1RUT01MRUZUOgotCXJldHVybiAoTE9ORylTZXRDdXJzb3IoIExvYWRDdXJzb3IxNiggMCwgSURDX1NJWkVORVNXICkgKTsKKwlyZXR1cm4gKExPTkcpU2V0Q3Vyc29yMTYoIExvYWRDdXJzb3IxNiggMCwgSURDX1NJWkVORVNXICkgKTsKICAgICB9CiAKICAgICAvKiBEZWZhdWx0IGN1cnNvcjogYXJyb3cgKi8KLSAgICByZXR1cm4gKExPTkcpU2V0Q3Vyc29yKCBMb2FkQ3Vyc29yMTYoIDAsIElEQ19BUlJPVyApICk7CisgICAgcmV0dXJuIChMT05HKVNldEN1cnNvcjE2KCBMb2FkQ3Vyc29yMTYoIDAsIElEQ19BUlJPVyApICk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtODcwLDcgKzg3MCw3IEBACiAgKgogICogVHJhY2sgYSBtb3VzZSBidXR0b24gcHJlc3Mgb24gdGhlIHN5c3RlbSBtZW51LgogICovCi1zdGF0aWMgdm9pZCBOQ19UcmFja1N5c01lbnUoIEhXTkQgaHduZCwgUE9JTlQxNiBwdCApCitzdGF0aWMgdm9pZCBOQ19UcmFja1N5c01lbnUoIEhXTkQzMiBod25kLCBQT0lOVDE2IHB0ICkKIHsKICAgICBXTkQqCXduZFB0ciA9IFdJTl9GaW5kV25kUHRyKCBod25kICk7CiAgICAgCkBAIC05MjgsNyArOTI4LDggQEAKICAqIEluaXRpYWxpc2F0aW9uIG9mIGEgbW92ZSBvciByZXNpemUsIHdoZW4gaW5pdGlhdGllZCBmcm9tIGEgbWVudSBjaG9pY2UuCiAgKiBSZXR1cm4gaGl0IHRlc3QgY29kZSBmb3IgY2FwdGlvbiBvciBzaXppbmcgYm9yZGVyLgogICovCi1zdGF0aWMgTE9ORyBOQ19TdGFydFNpemVNb3ZlKCBIV05EIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgUE9JTlQxNiAqY2FwdHVyZVBvaW50ICkKK3N0YXRpYyBMT05HIE5DX1N0YXJ0U2l6ZU1vdmUoIEhXTkQzMiBod25kLCBXUEFSQU0xNiB3UGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQT0lOVDE2ICpjYXB0dXJlUG9pbnQgKQogewogICAgIExPTkcgaGl0dGVzdCA9IDA7CiAgICAgUE9JTlQxNiBwdDsKQEAgLTEwMDAsNyArMTAwMSw3IEBACiAJfQogICAgIH0KICAgICAqY2FwdHVyZVBvaW50ID0gcHQ7Ci0gICAgU2V0Q3Vyc29yUG9zKCBjYXB0dXJlUG9pbnQtPngsIGNhcHR1cmVQb2ludC0+eSApOworICAgIFNldEN1cnNvclBvczMyKCBjYXB0dXJlUG9pbnQtPngsIGNhcHR1cmVQb2ludC0+eSApOwogICAgIE5DX0hhbmRsZVNldEN1cnNvciggaHduZCwgKFdQQVJBTTE2KWh3bmQsIE1BS0VMT05HKCBoaXR0ZXN0LCBXTV9NT1VTRU1PVkUgKSk7CiAgICAgcmV0dXJuIGhpdHRlc3Q7CiB9CkBAIC0xMDExLDcgKzEwMTIsNyBAQAogICoKICAqIFBlcmZvcm0gU0NfTU9WRSBhbmQgU0NfU0laRSBjb21tYW5kcy4KICAqLwotc3RhdGljIHZvaWQgTkNfRG9TaXplTW92ZSggSFdORCBod25kLCBXT1JEIHdQYXJhbSwgUE9JTlQxNiBwdCApCitzdGF0aWMgdm9pZCBOQ19Eb1NpemVNb3ZlKCBIV05EMzIgaHduZCwgV09SRCB3UGFyYW0sIFBPSU5UMTYgcHQgKQogewogICAgIE1TRzE2IG1zZzsKICAgICBSRUNUMTYgc2l6aW5nUmVjdCwgbW91c2VSZWN0OwpAQCAtMTA5OSw4ICsxMTAwLDggQEAKICAgICAgIGlmKCBoSWNvbiApCiAgICAgICB7CiAgICAgICAgIGhEcmFnQ3Vyc29yID0gIENVUlNPUklDT05fSWNvblRvQ3Vyc29yKCBoSWNvbiwgVFJVRSApOwotICAgICAgICBoT2xkQ3Vyc29yID0gU2V0Q3Vyc29yKGhEcmFnQ3Vyc29yKTsKLSAgICAgICAgU2hvd0N1cnNvcigxKTsKKyAgICAgICAgaE9sZEN1cnNvciA9IFNldEN1cnNvcjMyKGhEcmFnQ3Vyc29yKTsKKyAgICAgICAgU2hvd0N1cnNvcjMyKCBUUlVFICk7CiAgICAgICB9IGVsc2UgaWNvbmljID0gRkFMU0U7CiAgICAgfQogCkBAIC0xMTQzLDcgKzExNDQsNyBAQAogCWlmIChkeCB8fCBkeSkKIAl7CiAgICAgICAgICAgICBtb3ZlZCA9IDE7Ci0JICAgIGlmIChtc2cubWVzc2FnZSA9PSBXTV9LRVlET1dOKSBTZXRDdXJzb3JQb3MoIHB0LngsIHB0LnkgKTsKKwkgICAgaWYgKG1zZy5tZXNzYWdlID09IFdNX0tFWURPV04pIFNldEN1cnNvclBvczMyKCBwdC54LCBwdC55ICk7CiAJICAgIGVsc2UKIAkgICAgewogCQlSRUNUMTYgbmV3UmVjdCA9IHNpemluZ1JlY3Q7CkBAIC0xMTY3LDkgKzExNjgsOSBAQAogICAgIFJlbGVhc2VDYXB0dXJlKCk7CiAgICAgaWYoIGljb25pYyApCiAgICAgewotICAgICAgU2hvd0N1cnNvcigwKTsKLSAgICAgIFNldEN1cnNvcihoT2xkQ3Vyc29yKTsKLSAgICAgIGlmKCBoRHJhZ0N1cnNvciApIERlc3Ryb3lDdXJzb3IoaERyYWdDdXJzb3IpOworICAgICAgU2hvd0N1cnNvcjMyKCBGQUxTRSApOworICAgICAgU2V0Q3Vyc29yMzIoaE9sZEN1cnNvcik7CisgICAgICBpZiggaERyYWdDdXJzb3IgKSBEZXN0cm95Q3Vyc29yMzIoIGhEcmFnQ3Vyc29yICk7CiAgICAgfQogICAgIGVsc2UKICAgICAgIE5DX0RyYXdNb3ZpbmdGcmFtZSggaGRjLCAmc2l6aW5nUmVjdCwgdGhpY2tmcmFtZSApOwpAQCAtMTIyNSw3ICsxMjI2LDcgQEAKICAqCiAgKiBUcmFjayBhIG1vdXNlIGJ1dHRvbiBwcmVzcyBvbiB0aGUgbWluaW1pemUgb3IgbWF4aW1pemUgYm94LgogICovCi1zdGF0aWMgdm9pZCBOQ19UcmFja01pbk1heEJveCggSFdORCBod25kLCBXT1JEIHdQYXJhbSApCitzdGF0aWMgdm9pZCBOQ19UcmFja01pbk1heEJveCggSFdORDMyIGh3bmQsIFdPUkQgd1BhcmFtICkKIHsKICAgICBNU0cxNiBtc2c7CiAgICAgSERDMzIgaGRjID0gR2V0V2luZG93REMzMiggaHduZCApOwpAQCAtMTMwNiw4ICsxMzA3LDggQEAKICAgICAgICAgICAgIFNDUk9MTF9IYW5kbGVTY3JvbGxFdmVudCggaHduZCwgc2Nyb2xsYmFyLCBtc2ctPm1lc3NhZ2UsIHB0ICk7CiAJICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVHJhbnNsYXRlTWVzc2FnZSggbXNnICk7Ci0gICAgICAgICAgICBEaXNwYXRjaE1lc3NhZ2UoIG1zZyApOworICAgICAgICAgICAgVHJhbnNsYXRlTWVzc2FnZTE2KCBtc2cgKTsKKyAgICAgICAgICAgIERpc3BhdGNoTWVzc2FnZTE2KCBtc2cgKTsKICAgICAgICAgICAgIGJyZWFrOwogCX0KICAgICAgICAgaWYgKCFJc1dpbmRvdyggaHduZCApKQpkaWZmIC0tZ2l0IGEvd2luZG93cy9wYWludGluZy5jIGIvd2luZG93cy9wYWludGluZy5jCmluZGV4IGJkYzU1OTMuLjJjNWU0ZjkgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvcGFpbnRpbmcuYworKysgYi93aW5kb3dzL3BhaW50aW5nLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgIHduZFB0ci0+aHJnblVwZGF0ZSA9IDA7CiAgICAgd25kUHRyLT5mbGFncyAmPSB+V0lOX0lOVEVSTkFMX1BBSU5UOwogCi0gICAgSGlkZUNhcmV0KCBod25kICk7CisgICAgSGlkZUNhcmV0MzIoIGh3bmQgKTsKIAogICAgIGRwcmludGZfd2luKHN0ZGRlYiwiaHJnblVwZGF0ZSA9ICUwNHgsICIsIGhyZ25VcGRhdGUpOwogCkBAIC0xNzUsNyArMTc1LDcgQEAKIEJPT0wxNiBFbmRQYWludDE2KCBIV05EMTYgaHduZCwgY29uc3QgUEFJTlRTVFJVQ1QxNiogbHBzICkKIHsKICAgICBSZWxlYXNlREMxNiggaHduZCwgbHBzLT5oZGMgKTsKLSAgICBTaG93Q2FyZXQoIGh3bmQgKTsKKyAgICBTaG93Q2FyZXQzMiggaHduZCApOwogICAgIHJldHVybiBUUlVFOwogfQogCkBAIC0xODYsNyArMTg2LDcgQEAKIEJPT0wzMiBFbmRQYWludDMyKCBIV05EMzIgaHduZCwgY29uc3QgUEFJTlRTVFJVQ1QzMiAqbHBzICkKIHsKICAgICBSZWxlYXNlREMzMiggaHduZCwgbHBzLT5oZGMgKTsKLSAgICBTaG93Q2FyZXQoIGh3bmQgKTsKKyAgICBTaG93Q2FyZXQzMiggaHduZCApOwogICAgIHJldHVybiBUUlVFOwogfQogCkBAIC0yMjUsNyArMjI1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIEdldENvbnRyb2xCcnVzaCAgICAoVVNFUi4zMjYpCiAgKi8KLUhCUlVTSDE2IEdldENvbnRyb2xCcnVzaCggSFdORCBod25kLCBIREMxNiBoZGMsIFdPUkQgY29udHJvbCApCitIQlJVU0gxNiBHZXRDb250cm9sQnJ1c2goIEhXTkQxNiBod25kLCBIREMxNiBoZGMsIFVJTlQxNiBjb250cm9sICkKIHsKICAgICByZXR1cm4gKEhCUlVTSDE2KVNlbmRNZXNzYWdlMzJBKCBHZXRQYXJlbnQzMihod25kKSwgV01fQ1RMQ09MT1IrY29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV1BBUkFNMzIpaGRjLCAoTFBBUkFNKWh3bmQgKTsKZGlmZiAtLWdpdCBhL3dpbmRvd3MvcXVldWUuYyBiL3dpbmRvd3MvcXVldWUuYwppbmRleCA3MDlmYTAyLi5kYzk5YWVkIDEwMDY0NAotLS0gYS93aW5kb3dzL3F1ZXVlLmMKKysrIGIvd2luZG93cy9xdWV1ZS5jCkBAIC0zMDYsMTcgKzMwNiwyMCBAQAogICAgICAgICAhKHNlbmRlclEgPSAoTUVTU0FHRVFVRVVFKilHbG9iYWxMb2NrMTYoIHF1ZXVlLT5oU2VuZGluZ1Rhc2spKSkgCiAJeyBkcHJpbnRmX21zZyhzdGRkZWIsIlx0cmNtOiBub3RoaW5nIHRvIGRvXG4iKTsgcmV0dXJuOyB9CiAKLSAgICBxdWV1ZS0+SW5TZW5kTWVzc2FnZUhhbmRsZSA9IHF1ZXVlLT5oU2VuZGluZ1Rhc2s7Ci0gICAgaWYoICEocXVldWUtPmhTZW5kaW5nVGFzayA9IHNlbmRlclEtPmhQcmV2U2VuZGluZ1Rhc2spICkKKyAgICBpZiggIXNlbmRlclEtPmhQcmV2U2VuZGluZ1Rhc2sgKQogICAgIHsKICAgICAgIHF1ZXVlLT53YWtlQml0cyAmPSB+UVNfU0VORE1FU1NBR0U7CS8qIG5vIG1vcmUgc2VudCBtZXNzYWdlcyAqLwogICAgICAgcXVldWUtPmNoYW5nZUJpdHMgJj0gflFTX1NFTkRNRVNTQUdFOwogICAgIH0KIAotICAgIC8qIFJlbW92ZSBzZW5kaW5nIHF1ZXVlIGZyb20gdGhlIGxpc3QgKi8KKyAgICAvKiBTYXZlIGN1cnJlbnQgc3RhdGUgb24gc3RhY2sgKi8KICAgICBwcmV2U2VuZGVyICAgICAgICAgICAgICAgICA9IHF1ZXVlLT5JblNlbmRNZXNzYWdlSGFuZGxlOwogICAgIHByZXZDdHJsUHRyCQkgICAgICAgPSBxdWV1ZS0+c21SZXN1bHRDdXJyZW50OworCisgICAgLyogUmVtb3ZlIHNlbmRpbmcgcXVldWUgZnJvbSB0aGUgbGlzdCAqLworICAgIHF1ZXVlLT5JblNlbmRNZXNzYWdlSGFuZGxlID0gcXVldWUtPmhTZW5kaW5nVGFzazsKICAgICBxdWV1ZS0+c21SZXN1bHRDdXJyZW50ICAgICA9IHNlbmRlclEtPnNtUmVzdWx0SW5pdDsKKyAgICBxdWV1ZS0+aFNlbmRpbmdUYXNrCSAgICAgICA9IHNlbmRlclEtPmhQcmV2U2VuZGluZ1Rhc2s7CiAKICAgICBkcHJpbnRmX21zZyhzdGRkZWIsICJcdHJjbTogc21SZXN1bHRDdXJyZW50ID0gJTA4eCwgcHJldkN0cmwgPSAlMDh4XG4iLCAKIAkJCQkodW5zaWduZWQpcXVldWUtPnNtUmVzdWx0Q3VycmVudCwgKHVuc2lnbmVkKXByZXZDdHJsUHRyICk7CkBAIC00ODgsOCArNDkxLDggQEAKIHN0YXRpYyB2b2lkIFFVRVVFX1dha2VTb21lb25lKCBVSU5UIG1lc3NhZ2UgKQogewogICAgIFdORCoJICB3bmRQdHIgPSBOVUxMOwotICAgIEhXTkQgICAgICAgICAgaHduZDsKICAgICBXT1JEICAgICAgICAgIHdha2VCaXQ7CisgICAgSFdORDMyIGh3bmQ7CiAgICAgTUVTU0FHRVFVRVVFICpxdWV1ZSA9IHBDdXJzb3JRdWV1ZTsKIAogICAgIGlmKCAobWVzc2FnZSA+PSBXTV9LRVlGSVJTVCkgJiYgKG1lc3NhZ2UgPD0gV01fS0VZTEFTVCkgKQpAQCAtNTYxLDcgKzU2NCw3IEBACiAgICAgaWYgKChwb3MgPT0gc3lzTXNnUXVldWUtPm5leHRNZXNzYWdlKSAmJiBzeXNNc2dRdWV1ZS0+bXNnQ291bnQpCiAgICAgewogICAgICAgICAvKiBRdWV1ZSBpcyBmdWxsLCBiZWVwIChidXQgbm90IG9uIGV2ZXJ5IG1vdXNlIG1vdGlvbi4uLikgKi8KLSAgICAgICAgaWYgKG1lc3NhZ2UgIT0gV01fTU9VU0VNT1ZFKSBNZXNzYWdlQmVlcCgwKTsKKyAgICAgICAgaWYgKG1lc3NhZ2UgIT0gV01fTU9VU0VNT1ZFKSBNZXNzYWdlQmVlcDMyKDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02NDcsOSArNjUwLDE4IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgUG9zdFF1aXRNZXNzYWdlICAgKFVTRVIuNikKKyAqICAgICAgICAgICBQb3N0UXVpdE1lc3NhZ2UxNiAgIChVU0VSLjYpCiAgKi8KLXZvaWQgUG9zdFF1aXRNZXNzYWdlKCBJTlQgZXhpdENvZGUgKQordm9pZCBQb3N0UXVpdE1lc3NhZ2UxNiggSU5UMTYgZXhpdENvZGUgKQoreworICAgIFBvc3RRdWl0TWVzc2FnZTMyKCBleGl0Q29kZSApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIFBvc3RRdWl0TWVzc2FnZTMyICAgKFVTRVIzMi40MjApCisgKi8KK3ZvaWQgUG9zdFF1aXRNZXNzYWdlMzIoIElOVDMyIGV4aXRDb2RlICkKIHsKICAgICBNRVNTQUdFUVVFVUUgKnF1ZXVlOwogCkBAIC02NzMsOCArNjg1LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIEdldFdpbmRvd1RocmVhZFByb2Nlc3NJZCAgIChVU0VSMzIuMzEyKQogICovCi1EV09SRAotR2V0V2luZG93VGhyZWFkUHJvY2Vzc0lkKEhXTkQzMiBod25kLExQRFdPUkQgcHJvY2VzcykgeworRFdPUkQgR2V0V2luZG93VGhyZWFkUHJvY2Vzc0lkKCBIV05EMzIgaHduZCwgTFBEV09SRCBwcm9jZXNzICkKK3sKICAgICBIVEFTSzE2IGh0YXNrOwogICAgIFREQgkqdGRiOwogCkBAIC02OTUsOSArNzA3LDE4IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgU2V0TWVzc2FnZVF1ZXVlICAgKFVTRVIuMjY2KQorICogICAgICAgICAgIFNldE1lc3NhZ2VRdWV1ZTE2ICAgKFVTRVIuMjY2KQogICovCi1CT09MIFNldE1lc3NhZ2VRdWV1ZSggaW50IHNpemUgKQorQk9PTDE2IFNldE1lc3NhZ2VRdWV1ZTE2KCBJTlQxNiBzaXplICkKK3sKKyAgICByZXR1cm4gU2V0TWVzc2FnZVF1ZXVlMzIoIHNpemUgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBTZXRNZXNzYWdlUXVldWUzMiAgIChVU0VSMzIuNDkzKQorICovCitCT09MMzIgU2V0TWVzc2FnZVF1ZXVlMzIoIElOVDMyIHNpemUgKQogewogICAgIEhRVUVVRTE2IGhRdWV1ZSwgaE5ld1F1ZXVlOwogICAgIE1FU1NBR0VRVUVVRSAqcXVldWVQdHI7CkBAIC03NTcsMTkgKzc3OCwyOSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEdldElucHV0U3RhdGUgICAoVVNFUi4zMzUpCisgKiAgICAgICAgICAgR2V0SW5wdXRTdGF0ZTE2ICAgKFVTRVIuMzM1KQogICovCi1CT09MIEdldElucHV0U3RhdGUoKQorQk9PTDE2IEdldElucHV0U3RhdGUxNih2b2lkKQoreworICAgIHJldHVybiBHZXRJbnB1dFN0YXRlMzIoKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHZXRJbnB1dFN0YXRlMzIgICAoVVNFUjMyLjI0MykKKyAqLworQk9PTDMyIEdldElucHV0U3RhdGUzMih2b2lkKQogewogICAgIE1FU1NBR0VRVUVVRSAqcXVldWU7CiAKLSAgICBpZiAoIShxdWV1ZSA9IChNRVNTQUdFUVVFVUUgKilHbG9iYWxMb2NrMTYoIEdldFRhc2tRdWV1ZSgwKSApKSkgcmV0dXJuIEZBTFNFOworICAgIGlmICghKHF1ZXVlID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2sxNiggR2V0VGFza1F1ZXVlKDApICkpKQorICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgcmV0dXJuIHF1ZXVlLT53YWtlQml0cyAmIChRU19LRVkgfCBRU19NT1VTRUJVVFRPTik7CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgR2V0TWVzc2FnZVBvcyAgIChVU0VSLjExOSkKKyAqICAgICAgICAgICBHZXRNZXNzYWdlUG9zICAgKFVTRVIuMTE5KSAoVVNFUjMyLjI3MSkKICAqLwogRFdPUkQgR2V0TWVzc2FnZVBvcyh2b2lkKQogewpAQCAtNzgxLDcgKzgxMiw3IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgR2V0TWVzc2FnZVRpbWUgICAoVVNFUi4xMjApCisgKiAgICAgICAgICAgR2V0TWVzc2FnZVRpbWUgICAoVVNFUi4xMjApIChVU0VSMzIuMjcyKQogICovCiBMT05HIEdldE1lc3NhZ2VUaW1lKHZvaWQpCiB7CkBAIC03OTMsNyArODI0LDcgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBHZXRNZXNzYWdlRXh0cmFJbmZvICAgKFVTRVIuMjg4KQorICogICAgICAgICAgIEdldE1lc3NhZ2VFeHRyYUluZm8gICAoVVNFUi4yODgpIChVU0VSMzIuMjcwKQogICovCiBMT05HIEdldE1lc3NhZ2VFeHRyYUluZm8odm9pZCkKIHsKZGlmZiAtLWdpdCBhL3dpbmRvd3Mvc2Nyb2xsLmMgYi93aW5kb3dzL3Njcm9sbC5jCmluZGV4IDlmZWMzZTAuLjY4MmI0MzggMTAwNjQ0Ci0tLSBhL3dpbmRvd3Mvc2Nyb2xsLmMKKysrIGIvd2luZG93cy9zY3JvbGwuYwpAQCAtNjUsNyArNjUsNyBAQAogCSAgaHJnbkNsaXAgPSBDcmVhdGVSZWN0UmduSW5kaXJlY3QzMiggJnJjICk7CiAKICAgICAgICAgICBpZiAoKGhDYXJldFduZCA9PSBod25kKSB8fCBJc0NoaWxkMzIoaHduZCxoQ2FyZXRXbmQpKQotICAgICAgICAgICAgICBIaWRlQ2FyZXQoaENhcmV0V25kKTsKKyAgICAgICAgICAgICAgSGlkZUNhcmV0MzIoaENhcmV0V25kKTsKICAgICAgICAgICBlbHNlIGhDYXJldFduZCA9IDA7CiAgCiAJICBoZGMgPSBHZXREQ0V4MzIoaHduZCwgaHJnbkNsaXAsIERDWF9DQUNIRSB8IERDWF9DTElQU0lCTElOR1MpOwpAQCAtNzUsNyArNzUsNyBAQAogICAgICAgIHsKIAkgIENvcHlSZWN0MzIoJnJjLCByZWN0KTsKIAotICAgICAgICAgIGlmIChoQ2FyZXRXbmQgPT0gaHduZCkgSGlkZUNhcmV0KGhDYXJldFduZCk7CisgICAgICAgICAgaWYgKGhDYXJldFduZCA9PSBod25kKSBIaWRlQ2FyZXQzMihoQ2FyZXRXbmQpOwogICAgICAgICAgIGVsc2UgaENhcmV0V25kID0gMDsKIAogCSAgaGRjID0gR2V0RENFeDMyKCBod25kLCAwLCBEQ1hfQ0FDSEUgfCBEQ1hfVVNFU1RZTEUgKTsKQEAgLTExNCw3ICsxMTQsNyBAQAogCUdldENhcmV0UG9zMzIoJnB0KTsKIAlwdC54ICs9IGR4OyBwdC55ICs9IGR5OwogCVNldENhcmV0UG9zKHB0LngsIHB0LnkpOwotCVNob3dDYXJldChoQ2FyZXRXbmQpOworCVNob3dDYXJldDMyKGhDYXJldFduZCk7CiAgICAgfQogICAgIHJldHVybiBUUlVFOwogfQpAQCAtMzMxLDcgKzMzMSw3IEBACiAgICAgICAgICAgIE1hcFdpbmRvd1BvaW50czMyKCBoQ2FyZXQsIGhXbmQsIChMUFBPSU5UMzIpJnJjLCAyICk7CiAgICAgICAgICAgIGlmKCBJbnRlcnNlY3RSZWN0MzIobHByYywgbHByYywgJnJjKSApCiAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIEhpZGVDYXJldCgwKTsKKyAgICAgICAgICAgICAgIEhpZGVDYXJldDMyKDApOwogICAJICAgICAgIGxwcmMtPmxlZnQgPSBwdC54OyBscHJjLT50b3AgPSBwdC55OwogCSAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgICAgfQpAQCAtNDUwLDcgKzQ1MCw3IEBACiAJaWYoIGJDYXJldCApCiAJewogCSAgICBTZXRDYXJldFBvcyggcmMubGVmdCArIGR4LCByYy50b3AgKyBkeSApOwotCSAgICBTaG93Q2FyZXQoMCk7CisJICAgIFNob3dDYXJldDMyKDApOwogCX0KIAogCWlmKCBiT3duUmduICYmIGhyZ25VcGRhdGUgKSBEZWxldGVPYmplY3QzMiggaHJnblVwZGF0ZSApOwpkaWZmIC0tZ2l0IGEvd2luZG93cy9zeXNjb2xvci5jIGIvd2luZG93cy9zeXNjb2xvci5jCmluZGV4IDU5NmVjZWIuLjdiYzQ1NWIgMTAwNjQ0Ci0tLSBhL3dpbmRvd3Mvc3lzY29sb3IuYworKysgYi93aW5kb3dzL3N5c2NvbG9yLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIHN0YXRpYyBDT0xPUlJFRiBTeXNDb2xvcnNbTlVNX1NZU19DT0xPUlNdOwogCiAjZGVmaW5lIE1BS0VfU09MSUQoY29sb3IpIFwKLSAgICAgICAgIChQQUxFVFRFSU5ERVgoR2V0TmVhcmVzdFBhbGV0dGVJbmRleChTVE9DS19ERUZBVUxUX1BBTEVUVEUsKGNvbG9yKSkpKQorICAgICAgIChQQUxFVFRFSU5ERVgoR2V0TmVhcmVzdFBhbGV0dGVJbmRleDMyKFNUT0NLX0RFRkFVTFRfUEFMRVRURSwoY29sb3IpKSkpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICBTWVNDT0xPUl9TZXRDb2xvcgpAQCAtMTQ1LDIyICsxNDUsMjggQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgR2V0U3lzQ29sb3IgICAoVVNFUi4xODApIChVU0VSMzIuMjg4KQorICogICAgICAgICAgICAgR2V0U3lzQ29sb3IxNiAgIChVU0VSLjE4MCkKICAqLwotCi1DT0xPUlJFRiBHZXRTeXNDb2xvciggSU5UMzIgbkluZGV4ICkKK0NPTE9SUkVGIEdldFN5c0NvbG9yMTYoIElOVDE2IG5JbmRleCApCiB7Ci0gICAgZHByaW50Zl9zeXNjb2xvcihzdGRkZWIsIlN5c3RlbSBDb2xvciAlZCA9ICU4bHhcbiIsIAotCQkgICAgbkluZGV4LCBTeXNDb2xvcnNbbkluZGV4XSk7CiAgICAgcmV0dXJuIFN5c0NvbG9yc1tuSW5kZXhdOwogfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICBTZXRTeXNDb2xvcnMgICAgICAgICAgKFVTRVIuMTgxKQorICogICAgICAgICAgICAgR2V0U3lzQ29sb3IzMiAgIChVU0VSMzIuMjg4KQogICovCitDT0xPUlJFRiBHZXRTeXNDb2xvcjMyKCBJTlQzMiBuSW5kZXggKQoreworICAgIHJldHVybiBTeXNDb2xvcnNbbkluZGV4XTsKK30KIAotdm9pZCBTZXRTeXNDb2xvcnMoaW50IG5DaGFuZ2VzLCBMUElOVDE2IGxwU3lzQ29sb3IsIENPTE9SUkVGICpscENvbG9yVmFsdWVzKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgU2V0U3lzQ29sb3JzMTYgICAoVVNFUi4xODEpCisgKi8KK1ZPSUQgU2V0U3lzQ29sb3JzMTYoIElOVDE2IG5DaGFuZ2VzLCBjb25zdCBJTlQxNiAqbHBTeXNDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENPTE9SUkVGICpscENvbG9yVmFsdWVzICkKIHsKICAgICBpbnQgaTsKIApAQCAtMTcxLDkgKzE3NywzNSBAQAogCiAgICAgLyogU2VuZCBXTV9TWVNDT0xPUkNIQU5HRSBtZXNzYWdlIHRvIGFsbCB3aW5kb3dzICovCiAKLSAgICAvKiAuLi4uLi4uLi4uLi4uLi4uICovCisgICAgU2VuZE1lc3NhZ2UzMkEoIEhXTkRfQlJPQURDQVNULCBXTV9TWVNDT0xPUkNIQU5HRSwgMCwgMCApOwogCiAgICAgLyogUmVwYWludCBhZmZlY3RlZCBwb3J0aW9ucyBvZiBhbGwgdmlzaWJsZSB3aW5kb3dzICovCiAKLSAgICAvKiAuLi4uLi4uLi4uLi4uLi4uICovCisgICAgUmVkcmF3V2luZG93MzIoIEdldERlc2t0b3BXaW5kb3czMigpLCBOVUxMLCAwLAorICAgICAgICAgICAgICAgIFJEV19JTlZBTElEQVRFIHwgUkRXX0VSQVNFIHwgUkRXX1VQREFURU5PVyB8IFJEV19BTExDSElMRFJFTiApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICBTZXRTeXNDb2xvcnMzMiAgIChVU0VSMzIuNTA0KQorICovCitCT09MMzIgU2V0U3lzQ29sb3JzMzIoIElOVDMyIG5DaGFuZ2VzLCBjb25zdCBJTlQzMiAqbHBTeXNDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09MT1JSRUYgKmxwQ29sb3JWYWx1ZXMgKQoreworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IG5DaGFuZ2VzOyBpKyspCisgICAgeworCVNZU0NPTE9SX1NldENvbG9yKCBscFN5c0NvbG9yW2ldLCBscENvbG9yVmFsdWVzW2ldICk7CisgICAgfQorCisgICAgLyogU2VuZCBXTV9TWVNDT0xPUkNIQU5HRSBtZXNzYWdlIHRvIGFsbCB3aW5kb3dzICovCisKKyAgICBTZW5kTWVzc2FnZTMyQSggSFdORF9CUk9BRENBU1QsIFdNX1NZU0NPTE9SQ0hBTkdFLCAwLCAwICk7CisKKyAgICAvKiBSZXBhaW50IGFmZmVjdGVkIHBvcnRpb25zIG9mIGFsbCB2aXNpYmxlIHdpbmRvd3MgKi8KKworICAgIFJlZHJhd1dpbmRvdzMyKCBHZXREZXNrdG9wV2luZG93MzIoKSwgTlVMTCwgMCwKKyAgICAgICAgICAgICAgICBSRFdfSU5WQUxJREFURSB8IFJEV19FUkFTRSB8IFJEV19VUERBVEVOT1cgfCBSRFdfQUxMQ0hJTERSRU4gKTsKKyAgICByZXR1cm4gVFJVRTsKIH0KZGlmZiAtLWdpdCBhL3dpbmRvd3Mvc3lzbWV0cmljcy5jIGIvd2luZG93cy9zeXNtZXRyaWNzLmMKaW5kZXggNTMyNWE4Ni4uOGJiZmI1ZSAxMDA2NDQKLS0tIGEvd2luZG93cy9zeXNtZXRyaWNzLmMKKysrIGIvd2luZG93cy9zeXNtZXRyaWNzLmMKQEAgLTY3LDEwICs2NywyMCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEdldFN5c3RlbU1ldHJpY3MgICAgKFVTRVIuMTc5KQorICogICAgICAgICAgIEdldFN5c3RlbU1ldHJpY3MxNiAgICAoVVNFUi4xNzkpCiAgKi8KLWludCBHZXRTeXN0ZW1NZXRyaWNzKCBXT1JEIGluZGV4ICkKK0lOVDE2IEdldFN5c3RlbU1ldHJpY3MxNiggSU5UMTYgaW5kZXggKQogewotICAgIGlmIChpbmRleCA+IFNNX0NNRVRSSUNTKSByZXR1cm4gMDsKKyAgICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID4gU01fQ01FVFJJQ1MpKSByZXR1cm4gMDsKKyAgICBlbHNlIHJldHVybiBzeXNNZXRyaWNzW2luZGV4XTsgICAgCit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2V0U3lzdGVtTWV0cmljczMyICAgIChVU0VSMzIuMjkxKQorICovCitJTlQzMiBHZXRTeXN0ZW1NZXRyaWNzMzIoIElOVDMyIGluZGV4ICkKK3sKKyAgICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID4gU01fQ01FVFJJQ1MpKSByZXR1cm4gMDsKICAgICBlbHNlIHJldHVybiBzeXNNZXRyaWNzW2luZGV4XTsgICAgCiB9CmRpZmYgLS1naXQgYS93aW5kb3dzL3dpbi5jIGIvd2luZG93cy93aW4uYwppbmRleCA1ZDk2ZWUxLi5kYTQ0MDczIDEwMDY0NAotLS0gYS93aW5kb3dzL3dpbi5jCisrKyBiL3dpbmRvd3Mvd2luLmMKQEAgLTM4LDcgKzM4LDcgQEAKIC8qIERlc2t0b3Agd2luZG93ICovCiBzdGF0aWMgV05EICpwV25kRGVza3RvcCA9IE5VTEw7CiAKLXN0YXRpYyBIV05EIGh3bmRTeXNNb2RhbCA9IDA7CitzdGF0aWMgSFdORDMyIGh3bmRTeXNNb2RhbCA9IDA7CiAKIHN0YXRpYyBXT1JEIHdEcmFnV2lkdGggPSA0Owogc3RhdGljIFdPUkQgd0RyYWdIZWlnaHQ9IDM7CkBAIC00Nyw2ICs0Nyw3IEBACiBleHRlcm4gSFdORDMyIENBUkVUX0dldEh3bmQodm9pZCk7CiBleHRlcm4gQk9PTDMyIFdJTlBPU19BY3RpdmF0ZU90aGVyV2luZG93KFdORCogcFduZCk7CiBleHRlcm4gdm9pZCAgIFdJTlBPU19DaGVja0FjdGl2ZShIV05EMzIpOworZXh0ZXJuIEJPT0wzMiBFVkVOVF9DaGVja0ZvY3VzKHZvaWQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBXSU5fRmluZFduZFB0cgpAQCAtMjI0LDcgKzIyNSw3IEBACiAgKi8KIEhXTkQzMiBXSU5fRmluZFdpblRvUmVwYWludCggSFdORDMyIGh3bmQsIEhRVUVVRTE2IGhRdWV1ZSApCiB7Ci0gICAgSFdORCBod25kUmV0OworICAgIEhXTkQzMiBod25kUmV0OwogICAgIFdORCAqcFduZCA9IHBXbmREZXNrdG9wOwogCiAgICAgLyogTm90ZTogdGhlIGRlc2t0b3Agd2luZG93IG5ldmVyIGdldHMgV01fUEFJTlQgbWVzc2FnZXMgCkBAIC0zMDYsOSArMzA3LDkgQEAKICAqCiAgKiBEZXN0cm95IHN0b3JhZ2UgYXNzb2NpYXRlZCB0byBhIHdpbmRvdy4gIkludGVybmFscyIgcC4zNTgKICAqLwotc3RhdGljIHZvaWQgV0lOX0Rlc3Ryb3lXaW5kb3coIFdORCogd25kUHRyICkKK3N0YXRpYyBXTkQqIFdJTl9EZXN0cm95V2luZG93KCBXTkQqIHduZFB0ciApCiB7Ci0gICAgSFdORCBod25kID0gd25kUHRyLT5od25kU2VsZjsKKyAgICBIV05EMzIgaHduZCA9IHduZFB0ci0+aHduZFNlbGY7CiAgICAgV05EICpwV25kOwogCiAgICAgZHByaW50Zl93aW4oIHN0ZGRlYiwgIldJTl9EZXN0cm95V2luZG93OiAlMDR4XG4iLCB3bmRQdHItPmh3bmRTZWxmICk7CkBAIC0zMjEsMTEgKzMyMiw3IEBACiAgICAgLyogZnJlZSBjaGlsZCB3aW5kb3dzICovCiAKICAgICB3aGlsZSAoKHBXbmQgPSB3bmRQdHItPmNoaWxkKSkKLSAgICB7Ci0gICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgbGlua2VkIGxpc3QgcmVtYWlucyBjb2hlcmVudCAqLwotICAgICAgICB3bmRQdHItPmNoaWxkID0gcFduZC0+bmV4dDsKLSAgICAgICAgV0lOX0Rlc3Ryb3lXaW5kb3coIHBXbmQgKTsKLSAgICB9CisgICAgICAgIHduZFB0ci0+Y2hpbGQgPSBXSU5fRGVzdHJveVdpbmRvdyggcFduZCApOwogCiAgICAgU2VuZE1lc3NhZ2UzMkEoIHduZFB0ci0+aHduZFNlbGYsIFdNX05DREVTVFJPWSwgMCwgMCk7CiAKQEAgLTM3MCw4ICszNjcsMTAgQEAKIAogICAgIHduZFB0ci0+Y2xhc3MtPmNXaW5kb3dzLS07CiAgICAgd25kUHRyLT5jbGFzcyA9IE5VTEw7CisgICAgcFduZCA9IHduZFB0ci0+bmV4dDsKIAogICAgIFVTRVJfSEVBUF9GUkVFKCBod25kICk7CisgICAgcmV0dXJuIHBXbmQ7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDAwLDcgKzM5OSw3IEBACiBCT09MMzIgV0lOX0NyZWF0ZURlc2t0b3BXaW5kb3codm9pZCkKIHsKICAgICBDTEFTUyAqY2xhc3M7Ci0gICAgSFdORCBod25kRGVza3RvcDsKKyAgICBIV05EMzIgaHduZERlc2t0b3A7CiAKICAgICBkcHJpbnRmX3dpbihzdGRkZWIsIkNyZWF0aW5nIGRlc2t0b3Agd2luZG93XG4iKTsKIApAQCAtNDYwLDE0ICs0NTksMTQgQEAKICAqCiAgKiBJbXBsZW1lbnRhdGlvbiBvZiBDcmVhdGVXaW5kb3dFeCgpLgogICovCi1zdGF0aWMgSFdORCBXSU5fQ3JlYXRlV2luZG93RXgoIENSRUFURVNUUlVDVDMyQSAqY3MsIEFUT00gY2xhc3NBdG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MIHVuaWNvZGUgKQorc3RhdGljIEhXTkQzMiBXSU5fQ3JlYXRlV2luZG93RXgoIENSRUFURVNUUlVDVDMyQSAqY3MsIEFUT00gY2xhc3NBdG9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wzMiB3aW4zMiwgQk9PTDMyIHVuaWNvZGUgKQogewogICAgIENMQVNTICpjbGFzc1B0cjsKICAgICBXTkQgKnduZFB0cjsKICAgICBIV05EMTYgaHduZCwgaHduZExpbmtBZnRlcjsKICAgICBQT0lOVDE2IG1heFNpemUsIG1heFBvcywgbWluVHJhY2ssIG1heFRyYWNrOwotICAgIExSRVNVTFQgd21jcmVhdGU7CisgICAgTFJFU1VMVCAoKmxvY2FsU2VuZDMyKShIV05EMzIsIFVJTlQzMiwgV1BBUkFNMzIsIExQQVJBTSk7CiAKICAgICBkcHJpbnRmX3dpbiggc3RkZGViLCAiQ3JlYXRlV2luZG93RXg6ICIgKTsKICAgICBpZiAoSElXT1JEKGNzLT5scHN6TmFtZSkpIGRwcmludGZfd2luKCBzdGRkZWIsICInJXMnICIsIGNzLT5scHN6TmFtZSApOwpAQCAtNTY2LDcgKzU2NSw3IEBACiAgICAgd25kUHRyLT5kd1N0eWxlICAgICAgICA9IGNzLT5zdHlsZSAmIH5XU19WSVNJQkxFOwogICAgIHduZFB0ci0+ZHdFeFN0eWxlICAgICAgPSBjcy0+ZHdFeFN0eWxlOwogICAgIHduZFB0ci0+d0lEbWVudSAgICAgICAgPSAwOwotICAgIHduZFB0ci0+ZmxhZ3MgICAgICAgICAgPSAwOworICAgIHduZFB0ci0+ZmxhZ3MgICAgICAgICAgPSB3aW4zMiA/IFdJTl9JU1dJTjMyIDogMDsKICAgICB3bmRQdHItPnBWU2Nyb2xsICAgICAgID0gTlVMTDsKICAgICB3bmRQdHItPnBIU2Nyb2xsICAgICAgID0gTlVMTDsKICAgICB3bmRQdHItPnBQcm9wICAgICAgICAgID0gTlVMTDsKQEAgLTU4NSw5ICs1ODQsNyBAQAogCiAJY2J0Yy5scGNzID0gY3M7CiAJY2J0Yy5od25kSW5zZXJ0QWZ0ZXIgPSBod25kTGlua0FmdGVyOwotCXdtY3JlYXRlID0gIUhPT0tfQ2FsbEhvb2tzMzJBKCBXSF9DQlQsIEhDQlRfQ1JFQVRFV05ELCBod25kLAotCQkJCSAgICAgICAoTFBBUkFNKSZjYnRjICk7Ci0JaWYgKCF3bWNyZWF0ZSkKKwlpZiAoIEhPT0tfQ2FsbEhvb2tzMzJBKFdIX0NCVCwgSENCVF9DUkVBVEVXTkQsIGh3bmQsIChMUEFSQU0pJmNidGMpICkKIAl7CiAJICAgIGRwcmludGZfd2luKHN0ZGRlYiwgIkNyZWF0ZVdpbmRvd0V4OiBDQlQtaG9vayByZXR1cm5lZCAwXG4iKTsKIAkgICAgVVNFUl9IRUFQX0ZSRUUoIGh3bmQgKTsKQEAgLTcyNiw4NSArNzIzLDcwIEBACiAgICAgICovCiAKICAgICBtYXhQb3MueCA9IHduZFB0ci0+cmVjdFdpbmRvdy5sZWZ0OyBtYXhQb3MueSA9IHduZFB0ci0+cmVjdFdpbmRvdy50b3A7Ci0gICAgaWYgKHVuaWNvZGUpCisKKyAgICBsb2NhbFNlbmQzMiA9IHVuaWNvZGUgPyBTZW5kTWVzc2FnZTMyVyA6IFNlbmRNZXNzYWdlMzJBOworICAgIGlmKCAoKmxvY2FsU2VuZDMyKSggaHduZCwgV01fTkNDUkVBVEUsIDAsIChMUEFSQU0pY3MpICkKICAgICB7Ci0gICAgICAgIGlmICghU2VuZE1lc3NhZ2UzMlcoIGh3bmQsIFdNX05DQ1JFQVRFLCAwLCAoTFBBUkFNKWNzKSkgd21jcmVhdGUgPSAtMTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBXSU5QT1NfU2VuZE5DQ2FsY1NpemUoIGh3bmQsIEZBTFNFLCAmd25kUHRyLT5yZWN0V2luZG93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAwLCAmd25kUHRyLT5yZWN0Q2xpZW50ICk7Ci0JICAgIE9mZnNldFJlY3QxNigmd25kUHRyLT5yZWN0V2luZG93LCBtYXhQb3MueCAtIHduZFB0ci0+cmVjdFdpbmRvdy5sZWZ0LAotCQkJCQkgICAgbWF4UG9zLnkgLSB3bmRQdHItPnJlY3RXaW5kb3cudG9wKTsKLSAgICAgICAgICAgIHdtY3JlYXRlID0gU2VuZE1lc3NhZ2UzMlcoIGh3bmQsIFdNX0NSRUFURSwgMCwgKExQQVJBTSljcyApOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghU2VuZE1lc3NhZ2UzMkEoIGh3bmQsIFdNX05DQ1JFQVRFLCAwLCAoTFBBUkFNKWNzKSkgd21jcmVhdGUgPSAtMTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBXSU5QT1NfU2VuZE5DQ2FsY1NpemUoIGh3bmQsIEZBTFNFLCAmd25kUHRyLT5yZWN0V2luZG93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAwLCAmd25kUHRyLT5yZWN0Q2xpZW50ICk7Ci0gICAgICAgICAgICBPZmZzZXRSZWN0MTYoJnduZFB0ci0+cmVjdFdpbmRvdywgbWF4UG9zLnggLSB3bmRQdHItPnJlY3RXaW5kb3cubGVmdCwKKyAgICAgICAgV0lOUE9TX1NlbmROQ0NhbGNTaXplKCBod25kLCBGQUxTRSwgJnduZFB0ci0+cmVjdFdpbmRvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAwLCAmd25kUHRyLT5yZWN0Q2xpZW50ICk7CisgICAgICAgIE9mZnNldFJlY3QxNigmd25kUHRyLT5yZWN0V2luZG93LCBtYXhQb3MueCAtIHduZFB0ci0+cmVjdFdpbmRvdy5sZWZ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhQb3MueSAtIHduZFB0ci0+cmVjdFdpbmRvdy50b3ApOwotICAgICAgICAgICAgd21jcmVhdGUgPSBTZW5kTWVzc2FnZTMyQSggaHduZCwgV01fQ1JFQVRFLCAwLCAoTFBBUkFNKWNzICk7CisgICAgICAgIGlmKCAoKCpsb2NhbFNlbmQzMikoIGh3bmQsIFdNX0NSRUFURSwgMCwgKExQQVJBTSljcyApKSAhPSAtMSApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNlbmQgdGhlIHNpemUgbWVzc2FnZXMgKi8KKworICAgICAgICAgICAgaWYgKCEod25kUHRyLT5mbGFncyAmIFdJTl9ORUVEX1NJWkUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIHNlbmQgaXQgYW55d2F5ICovCisgICAgICAgICAgICAgICAgU2VuZE1lc3NhZ2UxNiggaHduZCwgV01fU0laRSwgU0laRV9SRVNUT1JFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1BS0VMT05HKHduZFB0ci0+cmVjdENsaWVudC5yaWdodC13bmRQdHItPnJlY3RDbGllbnQubGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHduZFB0ci0+cmVjdENsaWVudC5ib3R0b20td25kUHRyLT5yZWN0Q2xpZW50LnRvcCkpOworICAgICAgICAgICAgICAgIFNlbmRNZXNzYWdlMTYoIGh3bmQsIFdNX01PVkUsIDAsIE1BS0VMT05HKCB3bmRQdHItPnJlY3RDbGllbnQubGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHduZFB0ci0+cmVjdENsaWVudC50b3AgKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFdJTl9TZW5kUGFyZW50Tm90aWZ5KCBod25kLCBXTV9DUkVBVEUsIHduZFB0ci0+d0lEbWVudSwgKExQQVJBTSlod25kICk7CisgICAgICAgICAgICBpZiAoIUlzV2luZG93KGh3bmQpKSByZXR1cm4gMDsKKworICAgICAgICAgICAgLyogU2hvdyB0aGUgd2luZG93LCBtYXhpbWl6aW5nIG9yIG1pbmltaXppbmcgaWYgbmVlZGVkICovCisKKyAgICAgICAgICAgIGlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19NSU5JTUlaRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBNaW5NYXhpbWl6ZShod25kLCBTV19TSE9XTUlOTk9BQ1RJVkUsIDEpIGluICJJbnRlcm5hbHMiICovCisKKyAgICAgICAgICAgICAgICB3bmRQdHItPmR3U3R5bGUgJj0gfldTX01BWElNSVpFOworICAgICAgICAgICAgICAgIFdJTlBPU19GaW5kSWNvblBvcyggaHduZCApOworICAgICAgICAgICAgICAgIFNldFdpbmRvd1BvczMyKCBod25kLCAwLCB3bmRQdHItPnB0SWNvblBvcy54LCB3bmRQdHItPnB0SWNvblBvcy55LAorICAgICAgICAgICAgICAgICAgICAgICAgU1lTTUVUUklDU19DWElDT04sIFNZU01FVFJJQ1NfQ1lJQ09OLAorICAgICAgICAgICAgICAgICAgICAgICAgU1dQX0ZSQU1FQ0hBTkdFRCB8ICgoR2V0QWN0aXZlV2luZG93MzIoKSk/IFNXUF9OT0FDVElWQVRFIDogMCkgICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19NQVhJTUlaRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBNaW5NYXhpbWl6ZShod25kLCBTV19TSE9XTUFYSU1JWkVELCAxKSAqLworCisgICAgICAgICAgICAgICAgTkNfR2V0TWluTWF4SW5mbyggd25kUHRyLCAmbWF4U2l6ZSwgJm1heFBvcywgJm1pblRyYWNrLCAmbWF4VHJhY2sgKTsKKyAgICAgICAgICAgICAgICBTZXRXaW5kb3dQb3MzMiggaHduZCwgMCwgbWF4UG9zLngsIG1heFBvcy55LCBtYXhTaXplLngsIG1heFNpemUueSwKKyAgICAgICAgICAgICAgICAgICAgKChHZXRBY3RpdmVXaW5kb3czMigpKT8gU1dQX05PQUNUSVZBVEUgOiAwKSB8IFNXUF9GUkFNRUNIQU5HRUQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNzLT5zdHlsZSAmIFdTX1ZJU0lCTEUpIFNob3dXaW5kb3czMiggaHduZCwgU1dfU0hPVyApOworCisgICAgICAgICAgICAvKiBDYWxsIFdIX1NIRUxMIGhvb2sgKi8KKworICAgICAgICAgICAgaWYgKCEod25kUHRyLT5kd1N0eWxlICYgV1NfQ0hJTEQpICYmICF3bmRQdHItPm93bmVyKQorICAgICAgICAgICAgICAgIEhPT0tfQ2FsbEhvb2tzMTYoIFdIX1NIRUxMLCBIU0hFTExfV0lORE9XQ1JFQVRFRCwgaHduZCwgMCApOworCisgICAgICAgICAgICBkcHJpbnRmX3dpbihzdGRkZWIsICJDcmVhdGVXaW5kb3dFeDogY3JlYXRlZCB3aW5kb3cgJTA0eFxuIiwgaHduZCk7CisgICAgICAgICAgICByZXR1cm4gaHduZDsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBpZiAod21jcmVhdGUgPT0gLTEpCi0gICAgewotCSAgLyogQWJvcnQgd2luZG93IGNyZWF0aW9uICovCi0JZHByaW50Zl93aW4oc3RkZGViLCJDcmVhdGVXaW5kb3dFeDogd21jcmVhdGU9PS0xLCBhYm9ydGluZ1xuIik7Ci0gICAgICAgIFdJTl9VbmxpbmtXaW5kb3coIGh3bmQgKTsKLSAgICAgICAgV0lOX0Rlc3Ryb3lXaW5kb3coIHduZFB0ciApOwotCXJldHVybiAwOwotICAgIH0KIAotICAgIC8qIFNlbmQgdGhlIHNpemUgbWVzc2FnZXMgKi8KKyAgICAvKiBBYm9ydCB3aW5kb3cgY3JlYXRpb24gKi8KIAotICAgIGlmICghKHduZFB0ci0+ZmxhZ3MgJiBXSU5fTkVFRF9TSVpFKSkKLSAgICB7Ci0JLyogc2VuZCBpdCBhbnl3YXkgKi8KLQlTZW5kTWVzc2FnZTE2KCBod25kLCBXTV9TSVpFLCBTSVpFX1JFU1RPUkVELAotICAgICAgICAgICAgICAgICAgIE1BS0VMT05HKHduZFB0ci0+cmVjdENsaWVudC5yaWdodC13bmRQdHItPnJlY3RDbGllbnQubGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3bmRQdHItPnJlY3RDbGllbnQuYm90dG9tLXduZFB0ci0+cmVjdENsaWVudC50b3ApKTsKLSAgICAgICAgU2VuZE1lc3NhZ2UxNiggaHduZCwgV01fTU9WRSwgMCwgTUFLRUxPTkcoIHduZFB0ci0+cmVjdENsaWVudC5sZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd25kUHRyLT5yZWN0Q2xpZW50LnRvcCApKTsKLSAgICB9IAotCi0gICAgV0lOX1NlbmRQYXJlbnROb3RpZnkoIGh3bmQsIFdNX0NSRUFURSwgd25kUHRyLT53SURtZW51LCAoTFBBUkFNKWh3bmQgKTsKLSAgICBpZiAoIUlzV2luZG93KGh3bmQpKSByZXR1cm4gMDsKLQotICAgIC8qIFNob3cgdGhlIHdpbmRvdywgbWF4aW1pemluZyBvciBtaW5pbWl6aW5nIGlmIG5lZWRlZCAqLwotCi0gICAgaWYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX01JTklNSVpFKQotICAgIHsKLQkvKiBNaW5NYXhpbWl6ZShod25kLCBTV19TSE9XTUlOTk9BQ1RJVkUsIDEpIGluICJJbnRlcm5hbHMiICovCi0KLSAgICAgICAgd25kUHRyLT5kd1N0eWxlICY9IH5XU19NQVhJTUlaRTsKLSAgICAgICAgV0lOUE9TX0ZpbmRJY29uUG9zKCBod25kICk7Ci0gICAgICAgIFNldFdpbmRvd1BvczMyKCBod25kLCAwLCB3bmRQdHItPnB0SWNvblBvcy54LCB3bmRQdHItPnB0SWNvblBvcy55LAotICAgICAgICAgICAgICAgICAgICAgICAgU1lTTUVUUklDU19DWElDT04sIFNZU01FVFJJQ1NfQ1lJQ09OLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIFNXUF9GUkFNRUNIQU5HRUQgfCAoKEdldEFjdGl2ZVdpbmRvdzMyKCkpPyBTV1BfTk9BQ1RJVkFURSA6IDApICApOwotICAgIH0KLSAgICBlbHNlIGlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19NQVhJTUlaRSkKLSAgICB7Ci0JLyogTWluTWF4aW1pemUoaHduZCwgU1dfU0hPV01BWElNSVpFRCwgMSkgKi8KLQotICAgICAgICBOQ19HZXRNaW5NYXhJbmZvKCB3bmRQdHIsICZtYXhTaXplLCAmbWF4UG9zLCAmbWluVHJhY2ssICZtYXhUcmFjayApOwotICAgICAgICBTZXRXaW5kb3dQb3MzMiggaHduZCwgMCwgbWF4UG9zLngsIG1heFBvcy55LCBtYXhTaXplLngsIG1heFNpemUueSwKLSAgICAgICAgICAgICgoR2V0QWN0aXZlV2luZG93MzIoKSk/IFNXUF9OT0FDVElWQVRFIDogMCkgfCBTV1BfRlJBTUVDSEFOR0VEICk7Ci0gICAgfQotICAgIAotICAgIGlmIChjcy0+c3R5bGUgJiBXU19WSVNJQkxFKSBTaG93V2luZG93MzIoIGh3bmQsIFNXX1NIT1cgKTsKLQotICAgIC8qIENhbGwgV0hfU0hFTEwgaG9vayAqLwotCi0gICAgaWYgKCEod25kUHRyLT5kd1N0eWxlICYgV1NfQ0hJTEQpICYmICF3bmRQdHItPm93bmVyKQotICAgICAgICBIT09LX0NhbGxIb29rczE2KCBXSF9TSEVMTCwgSFNIRUxMX1dJTkRPV0NSRUFURUQsIGh3bmQsIDAgKTsKLQotICAgIGRwcmludGZfd2luKHN0ZGRlYiwgIkNyZWF0ZVdpbmRvd0V4OiByZXR1cm5pbmcgJTA0eFxuIiwgaHduZCk7Ci0gICAgcmV0dXJuIGh3bmQ7CisgICAgZHByaW50Zl93aW4oc3RkZGViLCJDcmVhdGVXaW5kb3dFeDogYWJvcnRlZCBieSBXTV94eENSRUFURSFcbiIpOworICAgIFdJTl9VbmxpbmtXaW5kb3coIGh3bmQgKTsKKyAgICBXSU5fRGVzdHJveVdpbmRvdyggd25kUHRyICk7CisgICAgcmV0dXJuIDA7CiB9CiAKIApAQCAtODU5LDcgKzg0MSw3IEBACiAgICAgY3MubHBzek5hbWUgICAgICAgPSB3aW5kb3dOYW1lOwogICAgIGNzLmxwc3pDbGFzcyAgICAgID0gY2xhc3NOYW1lOwogICAgIGNzLmR3RXhTdHlsZSAgICAgID0gZXhTdHlsZTsKLSAgICByZXR1cm4gV0lOX0NyZWF0ZVdpbmRvd0V4KCAmY3MsIGNsYXNzQXRvbSwgRkFMU0UgKTsKKyAgICByZXR1cm4gV0lOX0NyZWF0ZVdpbmRvd0V4KCAmY3MsIGNsYXNzQXRvbSwgRkFMU0UsIEZBTFNFICk7CiB9CiAKIApAQCAtODk4LDcgKzg4MCw3IEBACiAgICAgY3MubHBzek5hbWUgICAgICAgPSB3aW5kb3dOYW1lOwogICAgIGNzLmxwc3pDbGFzcyAgICAgID0gY2xhc3NOYW1lOwogICAgIGNzLmR3RXhTdHlsZSAgICAgID0gZXhTdHlsZTsKLSAgICByZXR1cm4gV0lOX0NyZWF0ZVdpbmRvd0V4KCAmY3MsIGNsYXNzQXRvbSwgRkFMU0UgKTsKKyAgICByZXR1cm4gV0lOX0NyZWF0ZVdpbmRvd0V4KCAmY3MsIGNsYXNzQXRvbSwgVFJVRSwgRkFMU0UgKTsKIH0KIAogCkBAIC05NDQsNyArOTI2LDcgQEAKICAgICBjcy5kd0V4U3R5bGUgICAgICA9IGV4U3R5bGU7CiAgICAgLyogTm90ZTogd2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IENSRUFURVNUUlVDVDMyQSBhbmQgKi8KICAgICAvKiBDUkVBVEVTVFJVQ1QzMlcgaGF2ZSB0aGUgc2FtZSBsYXlvdXQuICovCi0gICAgcmV0dXJuIFdJTl9DcmVhdGVXaW5kb3dFeCggKENSRUFURVNUUlVDVDMyQSAqKSZjcywgY2xhc3NBdG9tLCBUUlVFICk7CisgICAgcmV0dXJuIFdJTl9DcmVhdGVXaW5kb3dFeCggKENSRUFURVNUUlVDVDMyQSAqKSZjcywgY2xhc3NBdG9tLCBUUlVFLCBUUlVFICk7CiB9CiAKIApAQCAtMTA1NSw3ICsxMDM3LDggQEAKICAgICAgICAgZWxzZSBicmVhazsKICAgICAgIH0KIAotICAgICAgV0lOUE9TX0FjdGl2YXRlT3RoZXJXaW5kb3cod25kUHRyKTsKKyAgICAgIGlmKCAhT3B0aW9ucy5tYW5hZ2VkIHx8IEVWRU5UX0NoZWNrRm9jdXMoKSApCisgICAgICAgICAgV0lOUE9TX0FjdGl2YXRlT3RoZXJXaW5kb3cod25kUHRyKTsKIAogICAgICAgaWYoIHduZFB0ci0+b3duZXIgJiYKIAkgIHduZFB0ci0+b3duZXItPmh3bmRMYXN0QWN0aXZlID09IHduZFB0ci0+aHduZFNlbGYgKQpAQCAtMTA3OSwyNSArMTA2Miw0MyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIENsb3NlV2luZG93ICAgKFVTRVIuNDMpCisgKiAgICAgICAgICAgQ2xvc2VXaW5kb3cxNiAgIChVU0VSLjQzKQogICovCi1CT09MIENsb3NlV2luZG93KEhXTkQgaFduZCkKK0JPT0wxNiBDbG9zZVdpbmRvdzE2KCBIV05EMTYgaHduZCApCiB7Ci0gICAgV05EICogd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoaFduZCk7Ci0gICAgaWYgKCF3bmRQdHIgfHwgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX0NISUxEKSkgcmV0dXJuIFRSVUU7Ci0gICAgU2hvd1dpbmRvdzMyKGhXbmQsIFNXX01JTklNSVpFKTsKKyAgICByZXR1cm4gQ2xvc2VXaW5kb3czMiggaHduZCApOworfQorCisgCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBDbG9zZVdpbmRvdzMyICAgKFVTRVIzMi41NSkKKyAqLworQk9PTDMyIENsb3NlV2luZG93MzIoIEhXTkQzMiBod25kICkKK3sKKyAgICBXTkQgKiB3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggaHduZCApOworICAgIGlmICghd25kUHRyIHx8ICh3bmRQdHItPmR3U3R5bGUgJiBXU19DSElMRCkpIHJldHVybiBGQUxTRTsKKyAgICBTaG93V2luZG93MzIoIGh3bmQsIFNXX01JTklNSVpFICk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKICAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIE9wZW5JY29uICAgKFVTRVIuNDQpCisgKiAgICAgICAgICAgT3Blbkljb24xNiAgIChVU0VSLjQ0KQogICovCi1CT09MIE9wZW5JY29uKEhXTkQgaFduZCkKK0JPT0wxNiBPcGVuSWNvbjE2KCBIV05EMTYgaHduZCApCiB7Ci0gICAgaWYgKCFJc0ljb25pYzE2KGhXbmQpKSByZXR1cm4gRkFMU0U7Ci0gICAgU2hvd1dpbmRvdzMyKGhXbmQsIFNXX1NIT1dOT1JNQUwpOwotICAgIHJldHVybihUUlVFKTsKKyAgICByZXR1cm4gT3Blbkljb24zMiggaHduZCApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIE9wZW5JY29uMzIgICAoVVNFUjMyLjQwOSkKKyAqLworQk9PTDMyIE9wZW5JY29uMzIoIEhXTkQzMiBod25kICkKK3sKKyAgICBpZiAoIUlzSWNvbmljMzIoIGh3bmQgKSkgcmV0dXJuIEZBTFNFOworICAgIFNob3dXaW5kb3czMiggaHduZCwgU1dfU0hPV05PUk1BTCApOworICAgIHJldHVybiBUUlVFOwogfQogCiAKQEAgLTExMDYsOCArMTEwNyw4IEBACiAgKgogICogSW1wbGVtZW50YXRpb24gb2YgRmluZFdpbmRvdygpIGFuZCBGaW5kV2luZG93RXgoKS4KICAqLwotc3RhdGljIEhXTkQgV0lOX0ZpbmRXaW5kb3coIEhXTkQgcGFyZW50LCBIV05EIGNoaWxkLCBBVE9NIGNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUENTVFIgdGl0bGUgKQorc3RhdGljIEhXTkQzMiBXSU5fRmluZFdpbmRvdyggSFdORDMyIHBhcmVudCwgSFdORDMyIGNoaWxkLCBBVE9NIGNsYXNzTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQQ1NUUiB0aXRsZSApCiB7CiAgICAgV05EICpwV25kOwogICAgIENMQVNTICpwQ2xhc3MgPSBOVUxMOwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIHsKICAgICBBVE9NIGF0b20gPSAwOwogICAgIGNoYXIgKmJ1ZmZlcjsKLSAgICBIV05EIGh3bmQ7CisgICAgSFdORDMyIGh3bmQ7CiAKICAgICBpZiAoY2xhc3NOYW1lKQogICAgIHsKQEAgLTE0MTUsNyArMTQxNiw3IEBACiAgICAgewogCWNhc2UgR1dXX0lEOiAgICAgICAgcHRyID0gKFdPUkQgKikmd25kUHRyLT53SURtZW51OyBicmVhazsKIAljYXNlIEdXV19ISU5TVEFOQ0U6IHB0ciA9IChXT1JEICopJnduZFB0ci0+aEluc3RhbmNlOyBicmVhazsKLQljYXNlIEdXV19IV05EUEFSRU5UOiByZXR1cm4gU2V0UGFyZW50KCBod25kLCBuZXd2YWwgKTsKKwljYXNlIEdXV19IV05EUEFSRU5UOiByZXR1cm4gU2V0UGFyZW50MzIoIGh3bmQsIG5ld3ZhbCApOwogCWRlZmF1bHQ6CiAgICAgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJTZXRXaW5kb3dXb3JkOiBpbnZhbGlkIG9mZnNldCAlZFxuIiwgb2Zmc2V0ICk7CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTE1MDQsNiArMTUwNSw5IEBACiAgICAgICAgICAgICBXSU5QUk9DX1NldFByb2MoICZ3bmRQdHItPndpbnByb2MsIChXTkRQUk9DMTYpbmV3dmFsLCB0eXBlICk7CiAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwogCWNhc2UgR1dMX1NUWUxFOgorCisJICAgIC8qIEZJWE1FOiBXTV9TVFlMRS4uLiBtZXNzYWdlcyBmb3IgV0lOX0lTV0lOMzIgd2luZG93cyAqLworCiAgICAgICAgICAgICBwdHIgPSAmd25kUHRyLT5kd1N0eWxlOwogICAgICAgICAgICAgLyogU29tZSBiaXRzIGNhbid0IGJlIGNoYW5nZWQgdGhpcyB3YXkgKi8KICAgICAgICAgICAgIG5ld3ZhbCAmPSB+KFdTX1ZJU0lCTEUgfCBXU19DSElMRCk7CkBAIC0xNzAxLDEzICsxNzA1LDIyIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgIFNldFBhcmVudCAgICAgICAgICAgICAgKFVTRVIuMjMzKQorICogICAgICAgICBTZXRQYXJlbnQxNiAgIChVU0VSLjIzMykKICAqLwotSFdORCBTZXRQYXJlbnQoSFdORCBod25kQ2hpbGQsIEhXTkQgaHduZE5ld1BhcmVudCkKK0hXTkQxNiBTZXRQYXJlbnQxNiggSFdORDE2IGh3bmRDaGlsZCwgSFdORDE2IGh3bmROZXdQYXJlbnQgKQogewotICAgIEhXTkQgb2xkUGFyZW50OworICAgIHJldHVybiBTZXRQYXJlbnQzMiggaHduZENoaWxkLCBod25kTmV3UGFyZW50ICk7Cit9CiAKLSAgICBXTkQgKnduZFB0ciA9IFdJTl9GaW5kV25kUHRyKGh3bmRDaGlsZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICBTZXRQYXJlbnQzMiAgIChVU0VSMzIuNDk0KQorICovCitIV05EMzIgU2V0UGFyZW50MzIoIEhXTkQzMiBod25kQ2hpbGQsIEhXTkQzMiBod25kTmV3UGFyZW50ICkKK3sKKyAgICBIV05EMzIgb2xkUGFyZW50OworCisgICAgV05EICp3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggaHduZENoaWxkICk7CiAgICAgV05EICpwV25kUGFyZW50ID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmROZXdQYXJlbnQgKTsKICAgICBpZiAoIXduZFB0ciB8fCAhcFduZFBhcmVudCB8fCAhKHduZFB0ci0+ZHdTdHlsZSAmIFdTX0NISUxEKSkgcmV0dXJuIDA7CiAKQEAgLTE3MjMsMTYgKzE3MzYsMTcgQEAKIH0KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgIElzQ2hpbGQgICAgKFVTRVIuNDgpCisgKiAgICAgICAgIElzQ2hpbGQxNiAgICAoVVNFUi40OCkKICAqLwogQk9PTDE2IElzQ2hpbGQxNiggSFdORDE2IHBhcmVudCwgSFdORDE2IGNoaWxkICkKIHsKICAgICByZXR1cm4gSXNDaGlsZDMyKHBhcmVudCxjaGlsZCk7CiB9CisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgSXNDaGlsZCAgICAoVVNFUjMyLjMzOCkKKyAqICAgICAgICAgSXNDaGlsZDMyICAgIChVU0VSMzIuMzM4KQogICovCiBCT09MMzIgSXNDaGlsZDMyKCBIV05EMzIgcGFyZW50LCBIV05EMzIgY2hpbGQgKQogewpAQCAtMTc0NywxNCArMTc2MSwxNiBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIElzV2luZG93VmlzaWJsZSAgIChVU0VSLjQ5KQorICogICAgICAgICAgIElzV2luZG93VmlzaWJsZTE2ICAgKFVTRVIuNDkpCiAgKi8KIEJPT0wxNiBJc1dpbmRvd1Zpc2libGUxNiggSFdORDE2IGh3bmQgKQogewogICAgIHJldHVybiBJc1dpbmRvd1Zpc2libGUzMihod25kKTsKIH0KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBJc1dpbmRvd1Zpc2libGUgICAoVVNFUjMyLjM1MCkKKyAqICAgICAgICAgICBJc1dpbmRvd1Zpc2libGUzMiAgIChVU0VSMzIuMzUwKQogICovCiBCT09MMzIgSXNXaW5kb3dWaXNpYmxlMzIoIEhXTkQzMiBod25kICkKIHsKQEAgLTE3NjcsNiArMTc4Myw3IEBACiAgICAgcmV0dXJuICh3bmRQdHIgJiYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX1ZJU0lCTEUpKTsKIH0KIAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBXSU5fSXNXaW5kb3dEcmF3YWJsZQogICogCkBAIC0xNzc2LDcgKzE3OTMsNyBAQAogICovCiBCT09MMzIgV0lOX0lzV2luZG93RHJhd2FibGUoIFdORCogd25kICwgQk9PTDMyIGljb24gKQogewotICBIV05EICAgaHduZD0gd25kLT5od25kU2VsZjsKKyAgSFdORDMyIGh3bmQgPSB3bmQtPmh3bmRTZWxmOwogICBCT09MMzIgeWVzID0gVFJVRTsKIAogICB3aGlsZSh3bmQgJiYgeWVzKQpAQCAtMTc5MSwxNCArMTgwOCwxNiBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICBHZXRUb3BXaW5kb3cgICAgKFVTRVIuMjI5KQorICogICAgICAgICBHZXRUb3BXaW5kb3cxNiAgICAoVVNFUi4yMjkpCiAgKi8KIEhXTkQxNiBHZXRUb3BXaW5kb3cxNiggSFdORDE2IGh3bmQgKQogewogICAgIHJldHVybiBHZXRUb3BXaW5kb3czMihod25kKTsKIH0KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICBHZXRUb3BXaW5kb3cgICAgKFVTRVIuMjI5KQorICogICAgICAgICBHZXRUb3BXaW5kb3czMiAgICAoVVNFUi4yMjkpCiAgKi8KIEhXTkQzMiBHZXRUb3BXaW5kb3czMiggSFdORDMyIGh3bmQgKQogewpAQCAtMTgwOSwxNCArMTgyOCwxNiBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgIEdldFdpbmRvdyAgICAoVVNFUi4yNjIpCisgKiAgICAgICAgIEdldFdpbmRvdzE2ICAgIChVU0VSLjI2MikKICAqLwogSFdORDE2IEdldFdpbmRvdzE2KCBIV05EMTYgaHduZCwgV09SRCByZWwgKQogewogICAgIHJldHVybiBHZXRXaW5kb3czMiggaHduZCxyZWwgKTsKIH0KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICBHZXRXaW5kb3cgICAgKFVTRVIzMi4zMDEpCisgKiAgICAgICAgIEdldFdpbmRvdzMyICAgIChVU0VSMzIuMzAxKQogICovCiBIV05EMzIgR2V0V2luZG93MzIoIEhXTkQzMiBod25kLCBXT1JEIHJlbCApCiB7CkBAIC0xODU5LDcgKzE4ODAsNyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgIEdldE5leHRXaW5kb3cgICAgKFVTRVIuMjMwKQorICogICAgICAgICBHZXROZXh0V2luZG93MTYgICAgKFVTRVIuMjMwKQogICovCiBIV05EMTYgR2V0TmV4dFdpbmRvdzE2KCBIV05EMTYgaHduZCwgV09SRCBmbGFnICkKIHsKQEAgLTE4NjgsOSArMTg4OSwxOCBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICBTaG93T3duZWRQb3B1cHMgIChVU0VSLjI2NSkKKyAqICAgICAgICAgU2hvd093bmVkUG9wdXBzMTYgIChVU0VSLjI2NSkKICAqLwotdm9pZCBTaG93T3duZWRQb3B1cHMoIEhXTkQgb3duZXIsIEJPT0wgZlNob3cgKQordm9pZCBTaG93T3duZWRQb3B1cHMxNiggSFdORDE2IG93bmVyLCBCT09MMTYgZlNob3cgKQoreworICAgIFNob3dPd25lZFBvcHVwczMyKCBvd25lciwgZlNob3cgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICBTaG93T3duZWRQb3B1cHMzMiAgKFVTRVIzMi41MzApCisgKi8KK0JPT0wzMiBTaG93T3duZWRQb3B1cHMzMiggSFdORDMyIG93bmVyLCBCT09MMzIgZlNob3cgKQogewogICAgIFdORCAqcFduZCA9IHBXbmREZXNrdG9wLT5jaGlsZDsKICAgICB3aGlsZSAocFduZCkKQEAgLTE4ODAsMTMgKzE5MTAsMjIgQEAKICAgICAgICAgICAgIFNob3dXaW5kb3czMiggcFduZC0+aHduZFNlbGYsIGZTaG93ID8gU1dfU0hPVyA6IFNXX0hJREUgKTsKICAgICAgICAgcFduZCA9IHBXbmQtPm5leHQ7CiAgICAgfQorICAgIHJldHVybiBUUlVFOwogfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgIEdldExhc3RBY3RpdmVQb3B1cCAgICAoVVNFUi4yODcpCisgKiAgICAgICAgIEdldExhc3RBY3RpdmVQb3B1cDE2ICAgKFVTRVIuMjg3KQogICovCi1IV05EIEdldExhc3RBY3RpdmVQb3B1cChIV05EIGh3bmQpCitIV05EMTYgR2V0TGFzdEFjdGl2ZVBvcHVwMTYoIEhXTkQxNiBod25kICkKK3sKKyAgICByZXR1cm4gR2V0TGFzdEFjdGl2ZVBvcHVwMzIoIGh3bmQgKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgR2V0TGFzdEFjdGl2ZVBvcHVwMzIgICAoVVNFUjMyLjI1NSkKKyAqLworSFdORDMyIEdldExhc3RBY3RpdmVQb3B1cDMyKCBIV05EMzIgaHduZCApCiB7CiAgICAgV05EICp3bmRQdHI7CiAgICAgd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoaHduZCk7CkBAIC0yMDUwLDkgKzIwODksMTggQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEFueVBvcHVwICAgKFVTRVIuNTIpCisgKiAgICAgICAgICAgQW55UG9wdXAxNiAgIChVU0VSLjUyKQogICovCi1CT09MIEFueVBvcHVwKHZvaWQpCitCT09MMTYgQW55UG9wdXAxNih2b2lkKQoreworICAgIHJldHVybiBBbnlQb3B1cDMyKCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBBbnlQb3B1cDMyICAgKFVTRVIzMi4zKQorICovCitCT09MMzIgQW55UG9wdXAzMih2b2lkKQogewogICAgIFdORCAqd25kUHRyOwogICAgIGZvciAod25kUHRyID0gcFduZERlc2t0b3AtPmNoaWxkOyB3bmRQdHI7IHduZFB0ciA9IHduZFB0ci0+bmV4dCkKQEAgLTIwNjAsMTAgKzIxMDgsMjAgQEAKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJRmxhc2hXaW5kb3cJCVtVU0VSLjEwNV0KKyAqICAgICAgICAgICAgRmxhc2hXaW5kb3cxNiAgIChVU0VSLjEwNSkKICAqLwotQk9PTCBGbGFzaFdpbmRvdyhIV05EIGhXbmQsIEJPT0wgYkludmVydCkKK0JPT0wxNiBGbGFzaFdpbmRvdzE2KCBIV05EMTYgaFduZCwgQk9PTDE2IGJJbnZlcnQgKQoreworICAgIHJldHVybiBGbGFzaFdpbmRvdzMyKCBoV25kLCBiSW52ZXJ0ICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgRmxhc2hXaW5kb3czMiAgIChVU0VSMzIuMjAxKQorICovCitCT09MMzIgRmxhc2hXaW5kb3czMiggSFdORDMyIGhXbmQsIEJPT0wzMiBiSW52ZXJ0ICkKIHsKICAgICBXTkQgKnduZFB0ciA9IFdJTl9GaW5kV25kUHRyKGhXbmQpOwogCkBAIC0yMTA4LDcgKzIxNjYsNyBAQAogICovCiBIV05EMTYgU2V0U3lzTW9kYWxXaW5kb3cxNiggSFdORDE2IGhXbmQgKQogewotICAgIEhXTkQgaFduZE9sZE1vZGFsID0gaHduZFN5c01vZGFsOworICAgIEhXTkQzMiBoV25kT2xkTW9kYWwgPSBod25kU3lzTW9kYWw7CiAgICAgaHduZFN5c01vZGFsID0gaFduZDsKICAgICBkcHJpbnRmX3dpbihzdGRuaW1wLCJFTVBUWSBTVFVCICEhIFNldFN5c01vZGFsV2luZG93KCUwNHgpICFcbiIsIGhXbmQpOwogICAgIHJldHVybiBoV25kT2xkTW9kYWw7CkBAIC0yMTMwLDcgKzIxODgsNyBAQAogICogcmVjdXJzaXZlbHkgZmluZCBhIGNoaWxkIHRoYXQgY29udGFpbnMgc3BEcmFnSW5mby0+cHQgcG9pbnQgCiAgKiBhbmQgc2VuZCBXTV9RVUVSWURST1BPQkpFQ1QKICAqLwotQk9PTDE2IERSQUdfUXVlcnlVcGRhdGUoIEhXTkQgaFF1ZXJ5V25kLCBTRUdQVFIgc3BEcmFnSW5mbywgQk9PTDMyIGJOb1NlbmQgKQorQk9PTDE2IERSQUdfUXVlcnlVcGRhdGUoIEhXTkQzMiBoUXVlcnlXbmQsIFNFR1BUUiBzcERyYWdJbmZvLCBCT09MMzIgYk5vU2VuZCApCiB7CiAgQk9PTDE2CQl3UGFyYW0sYlJlc3VsdCA9IDA7CiAgUE9JTlQxNiAgICAgICAgcHQ7CkBAIC0yMTk2LDExICsyMjU0LDIxIEBACiAgcmV0dXJuIGJSZXN1bHQ7CiB9CiAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgIERyYWdEZXRlY3QgKCBVU0VSLjQ2NSApCi0gKgorICogICAgICAgICAgICAgRHJhZ0RldGVjdCAgIChVU0VSLjQ2NSkKICAqLwotQk9PTDE2IERyYWdEZXRlY3QoSFdORDE2IGhXbmQsIFBPSU5UMTYgcHQpCitCT09MMTYgRHJhZ0RldGVjdDE2KCBIV05EMTYgaFduZCwgUE9JTlQxNiBwdCApCit7CisgICAgUE9JTlQzMiBwdDMyOworICAgIENPTlZfUE9JTlQxNlRPMzIoICZwdCwgJnB0MzIgKTsKKyAgICByZXR1cm4gRHJhZ0RldGVjdDMyKCBoV25kLCBwdDMyICk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICBEcmFnRGV0ZWN0MzIgICAoVVNFUjMyLjE1MCkKKyAqLworQk9PTDMyIERyYWdEZXRlY3QzMiggSFdORDMyIGhXbmQsIFBPSU5UMzIgcHQgKQogewogICBNU0cxNiBtc2c7CiAgIFJFQ1QxNiAgcmVjdDsKQEAgLTIyNDEsNyArMjMwOSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyYWdPYmplY3QgKCBVU0VSLjQ2NCApCiAgKgogICovCi1EV09SRCBEcmFnT2JqZWN0KEhXTkQgaHduZFNjb3BlLCBIV05EIGhXbmQsIFdPUkQgd09iaiwgSEFORExFMTYgaE9mU3RydWN0LAorRFdPUkQgRHJhZ09iamVjdChIV05EMTYgaHduZFNjb3BlLCBIV05EMTYgaFduZCwgV09SRCB3T2JqLCBIQU5ETEUxNiBoT2ZTdHJ1Y3QsCiAgICAgICAgICAgICAgICAgV09SRCBzekxpc3QgLCBIQ1VSU09SMTYgaEN1cnNvcikKIHsKICBNU0cxNgkgCW1zZzsKQEAgLTIyNTMsNyArMjMyMSw3IEBACiAgRFdPUkQJCWR3UmV0ID0gMDsKICBzaG9ydAkgCWRyYWdEb25lID0gMDsKICBIQ1VSU09SMTYJaEN1cnJlbnRDdXJzb3IgPSAwOwotIEhXTkQJCWhDdXJyZW50V25kID0gMDsKKyBIV05EMTYJCWhDdXJyZW50V25kID0gMDsKICBCT09MMTYJCWI7CiAKICBscERyYWdJbmZvID0gKExQRFJBR0lORk8pIEdsb2JhbExvY2sxNihoRHJhZ0luZm8pOwpAQCAtMjI4MCw3ICsyMzQ4LDcgQEAKIAlpZiggaERyYWdDdXJzb3IgPT0gaEN1cnNvciApIGhEcmFnQ3Vyc29yID0gMDsKIAllbHNlIGhDdXJzb3IgPSBoRHJhZ0N1cnNvcjsKIAotCWhPbGRDdXJzb3IgPSBTZXRDdXJzb3IoaERyYWdDdXJzb3IpOworCWhPbGRDdXJzb3IgPSBTZXRDdXJzb3IzMihoRHJhZ0N1cnNvcik7CiAgICB9CiAKICBscERyYWdJbmZvLT5oV25kICAgPSBoV25kOwpAQCAtMjI5MSw3ICsyMzU5LDcgQEAKICBscERyYWdJbmZvLT5sID0gMEw7IAogCiAgU2V0Q2FwdHVyZTMyKGhXbmQpOwotIFNob3dDdXJzb3IoMSk7CisgU2hvd0N1cnNvcjMyKCBUUlVFICk7CiAKICB3aGlsZSggIWRyYWdEb25lICkKICAgewpAQCAtMjMxNSw3ICsyMzgzLDcgQEAKICAgICAgICAgIGxwRHJhZ0luZm8tPmhTY29wZSA9IDA7CiAJfQogICAgIGlmKCBoQ3VycmVudEN1cnNvciApCi0gICAgICAgIFNldEN1cnNvcihoQ3VycmVudEN1cnNvcik7CisgICAgICAgIFNldEN1cnNvcjMyKGhDdXJyZW50Q3Vyc29yKTsKIAogICAgIGRwcmludGZfbXNnKHN0ZGRlYiwiZHJhZzogZ290ICUwNHhcbiIsIGIpOwogCkBAIC0yMzQ0LDE0ICsyNDEyLDEzIEBACiAgIH0KIAogIFJlbGVhc2VDYXB0dXJlKCk7Ci0gU2hvd0N1cnNvcigwKTsKKyBTaG93Q3Vyc29yMzIoIEZBTFNFICk7CiAKICBpZiggaEN1cnNvciApCi0gICB7Ci0gICAgIFNldEN1cnNvcihoT2xkQ3Vyc29yKTsKLSAgICAgaWYoIGhEcmFnQ3Vyc29yICkKLQkgRGVzdHJveUN1cnNvcihoRHJhZ0N1cnNvcik7Ci0gICB9CisgeworICAgICBTZXRDdXJzb3IzMiggaE9sZEN1cnNvciApOworICAgICBpZiAoaERyYWdDdXJzb3IpIERlc3Ryb3lDdXJzb3IzMiggaERyYWdDdXJzb3IgKTsKKyB9CiAKICBpZiggaEN1cnJlbnRDdXJzb3IgIT0gaEJ1bW1lciApIAogCWR3UmV0ID0gU2VuZE1lc3NhZ2UxNiggbHBEcmFnSW5mby0+aFNjb3BlLCBXTV9EUk9QT0JKRUNULCAKZGlmZiAtLWdpdCBhL3dpbmRvd3Mvd2lucG9zLmMgYi93aW5kb3dzL3dpbnBvcy5jCmluZGV4IGFkYWM4MmYuLmQ4MDI5ODEgMTAwNjQ0Ci0tLSBhL3dpbmRvd3Mvd2lucG9zLmMKKysrIGIvd2luZG93cy93aW5wb3MuYwpAQCAtMTAzNCw5ICsxMDM0LDE2IEBACiAJICAgIC8qIGRpc3JlZ2FyZCByZWZ1c2FsIGlmIGhXbmQgaXMgc3lzbW9kYWwgKi8KICAgICAgICAgfQogCisjaWYgMAogCVNlbmRNZXNzYWdlMzJBKCBod25kUHJldkFjdGl2ZSwgV01fQUNUSVZBVEUsCiAgICAgICAgICAgICAgICAgICAgICAgICBNQUtFV1BBUkFNKCBXQV9JTkFDVElWRSwgd0ljb25pemVkICksCiAgICAgICAgICAgICAgICAgICAgICAgICAoTFBBUkFNKWhXbmQgKTsKKyNlbHNlCisJLyogRklYTUU6IG11c3QgYmUgU2VuZE1lc3NhZ2UxNigpIGJlY2F1c2UgMzJBIGRvZXNuJ3QgZG8KKwkgKiBpbnRlcnRhc2sgYXQgdGhpcyB0aW1lICovCisJU2VuZE1lc3NhZ2UxNiggaHduZFByZXZBY3RpdmUsIFdNX0FDVElWQVRFLCBXQV9JTkFDVElWRSwKKwkJCQlNQUtFTFBBUkFNKCAoSFdORDE2KWhXbmQsIHdJY29uaXplZCApICk7CisjZW5kaWYKIAogCS8qIGNoZWNrIGlmIHNvbWV0aGluZyBoYXBwZW5lZCBkdXJpbmcgbWVzc2FnZSBwcm9jZXNzaW5nICovCiAJaWYoIGh3bmRQcmV2QWN0aXZlICE9IGh3bmRBY3RpdmUgKSByZXR1cm4gMDsKQEAgLTExMjAsOSArMTEyNywxNCBAQAogCiAgICAgICAgIHdJY29uaXplZCA9IEhJV09SRCh3bmRUZW1wLT5kd1N0eWxlICYgV1NfTUlOSU1JWkUpOwogICAgICAgICBTZW5kTWVzc2FnZTE2KCBoV25kLCBXTV9OQ0FDVElWQVRFLCBUUlVFLCAwICk7CisjaWYgMAogICAgICAgICBTZW5kTWVzc2FnZTMyQSggaFduZCwgV01fQUNUSVZBVEUsCiAJCSBNQUtFV1BBUkFNKCAoZk1vdXNlKSA/IFdBX0NMSUNLQUNUSVZFIDogV0FfQUNUSVZFLCB3SWNvbml6ZWQpLAogCQkgKExQQVJBTSlod25kUHJldkFjdGl2ZSApOworI2Vsc2UKKyAgICAgICAgU2VuZE1lc3NhZ2UxNihoV25kLCBXTV9BQ1RJVkFURSwgKGZNb3VzZSkgPyBXQV9DTElDS0FDVElWRSA6IFdBX0FDVElWRSwKKyAgICAgICAgICAgICAgICAgICAgICBNQUtFTFBBUkFNKCAoSFdORDE2KWh3bmRQcmV2QWN0aXZlLCB3SWNvbml6ZWQpICk7CisjZW5kaWYKIAogICAgICAgICBpZiggIUlzV2luZG93KGhXbmQpICkgcmV0dXJuIDA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvd2luZS5tYW4gYi93aW5lLm1hbgppbmRleCAzOTViODQwLi42NDQ1YTMxIDEwMDY0NAotLS0gYS93aW5lLm1hbgorKysgYi93aW5lLm1hbgpAQCAtMTA5LDcgKzEwOSw3IEBACiAuSSAtbGFuZ3VhZ2UgeHgKIFNldCB0aGUgbGFuZ3VhZ2UgdG8KIC5JIHh4Ci0ob25lIG9mIEVuLCBFcywgRGUsIE5vLCBGciwgRmksIERhLCBDeiwgRW8sIEl0LCBLbykKKyhvbmUgb2YgRW4sIEVzLCBEZSwgTm8sIEZyLCBGaSwgRGEsIEN6LCBFbywgSXQsIEtvLCBIdSkKIC5UUAogLkkgLW1hbmFnZWQKIENyZWF0ZSBlYWNoIHRvcC1sZXZlbCB3aW5kb3cgYXMgYSBwcm9wZXJseSBtYW5hZ2VkIFggd2luZG93Cg==