ZGlmZiAtLWdpdCBhLy5qZW5raW5zIGIvLmplbmtpbnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjc0ZDc1MQotLS0gL2Rldi9udWxsCisrKyBiLy5qZW5raW5zCkBAIC0wLDAgKzEsMTAgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKK3NldCAtZQorCitESVI9JCggY2QgIiQoIGRpcm5hbWUgIiR7QkFTSF9TT1VSQ0VbMF19IiApIiAmJiBwd2QgKQorCitmb3IgZmlsZSBpbiAiJERJUiIvLmplbmtpbnMuZC8qOyBkbworICAgIFtbIC1mICRmaWxlICYmIC14ICRmaWxlIF1dIHx8IGNvbnRpbnVlCisgICAgZWNobyAiUnVuOiAkZmlsZSIKKyAgICAiJGZpbGUiCitkb25lCmRpZmYgLS1naXQgYS8uamVua2lucy5kLzAwLWRlcHMuc2ggYi8uamVua2lucy5kLzAwLWRlcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDFiOTNmMAotLS0gL2Rldi9udWxsCisrKyBiLy5qZW5raW5zLmQvMDAtZGVwcy5zaApAQCAtMCwwICsxLDIwIEBACisjIS91c3IvYmluL2VudiBiYXNoCitzZXQgLWUKKworSkRJUj0kKCBjZCAiJCggZGlybmFtZSAiJHtCQVNIX1NPVVJDRVswXX0iICkiICYmIHB3ZCApCitzb3VyY2UgIiRKRElSIi91dGlsLnNoCisKK3NldCAteAorCitpZiBoYXMgT1NYICROT0RFX0xBQkVMUzsgdGhlbgorICAgIGJyZXcgdXBkYXRlCisgICAgYnJldyB1cGdyYWRlCisgICAgYnJldyBpbnN0YWxsIGJvb3N0IHBrZy1jb25maWcgY3J5cHRvcHAgb3BlbnNzbAorICAgIGJyZXcgY2xlYW51cAorZmkKKworaWYgaGFzIFVidW50dSAkTk9ERV9MQUJFTFM7IHRoZW4KKyAgICBzdWRvIGFwdC1nZXQgLXFxIHVwZGF0ZQorICAgIHN1ZG8gYXB0LWdldCAtcXEgaW5zdGFsbCBidWlsZC1lc3NlbnRpYWwgcGtnLWNvbmZpZyBsaWJib29zdC1hbGwtZGV2IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliY3J5cHRvKystZGV2IGxpYnNxbGl0ZTMtZGV2IGxpYnNzbC1kZXYKK2ZpCmRpZmYgLS1naXQgYS8uamVua2lucy5kLzAxLW5kbi1jeHguc2ggYi8uamVua2lucy5kLzAxLW5kbi1jeHguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDgyYzE1NQotLS0gL2Rldi9udWxsCisrKyBiLy5qZW5raW5zLmQvMDEtbmRuLWN4eC5zaApAQCAtMCwwICsxLDQ0IEBACisjIS91c3IvYmluL2VudiBiYXNoCitzZXQgLWUKKworSkRJUj0kKCBjZCAiJCggZGlybmFtZSAiJHtCQVNIX1NPVVJDRVswXX0iICkiICYmIHB3ZCApCitzb3VyY2UgIiRKRElSIi91dGlsLnNoCisKK3NldCAteAorCitwdXNoZCAiJHtDQUNIRV9ESVI6LS90bXB9IiA+L2Rldi9udWxsCisKK0lOU1RBTExFRF9WRVJTSU9OPSQoKGNkIG5kbi1jeHggJiYgZ2l0IHJldi1wYXJzZSBIRUFEKSAyPi9kZXYvbnVsbCB8fCBlY2hvIE5PTkUpCisKK3N1ZG8gcm0gLVJmIG5kbi1jeHgtbGF0ZXN0CisKK2dpdCBjbG9uZSAtLWRlcHRoIDEgZ2l0Oi8vZ2l0aHViLmNvbS9uYW1lZC1kYXRhL25kbi1jeHggbmRuLWN4eC1sYXRlc3QKKworTEFURVNUX1ZFUlNJT049JCgoY2QgbmRuLWN4eC1sYXRlc3QgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKSAyPi9kZXYvbnVsbCB8fCBlY2hvIFVOS05PV04pCisKK2lmIFtbICRJTlNUQUxMRURfVkVSU0lPTiAhPSAkTEFURVNUX1ZFUlNJT04gXV07IHRoZW4KKyAgICBzdWRvIHJtIC1SZiBuZG4tY3h4CisgICAgbXYgbmRuLWN4eC1sYXRlc3QgbmRuLWN4eAorICAgIHN1ZG8gcm0gLVJmIE5GRCBORkQtbGF0ZXN0CitlbHNlCisgICAgc3VkbyBybSAtUmYgbmRuLWN4eC1sYXRlc3QKK2ZpCisKK3N1ZG8gcm0gLVJmIC91c3IvbG9jYWwvaW5jbHVkZS9uZG4tY3h4CitzdWRvIHJtIC1mIC91c3IvbG9jYWwvbGliL2xpYm5kbi1jeHgqCitzdWRvIHJtIC1mIC91c3IvbG9jYWwvbGliL3BrZ2NvbmZpZy9saWJuZG4tY3h4KgorCitwdXNoZCBuZG4tY3h4ID4vZGV2L251bGwKKworLi93YWYgLWoxIC0tY29sb3I9eWVzIGNvbmZpZ3VyZSAtLWVuYWJsZS1zaGFyZWQgLS1kaXNhYmxlLXN0YXRpYyAtLXdpdGhvdXQtb3N4LWtleWNoYWluCisuL3dhZiAtajEgLS1jb2xvcj15ZXMgYnVpbGQKK3N1ZG8gLi93YWYgLWoxIC0tY29sb3I9eWVzIGluc3RhbGwKKworcG9wZCA+L2Rldi9udWxsCitwb3BkID4vZGV2L251bGwKKworaWYgaGFzIExpbnV4ICROT0RFX0xBQkVMUzsgdGhlbgorICAgIHN1ZG8gbGRjb25maWcKK2VsaWYgaGFzIEZyZWVCU0QgJE5PREVfTEFCRUxTOyB0aGVuCisgICAgc3VkbyBsZGNvbmZpZyAtYQorZmkKZGlmZiAtLWdpdCBhLy5qZW5raW5zLmQvMTAtYnVpbGQuc2ggYi8uamVua2lucy5kLzEwLWJ1aWxkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRiNDE1MzMKLS0tIC9kZXYvbnVsbAorKysgYi8uamVua2lucy5kLzEwLWJ1aWxkLnNoCkBAIC0wLDAgKzEsNDQgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKK3NldCAtZQorCitKRElSPSQoIGNkICIkKCBkaXJuYW1lICIke0JBU0hfU09VUkNFWzBdfSIgKSIgJiYgcHdkICkKK3NvdXJjZSAiJEpESVIiL3V0aWwuc2gKKworc2V0IC14CisKK2dpdCBzdWJtb2R1bGUgaW5pdAorZ2l0IHN1Ym1vZHVsZSBzeW5jCitnaXQgc3VibW9kdWxlIHVwZGF0ZQorCisjIENsZWFudXAKK3N1ZG8gLi93YWYgLWoxIC0tY29sb3I9eWVzIGRpc3RjbGVhbgorCitpZiBbWyAkSk9CX05BTUUgIT0gKiJjb2RlLWNvdmVyYWdlIiAmJiAkSk9CX05BTUUgIT0gKiJsaW1pdGVkLWJ1aWxkIiBdXTsgdGhlbgorICAjIENvbmZpZ3VyZS9idWlsZCBpbiBvcHRpbWl6ZWQgbW9kZSB3aXRoIHRlc3RzCisgIC4vd2FmIC1qMSAtLWNvbG9yPXllcyBjb25maWd1cmUgLS13aXRoLXRlc3RzCisgIC4vd2FmIC1qMSAtLWNvbG9yPXllcyBidWlsZAorCisgICMgQ2xlYW51cAorICBzdWRvIC4vd2FmIC1qMSAtLWNvbG9yPXllcyBkaXN0Y2xlYW4KKworICAjIENvbmZpZ3VyZS9idWlsZCBpbiBvcHRpbWl6ZWQgbW9kZSB3aXRob3V0IHRlc3RzCisgIC4vd2FmIC1qMSAtLWNvbG9yPXllcyBjb25maWd1cmUKKyAgLi93YWYgLWoxIC0tY29sb3I9eWVzIGJ1aWxkCisKKyAgIyBDbGVhbnVwCisgIHN1ZG8gLi93YWYgLWoxIC0tY29sb3I9eWVzIGRpc3RjbGVhbgorZmkKKworIyBDb25maWd1cmUvYnVpbGQgaW4gZGVidWcgbW9kZSB3aXRoIHRlc3RzCitpZiBbWyAkSk9CX05BTUUgPT0gKiJjb2RlLWNvdmVyYWdlIiBdXTsgdGhlbgorICAgIENPVkVSQUdFPSItLXdpdGgtY292ZXJhZ2UiCitlbGlmICEgaGFzIE9TWC0xMC45ICROT0RFX0xBQkVMUyAmJiAhIGhhcyBPU1gtMTAuMTEgJE5PREVfTEFCRUxTOyB0aGVuCisgICAgQVNBTj0iLS13aXRoLXNhbml0aXplcj1hZGRyZXNzIgorZmkKKy4vd2FmIC1qMSAtLWNvbG9yPXllcyBjb25maWd1cmUgLS1kZWJ1ZyAtLXdpdGgtdGVzdHMgJENPVkVSQUdFICRBU0FOCisuL3dhZiAtajEgLS1jb2xvcj15ZXMgYnVpbGQKKworIyAodGVzdHMgd2lsbCBiZSBydW4gYWdhaW5zdCBkZWJ1ZyB2ZXJzaW9uKQorCisjIEluc3RhbGwKK3N1ZG8gLi93YWYgLWoxIC0tY29sb3I9eWVzIGluc3RhbGwKZGlmZiAtLWdpdCBhLy5qZW5raW5zLmQvMjAtdGVzdHMuc2ggYi8uamVua2lucy5kLzIwLXRlc3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE4ZDFjOTEKLS0tIC9kZXYvbnVsbAorKysgYi8uamVua2lucy5kLzIwLXRlc3RzLnNoCkBAIC0wLDAgKzEsMzYgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKK3NldCAtZQorCitKRElSPSQoIGNkICIkKCBkaXJuYW1lICIke0JBU0hfU09VUkNFWzBdfSIgKSIgJiYgcHdkICkKK3NvdXJjZSAiJEpESVIiL3V0aWwuc2gKKworc2V0IC14CisKK0JPT1NUX1ZFUlNJT049JChweXRob24gLWMgImltcG9ydCBzeXM7IHN5cy5wYXRoLmFwcGVuZCgnYnVpbGQvYzRjaGUnKTsgaW1wb3J0IF9jYWNoZTsgcHJpbnQoX2NhY2hlLkJPT1NUX1ZFUlNJT05fTlVNQkVSKTsiKQorCit1dF9sb2dfYXJncygpIHsKKyAgICBpZiAoKCBCT09TVF9WRVJTSU9OID49IDEwNjIwMCApKTsgdGhlbgorICAgICAgICBlY2hvIC0tbG9nZ2VyPUhSRix0ZXN0X3N1aXRlLHN0ZG91dDpYTUwsYWxsLGJ1aWxkL3h1bml0LSR7MTotcmVwb3J0fS54bWwKKyAgICBlbHNlCisgICAgICAgIGlmIFtbIC1uICRYVU5JVCBdXTsgdGhlbgorICAgICAgICAgICAgZWNobyAtLWxvZ19sZXZlbD1hbGwgJCggKCggQk9PU1RfVkVSU0lPTiA+PSAxMDYwMDAgKSkgJiYgZWNobyAtLSApIFwKKyAgICAgICAgICAgICAgICAgLS1sb2dfZm9ybWF0Mj1YTUwgLS1sb2dfc2luazI9YnVpbGQveHVuaXQtJHsxOi1yZXBvcnR9LnhtbAorICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hvIC0tbG9nX2xldmVsPXRlc3Rfc3VpdGUKKyAgICAgICAgZmkKKyAgICBmaQorfQorCitBU0FOX09QVElPTlM9ImNvbG9yPWFsd2F5cyIKK0FTQU5fT1BUSU9OUys9IjpkZXRlY3RfbGVha3M9ZmFsc2UiCitBU0FOX09QVElPTlMrPSI6ZGV0ZWN0X3N0YWNrX3VzZV9hZnRlcl9yZXR1cm49dHJ1ZSIKK0FTQU5fT1BUSU9OUys9IjpjaGVja19pbml0aWFsaXphdGlvbl9vcmRlcj10cnVlIgorQVNBTl9PUFRJT05TKz0iOnN0cmljdF9pbml0X29yZGVyPXRydWUiCitBU0FOX09QVElPTlMrPSI6ZGV0ZWN0X2ludmFsaWRfcG9pbnRlcl9wYWlycz0xIgorQVNBTl9PUFRJT05TKz0iOmRldGVjdF9jb250YWluZXJfb3ZlcmZsb3c9ZmFsc2UiCitBU0FOX09QVElPTlMrPSI6c3RyaWN0X3N0cmluZ19jaGVja3M9dHJ1ZSIKK0FTQU5fT1BUSU9OUys9IjpzdHJpcF9wYXRoX3ByZWZpeD0ke1BXRH0vIgorZXhwb3J0IEFTQU5fT1BUSU9OUworCisjIEZpcnN0IHJ1biBhbGwgdGVzdHMgYXMgdW5wcml2aWxlZ2VkIHVzZXIKKy4vYnVpbGQvdW5pdC10ZXN0cyAkKHV0X2xvZ19hcmdzKQpkaWZmIC0tZ2l0IGEvLmplbmtpbnMuZC8zMC1jb3ZlcmFnZS5zaCBiLy5qZW5raW5zLmQvMzAtY292ZXJhZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTYyOWU4MwotLS0gL2Rldi9udWxsCisrKyBiLy5qZW5raW5zLmQvMzAtY292ZXJhZ2Uuc2gKQEAgLTAsMCArMSwyMCBAQAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorc2V0IC1lCisKK0pESVI9JCggY2QgIiQoIGRpcm5hbWUgIiR7QkFTSF9TT1VSQ0VbMF19IiApIiAmJiBwd2QgKQorc291cmNlICIkSkRJUiIvdXRpbC5zaAorCitzZXQgLXgKKworaWYgW1sgJEpPQl9OQU1FID09ICoiY29kZS1jb3ZlcmFnZSIgXV07IHRoZW4KKyAgICBnY292ciAtLW9iamVjdC1kaXJlY3Rvcnk9YnVpbGQgXAorICAgICAgICAgIC0tb3V0cHV0PWJ1aWxkL2NvdmVyYWdlLnhtbCBcCisgICAgICAgICAgLS1leGNsdWRlPSIkUFdELyh0ZXN0cykiIFwKKyAgICAgICAgICAtLXJvb3Q9LiBcCisgICAgICAgICAgLS14bWwKKworICAgICMgIyBHZW5lcmF0ZSBhbHNvIGEgZGV0YWlsZWQgSFRNTCBvdXRwdXQsIGJ1dCB1c2luZyBsY292IChzbG93ZXIsIGJ1dCBiZXR0ZXIgcmVzdWx0cykKKyAgICBsY292IC1xIC1jIC1kIC4gLS1uby1leHRlcm5hbCAtbyBidWlsZC9jb3ZlcmFnZS13aXRoLXRlc3RzLmluZm8gLS1yYyBsY292X2JyYW5jaF9jb3ZlcmFnZT0xCisgICAgbGNvdiAtcSAtciBidWlsZC9jb3ZlcmFnZS13aXRoLXRlc3RzLmluZm8gIiRQV0QvdGVzdHMvKiIgLW8gYnVpbGQvY292ZXJhZ2UuaW5mbyAtLXJjIGxjb3ZfYnJhbmNoX2NvdmVyYWdlPTEKKyAgICBnZW5odG1sIGJ1aWxkL2NvdmVyYWdlLmluZm8gLS1vdXRwdXQtZGlyZWN0b3J5IGJ1aWxkL2NvdmVyYWdlIC0tbGVnZW5kIC0tcmMgZ2VuaHRtbF9icmFuY2hfY292ZXJhZ2U9MQorZmkKZGlmZiAtLWdpdCBhLy5qZW5raW5zLmQvUkVBRE1FLm1kIGIvLmplbmtpbnMuZC9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1ZTM4MwotLS0gL2Rldi9udWxsCisrKyBiLy5qZW5raW5zLmQvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMzQgQEAKK0NPTlRJTlVPVVMgSU5URUdSQVRJT04gU0NSSVBUUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0Vudmlyb25tZW50IFZhcmlhYmxlcyBVc2VkIGluIEJ1aWxkIFNjcmlwdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLSBgTk9ERV9MQUJFTFNgOiB0aGUgdmFyaWFibGUgZGVmaW5lcyBhIGxpc3Qgb2YgT1MgcHJvcGVydGllcy4gIFRoZSBzZXQgdmFsdWVzIGFyZSB1c2VkIGJ5IHRoZQorICBidWlsZCBzY3JpcHRzIHRvIHNlbGVjdCBwcm9wZXIgYmVoYXZpb3IgZm9yIGRpZmZlcmVudCBPUy4KKworICBUaGUgbGlzdCBzaG91bGQgaW5jbHVkZSBhdCBsZWFzdCBgW09TX1RZUEVdYCwgYFtESVNUUk9fVFlQRV1gLCBhbmQgYFtESVNUUk9fVkVSU0lPTl1gLgorCisgIFBvc3NpYmxlIHZhbHVlcyBmb3IgTGludXg6CisKKyAgKiBgW09TX1RZUEVdYDogYExpbnV4YAorICAqIGBbRElTVFJPX1RZUEVdYDogYFVidW50dWAKKyAgKiBgW0RJU1RST19WRVJTSU9OXWA6IGBVYnVudHUtMTQuMDRgLCBgVWJ1bnR1LTE2LjA0YAorCisgIFBvc3NpYmxlIHZhbHVlcyBmb3IgT1MgWCAvIG1hY09TOgorCisgICogYFtPU19UWVBFXWA6IGBPU1hgCisgICogYFtESVNUUk9fVFlQRV1gOiBgT1NYYCAoY2FuIGJlIGFic2VudCkKKyAgKiBgW0RJU1RST19WRVJTSU9OXWA6IGBPU1gtMTAuMTBgLCBgT1NYLTEwLjExYCwgYE9TWC0xMC4xMmAKKworLSBgSk9CX05BTUVgOiBvcHRpb25hbCB2YXJpYWJsZSB0byBkZWZpbmUgdHlwZSBvZiB0aGUgam9iLiAgRGVwZW5kaW5nIG9uIHRoZSBkZWZpbmVkIGpvYiB0eXBlLAorICB0aGUgYnVpbGQgc2NyaXB0cyBjYW4gcGVyZm9ybSBkaWZmZXJlbnQgdGFza3MuCisKKyAgUG9zc2libGUgdmFsdWVzOgorCisgICogZW1wdHk6IGRlZmF1bHQgYnVpbGQgcHJvY2VzcworICAqIGBjb2RlLWNvdmVyYWdlYCAoTGludXggT1MgaXMgYXNzdW1lZCk6IGRlYnVnIGJ1aWxkIHdpdGggdGVzdHMgYW5kIGNvZGUgY292ZXJhZ2UgYW5hbHlzaXMKKyAgKiBgbGltaXRlZC1idWlsZGA6IG9ubHkgYSBzaW5nbGUgZGVidWcgYnVpbGQgd2l0aCB0ZXN0cworCistIGBDQUNIRV9ESVJgOiB0aGUgdmFyaWFibGUgZGVmaW5lcyBhIHBhdGggdG8gZm9sZGVyIGNvbnRhaW5pbmcgY2FjaGVkIGZpbGVzIGZyb20gcHJldmlvdXMgYnVpbGRzLAorICBlLmcuLCBhIGNvbXBpbGVkIHZlcnNpb24gb2YgbmRuLWN4eCBsaWJyYXJ5LiAgSWYgbm90IHNldCwgYC90bXBgIGlzIHVzZWQuCmRpZmYgLS1naXQgYS8uamVua2lucy5kL3V0aWwuc2ggYi8uamVua2lucy5kL3V0aWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5YmMyNwotLS0gL2Rldi9udWxsCisrKyBiLy5qZW5raW5zLmQvdXRpbC5zaApAQCAtMCwwICsxLDE4IEBACitoYXMoKSB7CisgICAgbG9jYWwgc2F2ZWRfeHRyYWNlCisgICAgW1sgJC0gPT0gKngqIF1dICYmIHNhdmVkX3h0cmFjZT0teCB8fCBzYXZlZF94dHJhY2U9K3gKKyAgICBzZXQgK3gKKworICAgIGxvY2FsIHA9JDEKKyAgICBzaGlmdAorICAgIGxvY2FsIGkgcmV0PTEKKyAgICBmb3IgaSBpbiAiJEAiOyBkbworICAgICAgICBpZiBbWyAiJHtpfSIgPT0gIiR7cH0iIF1dOyB0aGVuCisgICAgICAgICAgICByZXQ9MAorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICBkb25lCisKKyAgICBzZXQgJHtzYXZlZF94dHJhY2V9CisgICAgcmV0dXJuICR7cmV0fQorfQpkaWZmIC0tZ2l0IGEvLnRyYXZpcy55bWwgYi8udHJhdmlzLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmUzZGVkCi0tLSAvZGV2L251bGwKKysrIGIvLnRyYXZpcy55bWwKQEAgLTAsMCArMSwyOSBAQAorc3VkbzogcmVxdWlyZWQKK2xhbmd1YWdlOiBnZW5lcmljCitlbnY6CisgIGdsb2JhbDoKKyAgICAtIEpPQl9OQU1FPWxpbWl0ZWQtYnVpbGQKKyAgICAtIEJPT1NUX1RFU1RfQ09MT1JfT1VUUFVUPXRydWUKK21hdHJpeDoKKyAgaW5jbHVkZToKKyAgICAtIG9zOiBsaW51eAorICAgICAgZGlzdDogdHJ1c3R5CisgICAgICBlbnY6CisgICAgICAgIC0gQ1hYPWcrKworICAgICAgICAtIE5PREVfTEFCRUxTPSJMaW51eCBVYnVudHUgVWJ1bnR1LTE0LjA0IgorICAgIC0gb3M6IGxpbnV4CisgICAgICBkaXN0OiB0cnVzdHkKKyAgICAgIGVudjoKKyAgICAgICAgLSBDWFg9Y2xhbmcrKworICAgICAgICAtIE5PREVfTEFCRUxTPSJMaW51eCBVYnVudHUgVWJ1bnR1LTE0LjA0IgorICAgIC0gb3M6IG9zeAorICAgICAgb3N4X2ltYWdlOiB4Y29kZTguMgorICAgICAgZW52OgorICAgICAgICAtIENYWD1jbGFuZysrCisgICAgICAgIC0gTk9ERV9MQUJFTFM9Ik9TWCBPU1gtMTAuMTIiCitub3RpZmljYXRpb25zOgorICBlbWFpbDoKKyAgICBvbl9zdWNjZXNzOiBhbHdheXMKKyAgICBvbl9mYWlsdXJlOiBhbHdheXMKK3NjcmlwdDoKKyAgLSAuLy5qZW5raW5zCmRpZmYgLS1naXQgYS8ud2FmLXRvb2xzL2Jvb3N0LnB5IGIvLndhZi10b29scy9ib29zdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjkzOTVlCi0tLSAvZGV2L251bGwKKysrIGIvLndhZi10b29scy9ib29zdC5weQpAQCAtMCwwICsxLDUxOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGVuY29kaW5nOiB1dGYtOAorIworIyBwYXJ0aWFsbHkgYmFzZWQgb24gYm9vc3QucHkgd3JpdHRlbiBieSBHZXJub3QgVm9ybWF5cgorIyB3cml0dGVuIGJ5IFJ1ZWRpZ2VyIFNvbmRlcmZlbGQgPHJ1ZWRpZ2VyQGMtcGx1c3BsdXMuZGU+LCAyMDA4CisjIG1vZGlmaWVkIGJ5IEJqb2VybiBNaWNoYWVsc2VuLCAyMDA4CisjIG1vZGlmaWVkIGJ5IEx1Y2EgRm9zc2F0aSwgMjAwOAorIyByZXdyaXR0ZW4gZm9yIHdhZiAxLjUuMSwgVGhvbWFzIE5hZ3ksIDIwMDgKKyMgcmV3cml0dGVuIGZvciB3YWYgMS42LjIsIFN5bHZhaW4gUm91cXVldHRlLCAyMDExCisKKycnJworCitUaGlzIGlzIGFuIGV4dHJhIHRvb2wsIG5vdCBidW5kbGVkIHdpdGggdGhlIGRlZmF1bHQgd2FmIGJpbmFyeS4KK1RvIGFkZCB0aGUgYm9vc3QgdG9vbCB0byB0aGUgd2FmIGZpbGU6CiskIC4vd2FmLWxpZ2h0IC0tdG9vbHM9Y29tcGF0MTUsYm9vc3QKKwlvciwgaWYgeW91IGhhdmUgd2FmID49IDEuNi4yCiskIC4vd2FmIHVwZGF0ZSAtLWZpbGVzPWJvb3N0CisKK1doZW4gdXNpbmcgdGhpcyB0b29sLCB0aGUgd3NjcmlwdCB3aWxsIGxvb2sgbGlrZToKKworCWRlZiBvcHRpb25zKG9wdCk6CisJCW9wdC5sb2FkKCdjb21waWxlcl9jeHggYm9vc3QnKQorCisJZGVmIGNvbmZpZ3VyZShjb25mKToKKwkJY29uZi5sb2FkKCdjb21waWxlcl9jeHggYm9vc3QnKQorCQljb25mLmNoZWNrX2Jvb3N0KGxpYj0nc3lzdGVtIGZpbGVzeXN0ZW0nKQorCisJZGVmIGJ1aWxkKGJsZCk6CisJCWJsZChzb3VyY2U9J21haW4uY3BwJywgdGFyZ2V0PSdhcHAnLCB1c2U9J0JPT1NUJykKKworT3B0aW9ucyBhcmUgZ2VuZXJhdGVkLCBpbiBvcmRlciB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiBib29zdCBpbmNsdWRlcy9saWJyYXJpZXMuCitUaGUgYGNoZWNrX2Jvb3N0YCBjb25maWd1cmF0aW9uIGZ1bmN0aW9uIGFsbG93cyB0byBzcGVjaWZ5IHRoZSB1c2VkIGJvb3N0IGxpYnJhcmllcy4KK0l0IGNhbiBhbHNvIHByb3ZpZGUgZGVmYXVsdCBhcmd1bWVudHMgdG8gdGhlIC0tYm9vc3QtbXQgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KK0V2ZXJ5dGhpbmcgd2lsbCBiZSBwYWNrYWdlZCB0b2dldGhlciBpbiBhIEJPT1NUIGNvbXBvbmVudCB0aGF0IHlvdSBjYW4gdXNlLgorCitXaGVuIHVzaW5nIE1TVkMsIGEgbG90IG9mIGNvbXBpbGF0aW9uIGZsYWdzIG5lZWQgdG8gbWF0Y2ggeW91ciBCT09TVCBidWlsZCBjb25maWd1cmF0aW9uOgorIC0geW91IG1heSBoYXZlIHRvIGFkZCAvRUhzYyB0byB5b3VyIENYWEZMQUdTIG9yIGRlZmluZSBib29zdDo6dGhyb3dfZXhjZXB0aW9uIGlmIEJPT1NUX05PX0VYQ0VQVElPTlMgaXMgZGVmaW5lZC4KKyAgIEVycm9yczogQzQ1MzAKKyAtIGJvb3N0IGxpYnJhcmllcyB3aWxsIHRyeSB0byBiZSBzbWFydCBhbmQgdXNlIHRoZSAocHJldHR5IGJ1dCBvZnRlbiBub3QgdXNlZnVsKSBhdXRvLWxpbmtpbmcgZmVhdHVyZSBvZiBNU1ZDCisgICBTbyBiZWZvcmUgY2FsbGluZyBgY29uZi5jaGVja19ib29zdGAgeW91IG1pZ2h0IHdhbnQgdG8gZGlzYWJsaW5nIGJ5IGFkZGluZworCQljb25mLmVudi5ERUZJTkVTX0JPT1NUICs9IFsnQk9PU1RfQUxMX05PX0xJQiddCisgICBFcnJvcnM6CisgLSBib29zdCBtaWdodCBhbHNvIGJlIGNvbXBpbGVkIHdpdGggL01ULCB3aGljaCBsaW5rcyB0aGUgcnVudGltZSBzdGF0aWNhbGx5LgorICAgSWYgeW91IGhhdmUgcHJvYmxlbXMgd2l0aCByZWRlZmluZWQgc3ltYm9scywKKwkJc2VsZi5lbnZbJ0RFRklORVNfJXMnICUgdmFyXSArPSBbJ0JPT1NUX0FMTF9OT19MSUInXQorCQlzZWxmLmVudlsnQ1hYRkxBR1NfJXMnICUgdmFyXSArPSBbJy9NRCcsICcvRUhzYyddCitQYXNzaW5nIGAtLWJvb3N0LWxpbmthZ2VfYXV0b2RldGVjdGAgbWlnaHQgaGVscCBlbnN1cmluZyBoYXZpbmcgYSBjb3JyZWN0IGxpbmthZ2UgaW4gc29tZSBiYXNpYyBjYXNlcy4KKworJycnCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQorZnJvbSB3YWZsaWIgaW1wb3J0IFV0aWxzLCBMb2dzLCBFcnJvcnMKK2Zyb20gd2FmbGliLkNvbmZpZ3VyZSBpbXBvcnQgY29uZgorZnJvbSB3YWZsaWIuVGFza0dlbiBpbXBvcnQgZmVhdHVyZSwgYWZ0ZXJfbWV0aG9kCisKK0JPT1NUX0xJQlMgPSBbJy91c3IvbGliL3g4Nl82NC1saW51eC1nbnUnLCAnL3Vzci9saWIvaTM4Ni1saW51eC1nbnUnLAorCQkJICAnL3Vzci9saWInLCAnL3Vzci9sb2NhbC9saWInLCAnL29wdC9sb2NhbC9saWInLCAnL3N3L2xpYicsICcvbGliJ10KK0JPT1NUX0lOQ0xVREVTID0gWycvdXNyL2luY2x1ZGUnLCAnL3Vzci9sb2NhbC9pbmNsdWRlJywgJy9vcHQvbG9jYWwvaW5jbHVkZScsICcvc3cvaW5jbHVkZSddCitCT09TVF9WRVJTSU9OX0ZJTEUgPSAnYm9vc3QvdmVyc2lvbi5ocHAnCitCT09TVF9WRVJTSU9OX0NPREUgPSAnJycKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxib29zdC92ZXJzaW9uLmhwcD4KK2ludCBtYWluKCkgeyBzdGQ6OmNvdXQgPDwgQk9PU1RfTElCX1ZFUlNJT04gPDwgIjoiIDw8IEJPT1NUX1ZFUlNJT04gPDwgc3RkOjplbmRsOyB9CisnJycKKworQk9PU1RfRVJST1JfQ09ERSA9ICcnJworI2luY2x1ZGUgPGJvb3N0L3N5c3RlbS9lcnJvcl9jb2RlLmhwcD4KK2ludCBtYWluKCkgeyBib29zdDo6c3lzdGVtOjplcnJvcl9jb2RlIGM7IH0KKycnJworCitQVEhSRUFEX0NPREUgPSAnJycKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CitzdGF0aWMgdm9pZCogZih2b2lkKikgeyByZXR1cm4gMDsgfQoraW50IG1haW4oKSB7CisJcHRocmVhZF90IHRoOworCXB0aHJlYWRfYXR0cl90IGF0dHI7CisJcHRocmVhZF9hdHRyX2luaXQoJmF0dHIpOworCXB0aHJlYWRfY3JlYXRlKCZ0aCwgJmF0dHIsICZmLCAwKTsKKwlwdGhyZWFkX2pvaW4odGgsIDApOworCXB0aHJlYWRfY2xlYW51cF9wdXNoKDAsIDApOworCXB0aHJlYWRfY2xlYW51cF9wb3AoMCk7CisJcHRocmVhZF9hdHRyX2Rlc3Ryb3koJmF0dHIpOworfQorJycnCisKK0JPT1NUX1RIUkVBRF9DT0RFID0gJycnCisjaW5jbHVkZSA8Ym9vc3QvdGhyZWFkLmhwcD4KK2ludCBtYWluKCkgeyBib29zdDo6dGhyZWFkIHQ7IH0KKycnJworCitCT09TVF9MT0dfQ09ERSA9ICcnJworI2luY2x1ZGUgPGJvb3N0L2xvZy90cml2aWFsLmhwcD4KKyNpbmNsdWRlIDxib29zdC9sb2cvdXRpbGl0eS9zZXR1cC9jb25zb2xlLmhwcD4KKyNpbmNsdWRlIDxib29zdC9sb2cvdXRpbGl0eS9zZXR1cC9jb21tb25fYXR0cmlidXRlcy5ocHA+CitpbnQgbWFpbigpIHsKKwl1c2luZyBuYW1lc3BhY2UgYm9vc3Q6OmxvZzsKKwlhZGRfY29tbW9uX2F0dHJpYnV0ZXMoKTsKKwlhZGRfY29uc29sZV9sb2coc3RkOjpjbG9nLCBrZXl3b3Jkczo6Zm9ybWF0ID0gIiVNZXNzYWdlJSIpOworCUJPT1NUX0xPR19UUklWSUFMKGRlYnVnKSA8PCAibG9nIGlzIHdvcmtpbmciIDw8IHN0ZDo6ZW5kbDsKK30KKycnJworCisjIHRvb2xzZXRzIGZyb20ge2Jvb3N0X2Rpcn0vdG9vbHMvYnVpbGQvdjIvdG9vbHMvY29tbW9uLmphbQorUExBVEZPUk0gPSBVdGlscy51bnZlcnNpb25lZF9zeXNfcGxhdGZvcm0oKQorZGV0ZWN0X2ludGVsID0gbGFtYmRhIGVudjogKFBMQVRGT1JNID09ICd3aW4zMicpIGFuZCAnaXcnIG9yICdpbCcKK2RldGVjdF9jbGFuZyA9IGxhbWJkYSBlbnY6IChQTEFURk9STSA9PSAnZGFyd2luJykgYW5kICdjbGFuZy1kYXJ3aW4nIG9yICdjbGFuZycKK2RldGVjdF9taW5ndyA9IGxhbWJkYSBlbnY6IChyZS5zZWFyY2goJ01pbkdXJywgZW52LkNYWFswXSkpIGFuZCAnbWd3JyBvciAnZ2NjJworQk9PU1RfVE9PTFNFVFMgPSB7CisJJ2JvcmxhbmQnOiAgJ2JjYicsCisJJ2NsYW5nJzoJZGV0ZWN0X2NsYW5nLAorCSdjb21vJzoJICdjb21vJywKKwknY3cnOgkgICAnY3cnLAorCSdkYXJ3aW4nOiAgICd4Z2NjJywKKwknZWRnJzoJICAnZWRnJywKKwknZysrJzoJICBkZXRlY3RfbWluZ3csCisJJ2djYyc6CSAgZGV0ZWN0X21pbmd3LAorCSdpY3BjJzoJIGRldGVjdF9pbnRlbCwKKwknaW50ZWwnOglkZXRlY3RfaW50ZWwsCisJJ2tjYyc6CSAgJ2tjYycsCisJJ2t5bGl4JzoJJ2JjaycsCisJJ21pcHNwcm8nOiAgJ21wJywKKwknbWluZ3cnOgknbWd3JywKKwknbXN2Yyc6CSAndmMnLAorCSdxY2MnOgkgICdxY2MnLAorCSdzdW4nOgkgICdzdycsCisJJ3N1bmMrKyc6ICAgJ3N3JywKKwkndHJ1NjRjeHgnOiAndHJ1JywKKwkndmFjcHAnOgkneGxjJworfQorCisKK2RlZiBvcHRpb25zKG9wdCk6CisJb3B0ID0gb3B0LmFkZF9vcHRpb25fZ3JvdXAoJ0Jvb3N0IE9wdGlvbnMnKQorCW9wdC5hZGRfb3B0aW9uKCctLWJvb3N0LWluY2x1ZGVzJywgdHlwZT0nc3RyaW5nJywKKwkJCQkgICBkZWZhdWx0PScnLCBkZXN0PSdib29zdF9pbmNsdWRlcycsCisJCQkJICAgaGVscD0nJydwYXRoIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGJvb3N0IGluY2x1ZGVzIGFyZSwKKwkJCQkgICBlLmcuLCAvcGF0aC90by9ib29zdF8xXzU1XzAvc3RhZ2UvaW5jbHVkZScnJykKKwlvcHQuYWRkX29wdGlvbignLS1ib29zdC1saWJzJywgdHlwZT0nc3RyaW5nJywKKwkJCQkgICBkZWZhdWx0PScnLCBkZXN0PSdib29zdF9saWJzJywKKwkJCQkgICBoZWxwPScnJ3BhdGggdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgYm9vc3QgbGlicyBhcmUsCisJCQkJICAgZS5nLiwgcGF0aC90by9ib29zdF8xXzU1XzAvc3RhZ2UvbGliJycnKQorCW9wdC5hZGRfb3B0aW9uKCctLWJvb3N0LW10JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKwkJCQkgICBkZWZhdWx0PUZhbHNlLCBkZXN0PSdib29zdF9tdCcsCisJCQkJICAgaGVscD0nc2VsZWN0IG11bHRpLXRocmVhZGVkIGxpYnJhcmllcycpCisJb3B0LmFkZF9vcHRpb24oJy0tYm9vc3QtYWJpJywgdHlwZT0nc3RyaW5nJywgZGVmYXVsdD0nJywgZGVzdD0nYm9vc3RfYWJpJywKKwkJCQkgICBoZWxwPScnJ3NlbGVjdCBsaWJyYXJpZXMgd2l0aCB0YWdzIChnZCBmb3IgZGVidWcsIHN0YXRpYyBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkKSwKKwkJCQkgICBzZWUgZG9jIEJvb3N0LCBHZXR0aW5nIFN0YXJ0ZWQsIGNoYXB0ZXIgNi4xJycnKQorCW9wdC5hZGRfb3B0aW9uKCctLWJvb3N0LWxpbmthZ2VfYXV0b2RldGVjdCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9J2Jvb3N0X2xpbmthZ2VfYXV0b2RldGVjdCcsCisJCQkJICAgaGVscD0iYXV0by1kZXRlY3QgYm9vc3QgbGlua2FnZSBvcHRpb25zIChkb24ndCBnZXQgdXNlZCB0byBpdCAvIG1pZ2h0IGJyZWFrIG90aGVyIHN0dWZmKSIpCisJb3B0LmFkZF9vcHRpb24oJy0tYm9vc3QtdG9vbHNldCcsIHR5cGU9J3N0cmluZycsCisJCQkJICAgZGVmYXVsdD0nJywgZGVzdD0nYm9vc3RfdG9vbHNldCcsCisJCQkJICAgaGVscD0nZm9yY2UgYSB0b29sc2V0IGUuZy4gbXN2YywgdmM5MCwgXAorCQkJCQkJZ2NjLCBtaW5ndywgbWd3NDUgKGRlZmF1bHQ6IGF1dG8pJykKKwlweV92ZXJzaW9uID0gJyVkJWQnICUgKHN5cy52ZXJzaW9uX2luZm9bMF0sIHN5cy52ZXJzaW9uX2luZm9bMV0pCisJb3B0LmFkZF9vcHRpb24oJy0tYm9vc3QtcHl0aG9uJywgdHlwZT0nc3RyaW5nJywKKwkJCQkgICBkZWZhdWx0PXB5X3ZlcnNpb24sIGRlc3Q9J2Jvb3N0X3B5dGhvbicsCisJCQkJICAgaGVscD0nc2VsZWN0IHRoZSBsaWIgcHl0aG9uIHdpdGggdGhpcyB2ZXJzaW9uIFwKKwkJCQkJCShkZWZhdWx0OiAlcyknICUgcHlfdmVyc2lvbikKKworCitAY29uZgorZGVmIF9fYm9vc3RfZ2V0X3ZlcnNpb25fZmlsZShzZWxmLCBkKToKKwlpZiBub3QgZDoKKwkJcmV0dXJuIE5vbmUKKwlkbm9kZSA9IHNlbGYucm9vdC5maW5kX2RpcihkKQorCWlmIGRub2RlOgorCQlyZXR1cm4gZG5vZGUuZmluZF9ub2RlKEJPT1NUX1ZFUlNJT05fRklMRSkKKwlyZXR1cm4gTm9uZQorCitAY29uZgorZGVmIGJvb3N0X2dldF92ZXJzaW9uKHNlbGYsIGQpOgorCSIiInNpbGVudGx5IHJldHJpZXZlIHRoZSBib29zdCB2ZXJzaW9uIG51bWJlciIiIgorCW5vZGUgPSBzZWxmLl9fYm9vc3RfZ2V0X3ZlcnNpb25fZmlsZShkKQorCWlmIG5vZGU6CisJCXRyeToKKwkJCXR4dCA9IG5vZGUucmVhZCgpCisJCWV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorCQkJTG9ncy5lcnJvcigiQ291bGQgbm90IHJlYWQgdGhlIGZpbGUgJXIiICUgbm9kZS5hYnNwYXRoKCkpCisJCWVsc2U6CisJCQlyZV9idXQxID0gcmUuY29tcGlsZSgnXiNkZWZpbmVcXHMrQk9PU1RfTElCX1ZFUlNJT05cXHMrIiguKykiJywgcmUuTSkKKwkJCW0xID0gcmVfYnV0MS5zZWFyY2godHh0KQorCQkJcmVfYnV0MiA9IHJlLmNvbXBpbGUoJ14jZGVmaW5lXFxzK0JPT1NUX1ZFUlNJT05cXHMrKFxcZCspJywgcmUuTSkKKwkJCW0yID0gcmVfYnV0Mi5zZWFyY2godHh0KQorCQkJaWYgbTEgYW5kIG0yOgorCQkJCXJldHVybiAobTEuZ3JvdXAoMSksIG0yLmdyb3VwKDEpKQorCXJldHVybiBzZWxmLmNoZWNrX2N4eChmcmFnbWVudD1CT09TVF9WRVJTSU9OX0NPREUsIGluY2x1ZGVzPVtkXSwgZXhlY3V0ZT1UcnVlLCBkZWZpbmVfcmV0PVRydWUpLnNwbGl0KCI6IikKKworQGNvbmYKK2RlZiBib29zdF9nZXRfaW5jbHVkZXMoc2VsZiwgKmssICoqa3cpOgorCWluY2x1ZGVzID0gayBhbmQga1swXSBvciBrdy5nZXQoJ2luY2x1ZGVzJywgTm9uZSkKKwlpZiBpbmNsdWRlcyBhbmQgc2VsZi5fX2Jvb3N0X2dldF92ZXJzaW9uX2ZpbGUoaW5jbHVkZXMpOgorCQlyZXR1cm4gaW5jbHVkZXMKKwlmb3IgZCBpbiBzZWxmLmVudmlyb24uZ2V0KCdJTkNMVURFJywgJycpLnNwbGl0KCc7JykgKyBCT09TVF9JTkNMVURFUzoKKwkJaWYgc2VsZi5fX2Jvb3N0X2dldF92ZXJzaW9uX2ZpbGUoZCk6CisJCQlyZXR1cm4gZAorCWlmIGluY2x1ZGVzOgorCQlzZWxmLmVuZF9tc2coJ2hlYWRlcnMgbm90IGZvdW5kIGluICVzJyAlIGluY2x1ZGVzKQorCQlzZWxmLmZhdGFsKCdUaGUgY29uZmlndXJhdGlvbiBmYWlsZWQnKQorCWVsc2U6CisJCXNlbGYuZW5kX21zZygnaGVhZGVycyBub3QgZm91bmQsIHBsZWFzZSBwcm92aWRlIGEgLS1ib29zdC1pbmNsdWRlcyBhcmd1bWVudCAoc2VlIGhlbHApJykKKwkJc2VsZi5mYXRhbCgnVGhlIGNvbmZpZ3VyYXRpb24gZmFpbGVkJykKKworCitAY29uZgorZGVmIGJvb3N0X2dldF90b29sc2V0KHNlbGYsIGNjKToKKwl0b29sc2V0ID0gY2MKKwlpZiBub3QgY2M6CisJCWJ1aWxkX3BsYXRmb3JtID0gVXRpbHMudW52ZXJzaW9uZWRfc3lzX3BsYXRmb3JtKCkKKwkJaWYgYnVpbGRfcGxhdGZvcm0gaW4gQk9PU1RfVE9PTFNFVFM6CisJCQljYyA9IGJ1aWxkX3BsYXRmb3JtCisJCWVsc2U6CisJCQljYyA9IHNlbGYuZW52LkNYWF9OQU1FCisJaWYgY2MgaW4gQk9PU1RfVE9PTFNFVFM6CisJCXRvb2xzZXQgPSBCT09TVF9UT09MU0VUU1tjY10KKwlyZXR1cm4gaXNpbnN0YW5jZSh0b29sc2V0LCBzdHIpIGFuZCB0b29sc2V0IG9yIHRvb2xzZXQoc2VsZi5lbnYpCisKKworQGNvbmYKK2RlZiBfX2Jvb3N0X2dldF9saWJzX3BhdGgoc2VsZiwgKmssICoqa3cpOgorCScnJyByZXR1cm4gdGhlIGxpYiBwYXRoIGFuZCBhbGwgdGhlIGZpbGVzIGluIGl0ICcnJworCWlmICdmaWxlcycgaW4ga3c6CisJCXJldHVybiBzZWxmLnJvb3QuZmluZF9kaXIoJy4nKSwgVXRpbHMudG9fbGlzdChrd1snZmlsZXMnXSkKKwlsaWJzID0gayBhbmQga1swXSBvciBrdy5nZXQoJ2xpYnMnLCBOb25lKQorCWlmIGxpYnM6CisJCXBhdGggPSBzZWxmLnJvb3QuZmluZF9kaXIobGlicykKKwkJZmlsZXMgPSBwYXRoLmFudF9nbG9iKCcqYm9vc3RfKicpCisJaWYgbm90IGxpYnMgb3Igbm90IGZpbGVzOgorCQlmb3IgZCBpbiBzZWxmLmVudmlyb24uZ2V0KCdMSUInLCAnJykuc3BsaXQoJzsnKSArIEJPT1NUX0xJQlM6CisJCQlpZiBub3QgZDoKKwkJCQljb250aW51ZQorCQkJcGF0aCA9IHNlbGYucm9vdC5maW5kX2RpcihkKQorCQkJaWYgcGF0aDoKKwkJCQlmaWxlcyA9IHBhdGguYW50X2dsb2IoJypib29zdF8qJykKKwkJCQlpZiBmaWxlczoKKwkJCQkJYnJlYWsKKwkJCXBhdGggPSBzZWxmLnJvb3QuZmluZF9kaXIoZCArICc2NCcpCisJCQlpZiBwYXRoOgorCQkJCWZpbGVzID0gcGF0aC5hbnRfZ2xvYignKmJvb3N0XyonKQorCQkJCWlmIGZpbGVzOgorCQkJCQlicmVhaworCWlmIG5vdCBwYXRoOgorCQlpZiBsaWJzOgorCQkJc2VsZi5lbmRfbXNnKCdsaWJzIG5vdCBmb3VuZCBpbiAlcycgJSBsaWJzKQorCQkJc2VsZi5mYXRhbCgnVGhlIGNvbmZpZ3VyYXRpb24gZmFpbGVkJykKKwkJZWxzZToKKwkJCXNlbGYuZW5kX21zZygnbGlicyBub3QgZm91bmQsIHBsZWFzZSBwcm92aWRlIGEgLS1ib29zdC1saWJzIGFyZ3VtZW50IChzZWUgaGVscCknKQorCQkJc2VsZi5mYXRhbCgnVGhlIGNvbmZpZ3VyYXRpb24gZmFpbGVkJykKKworCXNlbGYudG9fbG9nKCdGb3VuZCB0aGUgYm9vc3QgcGF0aCBpbiAlciB3aXRoIHRoZSBsaWJyYXJpZXM6JyAlIHBhdGgpCisJZm9yIHggaW4gZmlsZXM6CisJCXNlbGYudG9fbG9nKCcgICAgJXInICUgeCkKKwlyZXR1cm4gcGF0aCwgZmlsZXMKKworQGNvbmYKK2RlZiBib29zdF9nZXRfbGlicyhzZWxmLCAqaywgKiprdyk6CisJJycnCisJcmV0dXJuIHRoZSBsaWIgcGF0aCBhbmQgdGhlIHJlcXVpcmVkIGxpYnMKKwlhY2NvcmRpbmcgdG8gdGhlIHBhcmFtZXRlcnMKKwknJycKKwlwYXRoLCBmaWxlcyA9IHNlbGYuX19ib29zdF9nZXRfbGlic19wYXRoKCoqa3cpCisJZmlsZXMgPSBzb3J0ZWQoZmlsZXMsIGtleT1sYW1iZGEgZjogKGxlbihmLm5hbWUpLCBmLm5hbWUpLCByZXZlcnNlPVRydWUpCisJdG9vbHNldCA9IHNlbGYuYm9vc3RfZ2V0X3Rvb2xzZXQoa3cuZ2V0KCd0b29sc2V0JywgJycpKQorCXRvb2xzZXRfcGF0ID0gJygtJXNbMC05XXswLDN9KScgJSB0b29sc2V0CisJdmVyc2lvbiA9ICctJXMnICUgc2VsZi5lbnYuQk9PU1RfVkVSU0lPTgorCisJZGVmIGZpbmRfbGliKHJlX2xpYiwgZmlsZXMpOgorCQlmb3IgZmlsZSBpbiBmaWxlczoKKwkJCWlmIHJlX2xpYi5zZWFyY2goZmlsZS5uYW1lKToKKwkJCQlzZWxmLnRvX2xvZygnRm91bmQgYm9vc3QgbGliICVzJyAlIGZpbGUpCisJCQkJcmV0dXJuIGZpbGUKKwkJcmV0dXJuIE5vbmUKKworCWRlZiBmb3JtYXRfbGliX25hbWUobmFtZSk6CisJCWlmIG5hbWUuc3RhcnRzd2l0aCgnbGliJykgYW5kIHNlbGYuZW52LkNDX05BTUUgIT0gJ21zdmMnOgorCQkJbmFtZSA9IG5hbWVbMzpdCisJCXJldHVybiBuYW1lWzpuYW1lLnJmaW5kKCcuJyldCisKKwlkZWYgbWF0Y2hfbGlicyhsaWJfbmFtZXMsIGlzX3N0YXRpYyk6CisJCWxpYnMgPSBbXQorCQlsaWJfbmFtZXMgPSBVdGlscy50b19saXN0KGxpYl9uYW1lcykKKwkJaWYgbm90IGxpYl9uYW1lczoKKwkJCXJldHVybiBsaWJzCisJCXQgPSBbXQorCQlpZiBrdy5nZXQoJ210JywgRmFsc2UpOgorCQkJdC5hcHBlbmQoJy1tdCcpCisJCWlmIGt3LmdldCgnYWJpJywgTm9uZSk6CisJCQl0LmFwcGVuZCgnJXMlcycgJSAoaXNfc3RhdGljIGFuZCAnLXMnIG9yICctJywga3dbJ2FiaSddKSkKKwkJZWxpZiBpc19zdGF0aWM6CisJCQl0LmFwcGVuZCgnLXMnKQorCQl0YWdzX3BhdCA9IHQgYW5kICcnLmpvaW4odCkgb3IgJycKKwkJZXh0ID0gaXNfc3RhdGljIGFuZCBzZWxmLmVudi5jeHhzdGxpYl9QQVRURVJOIG9yIHNlbGYuZW52LmN4eHNobGliX1BBVFRFUk4KKwkJZXh0ID0gZXh0LnBhcnRpdGlvbignJXMnKVsyXSAjIHJlbW92ZSAnJXMnIG9yICdsaWIlcycgZnJvbSBQQVRURVJOCisKKwkJZm9yIGxpYiBpbiBsaWJfbmFtZXM6CisJCQlpZiBsaWIgPT0gJ3B5dGhvbic6CisJCQkJIyBmb3IgaW5zdGFuY2UsIHdpdGggcHl0aG9uPScyNycsCisJCQkJIyBhY2NlcHRzICctcHkyNycsICctcHkyJywgJzI3JyBhbmQgJzInCisJCQkJIyBidXQgd2lsbCByZWplY3QgJy1weTMnLCAnLXB5MjYnLCAnMjYnIGFuZCAnMycKKwkJCQl0YWdzID0gJyh7MH0pPygoLXB5ezJ9KXwoLXB5ezF9KD89W14wLTldKSl8KHsyfSl8KHsxfSg/PVteMC05XSkpfCg/PVteMC05XSkoPyEtcHkpKScuZm9ybWF0KHRhZ3NfcGF0LCBrd1sncHl0aG9uJ11bMF0sIGt3WydweXRob24nXSkKKwkJCWVsc2U6CisJCQkJdGFncyA9IHRhZ3NfcGF0CisJCQkjIFRyeWluZyBsaWJyYXJpZXMsIGZyb20gbW9zdCBzdHJpY3QgbWF0Y2ggdG8gbGVhc3Qgb25lCisJCQlmb3IgcGF0dGVybiBpbiBbJ2Jvb3N0XyVzJXMlcyVzJXMkJyAlIChsaWIsIHRvb2xzZXRfcGF0LCB0YWdzLCB2ZXJzaW9uLCBleHQpLAorCQkJCQkJCSdib29zdF8lcyVzJXMlcyQnICUgKGxpYiwgdGFncywgdmVyc2lvbiwgZXh0KSwKKwkJCQkJCQkjIEdpdmUgdXAgdHJ5aW5nIHRvIGZpbmQgdGhlIHJpZ2h0IHZlcnNpb24KKwkJCQkJCQknYm9vc3RfJXMlcyVzJXMkJyAlIChsaWIsIHRvb2xzZXRfcGF0LCB0YWdzLCBleHQpLAorCQkJCQkJCSdib29zdF8lcyVzJXMkJyAlIChsaWIsIHRhZ3MsIGV4dCksCisJCQkJCQkJJ2Jvb3N0XyVzJXMkJyAlIChsaWIsIGV4dCksCisJCQkJCQkJJ2Jvb3N0XyVzJyAlIGxpYl06CisJCQkJc2VsZi50b19sb2coJ1RyeWluZyBwYXR0ZXJuICVzJyAlIHBhdHRlcm4pCisJCQkJZmlsZSA9IGZpbmRfbGliKHJlLmNvbXBpbGUocGF0dGVybiksIGZpbGVzKQorCQkJCWlmIGZpbGU6CisJCQkJCWxpYnMuYXBwZW5kKGZvcm1hdF9saWJfbmFtZShmaWxlLm5hbWUpKQorCQkJCQlicmVhaworCQkJZWxzZToKKwkJCQlzZWxmLmVuZF9tc2coJ2xpYiAlcyBub3QgZm91bmQgaW4gJXMnICUgKGxpYiwgcGF0aC5hYnNwYXRoKCkpKQorCQkJCXNlbGYuZmF0YWwoJ1RoZSBjb25maWd1cmF0aW9uIGZhaWxlZCcpCisJCXJldHVybiBsaWJzCisKKwlyZXR1cm4gIHBhdGguYWJzcGF0aCgpLCBtYXRjaF9saWJzKGt3LmdldCgnbGliJywgTm9uZSksIEZhbHNlKSwgbWF0Y2hfbGlicyhrdy5nZXQoJ3N0bGliJywgTm9uZSksIFRydWUpCisKK0Bjb25mCitkZWYgX2NoZWNrX3B0aHJlYWRfZmxhZyhzZWxmLCAqaywgKiprdyk6CisJJycnCisJQ29tcHV0ZXMgd2hpY2ggZmxhZ3Mgc2hvdWxkIGJlIGFkZGVkIHRvIENYWEZMQUdTIGFuZCBMSU5LRkxBR1MgdG8gY29tcGlsZSBpbiBtdWx0aS10aHJlYWRpbmcgbW9kZQorCisJWWVzLCB3ZSAqbmVlZCogdG8gcHV0IHRoZSAtcHRocmVhZCB0aGluZyBpbiBDUFBGTEFHUyBiZWNhdXNlIHdpdGggR0NDMywKKwlib29zdC90aHJlYWQuaHBwIHdpbGwgdHJpZ2dlciBhICNlcnJvciBpZiAtcHRocmVhZCBpc24ndCB1c2VkOgorCSAgYm9vc3QvY29uZmlnL3JlcXVpcmVzX3RocmVhZHMuaHBwOjQ3OjU6ICNlcnJvciAiQ29tcGlsZXIgdGhyZWFkaW5nIHN1cHBvcnQKKwkgIGlzIG5vdCB0dXJuZWQgb24uIFBsZWFzZSBzZXQgdGhlIGNvcnJlY3QgY29tbWFuZCBsaW5lIG9wdGlvbnMgZm9yCisJICB0aHJlYWRpbmc6IC1wdGhyZWFkIChMaW51eCksIC1wdGhyZWFkcyAoU29sYXJpcykgb3IgLW10aHJlYWRzIChNaW5ndzMyKSIKKworCUJhc2VkIG9uIF9CT09TVF9QVEhSRUFEX0ZMQUcoKTogaHR0cHM6Ly9naXRodWIuY29tL3RzdW5hL2Jvb3N0Lm00L2Jsb2IvbWFzdGVyL2J1aWxkLWF1eC9ib29zdC5tNAorICAgICcnJworCisJdmFyID0ga3cuZ2V0KCd1c2VsaWJfc3RvcmUnLCAnQk9PU1QnKQorCisJc2VsZi5zdGFydF9tc2coJ0NoZWNraW5nIHRoZSBmbGFncyBuZWVkZWQgdG8gdXNlIHB0aHJlYWRzJykKKworCSMgVGhlIG9yZGVyaW5nICppcyogKHNvbWV0aW1lcykgaW1wb3J0YW50LiAgU29tZSBub3RlcyBvbiB0aGUKKwkjIGluZGl2aWR1YWwgaXRlbXMgZm9sbG93OgorCSMgKG5vbmUpOiBpbiBjYXNlIHRocmVhZHMgYXJlIGluIGxpYmM7IHNob3VsZCBiZSB0cmllZCBiZWZvcmUgLUt0aHJlYWQgYW5kCisJIyAgICAgICBvdGhlciBjb21waWxlciBmbGFncyB0byBwcmV2ZW50IGNvbnRpbnVhbCBjb21waWxlciB3YXJuaW5ncworCSMgLWxwdGhyZWFkczogQUlYIChtdXN0IGNoZWNrIHRoaXMgYmVmb3JlIC1scHRocmVhZCkKKwkjIC1LdGhyZWFkOiBTZXF1ZW50ICh0aHJlYWRzIGluIGxpYmMsIGJ1dCAtS3RocmVhZCBuZWVkZWQgZm9yIHB0aHJlYWQuaCkKKwkjIC1rdGhyZWFkOiBGcmVlQlNEIGtlcm5lbCB0aHJlYWRzIChwcmVmZXJyZWQgdG8gLXB0aHJlYWQgc2luY2UgU01QLWFibGUpCisJIyAtbGx0aHJlYWQ6IExpbnV4VGhyZWFkcyBwb3J0IG9uIEZyZWVCU0QgKGFsc28gcHJlZmVycmVkIHRvIC1wdGhyZWFkKQorCSMgLXB0aHJlYWQ6IEdOVSBMaW51eC9HQ0MgKGtlcm5lbCB0aHJlYWRzKSwgQlNEL0dDQyAodXNlcmxhbmQgdGhyZWFkcykKKwkjIC1wdGhyZWFkczogU29sYXJpcy9HQ0MKKwkjIC1tdGhyZWFkczogTWluR1czMi9HQ0MsIEx5bngvR0NDCisJIyAtbXQ6IFN1biBXb3Jrc2hvcCBDIChtYXkgb25seSBsaW5rIFN1bk9TIHRocmVhZHMgWy1sdGhyZWFkXSwgYnV0IGl0CisJIyAgICAgIGRvZXNuJ3QgaHVydCB0byBjaGVjayBzaW5jZSB0aGlzIHNvbWV0aW1lcyBkZWZpbmVzIHB0aHJlYWRzIHRvbzsKKwkjICAgICAgYWxzbyBkZWZpbmVzIC1EX1JFRU5UUkFOVCkKKwkjICAgICAgLi4uIC1tdCBpcyBhbHNvIHRoZSBwdGhyZWFkcyBmbGFnIGZvciBIUC9hQ0MKKwkjIC1scHRocmVhZDogR05VIExpbnV4LCBldGMuCisJIyAtLXRocmVhZC1zYWZlOiBLQUkgQysrCisJaWYgVXRpbHMudW52ZXJzaW9uZWRfc3lzX3BsYXRmb3JtKCkgPT0gInN1bm9zIjoKKwkJIyBPbiBTb2xhcmlzIChhdCBsZWFzdCwgZm9yIHNvbWUgdmVyc2lvbnMpLCBsaWJjIGNvbnRhaW5zIHN0dWJiZWQKKwkJIyAobm9uLWZ1bmN0aW9uYWwpIHZlcnNpb25zIG9mIHRoZSBwdGhyZWFkcyByb3V0aW5lcywgc28gbGluay1iYXNlZAorCQkjIHRlc3RzIHdpbGwgZXJyb25lb3VzbHkgc3VjY2VlZC4gIChXZSBuZWVkIHRvIGxpbmsgd2l0aCAtcHRocmVhZHMvLW10LworCQkjIC1scHRocmVhZC4pICAoVGhlIHN0dWJzIGFyZSBtaXNzaW5nIHB0aHJlYWRfY2xlYW51cF9wdXNoLCBvciByYXRoZXIKKwkJIyBhIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGlzIG1hY3JvLCBzbyB3ZSBjb3VsZCBjaGVjayBmb3IgdGhhdCwgYnV0CisJCSMgd2hvIGtub3dzIHdoZXRoZXIgdGhleSdsbCBzdHViIHRoYXQgdG9vIGluIGEgZnV0dXJlIGxpYmMuKSAgU28sCisJCSMgd2UnbGwganVzdCBsb29rIGZvciAtcHRocmVhZHMgYW5kIC1scHRocmVhZCBmaXJzdDoKKwkJYm9vc3RfcHRocmVhZF9mbGFncyA9IFsiLXB0aHJlYWRzIiwgIi1scHRocmVhZCIsICItbXQiLCAiLXB0aHJlYWQiXQorCWVsc2U6CisJCWJvb3N0X3B0aHJlYWRfZmxhZ3MgPSBbIiIsICItbHB0aHJlYWRzIiwgIi1LdGhyZWFkIiwgIi1rdGhyZWFkIiwgIi1sbHRocmVhZCIsICItcHRocmVhZCIsCisJCQkJCQkJICAgIi1wdGhyZWFkcyIsICItbXRocmVhZHMiLCAiLWxwdGhyZWFkIiwgIi0tdGhyZWFkLXNhZmUiLCAiLW10Il0KKworCWZvciBib29zdF9wdGhyZWFkX2ZsYWcgaW4gYm9vc3RfcHRocmVhZF9mbGFnczoKKwkJdHJ5OgorCQkJc2VsZi5lbnYuc3Rhc2goKQorCQkJc2VsZi5lbnZbJ0NYWEZMQUdTXyVzJyAlIHZhcl0gKz0gW2Jvb3N0X3B0aHJlYWRfZmxhZ10KKwkJCXNlbGYuZW52WydMSU5LRkxBR1NfJXMnICUgdmFyXSArPSBbYm9vc3RfcHRocmVhZF9mbGFnXQorCQkJc2VsZi5jaGVja19jeHgoY29kZT1QVEhSRUFEX0NPREUsIG1zZz1Ob25lLCB1c2U9dmFyLCBleGVjdXRlPUZhbHNlKQorCisJCQlzZWxmLmVuZF9tc2coYm9vc3RfcHRocmVhZF9mbGFnKQorCQkJcmV0dXJuCisJCWV4Y2VwdCBzZWxmLmVycm9ycy5Db25maWd1cmF0aW9uRXJyb3I6CisJCQlzZWxmLmVudi5yZXZlcnQoKQorCXNlbGYuZW5kX21zZygnTm9uZScpCisKK0Bjb25mCitkZWYgY2hlY2tfYm9vc3Qoc2VsZiwgKmssICoqa3cpOgorCSIiIgorCUluaXRpYWxpemUgYm9vc3QgbGlicmFyaWVzIHRvIGJlIHVzZWQuCisKKwlLZXl3b3JkczogeW91IGNhbiBwYXNzIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgd2l0aCB0aGUgY29tbWFuZCBsaW5lICh3aXRob3V0ICItLWJvb3N0LSIpLgorCU5vdGUgdGhhdCB0aGUgY29tbWFuZCBsaW5lIGhhcyB0aGUgcHJpb3JpdHksIGFuZCBzaG91bGQgcHJlZmVyYWJseSBiZSB1c2VkLgorCSIiIgorCWlmIG5vdCBzZWxmLmVudlsnQ1hYJ106CisJCXNlbGYuZmF0YWwoJ2xvYWQgYSBjKysgY29tcGlsZXIgZmlyc3QsIGNvbmYubG9hZCgiY29tcGlsZXJfY3h4IiknKQorCisJcGFyYW1zID0geworCQknbGliJzogayBhbmQga1swXSBvciBrdy5nZXQoJ2xpYicsIE5vbmUpLAorCQknc3RsaWInOiBrdy5nZXQoJ3N0bGliJywgTm9uZSkKKwl9CisJZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5vcHRpb25zLl9fZGljdF9fLml0ZW1zKCk6CisJCWlmIG5vdCBrZXkuc3RhcnRzd2l0aCgnYm9vc3RfJyk6CisJCQljb250aW51ZQorCQlrZXkgPSBrZXlbbGVuKCdib29zdF8nKTpdCisJCXBhcmFtc1trZXldID0gdmFsdWUgYW5kIHZhbHVlIG9yIGt3LmdldChrZXksICcnKQorCisJdmFyID0ga3cuZ2V0KCd1c2VsaWJfc3RvcmUnLCAnQk9PU1QnKQorCisJc2VsZi5zdGFydF9tc2coJ0NoZWNraW5nIGJvb3N0IGluY2x1ZGVzJykKKwlzZWxmLmVudlsnSU5DTFVERVNfJXMnICUgdmFyXSA9IGluYyA9IHNlbGYuYm9vc3RfZ2V0X2luY2x1ZGVzKCoqcGFyYW1zKQorCXZlcnNpb25zID0gc2VsZi5ib29zdF9nZXRfdmVyc2lvbihpbmMpCisJc2VsZi5lbnYuQk9PU1RfVkVSU0lPTiA9IHZlcnNpb25zWzBdCisJc2VsZi5lbnYuQk9PU1RfVkVSU0lPTl9OVU1CRVIgPSBpbnQodmVyc2lvbnNbMV0pCisJc2VsZi5lbmRfbXNnKCIlZC4lZC4lZCIgJSAoaW50KHZlcnNpb25zWzFdKSAvIDEwMDAwMCwKKwkJCQkJCQkgICBpbnQodmVyc2lvbnNbMV0pIC8gMTAwICUgMTAwMCwKKwkJCQkJCQkgICBpbnQodmVyc2lvbnNbMV0pICUgMTAwKSkKKwlpZiBMb2dzLnZlcmJvc2U6CisJCUxvZ3MucHByaW50KCdDWUFOJywgJwlwYXRoIDogJXMnICUgc2VsZi5lbnZbJ0lOQ0xVREVTXyVzJyAlIHZhcl0pCisKKwlpZiBub3QgcGFyYW1zWydsaWInXSBhbmQgbm90IHBhcmFtc1snc3RsaWInXToKKwkJcmV0dXJuCisJaWYgJ3N0YXRpYycgaW4ga3cgb3IgJ3N0YXRpYycgaW4gcGFyYW1zOgorCQlMb2dzLndhcm4oJ2Jvb3N0OiBzdGF0aWMgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQsIHVzZSBzdGxpYiBpbnN0ZWFkLicpCisJc2VsZi5zdGFydF9tc2coJ0NoZWNraW5nIGJvb3N0IGxpYnMnKQorCXBhdGgsIGxpYnMsIHN0bGlicyA9IHNlbGYuYm9vc3RfZ2V0X2xpYnMoKipwYXJhbXMpCisJc2VsZi5lbnZbJ0xJQlBBVEhfJXMnICUgdmFyXSA9IFtwYXRoXQorCXNlbGYuZW52WydTVExJQlBBVEhfJXMnICUgdmFyXSA9IFtwYXRoXQorCXNlbGYuZW52WydMSUJfJXMnICUgdmFyXSA9IGxpYnMKKwlzZWxmLmVudlsnU1RMSUJfJXMnICUgdmFyXSA9IHN0bGlicworCXNlbGYuZW5kX21zZygnb2snKQorCWlmIExvZ3MudmVyYm9zZToKKwkJTG9ncy5wcHJpbnQoJ0NZQU4nLCAnCXBhdGggOiAlcycgJSBwYXRoKQorCQlMb2dzLnBwcmludCgnQ1lBTicsICcJc2hhcmVkIGxpYnMgOiAlcycgJSBsaWJzKQorCQlMb2dzLnBwcmludCgnQ1lBTicsICcJc3RhdGljIGxpYnMgOiAlcycgJSBzdGxpYnMpCisKKwlkZWYgaGFzX3NobGliKGxpYik6CisJCXJldHVybiBwYXJhbXNbJ2xpYiddIGFuZCBsaWIgaW4gcGFyYW1zWydsaWInXQorCWRlZiBoYXNfc3RsaWIobGliKToKKwkJcmV0dXJuIHBhcmFtc1snc3RsaWInXSBhbmQgbGliIGluIHBhcmFtc1snc3RsaWInXQorCWRlZiBoYXNfbGliKGxpYik6CisJCXJldHVybiBoYXNfc2hsaWIobGliKSBvciBoYXNfc3RsaWIobGliKQorCWlmIGhhc19saWIoJ3RocmVhZCcpOgorCQkjIG5vdCBpbnNpZGUgdHJ5X2xpbmsgdG8gbWFrZSBjaGVjayB2aXNpYmxlIGluIHRoZSBvdXRwdXQKKwkJc2VsZi5fY2hlY2tfcHRocmVhZF9mbGFnKGssIGt3KQorCisJZGVmIHRyeV9saW5rKCk6CisJCWlmIGhhc19saWIoJ3N5c3RlbScpOgorCQkJc2VsZi5jaGVja19jeHgoZnJhZ21lbnQ9Qk9PU1RfRVJST1JfQ09ERSwgdXNlPXZhciwgZXhlY3V0ZT1GYWxzZSkKKwkJaWYgaGFzX2xpYigndGhyZWFkJyk6CisJCQlzZWxmLmNoZWNrX2N4eChmcmFnbWVudD1CT09TVF9USFJFQURfQ09ERSwgdXNlPXZhciwgZXhlY3V0ZT1GYWxzZSkKKwkJaWYgaGFzX2xpYignbG9nJyk6CisJCQlpZiBub3QgaGFzX2xpYigndGhyZWFkJyk6CisJCQkJc2VsZi5lbnZbJ0RFRklORVNfJXMnICUgdmFyXSArPSBbJ0JPT1NUX0xPR19OT19USFJFQURTJ10KKwkJCWlmIGhhc19zaGxpYignbG9nJyk6CisJCQkJc2VsZi5lbnZbJ0RFRklORVNfJXMnICUgdmFyXSArPSBbJ0JPT1NUX0xPR19EWU5fTElOSyddCisJCQlzZWxmLmNoZWNrX2N4eChmcmFnbWVudD1CT09TVF9MT0dfQ09ERSwgdXNlPXZhciwgZXhlY3V0ZT1GYWxzZSkKKworCWlmIHBhcmFtcy5nZXQoJ2xpbmthZ2VfYXV0b2RldGVjdCcsIEZhbHNlKToKKwkJc2VsZi5zdGFydF9tc2coIkF0dGVtcHRpbmcgdG8gZGV0ZWN0IGJvb3N0IGxpbmthZ2UgZmxhZ3MiKQorCQl0b29sc2V0ID0gc2VsZi5ib29zdF9nZXRfdG9vbHNldChrdy5nZXQoJ3Rvb2xzZXQnLCAnJykpCisJCWlmIHRvb2xzZXQgaW4gKCd2YycsKToKKwkJCSMgZGlzYWJsZSBhdXRvLWxpbmtpbmcgZmVhdHVyZSwgY2F1c2luZyBlcnJvciBMTksxMTgxCisJCQkjIGJlY2F1c2UgdGhlIGNvZGUgd2FudHMgdG8gYmUgbGlua2VkIGFnYWluc3QKKwkJCXNlbGYuZW52WydERUZJTkVTXyVzJyAlIHZhcl0gKz0gWydCT09TVF9BTExfTk9fTElCJ10KKworCQkJIyBpZiBubyBkbGxzIGFyZSBwcmVzZW50LCB3ZSBndWVzcyB0aGUgLmxpYiBmaWxlcyBhcmUgbm90IHN0dWJzCisJCQloYXNfZGxscyA9IEZhbHNlCisJCQlmb3IgeCBpbiBVdGlscy5saXN0ZGlyKHBhdGgpOgorCQkJCWlmIHguZW5kc3dpdGgoc2VsZi5lbnYuY3h4c2hsaWJfUEFUVEVSTiAlICcnKToKKwkJCQkJaGFzX2RsbHMgPSBUcnVlCisJCQkJCWJyZWFrCisJCQlpZiBub3QgaGFzX2RsbHM6CisJCQkJc2VsZi5lbnZbJ1NUTElCUEFUSF8lcycgJSB2YXJdID0gW3BhdGhdCisJCQkJc2VsZi5lbnZbJ1NUTElCXyVzJyAlIHZhcl0gPSBsaWJzCisJCQkJZGVsIHNlbGYuZW52WydMSUJfJXMnICUgdmFyXQorCQkJCWRlbCBzZWxmLmVudlsnTElCUEFUSF8lcycgJSB2YXJdCisKKwkJCSMgd2UgYXR0ZW1wdCB0byBwbGF5IHdpdGggc29tZSBrbm93bi10by13b3JrIENYWEZMQUdTIGNvbWJpbmF0aW9ucworCQkJZm9yIGN4eGZsYWdzIGluIChbJy9NRCcsICcvRUhzYyddLCBbXSk6CisJCQkJc2VsZi5lbnYuc3Rhc2goKQorCQkJCXNlbGYuZW52WyJDWFhGTEFHU18lcyIgJSB2YXJdICs9IGN4eGZsYWdzCisJCQkJdHJ5OgorCQkJCQl0cnlfbGluaygpCisJCQkJCXNlbGYuZW5kX21zZygib2s6IHdpbm5pbmcgY3h4ZmxhZ3MgY29tYmluYXRpb246ICVzIiAlIChzZWxmLmVudlsiQ1hYRkxBR1NfJXMiICUgdmFyXSkpCisJCQkJCWV4YyA9IE5vbmUKKwkJCQkJYnJlYWsKKwkJCQlleGNlcHQgRXJyb3JzLkNvbmZpZ3VyYXRpb25FcnJvciBhcyBlOgorCQkJCQlzZWxmLmVudi5yZXZlcnQoKQorCQkJCQlleGMgPSBlCisKKwkJCWlmIGV4YyBpcyBub3QgTm9uZToKKwkJCQlzZWxmLmVuZF9tc2coIkNvdWxkIG5vdCBhdXRvLWRldGVjdCBib29zdCBsaW5raW5nIGZsYWdzIGNvbWJpbmF0aW9uLCB5b3UgbWF5IHJlcG9ydCBpdCB0byBib29zdC5weSBhdXRob3IiLCBleD1leGMpCisJCQkJc2VsZi5mYXRhbCgnVGhlIGNvbmZpZ3VyYXRpb24gZmFpbGVkJykKKwkJZWxzZToKKwkJCXNlbGYuZW5kX21zZygiQm9vc3QgbGlua2FnZSBmbGFncyBhdXRvLWRldGVjdGlvbiBub3QgaW1wbGVtZW50ZWQgKG5lZWRlZCA/KSBmb3IgdGhpcyB0b29sY2hhaW4iKQorCQkJc2VsZi5mYXRhbCgnVGhlIGNvbmZpZ3VyYXRpb24gZmFpbGVkJykKKwllbHNlOgorCQlzZWxmLnN0YXJ0X21zZygnQ2hlY2tpbmcgZm9yIGJvb3N0IGxpbmthZ2UnKQorCQl0cnk6CisJCQl0cnlfbGluaygpCisJCWV4Y2VwdCBFcnJvcnMuQ29uZmlndXJhdGlvbkVycm9yIGFzIGU6CisJCQlzZWxmLmVuZF9tc2coIkNvdWxkIG5vdCBsaW5rIGFnYWluc3QgYm9vc3QgbGlicmFyaWVzIHVzaW5nIHN1cHBsaWVkIG9wdGlvbnMiKQorCQkJc2VsZi5mYXRhbCgnVGhlIGNvbmZpZ3VyYXRpb24gZmFpbGVkJykKKwkJc2VsZi5lbmRfbXNnKCdvaycpCisKKworQGZlYXR1cmUoJ2N4eCcpCitAYWZ0ZXJfbWV0aG9kKCdhcHBseV9saW5rJykKK2RlZiBpbnN0YWxsX2Jvb3N0KHNlbGYpOgorCWlmIGluc3RhbGxfYm9vc3QuZG9uZSBvciBub3QgVXRpbHMuaXNfd2luMzIgb3Igbm90IHNlbGYuYmxkLmNtZC5zdGFydHN3aXRoKCdpbnN0YWxsJyk6CisJCXJldHVybgorCWluc3RhbGxfYm9vc3QuZG9uZSA9IFRydWUKKwlpbnN0X3RvID0gZ2V0YXR0cihzZWxmLCAnaW5zdGFsbF9wYXRoJywgJyR7QklORElSfScpCisJZm9yIGxpYiBpbiBzZWxmLmVudi5MSUJfQk9PU1Q6CisJCXRyeToKKwkJCWZpbGUgPSBzZWxmLmJsZC5maW5kX2ZpbGUoc2VsZi5lbnYuY3h4c2hsaWJfUEFUVEVSTiAlIGxpYiwgc2VsZi5lbnYuTElCUEFUSF9CT09TVCkKKwkJCXNlbGYuYmxkLmluc3RhbGxfZmlsZXMoaW5zdF90bywgc2VsZi5ibGQucm9vdC5maW5kX25vZGUoZmlsZSkpCisJCWV4Y2VwdDoKKwkJCWNvbnRpbnVlCitpbnN0YWxsX2Jvb3N0LmRvbmUgPSBGYWxzZQpkaWZmIC0tZ2l0IGEvLndhZi10b29scy9jb3ZlcmFnZS5weSBiLy53YWYtdG9vbHMvY292ZXJhZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U5Mjg4MwotLS0gL2Rldi9udWxsCisrKyBiLy53YWYtdG9vbHMvY292ZXJhZ2UucHkKQEAgLTAsMCArMSwyMiBAQAorIyAtKi0gTW9kZTogcHl0aG9uOyBweS1pbmRlbnQtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGNvZGluZzogdXRmLTg7IC0qLQorCitmcm9tIHdhZmxpYiBpbXBvcnQgVGFza0dlbiwgTG9ncworCitkZWYgb3B0aW9ucyhvcHQpOgorICAgIG9wdC5hZGRfb3B0aW9uKCctLXdpdGgtY292ZXJhZ2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLCBkZXN0PSd3aXRoX2NvdmVyYWdlJywKKyAgICAgICAgICAgICAgICAgICBoZWxwPScnJ1NldCBjb21waWxlciBmbGFncyBmb3IgZ2NjIHRvIGVuYWJsZSBjb2RlIGNvdmVyYWdlIGluZm9ybWF0aW9uJycnKQorCitkZWYgY29uZmlndXJlKGNvbmYpOgorICAgIGlmIGNvbmYub3B0aW9ucy53aXRoX2NvdmVyYWdlOgorICAgICAgICBpZiBub3QgY29uZi5vcHRpb25zLmRlYnVnOgorICAgICAgICAgICAgY29uZi5mYXRhbCgiQ29kZSBjb3ZlcmFnZSBmbGFncyByZXF1aXJlIGRlYnVnIG1vZGUgY29tcGlsYXRpb24gKGFkZCAtLWRlYnVnKSIpCisgICAgICAgIGNvbmYuY2hlY2tfY3h4KGN4eGZsYWdzPVsnLWZwcm9maWxlLWFyY3MnLCAnLWZ0ZXN0LWNvdmVyYWdlJywgJy1mUElDJ10sCisgICAgICAgICAgICAgICAgICAgICAgIGxpbmtmbGFncz1bJy1mcHJvZmlsZS1hcmNzJ10sIHVzZWxpYl9zdG9yZT0nR0NPVicsIG1hbmRhdG9yeT1UcnVlKQorCitAVGFza0dlbi5mZWF0dXJlKCdjeHgnLCdjYycpCitAVGFza0dlbi5hZnRlcigncHJvY2Vzc19zb3VyY2UnKQorZGVmIGFkZF9jb3ZlcmFnZShzZWxmKToKKyAgICBpZiBnZXRhdHRyKHNlbGYsICd1c2UnLCAnJyk6CisgICAgICAgIHNlbGYudXNlICs9ICcgR0NPVicKKyAgICBlbHNlOgorICAgICAgICBzZWxmLnVzZSA9ICdHQ09WJwpkaWZmIC0tZ2l0IGEvLndhZi10b29scy9kZWZhdWx0LWNvbXBpbGVyLWZsYWdzLnB5IGIvLndhZi10b29scy9kZWZhdWx0LWNvbXBpbGVyLWZsYWdzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOWI4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi8ud2FmLXRvb2xzL2RlZmF1bHQtY29tcGlsZXItZmxhZ3MucHkKQEAgLTAsMCArMSwxODIgQEAKKyMgLSotIE1vZGU6IHB5dGhvbjsgcHktaW5kZW50LW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjb2Rpbmc6IHV0Zi04OyAtKi0KKworZnJvbSB3YWZsaWIgaW1wb3J0IExvZ3MsIENvbmZpZ3VyZSwgVXRpbHMKKworZGVmIG9wdGlvbnMob3B0KToKKyAgICBvcHQuYWRkX29wdGlvbignLS1kZWJ1ZycsICctLXdpdGgtZGVidWcnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLCBkZXN0PSdkZWJ1ZycsCisgICAgICAgICAgICAgICAgICAgaGVscD0nJydDb21waWxlIGluIGRlYnVnZ2luZyBtb2RlIHdpdGhvdXQgb3B0aW1pemF0aW9ucyAoLU8wIG9yIC1PZyknJycpCisKK2RlZiBjb25maWd1cmUoY29uZik6CisgICAgY3h4ID0gY29uZi5lbnZbJ0NYWF9OQU1FJ10gIyBDWFhfTkFNRSByZXByZXNlbnRzIGdlbmVyaWMgbmFtZSBvZiB0aGUgY29tcGlsZXIKKyAgICBpZiBjeHggPT0gJ2djYyc6CisgICAgICAgIGZsYWdzID0gR2NjRmxhZ3MoKQorICAgIGVsaWYgY3h4ID09ICdjbGFuZyc6CisgICAgICAgIGZsYWdzID0gQ2xhbmdGbGFncygpCisgICAgZWxzZToKKyAgICAgICAgZmxhZ3MgPSBDb21waWxlckZsYWdzKCkKKyAgICAgICAgTG9ncy53YXJuKCdUaGUgY29kZSBoYXMgbm90IHlldCBiZWVuIHRlc3RlZCB3aXRoICVzIGNvbXBpbGVyJyAlIGN4eCkKKworICAgIGFyZUN1c3RvbUN4eGZsYWdzUHJlc2VudCA9IChsZW4oY29uZi5lbnYuQ1hYRkxBR1MpID4gMCkKKworICAgICMgR2VuZXJhbCBmbGFncyBhcmUgYWx3YXlzIGFwcGxpZWQgKGUuZy4sIHNlbGVjdGluZyBDKysxMSBtb2RlKQorICAgIGdlbmVyYWxGbGFncyA9IGZsYWdzLmdldEdlbmVyYWxGbGFncyhjb25mKQorICAgIGNvbmYuYWRkX3N1cHBvcnRlZF9jeHhmbGFncyhnZW5lcmFsRmxhZ3NbJ0NYWEZMQUdTJ10pCisgICAgY29uZi5hZGRfc3VwcG9ydGVkX2xpbmtmbGFncyhnZW5lcmFsRmxhZ3NbJ0xJTktGTEFHUyddKQorICAgIGNvbmYuZW52LkRFRklORVMgKz0gZ2VuZXJhbEZsYWdzWydERUZJTkVTJ10KKworICAgICMgRGVidWcgb3Igb3B0aW1pemVkIENYWEZMQUdTIGFuZCBMSU5LRkxBR1MgYXJlIGFwcGxpZWQgb25seSBpZiB0aGUKKyAgICAjIGNvcnJlc3BvbmRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3Qgc2V0LgorICAgICMgREVGSU5FUyBhcmUgYWx3YXlzIGFwcGxpZWQuCisgICAgaWYgY29uZi5vcHRpb25zLmRlYnVnOgorICAgICAgICBleHRyYUZsYWdzID0gZmxhZ3MuZ2V0RGVidWdGbGFncyhjb25mKQorICAgICAgICBpZiBhcmVDdXN0b21DeHhmbGFnc1ByZXNlbnQ6CisgICAgICAgICAgICBtaXNzaW5nRmxhZ3MgPSBbeCBmb3IgeCBpbiBleHRyYUZsYWdzWydDWFhGTEFHUyddIGlmIHggbm90IGluIGNvbmYuZW52LkNYWEZMQUdTXQorICAgICAgICAgICAgaWYgbGVuKG1pc3NpbmdGbGFncykgPiAwOgorICAgICAgICAgICAgICAgIExvZ3Mud2FybigiU2VsZWN0ZWQgZGVidWcgbW9kZSwgYnV0IENYWEZMQUdTIGlzIHNldCB0byBhIGN1c3RvbSB2YWx1ZSAnJXMnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAlICIgIi5qb2luKGNvbmYuZW52LkNYWEZMQUdTKSkKKyAgICAgICAgICAgICAgICBMb2dzLndhcm4oIkRlZmF1bHQgZmxhZ3MgJyVzJyBhcmUgbm90IGFjdGl2YXRlZCIgJSAiICIuam9pbihtaXNzaW5nRmxhZ3MpKQorICAgIGVsc2U6CisgICAgICAgIGV4dHJhRmxhZ3MgPSBmbGFncy5nZXRPcHRpbWl6ZWRGbGFncyhjb25mKQorCisgICAgaWYgbm90IGFyZUN1c3RvbUN4eGZsYWdzUHJlc2VudDoKKyAgICAgICAgY29uZi5hZGRfc3VwcG9ydGVkX2N4eGZsYWdzKGV4dHJhRmxhZ3NbJ0NYWEZMQUdTJ10pCisgICAgICAgIGNvbmYuYWRkX3N1cHBvcnRlZF9saW5rZmxhZ3MoZXh0cmFGbGFnc1snTElOS0ZMQUdTJ10pCisKKyAgICBjb25mLmVudi5ERUZJTkVTICs9IGV4dHJhRmxhZ3NbJ0RFRklORVMnXQorCitAQ29uZmlndXJlLmNvbmYKK2RlZiBhZGRfc3VwcG9ydGVkX2N4eGZsYWdzKHNlbGYsIGN4eGZsYWdzKToKKyAgICAiIiIKKyAgICBDaGVjayB3aGljaCBjeHhmbGFncyBhcmUgc3VwcG9ydGVkIGJ5IGNvbXBpbGVyIGFuZCBhZGQgdGhlbSB0byBlbnYuQ1hYRkxBR1MgdmFyaWFibGUKKyAgICAiIiIKKyAgICBpZiBsZW4oY3h4ZmxhZ3MpID09IDA6CisgICAgICAgIHJldHVybgorCisgICAgc2VsZi5zdGFydF9tc2coJ0NoZWNraW5nIHN1cHBvcnRlZCBDWFhGTEFHUycpCisKKyAgICBzdXBwb3J0ZWRGbGFncyA9IFtdCisgICAgZm9yIGZsYWcgaW4gY3h4ZmxhZ3M6CisgICAgICAgIGlmIHNlbGYuY2hlY2tfY3h4KGN4eGZsYWdzPVsnLVdlcnJvcicsIGZsYWddLCBtYW5kYXRvcnk9RmFsc2UpOgorICAgICAgICAgICAgc3VwcG9ydGVkRmxhZ3MgKz0gW2ZsYWddCisKKyAgICBzZWxmLmVuZF9tc2coJyAnLmpvaW4oc3VwcG9ydGVkRmxhZ3MpKQorICAgIHNlbGYuZW52LnByZXBlbmRfdmFsdWUoJ0NYWEZMQUdTJywgc3VwcG9ydGVkRmxhZ3MpCisKK0BDb25maWd1cmUuY29uZgorZGVmIGFkZF9zdXBwb3J0ZWRfbGlua2ZsYWdzKHNlbGYsIGxpbmtmbGFncyk6CisgICAgIiIiCisgICAgQ2hlY2sgd2hpY2ggbGlua2ZsYWdzIGFyZSBzdXBwb3J0ZWQgYnkgY29tcGlsZXIgYW5kIGFkZCB0aGVtIHRvIGVudi5MSU5LRkxBR1MgdmFyaWFibGUKKyAgICAiIiIKKyAgICBpZiBsZW4obGlua2ZsYWdzKSA9PSAwOgorICAgICAgICByZXR1cm4KKworICAgIHNlbGYuc3RhcnRfbXNnKCdDaGVja2luZyBzdXBwb3J0ZWQgTElOS0ZMQUdTJykKKworICAgIHN1cHBvcnRlZEZsYWdzID0gW10KKyAgICBmb3IgZmxhZyBpbiBsaW5rZmxhZ3M6CisgICAgICAgIGlmIHNlbGYuY2hlY2tfY3h4KGxpbmtmbGFncz1bJy1XZXJyb3InLCBmbGFnXSwgbWFuZGF0b3J5PUZhbHNlKToKKyAgICAgICAgICAgIHN1cHBvcnRlZEZsYWdzICs9IFtmbGFnXQorCisgICAgc2VsZi5lbmRfbXNnKCcgJy5qb2luKHN1cHBvcnRlZEZsYWdzKSkKKyAgICBzZWxmLmVudi5wcmVwZW5kX3ZhbHVlKCdMSU5LRkxBR1MnLCBzdXBwb3J0ZWRGbGFncykKKworCitjbGFzcyBDb21waWxlckZsYWdzKG9iamVjdCk6CisgICAgZGVmIGdldEdlbmVyYWxGbGFncyhzZWxmLCBjb25mKToKKyAgICAgICAgIiIiR2V0IGRpY3Qgb2YgQ1hYRkxBR1MsIExJTktGTEFHUywgYW5kIERFRklORVMgdGhhdCBhcmUgYWx3YXlzIG5lZWRlZCIiIgorICAgICAgICByZXR1cm4geydDWFhGTEFHUyc6IFtdLCAnTElOS0ZMQUdTJzogW10sICdERUZJTkVTJzogW119CisKKyAgICBkZWYgZ2V0RGVidWdGbGFncyhzZWxmLCBjb25mKToKKyAgICAgICAgIiIiR2V0IGRpY3Qgb2YgQ1hYRkxBR1MsIExJTktGTEFHUywgYW5kIERFRklORVMgdGhhdCBhcmUgbmVlZGVkIG9ubHkgaW4gZGVidWcgbW9kZSIiIgorICAgICAgICByZXR1cm4geydDWFhGTEFHUyc6IFtdLCAnTElOS0ZMQUdTJzogW10sICdERUZJTkVTJzogWydfREVCVUcnXX0KKworICAgIGRlZiBnZXRPcHRpbWl6ZWRGbGFncyhzZWxmLCBjb25mKToKKyAgICAgICAgIiIiR2V0IGRpY3Qgb2YgQ1hYRkxBR1MsIExJTktGTEFHUywgYW5kIERFRklORVMgdGhhdCBhcmUgbmVlZGVkIG9ubHkgaW4gb3B0aW1pemVkIG1vZGUiIiIKKyAgICAgICAgcmV0dXJuIHsnQ1hYRkxBR1MnOiBbXSwgJ0xJTktGTEFHUyc6IFtdLCAnREVGSU5FUyc6IFsnTkRFQlVHJ119CisKK2NsYXNzIEdjY0Jhc2ljRmxhZ3MoQ29tcGlsZXJGbGFncyk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBkZWZpbmVzIGJhc2ljIGZsYWdzIHRoYXQgd29yayBmb3IgYm90aCBnY2MgYW5kIGNsYW5nIGNvbXBpbGVycworICAgICIiIgorICAgIGRlZiBnZXREZWJ1Z0ZsYWdzKHNlbGYsIGNvbmYpOgorICAgICAgICBmbGFncyA9IHN1cGVyKEdjY0Jhc2ljRmxhZ3MsIHNlbGYpLmdldERlYnVnRmxhZ3MoY29uZikKKyAgICAgICAgZmxhZ3NbJ0NYWEZMQUdTJ10gKz0gWyctTzAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1nMycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXBlZGFudGljJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctV2FsbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLVdleHRyYScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLVdlcnJvcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLVduby11bnVzZWQtcGFyYW1ldGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctV25vLWVycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWQnLCAjIEJ1ZyAjMTYxNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1Xbm8tZXJyb3I9ZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMnLCAjIEJ1ZyAjMzc5NQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1Xbm8tZXJyb3I9dW51c2VkLWxvY2FsLXR5cGVkZWZzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgcmV0dXJuIGZsYWdzCisKKyAgICBkZWYgZ2V0T3B0aW1pemVkRmxhZ3Moc2VsZiwgY29uZik6CisgICAgICAgIGZsYWdzID0gc3VwZXIoR2NjQmFzaWNGbGFncywgc2VsZikuZ2V0T3B0aW1pemVkRmxhZ3MoY29uZikKKyAgICAgICAgZmxhZ3NbJ0NYWEZMQUdTJ10gKz0gWyctTzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctcGVkYW50aWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1XYWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctV2V4dHJhJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICByZXR1cm4gZmxhZ3MKKworY2xhc3MgR2NjRmxhZ3MoR2NjQmFzaWNGbGFncyk6CisgICAgZGVmIGdldEdlbmVyYWxGbGFncyhzZWxmLCBjb25mKToKKyAgICAgICAgZmxhZ3MgPSBzdXBlcihHY2NGbGFncywgc2VsZikuZ2V0R2VuZXJhbEZsYWdzKGNvbmYpCisgICAgICAgIHZlcnNpb24gPSB0dXBsZShpbnQoaSkgZm9yIGkgaW4gY29uZi5lbnZbJ0NDX1ZFUlNJT04nXSkKKyAgICAgICAgaWYgdmVyc2lvbiA8ICg0LCA4LCAyKToKKyAgICAgICAgICAgIGNvbmYuZmF0YWwoJ1RoZSB2ZXJzaW9uIG9mIGdjYyB5b3UgYXJlIHVzaW5nICglcykgaXMgdG9vIG9sZC5cbicgJQorICAgICAgICAgICAgICAgICAgICAgICAnLicuam9pbihjb25mLmVudlsnQ0NfVkVSU0lPTiddKSArCisgICAgICAgICAgICAgICAgICAgICAgICdUaGUgbWluaW11bSBzdXBwb3J0ZWQgZ2NjIHZlcnNpb24gaXMgNC44LjIuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZsYWdzWydDWFhGTEFHUyddICs9IFsnLXN0ZD1jKysxMSddCisgICAgICAgIHJldHVybiBmbGFncworCisgICAgZGVmIGdldERlYnVnRmxhZ3Moc2VsZiwgY29uZik6CisgICAgICAgIGZsYWdzID0gc3VwZXIoR2NjRmxhZ3MsIHNlbGYpLmdldERlYnVnRmxhZ3MoY29uZikKKyAgICAgICAgdmVyc2lvbiA9IHR1cGxlKGludChpKSBmb3IgaSBpbiBjb25mLmVudlsnQ0NfVkVSU0lPTiddKQorICAgICAgICBpZiB2ZXJzaW9uIDwgKDUsIDEsIDApOgorICAgICAgICAgICAgZmxhZ3NbJ0NYWEZMQUdTJ10gKz0gWyctV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzJ10KKyAgICAgICAgZmxhZ3NbJ0NYWEZMQUdTJ10gKz0gWyctT2cnLCAjIGdjYyA+PSA0LjgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZmRpYWdub3N0aWNzLWNvbG9yJywgIyBnY2MgPj0gNC45CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgIHJldHVybiBmbGFncworCisgICAgZGVmIGdldE9wdGltaXplZEZsYWdzKHNlbGYsIGNvbmYpOgorICAgICAgICBmbGFncyA9IHN1cGVyKEdjY0ZsYWdzLCBzZWxmKS5nZXRPcHRpbWl6ZWRGbGFncyhjb25mKQorICAgICAgICB2ZXJzaW9uID0gdHVwbGUoaW50KGkpIGZvciBpIGluIGNvbmYuZW52WydDQ19WRVJTSU9OJ10pCisgICAgICAgIGlmIHZlcnNpb24gPCAoNSwgMSwgMCk6CisgICAgICAgICAgICBmbGFnc1snQ1hYRkxBR1MnXSArPSBbJy1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMnXQorICAgICAgICBmbGFnc1snQ1hYRkxBR1MnXSArPSBbJy1mZGlhZ25vc3RpY3MtY29sb3InXSAjIGdjYyA+PSA0LjkKKyAgICAgICAgcmV0dXJuIGZsYWdzCisKK2NsYXNzIENsYW5nRmxhZ3MoR2NjQmFzaWNGbGFncyk6CisgICAgZGVmIGdldEdlbmVyYWxGbGFncyhzZWxmLCBjb25mKToKKyAgICAgICAgZmxhZ3MgPSBzdXBlcihDbGFuZ0ZsYWdzLCBzZWxmKS5nZXRHZW5lcmFsRmxhZ3MoY29uZikKKyAgICAgICAgZmxhZ3NbJ0NYWEZMQUdTJ10gKz0gWyctc3RkPWMrKzExJ10KKyAgICAgICAgaWYgVXRpbHMudW52ZXJzaW9uZWRfc3lzX3BsYXRmb3JtKCkgPT0gJ2Rhcndpbic6CisgICAgICAgICAgICBmbGFnc1snQ1hYRkxBR1MnXSArPSBbJy1zdGRsaWI9bGliYysrJ10KKyAgICAgICAgICAgIGZsYWdzWydMSU5LRkxBR1MnXSArPSBbJy1zdGRsaWI9bGliYysrJ10KKyAgICAgICAgcmV0dXJuIGZsYWdzCisKKyAgICBkZWYgZ2V0RGVidWdGbGFncyhzZWxmLCBjb25mKToKKyAgICAgICAgZmxhZ3MgPSBzdXBlcihDbGFuZ0ZsYWdzLCBzZWxmKS5nZXREZWJ1Z0ZsYWdzKGNvbmYpCisgICAgICAgIGZsYWdzWydDWFhGTEFHUyddICs9IFsnLWZjb2xvci1kaWFnbm9zdGljcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLVduby11bnVzZWQtbG9jYWwtdHlwZWRlZicsICMgQnVncyAjMjY1NyBhbmQgIzMyMDkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctV25vLWVycm9yPXVubmVlZGVkLWludGVybmFsLWRlY2xhcmF0aW9uJywgIyBCdWcgIzE1ODgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctV25vLWVycm9yPWRlcHJlY2F0ZWQtcmVnaXN0ZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1Xbm8tZXJyb3I9a2V5d29yZC1tYWNybycsICMgQnVnICMzMjM1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLVduby1lcnJvcj1pbmZpbml0ZS1yZWN1cnNpb24nLCAjIEJ1ZyAjMzM1OAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICByZXR1cm4gZmxhZ3MKKworICAgIGRlZiBnZXRPcHRpbWl6ZWRGbGFncyhzZWxmLCBjb25mKToKKyAgICAgICAgZmxhZ3MgPSBzdXBlcihDbGFuZ0ZsYWdzLCBzZWxmKS5nZXRPcHRpbWl6ZWRGbGFncyhjb25mKQorICAgICAgICBmbGFnc1snQ1hYRkxBR1MnXSArPSBbJy1mY29sb3ItZGlhZ25vc3RpY3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1Xbm8tdW51c2VkLWxvY2FsLXR5cGVkZWYnLCAjIEJ1Z3MgIzI2NTcgYW5kICMzMjA5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgIHJldHVybiBmbGFncwpkaWZmIC0tZ2l0IGEvLndhZi10b29scy9kb3h5Z2VuLnB5IGIvLndhZi10b29scy9kb3h5Z2VuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkODA2NmIKLS0tIC9kZXYvbnVsbAorKysgYi8ud2FmLXRvb2xzL2RveHlnZW4ucHkKQEAgLTAsMCArMSwyMTQgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyMgZW5jb2Rpbmc6IFVURi04CisjIFRob21hcyBOYWd5IDIwMDgtMjAxMCAoaXRhKQorCisiIiIKKworRG94eWdlbiBzdXBwb3J0CisKK1ZhcmlhYmxlcyBwYXNzZWQgdG8gYmxkKCk6CisqIGRveHlmaWxlIC0tIHRoZSBEb3h5ZmlsZSB0byB1c2UKKworV2hlbiB1c2luZyB0aGlzIHRvb2wsIHRoZSB3c2NyaXB0IHdpbGwgbG9vayBsaWtlOgorCisJZGVmIG9wdGlvbnMob3B0KToKKwkJb3B0LmxvYWQoJ2RveHlnZW4nKQorCisJZGVmIGNvbmZpZ3VyZShjb25mKToKKwkJY29uZi5sb2FkKCdkb3h5Z2VuJykKKwkJIyBjaGVjayBjb25mLmVudi5ET1hZR0VOLCBpZiBpdCBpcyBtYW5kYXRvcnkKKworCWRlZiBidWlsZChibGQpOgorCQlpZiBibGQuZW52LkRPWFlHRU46CisJCQlibGQoZmVhdHVyZXM9ImRveHlnZW4iLCBkb3h5ZmlsZT0nRG94eWZpbGUnLCAuLi4pCisKKyAgICAgICAgZGVmIGRveHlnZW4oYmxkKToKKwkJaWYgYmxkLmVudi5ET1hZR0VOOgorCQkJYmxkKGZlYXR1cmVzPSJkb3h5Z2VuIiwgZG94eWZpbGU9J0RveHlmaWxlJywgLi4uKQorIiIiCisKK2Zyb20gZm5tYXRjaCBpbXBvcnQgZm5tYXRjaGNhc2UKK2ltcG9ydCBvcywgb3MucGF0aCwgcmUsIHN0YXQKK2Zyb20gd2FmbGliIGltcG9ydCBUYXNrLCBVdGlscywgTm9kZSwgTG9ncywgRXJyb3JzLCBCdWlsZAorZnJvbSB3YWZsaWIuVGFza0dlbiBpbXBvcnQgZmVhdHVyZQorCitET1hZX1NUUiA9ICciJHtET1hZR0VOfSIgLSAnCitET1hZX0ZNVFMgPSAnaHRtbCBsYXRleCBtYW4gcmZ0IHhtbCcuc3BsaXQoKQorRE9YWV9GSUxFX1BBVFRFUk5TID0gJyouJyArICcgKi4nLmpvaW4oJycnCitjIGNjIGN4eCBjcHAgYysrIGphdmEgaWkgaXh4IGlwcCBpKysgaW5sIGggaGggaHh4IGhwcCBoKysgaWRsIG9kbCBjcyBwaHAgcGhwMworaW5jIG0gbW0gcHkgZjkwYyBjYyBjeHggY3BwIGMrKyBqYXZhIGlpIGl4eCBpcHAgaSsrIGlubCBoIGhoIGh4eAorJycnLnNwbGl0KCkpCisKK3JlX3JsID0gcmUuY29tcGlsZSgnXFxcXFxyKlxuJywgcmUuTVVMVElMSU5FKQorcmVfbmwgPSByZS5jb21waWxlKCdccipcbicsIHJlLk0pCitkZWYgcGFyc2VfZG94eSh0eHQpOgorCXRibCA9IHt9CisJdHh0ICAgPSByZV9ybC5zdWIoJycsIHR4dCkKKwlsaW5lcyA9IHJlX25sLnNwbGl0KHR4dCkKKwlmb3IgeCBpbiBsaW5lczoKKwkJeCA9IHguc3RyaXAoKQorCQlpZiBub3QgeCBvciB4LnN0YXJ0c3dpdGgoJyMnKSBvciB4LmZpbmQoJz0nKSA8IDA6CisJCQljb250aW51ZQorCQlpZiB4LmZpbmQoJys9JykgPj0gMDoKKwkJCXRtcCA9IHguc3BsaXQoJys9JykKKwkJCWtleSA9IHRtcFswXS5zdHJpcCgpCisJCQlpZiBrZXkgaW4gdGJsOgorCQkJCXRibFtrZXldICs9ICcgJyArICcrPScuam9pbih0bXBbMTpdKS5zdHJpcCgpCisJCQllbHNlOgorCQkJCXRibFtrZXldID0gJys9Jy5qb2luKHRtcFsxOl0pLnN0cmlwKCkKKwkJZWxzZToKKwkJCXRtcCA9IHguc3BsaXQoJz0nKQorCQkJdGJsW3RtcFswXS5zdHJpcCgpXSA9ICc9Jy5qb2luKHRtcFsxOl0pLnN0cmlwKCkKKwlyZXR1cm4gdGJsCisKK2NsYXNzIGRveHlnZW4oVGFzay5UYXNrKToKKwl2YXJzICA9IFsnRE9YWUdFTicsICdET1hZRkxBR1MnXQorCWNvbG9yID0gJ0JMVUUnCisKKwlkZWYgcnVubmFibGVfc3RhdHVzKHNlbGYpOgorCQknJycKKwkJc2VsZi5wYXJzIGFyZSBwb3B1bGF0ZWQgaW4gcnVubmFibGVfc3RhdHVzIC0gYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nCisJCXJ1biAqYmVmb3JlKiBib3RoIHNlbGYucGFycyAiY29uc3VtZXJzIiAtIHNjYW4oKSBhbmQgcnVuKCkKKworCQlzZXQgb3V0cHV0X2RpciAobm9kZSkgZm9yIHRoZSBvdXRwdXQKKwkJJycnCisKKwkJZm9yIHggaW4gc2VsZi5ydW5fYWZ0ZXI6CisJCQlpZiBub3QgeC5oYXNydW46CisJCQkJcmV0dXJuIFRhc2suQVNLX0xBVEVSCisKKwkJaWYgbm90IGdldGF0dHIoc2VsZiwgJ3BhcnMnLCBOb25lKToKKwkJCXR4dCA9IHNlbGYuaW5wdXRzWzBdLnJlYWQoKQorCQkJc2VsZi5wYXJzID0gcGFyc2VfZG94eSh0eHQpCisJCQlpZiBub3Qgc2VsZi5wYXJzLmdldCgnT1VUUFVUX0RJUkVDVE9SWScpOgorCQkJCXNlbGYucGFyc1snT1VUUFVUX0RJUkVDVE9SWSddID0gc2VsZi5pbnB1dHNbMF0ucGFyZW50LmdldF9ibGQoKS5hYnNwYXRoKCkKKworCQkJIyBPdmVycmlkZSB3aXRoIGFueSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgdGFzayBnZW5lcmF0b3IKKwkJCWlmIGdldGF0dHIoc2VsZi5nZW5lcmF0b3IsICdwYXJzJywgTm9uZSk6CisJCQkJZm9yIGssIHYgaW4gc2VsZi5nZW5lcmF0b3IucGFycy5pdGVtcygpOgorCQkJCQlzZWxmLnBhcnNba10gPSB2CisKKwkJCXNlbGYuZG94eV9pbnB1dHMgPSBnZXRhdHRyKHNlbGYsICdkb3h5X2lucHV0cycsIFtdKQorCQkJaWYgbm90IHNlbGYucGFycy5nZXQoJ0lOUFVUJyk6CisJCQkJc2VsZi5kb3h5X2lucHV0cy5hcHBlbmQoc2VsZi5pbnB1dHNbMF0ucGFyZW50KQorCQkJZWxzZToKKwkJCQlmb3IgaSBpbiBzZWxmLnBhcnMuZ2V0KCdJTlBVVCcpLnNwbGl0KCk6CisJCQkJCWlmIG9zLnBhdGguaXNhYnMoaSk6CisJCQkJCQlub2RlID0gc2VsZi5nZW5lcmF0b3IuYmxkLnJvb3QuZmluZF9ub2RlKGkpCisJCQkJCWVsc2U6CisJCQkJCQlub2RlID0gc2VsZi5nZW5lcmF0b3IucGF0aC5maW5kX25vZGUoaSkKKwkJCQkJaWYgbm90IG5vZGU6CisJCQkJCQlzZWxmLmdlbmVyYXRvci5ibGQuZmF0YWwoJ0NvdWxkIG5vdCBmaW5kIHRoZSBkb3h5Z2VuIGlucHV0ICVyJyAlIGkpCisJCQkJCXNlbGYuZG94eV9pbnB1dHMuYXBwZW5kKG5vZGUpCisKKwkJaWYgbm90IGdldGF0dHIoc2VsZiwgJ291dHB1dF9kaXInLCBOb25lKToKKwkJCWJsZCA9IHNlbGYuZ2VuZXJhdG9yLmJsZAorCQkJIyBGaXJzdCB0cnkgdG8gZmluZCBhbiBhYnNvbHV0ZSBwYXRoLCB0aGVuIGZpbmQgb3IgZGVjbGFyZSBhIHJlbGF0aXZlIHBhdGgKKwkJCXNlbGYub3V0cHV0X2RpciA9IGJsZC5yb290LmZpbmRfZGlyKHNlbGYucGFyc1snT1VUUFVUX0RJUkVDVE9SWSddKQorCQkJaWYgbm90IHNlbGYub3V0cHV0X2RpcjoKKwkJCQlzZWxmLm91dHB1dF9kaXIgPSBibGQucGF0aC5maW5kX29yX2RlY2xhcmUoc2VsZi5wYXJzWydPVVRQVVRfRElSRUNUT1JZJ10pCisKKwkJc2VsZi5zaWduYXR1cmUoKQorCQlyZXR1cm4gVGFzay5UYXNrLnJ1bm5hYmxlX3N0YXR1cyhzZWxmKQorCisJZGVmIHNjYW4oc2VsZik6CisJCWV4Y2x1ZGVfcGF0dGVybnMgPSBzZWxmLnBhcnMuZ2V0KCdFWENMVURFX1BBVFRFUk5TJywnJykuc3BsaXQoKQorCQlmaWxlX3BhdHRlcm5zID0gc2VsZi5wYXJzLmdldCgnRklMRV9QQVRURVJOUycsJycpLnNwbGl0KCkKKwkJaWYgbm90IGZpbGVfcGF0dGVybnM6CisJCQlmaWxlX3BhdHRlcm5zID0gRE9YWV9GSUxFX1BBVFRFUk5TCisJCWlmIHNlbGYucGFycy5nZXQoJ1JFQ1VSU0lWRScpID09ICdZRVMnOgorCQkJZmlsZV9wYXR0ZXJucyA9IFsiKiovJXMiICUgcGF0dGVybiBmb3IgcGF0dGVybiBpbiBmaWxlX3BhdHRlcm5zXQorCQlub2RlcyA9IFtdCisJCW5hbWVzID0gW10KKwkJZm9yIG5vZGUgaW4gc2VsZi5kb3h5X2lucHV0czoKKwkJCWlmIG9zLnBhdGguaXNkaXIobm9kZS5hYnNwYXRoKCkpOgorCQkJCWZvciBtIGluIG5vZGUuYW50X2dsb2IoaW5jbD1maWxlX3BhdHRlcm5zLCBleGNsPWV4Y2x1ZGVfcGF0dGVybnMpOgorCQkJCQlub2Rlcy5hcHBlbmQobSkKKwkJCWVsc2U6CisJCQkJbm9kZXMuYXBwZW5kKG5vZGUpCisJCXJldHVybiAobm9kZXMsIG5hbWVzKQorCisJZGVmIHJ1bihzZWxmKToKKwkJZGN0ID0gc2VsZi5wYXJzLmNvcHkoKQorCQlkY3RbJ0lOUFVUJ10gPSAnICcuam9pbihbJyIlcyInICUgeC5hYnNwYXRoKCkgZm9yIHggaW4gc2VsZi5kb3h5X2lucHV0c10pCisJCWNvZGUgPSAnXG4nLmpvaW4oWyclcyA9ICVzJyAlICh4LCBkY3RbeF0pIGZvciB4IGluIHNlbGYucGFyc10pCisJCWNvZGUgPSBjb2RlLmVuY29kZSgpICMgZm9yIHB5dGhvbiAzCisJCSNmbXQgPSBET1hZX1NUUiAlIChzZWxmLmlucHV0c1swXS5wYXJlbnQuYWJzcGF0aCgpKQorCQljbWQgPSBVdGlscy5zdWJzdF92YXJzKERPWFlfU1RSLCBzZWxmLmVudikKKwkJZW52ID0gc2VsZi5lbnYuZW52IG9yIE5vbmUKKwkJcHJvYyA9IFV0aWxzLnN1YnByb2Nlc3MuUG9wZW4oY21kLCBzaGVsbD1UcnVlLCBzdGRpbj1VdGlscy5zdWJwcm9jZXNzLlBJUEUsIGVudj1lbnYsIGN3ZD1zZWxmLmdlbmVyYXRvci5ibGQucGF0aC5nZXRfYmxkKCkuYWJzcGF0aCgpKQorCQlwcm9jLmNvbW11bmljYXRlKGNvZGUpCisJCXJldHVybiBwcm9jLnJldHVybmNvZGUKKworCWRlZiBwb3N0X3J1bihzZWxmKToKKwkJbm9kZXMgPSBzZWxmLm91dHB1dF9kaXIuYW50X2dsb2IoJyoqLyonLCBxdWlldD1UcnVlKQorCQlmb3IgeCBpbiBub2RlczoKKwkJCXguc2lnID0gVXRpbHMuaF9maWxlKHguYWJzcGF0aCgpKQorCQlzZWxmLm91dHB1dHMgKz0gbm9kZXMKKwkJcmV0dXJuIFRhc2suVGFzay5wb3N0X3J1bihzZWxmKQorCitjbGFzcyB0YXIoVGFzay5UYXNrKToKKwkicXVpY2sgdGFyIGNyZWF0aW9uIgorCXJ1bl9zdHIgPSAnJHtUQVJ9ICR7VEFST1BUU30gJHtUR1R9ICR7U1JDfScKKwljb2xvciAgID0gJ1JFRCcKKwlhZnRlciAgID0gWydkb3h5Z2VuJ10KKwlkZWYgcnVubmFibGVfc3RhdHVzKHNlbGYpOgorCQlmb3IgeCBpbiBnZXRhdHRyKHNlbGYsICdpbnB1dF90YXNrcycsIFtdKToKKwkJCWlmIG5vdCB4Lmhhc3J1bjoKKwkJCQlyZXR1cm4gVGFzay5BU0tfTEFURVIKKworCQlpZiBub3QgZ2V0YXR0cihzZWxmLCAndGFyX2RvbmVfYWRkaW5nJywgTm9uZSk6CisJCQkjIGV4ZWN1dGUgdGhpcyBvbmx5IG9uY2UKKwkJCXNlbGYudGFyX2RvbmVfYWRkaW5nID0gVHJ1ZQorCQkJZm9yIHggaW4gZ2V0YXR0cihzZWxmLCAnaW5wdXRfdGFza3MnLCBbXSk6CisJCQkJc2VsZi5zZXRfaW5wdXRzKHgub3V0cHV0cykKKwkJCWlmIG5vdCBzZWxmLmlucHV0czoKKwkJCQlyZXR1cm4gVGFzay5TS0lQX01FCisJCXJldHVybiBUYXNrLlRhc2sucnVubmFibGVfc3RhdHVzKHNlbGYpCisKKwlkZWYgX19zdHJfXyhzZWxmKToKKwkJdGd0X3N0ciA9ICcgJy5qb2luKFthLm5pY2VfcGF0aChzZWxmLmVudikgZm9yIGEgaW4gc2VsZi5vdXRwdXRzXSkKKwkJcmV0dXJuICclczogJXNcbicgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHRndF9zdHIpCisKK0BmZWF0dXJlKCdkb3h5Z2VuJykKK2RlZiBwcm9jZXNzX2RveHkoc2VsZik6CisJaWYgbm90IGdldGF0dHIoc2VsZiwgJ2RveHlmaWxlJywgTm9uZSk6CisJCXNlbGYuZ2VuZXJhdG9yLmJsZC5mYXRhbCgnbm8gZG94eWZpbGU/PycpCisKKwlub2RlID0gc2VsZi5kb3h5ZmlsZQorCWlmIG5vdCBpc2luc3RhbmNlKG5vZGUsIE5vZGUuTm9kZSk6CisJCW5vZGUgPSBzZWxmLnBhdGguZmluZF9yZXNvdXJjZShub2RlKQorCWlmIG5vdCBub2RlOgorCQlyYWlzZSBWYWx1ZUVycm9yKCdkb3h5Z2VuIGZpbGUgbm90IGZvdW5kJykKKworCSMgdGhlIHRhc2sgaW5zdGFuY2UKKwlkc2sgPSBzZWxmLmNyZWF0ZV90YXNrKCdkb3h5Z2VuJywgbm9kZSkKKworCWlmIGdldGF0dHIoc2VsZiwgJ2RveHlfdGFyJywgTm9uZSk6CisJCXRzayA9IHNlbGYuY3JlYXRlX3Rhc2soJ3RhcicpCisJCXRzay5pbnB1dF90YXNrcyA9IFtkc2tdCisJCXRzay5zZXRfb3V0cHV0cyhzZWxmLnBhdGguZmluZF9vcl9kZWNsYXJlKHNlbGYuZG94eV90YXIpKQorCQlpZiBzZWxmLmRveHlfdGFyLmVuZHN3aXRoKCdiejInKToKKwkJCXRzay5lbnZbJ1RBUk9QVFMnXSA9IFsnY2pmJ10KKwkJZWxpZiBzZWxmLmRveHlfdGFyLmVuZHN3aXRoKCdneicpOgorCQkJdHNrLmVudlsnVEFST1BUUyddID0gWydjemYnXQorCQllbHNlOgorCQkJdHNrLmVudlsnVEFST1BUUyddID0gWydjZiddCisKK2RlZiBjb25maWd1cmUoY29uZik6CisJJycnCisJQ2hlY2sgaWYgZG94eWdlbiBhbmQgdGFyIGNvbW1hbmRzIGFyZSBwcmVzZW50IGluIHRoZSBzeXN0ZW0KKworCUlmIHRoZSBjb21tYW5kcyBhcmUgcHJlc2VudCwgdGhlbiBjb25mLmVudi5ET1hZR0VOIGFuZCBjb25mLmVudi5UQVIKKwl2YXJpYWJsZXMgd2lsbCBiZSBzZXQuIERldGVjdGlvbiBjYW4gYmUgY29udHJvbGxlZCBieSBzZXR0aW5nIERPWFlHRU4gYW5kCisJVEFSIGVudmlyb25tZW50YWwgdmFyaWFibGVzLgorCScnJworCisJY29uZi5maW5kX3Byb2dyYW0oJ2RveHlnZW4nLCB2YXI9J0RPWFlHRU4nLCBtYW5kYXRvcnk9RmFsc2UpCisJY29uZi5maW5kX3Byb2dyYW0oJ3RhcicsIHZhcj0nVEFSJywgbWFuZGF0b3J5PUZhbHNlKQorCisjIGRveHlnZW4gZG9jcworZnJvbSB3YWZsaWIuQnVpbGQgaW1wb3J0IEJ1aWxkQ29udGV4dAorY2xhc3MgZG94eShCdWlsZENvbnRleHQpOgorICAgIGNtZCA9ICJkb3h5Z2VuIgorICAgIGZ1biA9ICJkb3h5Z2VuIgpkaWZmIC0tZ2l0IGEvLndhZi10b29scy9zYW5pdGl6ZXJzLnB5IGIvLndhZi10b29scy9zYW5pdGl6ZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmU1NWQKLS0tIC9kZXYvbnVsbAorKysgYi8ud2FmLXRvb2xzL3Nhbml0aXplcnMucHkKQEAgLTAsMCArMSwyMiBAQAorIyAtKi0gTW9kZTogcHl0aG9uOyBweS1pbmRlbnQtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGNvZGluZzogdXRmLTg7IC0qLQorCitkZWYgb3B0aW9ucyhvcHQpOgorICAgIG9wdC5hZGRfb3B0aW9uKCctLXdpdGgtc2FuaXRpemVyJywgYWN0aW9uPSdzdG9yZScsIGRlZmF1bHQ9JycsIGRlc3Q9J3Nhbml0aXplcnMnLAorICAgICAgICAgICAgICAgICAgIGhlbHA9J0NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNvbXBpbGVyIHNhbml0aXplcnMgdG8gZW5hYmxlIFtkZWZhdWx0PW5vbmVdJykKKworZGVmIGNvbmZpZ3VyZShjb25mKToKKyAgICBmb3Igc2FuIGluIGNvbmYub3B0aW9ucy5zYW5pdGl6ZXJzLnNwbGl0KCcsJyk6CisgICAgICAgIGlmIG5vdCBzYW46CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHNhbmZsYWcgPSAnLWZzYW5pdGl6ZT0lcycgJSBzYW4KKyAgICAgICAgY29uZi5zdGFydF9tc2coJ0NoZWNraW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzICVzJyAlIHNhbmZsYWcpCisKKyAgICAgICAgaWYgY29uZi5jaGVja19jeHgoY3h4ZmxhZ3M9WyctV2Vycm9yJywgc2FuZmxhZywgJy1mbm8tb21pdC1mcmFtZS1wb2ludGVyJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtmbGFncz1bc2FuZmxhZ10sIG1hbmRhdG9yeT1GYWxzZSk6CisgICAgICAgICAgICBjb25mLmVuZF9tc2coJ3llcycpCisgICAgICAgICAgICBjb25mLmVudi5hcHBlbmRfdW5pcXVlKCdDWFhGTEFHUycsIFtzYW5mbGFnLCAnLWZuby1vbWl0LWZyYW1lLXBvaW50ZXInXSkKKyAgICAgICAgICAgIGNvbmYuZW52LmFwcGVuZF91bmlxdWUoJ0xJTktGTEFHUycsIFtzYW5mbGFnXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbmYuZW5kX21zZygnbm8nLCBjb2xvcj0nUkVEJykKKyAgICAgICAgICAgIGNvbmYuZmF0YWwoJyVzIHNhbml0aXplciBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGNvbXBpbGVyJyAlIHNhbikKZGlmZiAtLWdpdCBhLy53YWYtdG9vbHMvc3BoaW54X2J1aWxkLnB5IGIvLndhZi10b29scy9zcGhpbnhfYnVpbGQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYxZGE2ZQotLS0gL2Rldi9udWxsCisrKyBiLy53YWYtdG9vbHMvc3BoaW54X2J1aWxkLnB5CkBAIC0wLDAgKzEsNzkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBlbmNvZGluZzogdXRmLTgKKworIyBpbnNwaXJlZCBieSBjb2RlIGJ5IEhhbnMtTWFydGluIHZvbiBHYXVkZWNrZXIsIDIwMTIKKworaW1wb3J0IG9zCitmcm9tIHdhZmxpYiBpbXBvcnQgTm9kZSwgVGFzaywgVGFza0dlbiwgRXJyb3JzLCBMb2dzLCBCdWlsZCwgVXRpbHMKKworY2xhc3Mgc3BoaW54X2J1aWxkKFRhc2suVGFzayk6CisgICAgY29sb3IgPSAnQkxVRScKKyAgICBydW5fc3RyID0gJyR7U1BISU5YX0JVSUxEfSAtRCAke1ZFUlNJT059IC1EICR7UkVMRUFTRX0gLXEgLWIgJHtCVUlMREVSTkFNRX0gLWQgJHtET0NUUkVFRElSfSAke1NSQ0RJUn0gJHtPVVRESVJ9JworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGVudiA9IHNlbGYuZW52CisgICAgICAgIHNyY19zdHIgPSAnICcuam9pbihbYS5wYXRoX2Zyb20oYS5jdHgubGF1bmNoX25vZGUoKSkgZm9yIGEgaW4gc2VsZi5pbnB1dHNdKQorICAgICAgICB0Z3Rfc3RyID0gJyAnLmpvaW4oW2EucGF0aF9mcm9tKGEuY3R4LmxhdW5jaF9ub2RlKCkpIGZvciBhIGluIHNlbGYub3V0cHV0c10pCisgICAgICAgIGlmIHNlbGYub3V0cHV0czogc2VwID0gJyAtPiAnCisgICAgICAgIGVsc2U6IHNlcCA9ICcnCisgICAgICAgIHJldHVybiclcyBbJXNdOiAlcyVzJXNcbiclKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLnJlcGxhY2UoJ190YXNrJywnJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW52WydCVUlMREVSTkFNRSddLCBzcmNfc3RyLCBzZXAsIHRndF9zdHIpCisKK0BUYXNrR2VuLmV4dGVuc2lvbignLnB5JywgJy5yc3QnKQorZGVmIHNpZ19ob29rKHNlbGYsIG5vZGUpOgorICAgIG5vZGUuc2lnPVV0aWxzLmhfZmlsZShub2RlLmFic3BhdGgoKSkKKworQFRhc2tHZW4uZmVhdHVyZSgic3BoaW54IikKK0BUYXNrR2VuLmJlZm9yZV9tZXRob2QoInByb2Nlc3Nfc291cmNlIikKK2RlZiBhcHBseV9zcGhpbngoc2VsZik6CisgICAgIiIiU2V0IHVwIHRoZSB0YXNrIGdlbmVyYXRvciB3aXRoIGEgU3BoaW54IGluc3RhbmNlIGFuZCBjcmVhdGUgYSB0YXNrLiIiIgorCisgICAgaW5wdXRzID0gW10KKyAgICBmb3IgaSBpbiBVdGlscy50b19saXN0KHNlbGYuc291cmNlKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaSwgTm9kZS5Ob2RlKToKKyAgICAgICAgICAgIG5vZGUgPSBzZWxmLnBhdGguZmluZF9ub2RlKG5vZGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBub2RlID0gaQorICAgICAgICBpZiBub3Qgbm9kZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1slc10gZmlsZSBub3QgZm91bmQnICUgaSkKKyAgICAgICAgaW5wdXRzLmFwcGVuZChub2RlKQorCisgICAgdGFzayA9IHNlbGYuY3JlYXRlX3Rhc2soJ3NwaGlueF9idWlsZCcsIGlucHV0cykKKworICAgIGNvbmYgPSBzZWxmLnBhdGguZmluZF9ub2RlKHNlbGYuY29uZmlnKQorICAgIHRhc2suaW5wdXRzLmFwcGVuZChjb25mKQorCisgICAgY29uZmRpciA9IGNvbmYucGFyZW50LmFic3BhdGgoKQorICAgIGJ1aWxkZXJuYW1lID0gZ2V0YXR0cihzZWxmLCAiYnVpbGRlciIsICJodG1sIikKKyAgICBzcmNkaXIgPSBnZXRhdHRyKHNlbGYsICJzcmNkaXIiLCBjb25mZGlyKQorICAgIG91dGRpciA9IHNlbGYucGF0aC5maW5kX29yX2RlY2xhcmUoZ2V0YXR0cihzZWxmLCAib3V0ZGlyIiwgYnVpbGRlcm5hbWUpKS5nZXRfYmxkKCkKKyAgICBkb2N0cmVlZGlyID0gZ2V0YXR0cihzZWxmLCAiZG9jdHJlZWRpciIsIG9zLnBhdGguam9pbihvdXRkaXIuYWJzcGF0aCgpLCAiLmRvY3RyZWVzIikpCisKKyAgICB0YXNrLmVudlsnQlVJTERFUk5BTUUnXSA9IGJ1aWxkZXJuYW1lCisgICAgdGFzay5lbnZbJ1NSQ0RJUiddID0gc3JjZGlyCisgICAgdGFzay5lbnZbJ0RPQ1RSRUVESVInXSA9IGRvY3RyZWVkaXIKKyAgICB0YXNrLmVudlsnT1VURElSJ10gPSBvdXRkaXIuYWJzcGF0aCgpCisgICAgdGFzay5lbnZbJ1ZFUlNJT04nXSA9ICJ2ZXJzaW9uPSVzIiAlIHNlbGYuVkVSU0lPTgorICAgIHRhc2suZW52WydSRUxFQVNFJ10gPSAicmVsZWFzZT0lcyIgJSBzZWxmLlZFUlNJT04KKworICAgIGltcG9ydCBpbXAKKyAgICBjb25mRGF0YSA9IGltcC5sb2FkX3NvdXJjZSgnc3BoaW54X2NvbmYnLCBjb25mLmFic3BhdGgoKSkKKworICAgIGlmIGJ1aWxkZXJuYW1lID09ICJtYW4iOgorICAgICAgICBmb3IgaSBpbiBjb25mRGF0YS5tYW5fcGFnZXM6CisgICAgICAgICAgICB0YXJnZXQgPSBvdXRkaXIuZmluZF9vcl9kZWNsYXJlKCclcy4lZCcgJSAoaVsxXSwgaVs0XSkpCisgICAgICAgICAgICB0YXNrLm91dHB1dHMuYXBwZW5kKHRhcmdldCkKKworICAgICAgICAgICAgaWYgc2VsZi5pbnN0YWxsX3BhdGg6CisgICAgICAgICAgICAgICAgc2VsZi5ibGQuaW5zdGFsbF9maWxlcygiJXMvbWFuJWQvIiAlIChzZWxmLmluc3RhbGxfcGF0aCwgaVs0XSksIHRhcmdldCkKKyAgICBlbHNlOgorICAgICAgICB0YXNrLm91dHB1dHMuYXBwZW5kKG91dGRpcikKKworZGVmIGNvbmZpZ3VyZShjb25mKToKKyAgICBjb25mLmZpbmRfcHJvZ3JhbSgnc3BoaW54LWJ1aWxkJywgdmFyPSdTUEhJTlhfQlVJTEQnLCBtYW5kYXRvcnk9RmFsc2UpCisKKyMgc3BoaW54IGRvY3MKK2Zyb20gd2FmbGliLkJ1aWxkIGltcG9ydCBCdWlsZENvbnRleHQKK2NsYXNzIHNwaGlueChCdWlsZENvbnRleHQpOgorICAgIGNtZCA9ICJzcGhpbngiCisgICAgZnVuID0gInNwaGlueCIKZGlmZiAtLWdpdCBhLy53YWYtdG9vbHMvc3FsaXRlMy5weSBiLy53YWYtdG9vbHMvc3FsaXRlMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDRlNDZlCi0tLSAvZGV2L251bGwKKysrIGIvLndhZi10b29scy9zcWxpdGUzLnB5CkBAIC0wLDAgKzEsMzggQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyMgZW5jb2Rpbmc6IHV0Zi04CisKK2Zyb20gd2FmbGliIGltcG9ydCBPcHRpb25zLCBMb2dzCitmcm9tIHdhZmxpYi5Db25maWd1cmUgaW1wb3J0IGNvbmYKKworZGVmIG9wdGlvbnMob3B0KToKKyAgICBvcHQuYWRkX29wdGlvbignLS13aXRoLXNxbGl0ZTMnLCB0eXBlPSdzdHJpbmcnLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgZGVzdD0nd2l0aF9zcWxpdGUzJywgaGVscD0nJydQYXRoIHRvIFNRTGl0ZTMsIGUuZy4sIC91c3IvbG9jYWwnJycpCisKK0Bjb25mCitkZWYgY2hlY2tfc3FsaXRlMyhzZWxmLCAqaywgKiprdyk6CisgICAgcm9vdCA9IGsgYW5kIGtbMF0gb3Iga3cuZ2V0KCdwYXRoJywgTm9uZSkgb3IgT3B0aW9ucy5vcHRpb25zLndpdGhfc3FsaXRlMworICAgIG1hbmRhdG9yeSA9IGt3LmdldCgnbWFuZGF0b3J5JywgVHJ1ZSkKKyAgICB2YXIgPSBrdy5nZXQoJ3VzZWxpYl9zdG9yZScsICdTUUxJVEUzJykKKworICAgIGlmIHJvb3Q6CisgICAgICAgIHNlbGYuY2hlY2tfY3h4KGxpYj0nc3FsaXRlMycsCisgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nQ2hlY2tpbmcgZm9yIFNRTGl0ZTMgbGlicmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9uYW1lPSdIQVZFXyVzJyAlIHZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlbGliX3N0b3JlPXZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFuZGF0b3J5PW1hbmRhdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IiVzL2luY2x1ZGUiICUgcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgbGlicGF0aD0iJXMvbGliIiAlIHJvb3QpCisgICAgZWxzZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jaGVja19jZmcocGFja2FnZT0nc3FsaXRlMycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPVsnLS1jZmxhZ3MnLCAnLS1saWJzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxfZGVmaW5lPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbmFtZT0nSEFWRV8lcycgJSB2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VsaWJfc3RvcmU9J1NRTElURTMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuZGF0b3J5PVRydWUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY3h4KGxpYj0nc3FsaXRlMycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J0NoZWNraW5nIGZvciBTUUxpdGUzIGxpYnJhcnknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lX25hbWU9J0hBVkVfJXMnICUgdmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlbGliX3N0b3JlPXZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmRhdG9yeT1tYW5kYXRvcnkpCmRpZmYgLS1naXQgYS9BVVRIT1JTLm1kIGIvQVVUSE9SUy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjA1MmIwCi0tLSAvZGV2L251bGwKKysrIGIvQVVUSE9SUy5tZApAQCAtMCwwICsxLDE0IEBACituZG5jZXJ0IGF1dGhvcnMKKz09PT09PT09PT09PT09PQorCisjIyBUaGUgcHJpbWFyeSBhdXRob3JzIGFyZSAoYW5kL29yIGhhdmUgYmVlbik6CisKKyogWmhpeWkgWmhhbmcgICAgICAgICAgICA8aHR0cDovL2lybC5jcy51Y2xhLmVkdS9+emhpeWkvPgorKiBBbGV4YW5kZXIgQWZhbmFzeWV2ICAgIDxodHRwOi8vbGFzci5jcy51Y2xhLmVkdS9hZmFuYXN5ZXYvaW5kZXguaHRtbD4KKyogTGl4aWEgWmhhbmcgICAgICAgICAgICA8aHR0cDovL3dlYi5jcy51Y2xhLmVkdS9+bGl4aWEvPgorCisjIyBBbGwgcHJvamVjdCBhdXRob3JzIGFuZCBjb250cmlidXRvcnMKKworVGhlIGZvbGxvd2luZyBpcyBhbiBpbmV2aXRhYmx5IGluY29tcGxldGUgbGlzdCBvZiBNVUNILUFQUFJFQ0lBVEVEIENPTlRSSUJVVE9SUywKK3Blb3BsZSB3aG8gaGF2ZSByZXBvcnRlZCBidWdzLCBzdWJtaXR0ZWQgcGF0Y2hlcywgYW5kIGltcGxlbWVudGVkIG5ldyBmZWF0dXJlcworaW4gdGhlIGxpYnJhcnk6CmRpZmYgLS1naXQgYS9DT1BZSU5HLm1kIGIvQ09QWUlORy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjgxYzgzCi0tLSAvZGV2L251bGwKKysrIGIvQ09QWUlORy5tZApAQCAtMCwwICsxLDcwMSBAQAorbmRuY2VydCBpcyBsaWNlbnNlZCB1bmRlciBjb25kaXRpb25zIG9mIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyBvciBsYXRlci4KKworbmRuY2VydCByZWxpZXMgb24gdGhpcmQtcGFydHkgc29mdHdhcmUgYW5kIGxpYnJhcmllcywgbGljZW5zZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlczoKKworLSBuZG4tY3h4IGxpYnJhcnkgaXMgbGljZW5zZWQgdW5kZXIgY29uZGl0aW9ucyBvZgorICBbR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gM10oaHR0cHM6Ly9naXRodWIuY29tL25hbWVkLWRhdGEvbmRuLWN4eC9ibG9iL21hc3Rlci9DT1BZSU5HLm1kKS4KKworLSBCb29zdCBsaWJyYXJpZXMgbGljZW5zZWQgdW5kZXIgY29uZGl0aW9ucyBvZgorICBbQm9vc3QgU29mdHdhcmUgTGljZW5zZSAxLjBdKGh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL2xpY2Vuc2UuaHRtbCkKKworLSBDcnlwdG9QUCBsaWJyYXJ5IGlzIGxpY2Vuc2VkIHVuZGVyIGNvbmRpdGlvbnMgb2YKKyAgW0Jvb3N0IFNvZnR3YXJlIExpY2Vuc2UgMS4wXShodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9saWNlbnNlLmh0bWwpCisKKy0gU1FMaXRlIGlzIGluIFtwdWJsaWMgZG9tYWluXShodHRwOi8vd3d3LnNxbGl0ZS5vcmcvY29weXJpZ2h0Lmh0bWwpCisKKy0gd2FmIGJ1aWxkIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciBjb25kaXRpb25zIG9mCisgIFtCU0QgbGljZW5zZV0oaHR0cHM6Ly9naXRodWIuY29tL25hbWVkLWRhdGEvbmRuLWN4eC9ibG9iL21hc3Rlci93YWYpCisKK1RoZSBHUEwgbGljZW5zZSBpcyBwcm92aWRlZCBiZWxvdyBpbiB0aGlzIGZpbGUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBsaWNlbnNlcywgc2VlCitodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KK1ZlcnNpb24gMywgMjkgSnVuZSAyMDA3Cis9PT09PT09PT09PT09PT09PT09PT09PQorCis+IENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KKyAgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisjIFByZWFtYmxlCisKKyAgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGEgZnJlZSwgY29weWxlZnQgbGljZW5zZSBmb3IKK3NvZnR3YXJlIGFuZCBvdGhlciBraW5kcyBvZiB3b3Jrcy4KKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYW5kIG90aGVyIHByYWN0aWNhbCB3b3JrcyBhcmUgZGVzaWduZWQKK3RvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgd29ya3MuICBCeSBjb250cmFzdCwKK3RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCitzaGFyZSBhbmQgY2hhbmdlIGFsbCB2ZXJzaW9ucyBvZiBhIHByb2dyYW0tLXRvIG1ha2Ugc3VyZSBpdCByZW1haW5zIGZyZWUKK3NvZnR3YXJlIGZvciBhbGwgaXRzIHVzZXJzLiAgV2UsIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHVzZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCithbnkgb3RoZXIgd29yayByZWxlYXNlZCB0aGlzIHdheSBieSBpdHMgYXV0aG9ycy4gIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGVtIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdQord2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcKK2ZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gcHJldmVudCBvdGhlcnMgZnJvbSBkZW55aW5nIHlvdQordGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCitjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYKK3lvdSBtb2RpZnkgaXQ6IHJlc3BvbnNpYmlsaXRpZXMgdG8gcmVzcGVjdCB0aGUgZnJlZWRvbSBvZiBvdGhlcnMuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgcGFzcyBvbiB0byB0aGUgcmVjaXBpZW50cyB0aGUgc2FtZQorZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKK29yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5Citrbm93IHRoZWlyIHJpZ2h0cy4KKworICBEZXZlbG9wZXJzIHRoYXQgdXNlIHRoZSBHTlUgR1BMIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6CisoMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgTGljZW5zZQorZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KKworICBGb3IgdGhlIGRldmVsb3BlcnMnIGFuZCBhdXRob3JzJyBwcm90ZWN0aW9uLCB0aGUgR1BMIGNsZWFybHkgZXhwbGFpbnMKK3RoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKK2F1dGhvcnMnIHNha2UsIHRoZSBHUEwgcmVxdWlyZXMgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBiZSBtYXJrZWQgYXMKK2NoYW5nZWQsIHNvIHRoYXQgdGhlaXIgcHJvYmxlbXMgd2lsbCBub3QgYmUgYXR0cmlidXRlZCBlcnJvbmVvdXNseSB0bworYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KKworICBTb21lIGRldmljZXMgYXJlIGRlc2lnbmVkIHRvIGRlbnkgdXNlcnMgYWNjZXNzIHRvIGluc3RhbGwgb3IgcnVuCittb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKK2NhbiBkbyBzby4gIFRoaXMgaXMgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgYWltIG9mCitwcm90ZWN0aW5nIHVzZXJzJyBmcmVlZG9tIHRvIGNoYW5nZSB0aGUgc29mdHdhcmUuICBUaGUgc3lzdGVtYXRpYworcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KK3VzZSwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIGl0IGlzIG1vc3QgdW5hY2NlcHRhYmxlLiAgVGhlcmVmb3JlLCB3ZQoraGF2ZSBkZXNpZ25lZCB0aGlzIHZlcnNpb24gb2YgdGhlIEdQTCB0byBwcm9oaWJpdCB0aGUgcHJhY3RpY2UgZm9yIHRob3NlCitwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQorc3RhbmQgcmVhZHkgdG8gZXh0ZW5kIHRoaXMgcHJvdmlzaW9uIHRvIHRob3NlIGRvbWFpbnMgaW4gZnV0dXJlIHZlcnNpb25zCitvZiB0aGUgR1BMLCBhcyBuZWVkZWQgdG8gcHJvdGVjdCB0aGUgZnJlZWRvbSBvZiB1c2Vycy4KKworICBGaW5hbGx5LCBldmVyeSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLgorU3RhdGVzIHNob3VsZCBub3QgYWxsb3cgcGF0ZW50cyB0byByZXN0cmljdCBkZXZlbG9wbWVudCBhbmQgdXNlIG9mCitzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bworYXZvaWQgdGhlIHNwZWNpYWwgZGFuZ2VyIHRoYXQgcGF0ZW50cyBhcHBsaWVkIHRvIGEgZnJlZSBwcm9ncmFtIGNvdWxkCittYWtlIGl0IGVmZmVjdGl2ZWx5IHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB0aGUgR1BMIGFzc3VyZXMgdGhhdAorcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKyMgVEVSTVMgQU5EIENPTkRJVElPTlMKKworIyMgMC4gRGVmaW5pdGlvbnMuCisKKyAgXyJUaGlzIExpY2Vuc2UiXyByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICBfIkNvcHlyaWdodCJfIGFsc28gbWVhbnMgY29weXJpZ2h0LWxpa2UgbGF3cyB0aGF0IGFwcGx5IHRvIG90aGVyIGtpbmRzIG9mCit3b3Jrcywgc3VjaCBhcyBzZW1pY29uZHVjdG9yIG1hc2tzLgorCisgIF8iVGhlIFByb2dyYW0iXyByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCitMaWNlbnNlLiAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgXyJ5b3UiXy4gIF8iTGljZW5zZWVzIl8gYW5kCisicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCisKKyAgVG8gXyJtb2RpZnkiXyBhIHdvcmsgbWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3b3JrCitpbiBhIGZhc2hpb24gcmVxdWlyaW5nIGNvcHlyaWdodCBwZXJtaXNzaW9uLCBvdGhlciB0aGFuIHRoZSBtYWtpbmcgb2YgYW4KK2V4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgXyJtb2RpZmllZCB2ZXJzaW9uIl8gb2YgdGhlCitlYXJsaWVyIHdvcmsgb3IgYSB3b3JrIF8iYmFzZWQgb24iXyB0aGUgZWFybGllciB3b3JrLgorCisgIEEgXyJjb3ZlcmVkIHdvcmsiXyBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLgorCisgIFRvIF8icHJvcGFnYXRlIl8gYSB3b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dAorcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgoraW5mcmluZ2VtZW50IHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdywgZXhjZXB0IGV4ZWN1dGluZyBpdCBvbiBhCitjb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuICBQcm9wYWdhdGlvbiBpbmNsdWRlcyBjb3B5aW5nLAorZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKK3B1YmxpYywgYW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC4KKworICBUbyBfImNvbnZleSJfIGEgd29yayBtZWFucyBhbnkga2luZCBvZiBwcm9wYWdhdGlvbiB0aGF0IGVuYWJsZXMgb3RoZXIKK3BhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAorYSBjb21wdXRlciBuZXR3b3JrLCB3aXRoIG5vIHRyYW5zZmVyIG9mIGEgY29weSwgaXMgbm90IGNvbnZleWluZy4KKworICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKK3RvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21pbmVudGx5IHZpc2libGUKK2ZlYXR1cmUgdGhhdCAoMSkgZGlzcGxheXMgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSwgYW5kICgyKQordGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKK2V4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVkKSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleSB0aGUKK3dvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmCit0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQorbWVudSwgYSBwcm9taW5lbnQgaXRlbSBpbiB0aGUgbGlzdCBtZWV0cyB0aGlzIGNyaXRlcmlvbi4KKworIyMgMS4gU291cmNlIENvZGUuCisKKyAgVGhlIF8ic291cmNlIGNvZGUiXyBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yaworZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiBfIk9iamVjdCBjb2RlIl8gbWVhbnMgYW55IG5vbi1zb3VyY2UKK2Zvcm0gb2YgYSB3b3JrLgorCisgIEEgXyJTdGFuZGFyZCBJbnRlcmZhY2UiXyBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKK3N0YW5kYXJkIGRlZmluZWQgYnkgYSByZWNvZ25pemVkIHN0YW5kYXJkcyBib2R5LCBvciwgaW4gdGhlIGNhc2Ugb2YKK2ludGVyZmFjZXMgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIG9uZSB0aGF0CitpcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KKworICBUaGUgXyJTeXN0ZW0gTGlicmFyaWVzIl8gb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyCit0aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZgorcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgorQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0CitNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3Igd2hpY2ggYW4KK2ltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCisiTWFqb3IgQ29tcG9uZW50IiwgaW4gdGhpcyBjb250ZXh0LCBtZWFucyBhIG1ham9yIGVzc2VudGlhbCBjb21wb25lbnQKKyhrZXJuZWwsIHdpbmRvdyBzeXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlIHNwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW0KKyhpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCitwcm9kdWNlIHRoZSB3b3JrLCBvciBhbiBvYmplY3QgY29kZSBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBpdC4KKworICBUaGUgXyJDb3JyZXNwb25kaW5nIFNvdXJjZSJfIGZvciBhIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSBtZWFucyBhbGwKK3RoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKK3dvcmspIHJ1biB0aGUgb2JqZWN0IGNvZGUgYW5kIHRvIG1vZGlmeSB0aGUgd29yaywgaW5jbHVkaW5nIHNjcmlwdHMgdG8KK2NvbnRyb2wgdGhvc2UgYWN0aXZpdGllcy4gIEhvd2V2ZXIsIGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHdvcmsncworU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQorcHJvZ3JhbXMgd2hpY2ggYXJlIHVzZWQgdW5tb2RpZmllZCBpbiBwZXJmb3JtaW5nIHRob3NlIGFjdGl2aXRpZXMgYnV0Cit3aGljaCBhcmUgbm90IHBhcnQgb2YgdGhlIHdvcmsuICBGb3IgZXhhbXBsZSwgQ29ycmVzcG9uZGluZyBTb3VyY2UKK2luY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCit0aGUgd29yaywgYW5kIHRoZSBzb3VyY2UgY29kZSBmb3Igc2hhcmVkIGxpYnJhcmllcyBhbmQgZHluYW1pY2FsbHkKK2xpbmtlZCBzdWJwcm9ncmFtcyB0aGF0IHRoZSB3b3JrIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byByZXF1aXJlLAorc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKK3N1YnByb2dyYW1zIGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgd29yay4KKworICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCitjYW4gcmVnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIENvcnJlc3BvbmRpbmcKK1NvdXJjZS4KKworICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGEgd29yayBpbiBzb3VyY2UgY29kZSBmb3JtIGlzIHRoYXQKK3NhbWUgd29yay4KKworIyMgMi4gQmFzaWMgUGVybWlzc2lvbnMuCisKKyAgQWxsIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YKK2NvcHlyaWdodCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkCitjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCitwZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiAgVGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgYQorY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzCitjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgorcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCisKKyAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdAorY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMKK2luIGZvcmNlLiAgWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0byBvdGhlcnMgZm9yIHRoZSBzb2xlIHB1cnBvc2UKK29mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQord2l0aCBmYWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8KK25vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKK2ZvciB5b3UgbXVzdCBkbyBzbyBleGNsdXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91ciBkaXJlY3Rpb24KK2FuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZgoreW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KKworICBDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlcgordGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCittYWtlcyBpdCB1bm5lY2Vzc2FyeS4KKworIyMgMy4gUHJvdGVjdGluZyBVc2VycycgTGVnYWwgUmlnaHRzIEZyb20gQW50aS1DaXJjdW12ZW50aW9uIExhdy4KKworICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKK21lYXN1cmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgYXJ0aWNsZQorMTEgb2YgdGhlIFdJUE8gY29weXJpZ2h0IHRyZWF0eSBhZG9wdGVkIG9uIDIwIERlY2VtYmVyIDE5OTYsIG9yCitzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCittZWFzdXJlcy4KKworICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCitjaXJjdW12ZW50aW9uIG9mIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdG8gdGhlIGV4dGVudCBzdWNoIGNpcmN1bXZlbnRpb24KK2lzIGVmZmVjdGVkIGJ5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8KK3RoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKK21vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBhcyBhIG1lYW5zIG9mIGVuZm9yY2luZywgYWdhaW5zdCB0aGUgd29yaydzCit1c2VycywgeW91ciBvciB0aGlyZCBwYXJ0aWVzJyBsZWdhbCByaWdodHMgdG8gZm9yYmlkIGNpcmN1bXZlbnRpb24gb2YKK3RlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCisKKyMjIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCisKKyAgWW91IG1heSBjb252ZXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91CityZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAorYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYW55Citub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CitrZWVwIGludGFjdCBhbGwgbm90aWNlcyBvZiB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFsbAorcmVjaXBpZW50cyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uCisKKyAgWW91IG1heSBjaGFyZ2UgYW55IHByaWNlIG9yIG5vIHByaWNlIGZvciBlYWNoIGNvcHkgdGhhdCB5b3UgY29udmV5LAorYW5kIHlvdSBtYXkgb2ZmZXIgc3VwcG9ydCBvciB3YXJyYW50eSBwcm90ZWN0aW9uIGZvciBhIGZlZS4KKworIyMgNS4gQ29udmV5aW5nIE1vZGlmaWVkIFNvdXJjZSBWZXJzaW9ucy4KKworICBZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvCitwcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW0sIGluIHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyIHRoZQordGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQKKyAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCisKKyAgICBiKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcworICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgorICAgIDcuICBUaGlzIHJlcXVpcmVtZW50IG1vZGlmaWVzIHRoZSByZXF1aXJlbWVudCBpbiBzZWN0aW9uIDQgdG8KKyAgICAia2VlcCBpbnRhY3QgYWxsIG5vdGljZXMiLgorCisgICAgYykgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMKKyAgICBMaWNlbnNlIHRvIGFueW9uZSB3aG8gY29tZXMgaW50byBwb3NzZXNzaW9uIG9mIGEgY29weS4gIFRoaXMKKyAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNworICAgIGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsCisgICAgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgcGFja2FnZWQuICBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8KKyAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CisgICAgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24gaWYgeW91IGhhdmUgc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KKworICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CisgICAgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlCisgICAgaW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIKKyAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KKworICBBIGNvbXBpbGF0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHdpdGggb3RoZXIgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50Cit3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAorYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIgcHJvZ3JhbSwKK2luIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4KKyJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAordXNlZCB0byBsaW1pdCB0aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycworYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiAgSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrCitpbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgorcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KKworIyMgNi4gQ29udmV5aW5nIE5vbi1Tb3VyY2UgRm9ybXMuCisKKyAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKK29mIHNlY3Rpb25zIDQgYW5kIDUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gY29udmV5IHRoZQorbWFjaGluZS1yZWFkYWJsZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLAoraW4gb25lIG9mIHRoZXNlIHdheXM6CisKKyAgICBhKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0CisgICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmaXhlZCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCisKKyAgICBiKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0CisgICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSBhCisgICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKKyAgICBsb25nIGFzIHlvdSBvZmZlciBzcGFyZSBwYXJ0cyBvciBjdXN0b21lciBzdXBwb3J0IGZvciB0aGF0IHByb2R1Y3QKKyAgICBtb2RlbCwgdG8gZ2l2ZSBhbnlvbmUgd2hvIHBvc3Nlc3NlcyB0aGUgb2JqZWN0IGNvZGUgZWl0aGVyICgxKSBhCisgICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCisgICAgcHJvZHVjdCB0aGF0IGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBvbiBhIGR1cmFibGUgcGh5c2ljYWwKKyAgICBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UsIGZvciBhIHByaWNlIG5vCisgICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCisgICAgY29udmV5aW5nIG9mIHNvdXJjZSwgb3IgKDIpIGFjY2VzcyB0byBjb3B5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UuCisKKyAgICBjKSBDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZQorICAgIHdyaXR0ZW4gb2ZmZXIgdG8gcHJvdmlkZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGlzCisgICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKKyAgICBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgb2JqZWN0IGNvZGUgd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQKKyAgICB3aXRoIHN1YnNlY3Rpb24gNmIuCisKKyAgICBkKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGJ5IG9mZmVyaW5nIGFjY2VzcyBmcm9tIGEgZGVzaWduYXRlZAorICAgIHBsYWNlIChncmF0aXMgb3IgZm9yIGEgY2hhcmdlKSwgYW5kIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCisgICAgZnVydGhlciBjaGFyZ2UuICBZb3UgbmVlZCBub3QgcmVxdWlyZSByZWNpcGllbnRzIHRvIGNvcHkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuICBJZiB0aGUgcGxhY2UgdG8KKyAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKKyAgICBtYXkgYmUgb24gYSBkaWZmZXJlbnQgc2VydmVyIChvcGVyYXRlZCBieSB5b3Ugb3IgYSB0aGlyZCBwYXJ0eSkKKyAgICB0aGF0IHN1cHBvcnRzIGVxdWl2YWxlbnQgY29weWluZyBmYWNpbGl0aWVzLCBwcm92aWRlZCB5b3UgbWFpbnRhaW4KKyAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlLiAgUmVnYXJkbGVzcyBvZiB3aGF0IHNlcnZlciBob3N0cyB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSwgeW91IHJlbWFpbiBvYmxpZ2F0ZWQgdG8gZW5zdXJlIHRoYXQgaXQgaXMKKyAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgorCisgICAgZSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uLCBwcm92aWRlZAorICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCisgICAgU291cmNlIG9mIHRoZSB3b3JrIGFyZSBiZWluZyBvZmZlcmVkIHRvIHRoZSBnZW5lcmFsIHB1YmxpYyBhdCBubworICAgIGNoYXJnZSB1bmRlciBzdWJzZWN0aW9uIDZkLgorCisgIEEgc2VwYXJhYmxlIHBvcnRpb24gb2YgdGhlIG9iamVjdCBjb2RlLCB3aG9zZSBzb3VyY2UgY29kZSBpcyBleGNsdWRlZAorZnJvbSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgYXMgYSBTeXN0ZW0gTGlicmFyeSwgbmVlZCBub3QgYmUKK2luY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KKworICBBIF8iVXNlciBQcm9kdWN0Il8gaXMgZWl0aGVyICgxKSBhIF8iY29uc3VtZXIgcHJvZHVjdCJfLCB3aGljaCBtZWFucyBhbnkKK3RhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IHdoaWNoIGlzIG5vcm1hbGx5IHVzZWQgZm9yIHBlcnNvbmFsLCBmYW1pbHksCitvciBob3VzZWhvbGQgcHVycG9zZXMsIG9yICgyKSBhbnl0aGluZyBkZXNpZ25lZCBvciBzb2xkIGZvciBpbmNvcnBvcmF0aW9uCitpbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCitkb3VidGZ1bCBjYXNlcyBzaGFsbCBiZSByZXNvbHZlZCBpbiBmYXZvciBvZiBjb3ZlcmFnZS4gIEZvciBhIHBhcnRpY3VsYXIKK3Byb2R1Y3QgcmVjZWl2ZWQgYnkgYSBwYXJ0aWN1bGFyIHVzZXIsICJub3JtYWxseSB1c2VkIiByZWZlcnMgdG8gYQordHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCitvZiB0aGUgcGFydGljdWxhciB1c2VyIG9yIG9mIHRoZSB3YXkgaW4gd2hpY2ggdGhlIHBhcnRpY3VsYXIgdXNlcgorYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZCB0byB1c2UsIHRoZSBwcm9kdWN0LiAgQSBwcm9kdWN0CitpcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbAorY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvciBub24tY29uc3VtZXIgdXNlcywgdW5sZXNzIHN1Y2ggdXNlcyByZXByZXNlbnQKK3RoZSBvbmx5IHNpZ25pZmljYW50IG1vZGUgb2YgdXNlIG9mIHRoZSBwcm9kdWN0LgorCisgIF8iSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIl8gZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLAorcHJvY2VkdXJlcywgYXV0aG9yaXphdGlvbiBrZXlzLCBvciBvdGhlciBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBpbnN0YWxsCithbmQgZXhlY3V0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBhIGNvdmVyZWQgd29yayBpbiB0aGF0IFVzZXIgUHJvZHVjdCBmcm9tCithIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKK3N1ZmZpY2UgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbnRpbnVlZCBmdW5jdGlvbmluZyBvZiB0aGUgbW9kaWZpZWQgb2JqZWN0Citjb2RlIGlzIGluIG5vIGNhc2UgcHJldmVudGVkIG9yIGludGVyZmVyZWQgd2l0aCBzb2xlbHkgYmVjYXVzZQorbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCisKKyAgSWYgeW91IGNvbnZleSBhbiBvYmplY3QgY29kZSB3b3JrIHVuZGVyIHRoaXMgc2VjdGlvbiBpbiwgb3Igd2l0aCwgb3IKK3NwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCitwYXJ0IG9mIGEgdHJhbnNhY3Rpb24gaW4gd2hpY2ggdGhlIHJpZ2h0IG9mIHBvc3Nlc3Npb24gYW5kIHVzZSBvZiB0aGUKK1VzZXIgUHJvZHVjdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcmVjaXBpZW50IGluIHBlcnBldHVpdHkgb3IgZm9yIGEKK2ZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCitDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCB1bmRlciB0aGlzIHNlY3Rpb24gbXVzdCBiZSBhY2NvbXBhbmllZAorYnkgdGhlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbi4gIEJ1dCB0aGlzIHJlcXVpcmVtZW50IGRvZXMgbm90IGFwcGx5CitpZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAorbW9kaWZpZWQgb2JqZWN0IGNvZGUgb24gdGhlIFVzZXIgUHJvZHVjdCAoZm9yIGV4YW1wbGUsIHRoZSB3b3JrIGhhcworYmVlbiBpbnN0YWxsZWQgaW4gUk9NKS4KKworICBUaGUgcmVxdWlyZW1lbnQgdG8gcHJvdmlkZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhCityZXF1aXJlbWVudCB0byBjb250aW51ZSB0byBwcm92aWRlIHN1cHBvcnQgc2VydmljZSwgd2FycmFudHksIG9yIHVwZGF0ZXMKK2ZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCit0aGUgVXNlciBQcm9kdWN0IGluIHdoaWNoIGl0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZC4gIEFjY2VzcyB0byBhCituZXR3b3JrIG1heSBiZSBkZW5pZWQgd2hlbiB0aGUgbW9kaWZpY2F0aW9uIGl0c2VsZiBtYXRlcmlhbGx5IGFuZAorYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCitwcm90b2NvbHMgZm9yIGNvbW11bmljYXRpb24gYWNyb3NzIHRoZSBuZXR3b3JrLgorCisgIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAoraW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uIG11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBpcyBwdWJsaWNseQorZG9jdW1lbnRlZCAoYW5kIHdpdGggYW4gaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4KK3NvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgordW5wYWNraW5nLCByZWFkaW5nIG9yIGNvcHlpbmcuCisKKyMjIDcuIEFkZGl0aW9uYWwgVGVybXMuCisKKyAgXyJBZGRpdGlvbmFsIHBlcm1pc3Npb25zIl8gYXJlIHRlcm1zIHRoYXQgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgorQWRkaXRpb25hbCBwZXJtaXNzaW9ucyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBlbnRpcmUgUHJvZ3JhbSBzaGFsbAorYmUgdHJlYXRlZCBhcyB0aG91Z2ggdGhleSB3ZXJlIGluY2x1ZGVkIGluIHRoaXMgTGljZW5zZSwgdG8gdGhlIGV4dGVudAordGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKK2FwcGx5IG9ubHkgdG8gcGFydCBvZiB0aGUgUHJvZ3JhbSwgdGhhdCBwYXJ0IG1heSBiZSB1c2VkIHNlcGFyYXRlbHkKK3VuZGVyIHRob3NlIHBlcm1pc3Npb25zLCBidXQgdGhlIGVudGlyZSBQcm9ncmFtIHJlbWFpbnMgZ292ZXJuZWQgYnkKK3RoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KKworICBXaGVuIHlvdSBjb252ZXkgYSBjb3B5IG9mIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uCityZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKK2l0LiAgKEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbWF5IGJlIHdyaXR0ZW4gdG8gcmVxdWlyZSB0aGVpciBvd24KK3JlbW92YWwgaW4gY2VydGFpbiBjYXNlcyB3aGVuIHlvdSBtb2RpZnkgdGhlIHdvcmsuKSAgWW91IG1heSBwbGFjZQorYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLAorZm9yIHdoaWNoIHlvdSBoYXZlIG9yIGNhbiBnaXZlIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBwZXJtaXNzaW9uLgorCisgIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQorYWRkIHRvIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IChpZiBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZgordGhhdCBtYXRlcmlhbCkgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGVybXM6CisKKyAgICBhKSBEaXNjbGFpbWluZyB3YXJyYW50eSBvciBsaW1pdGluZyBsaWFiaWxpdHkgZGlmZmVyZW50bHkgZnJvbSB0aGUKKyAgICB0ZXJtcyBvZiBzZWN0aW9ucyAxNSBhbmQgMTYgb2YgdGhpcyBMaWNlbnNlOyBvcgorCisgICAgYikgUmVxdWlyaW5nIHByZXNlcnZhdGlvbiBvZiBzcGVjaWZpZWQgcmVhc29uYWJsZSBsZWdhbCBub3RpY2VzIG9yCisgICAgYXV0aG9yIGF0dHJpYnV0aW9ucyBpbiB0aGF0IG1hdGVyaWFsIG9yIGluIHRoZSBBcHByb3ByaWF0ZSBMZWdhbAorICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCisKKyAgICBjKSBQcm9oaWJpdGluZyBtaXNyZXByZXNlbnRhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoYXQgbWF0ZXJpYWwsIG9yCisgICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KKyAgICByZWFzb25hYmxlIHdheXMgYXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZlcnNpb247IG9yCisKKyAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCisgICAgYXV0aG9ycyBvZiB0aGUgbWF0ZXJpYWw7IG9yCisKKyAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCisgICAgdHJhZGUgbmFtZXMsIHRyYWRlbWFya3MsIG9yIHNlcnZpY2UgbWFya3M7IG9yCisKKyAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CisgICAgbWF0ZXJpYWwgYnkgYW55b25lIHdobyBjb252ZXlzIHRoZSBtYXRlcmlhbCAob3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YKKyAgICBpdCkgd2l0aCBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBvZiBsaWFiaWxpdHkgdG8gdGhlIHJlY2lwaWVudCwgZm9yCisgICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgorICAgIHRob3NlIGxpY2Vuc29ycyBhbmQgYXV0aG9ycy4KKworICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgorcmVzdHJpY3Rpb25zIiB3aXRoaW4gdGhlIG1lYW5pbmcgb2Ygc2VjdGlvbiAxMC4gIElmIHRoZSBQcm9ncmFtIGFzIHlvdQorcmVjZWl2ZWQgaXQsIG9yIGFueSBwYXJ0IG9mIGl0LCBjb250YWlucyBhIG5vdGljZSBzdGF0aW5nIHRoYXQgaXQgaXMKK2dvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgorcmVzdHJpY3Rpb24sIHlvdSBtYXkgcmVtb3ZlIHRoYXQgdGVybS4gIElmIGEgbGljZW5zZSBkb2N1bWVudCBjb250YWlucworYSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGJ1dCBwZXJtaXRzIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZyB1bmRlciB0aGlzCitMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKK29mIHRoYXQgbGljZW5zZSBkb2N1bWVudCwgcHJvdmlkZWQgdGhhdCB0aGUgZnVydGhlciByZXN0cmljdGlvbiBkb2VzCitub3Qgc3Vydml2ZSBzdWNoIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZy4KKworICBJZiB5b3UgYWRkIHRlcm1zIHRvIGEgY292ZXJlZCB3b3JrIGluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiwgeW91CittdXN0IHBsYWNlLCBpbiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLCBhIHN0YXRlbWVudCBvZiB0aGUKK2FkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZword2hlcmUgdG8gZmluZCB0aGUgYXBwbGljYWJsZSB0ZXJtcy4KKworICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQorZm9ybSBvZiBhIHNlcGFyYXRlbHkgd3JpdHRlbiBsaWNlbnNlLCBvciBzdGF0ZWQgYXMgZXhjZXB0aW9uczsKK3RoZSBhYm92ZSByZXF1aXJlbWVudHMgYXBwbHkgZWl0aGVyIHdheS4KKworIyMgOC4gVGVybWluYXRpb24uCisKKyAgWW91IG1heSBub3QgcHJvcGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMgZXhwcmVzc2x5Citwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gcHJvcGFnYXRlIG9yCittb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKK3RoaXMgTGljZW5zZSAoaW5jbHVkaW5nIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGUgdGhpcmQKK3BhcmFncmFwaCBvZiBzZWN0aW9uIDExKS4KKworICBIb3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91cgorbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpCitwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCitmaW5hbGx5IHRlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVudGx5LCBpZiB0aGUgY29weXJpZ2h0Citob2xkZXIgZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucworcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgorCisgIE1vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcworcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCit2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlCityZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tIHRoYXQKK2NvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKK3lvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgorCisgIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCitsaWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZS4gIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkKK3JlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKK21hdGVyaWFsIHVuZGVyIHNlY3Rpb24gMTAuCisKKyMjIDkuIEFjY2VwdGFuY2UgTm90IFJlcXVpcmVkIGZvciBIYXZpbmcgQ29waWVzLgorCisgIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgorcnVuIGEgY29weSBvZiB0aGUgUHJvZ3JhbS4gIEFuY2lsbGFyeSBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yaworb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24KK3RvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCitub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IKK21vZGlmeSBhbnkgY292ZXJlZCB3b3JrLiAgVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvCitub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKK2NvdmVyZWQgd29yaywgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uCisKKyMjIDEwLiBBdXRvbWF0aWMgTGljZW5zaW5nIG9mIERvd25zdHJlYW0gUmVjaXBpZW50cy4KKworICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CityZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3JzLCB0byBydW4sIG1vZGlmeSBhbmQKK3Byb3BhZ2F0ZSB0aGF0IHdvcmssIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiAgWW91IGFyZSBub3QgcmVzcG9uc2libGUKK2ZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgorCisgIEFuIF8iZW50aXR5IHRyYW5zYWN0aW9uIl8gaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbgorb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbgorb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKK3dvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0Cit0cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIKK2xpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZAorZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZgordGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgorCisgIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZQorcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKK25vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZgorcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgeW91IG1heSBub3QgaW5pdGlhdGUgbGl0aWdhdGlvbgorKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKK2FueSBwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvcgorc2FsZSwgb3IgaW1wb3J0aW5nIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LgorCisjIyAxMS4gUGF0ZW50cy4KKworICBBIF8iY29udHJpYnV0b3IiXyBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQcm9ncmFtIGlzIGJhc2VkLiAgVGhlCit3b3JrIHRodXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzICJjb250cmlidXRvciB2ZXJzaW9uIi4KKworICBBIGNvbnRyaWJ1dG9yJ3MgXyJlc3NlbnRpYWwgcGF0ZW50IGNsYWltcyJfIGFyZSBhbGwgcGF0ZW50IGNsYWltcworb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgY29udHJpYnV0b3IsIHdoZXRoZXIgYWxyZWFkeSBhY3F1aXJlZCBvcgoraGVyZWFmdGVyIGFjcXVpcmVkLCB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBieSBzb21lIG1hbm5lciwgcGVybWl0dGVkCitieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCitidXQgZG8gbm90IGluY2x1ZGUgY2xhaW1zIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYXMgYQorY29uc2VxdWVuY2Ugb2YgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRyaWJ1dG9yIHZlcnNpb24uICBGb3IKK3B1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudAorcGF0ZW50IHN1YmxpY2Vuc2VzIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mCit0aGlzIExpY2Vuc2UuCisKKyAgRWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIHRoZSBjb250cmlidXRvcidzIGVzc2VudGlhbCBwYXRlbnQgY2xhaW1zLCB0bworbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCitwcm9wYWdhdGUgdGhlIGNvbnRlbnRzIG9mIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLgorCisgIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCithZ3JlZW1lbnQgb3IgY29tbWl0bWVudCwgaG93ZXZlciBkZW5vbWluYXRlZCwgbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQKKyhzdWNoIGFzIGFuIGV4cHJlc3MgcGVybWlzc2lvbiB0byBwcmFjdGljZSBhIHBhdGVudCBvciBjb3ZlbmFudCBub3QgdG8KK3N1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCitwYXJ0eSBtZWFucyB0byBtYWtlIHN1Y2ggYW4gYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQgbm90IHRvIGVuZm9yY2UgYQorcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5LgorCisgIElmIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIGtub3dpbmdseSByZWx5aW5nIG9uIGEgcGF0ZW50IGxpY2Vuc2UsCithbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFueW9uZQordG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQorcHVibGljbHkgYXZhaWxhYmxlIG5ldHdvcmsgc2VydmVyIG9yIG90aGVyIHJlYWRpbHkgYWNjZXNzaWJsZSBtZWFucywKK3RoZW4geW91IG11c3QgZWl0aGVyICgxKSBjYXVzZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdG8gYmUgc28KK2F2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKK3BhdGVudCBsaWNlbnNlIGZvciB0aGlzIHBhcnRpY3VsYXIgd29yaywgb3IgKDMpIGFycmFuZ2UsIGluIGEgbWFubmVyCitjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UsIHRvIGV4dGVuZCB0aGUgcGF0ZW50CitsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKK2FjdHVhbCBrbm93bGVkZ2UgdGhhdCwgYnV0IGZvciB0aGUgcGF0ZW50IGxpY2Vuc2UsIHlvdXIgY29udmV5aW5nIHRoZQorY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yaworaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0Citjb3VudHJ5IHRoYXQgeW91IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgYXJlIHZhbGlkLgorCisgIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKK2FycmFuZ2VtZW50LCB5b3UgY29udmV5LCBvciBwcm9wYWdhdGUgYnkgcHJvY3VyaW5nIGNvbnZleWFuY2Ugb2YsIGEKK2NvdmVyZWQgd29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcworcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5CitvciBjb252ZXkgYSBzcGVjaWZpYyBjb3B5IG9mIHRoZSBjb3ZlcmVkIHdvcmssIHRoZW4gdGhlIHBhdGVudCBsaWNlbnNlCit5b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgY292ZXJlZAord29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCisKKyAgQSBwYXRlbnQgbGljZW5zZSBpcyAiZGlzY3JpbWluYXRvcnkiIGlmIGl0IGRvZXMgbm90IGluY2x1ZGUgd2l0aGluCit0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcworY29uZGl0aW9uZWQgb24gdGhlIG5vbi1leGVyY2lzZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgcmlnaHRzIHRoYXQgYXJlCitzcGVjaWZpY2FsbHkgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCBjb252ZXkgYSBjb3ZlcmVkCit3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcworaW4gdGhlIGJ1c2luZXNzIG9mIGRpc3RyaWJ1dGluZyBzb2Z0d2FyZSwgdW5kZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudAordG8gdGhlIHRoaXJkIHBhcnR5IGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgeW91ciBhY3Rpdml0eSBvZiBjb252ZXlpbmcKK3RoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQorcGFydGllcyB3aG8gd291bGQgcmVjZWl2ZSB0aGUgY292ZXJlZCB3b3JrIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5CitwYXRlbnQgbGljZW5zZSAoYSkgaW4gY29ubmVjdGlvbiB3aXRoIGNvcGllcyBvZiB0aGUgY292ZXJlZCB3b3JrCitjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQorZm9yIGFuZCBpbiBjb25uZWN0aW9uIHdpdGggc3BlY2lmaWMgcHJvZHVjdHMgb3IgY29tcGlsYXRpb25zIHRoYXQKK2NvbnRhaW4gdGhlIGNvdmVyZWQgd29yaywgdW5sZXNzIHlvdSBlbnRlcmVkIGludG8gdGhhdCBhcnJhbmdlbWVudCwKK29yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCisKKyAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZworYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKK290aGVyd2lzZSBiZSBhdmFpbGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy4KKworIyMgMTIuIE5vIFN1cnJlbmRlciBvZiBPdGhlcnMnIEZyZWVkb20uCisKKyAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QgY29udmV5IGEKK2NvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkKK25vdCBjb252ZXkgaXQgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhZ3JlZSB0byB0ZXJtcyB0aGF0IG9ibGlnYXRlIHlvdQordG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5Cit0aGUgUHJvZ3JhbSwgdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggdGhvc2UgdGVybXMgYW5kIHRoaXMKK0xpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGNvbnZleWluZyB0aGUgUHJvZ3JhbS4KKworIyMgMTMuIFVzZSB3aXRoIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCB5b3UgaGF2ZQorcGVybWlzc2lvbiB0byBsaW5rIG9yIGNvbWJpbmUgYW55IGNvdmVyZWQgd29yayB3aXRoIGEgd29yayBsaWNlbnNlZAordW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQorY29tYmluZWQgd29yaywgYW5kIHRvIGNvbnZleSB0aGUgcmVzdWx0aW5nIHdvcmsuICBUaGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZSBjb3ZlcmVkIHdvcmssCitidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCitzZWN0aW9uIDEzLCBjb25jZXJuaW5nIGludGVyYWN0aW9uIHRocm91Z2ggYSBuZXR3b3JrIHdpbGwgYXBwbHkgdG8gdGhlCitjb21iaW5hdGlvbiBhcyBzdWNoLgorCisjIyAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YKK3RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKKyAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKK1Byb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZQorb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKK3ZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCitieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKK3ZlcnNpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eSdzCitwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91Cit0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KKworICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudAorcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQorYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYQorbGF0ZXIgdmVyc2lvbi4KKworIyMgMTUuIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisKKyAgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWQorQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVAorSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQorT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQorSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GCitBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyMjIDE2LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KKworICBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTU9ESUZJRVMgQU5EL09SIENPTlZFWVMKK1RIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQorR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFCitVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GCitEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRAorUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksCitFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRVMuCisKKyMjIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCisKKyAgSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkCithYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKK3Jldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkgbG9jYWwgbGF3IHRoYXQgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcworYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQorUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQorY29weSBvZiB0aGUgUHJvZ3JhbSBpbiByZXR1cm4gZm9yIGEgZmVlLgorCisjIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisjIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CitzdGF0ZSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKKyAgSWYgdGhlIHByb2dyYW0gZG9lcyB0ZXJtaW5hbCBpbnRlcmFjdGlvbiwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydAorbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgPHByb2dyYW0+ICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgJ3Nob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSAnc2hvdyBjJyBmb3IgZGV0YWlscy4KKworICBUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIF8nc2hvdyB3J18gYW5kIF8nc2hvdyBjJ18gc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgeW91ciBwcm9ncmFtJ3MgY29tbWFuZHMKK21pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KKworICBZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3Igc2Nob29sLAoraWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIGFuZCBob3cgdG8gYXBwbHkgYW5kIGZvbGxvdyB0aGUgR05VIEdQTCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbQoraW50byBwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91CittYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKK3RoZSBsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuICBCdXQgZmlyc3QsIHBsZWFzZSByZWFkCis8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+LgpkaWZmIC0tZ2l0IGEvc3JjL2xvZ2dpbmcuaHBwIGIvc3JjL2xvZ2dpbmcuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YjhjM2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbG9nZ2luZy5ocHAKQEAgLTAsMCArMSw0MCBAQAorLyogLSotIE1vZGU6QysrOyBjLWZpbGUtc3R5bGU6ImdudSI7IGluZGVudC10YWJzLW1vZGU6bmlsOyAtKi0gKi8KKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbmRuY2VydCwgYSBjZXJ0aWZpY2F0ZSBtYW5hZ2VtZW50IHN5c3RlbSBiYXNlZCBvbiBORE4uCisgKgorICogbmRuY2VydCBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIKKyAqIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBuZG5jZXJ0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorICogV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICogUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIG5kbmNlcnQsIGUuZy4sIGluIENPUFlJTkcubWQgZmlsZS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiBTZWUgQVVUSE9SUy5tZCBmb3IgY29tcGxldGUgbGlzdCBvZiBuZG5jZXJ0IGF1dGhvcnMgYW5kIGNvbnRyaWJ1dG9ycy4KKyAqLworCisjaWZuZGVmIE5ETkNFUlRfTE9HR0lOR19IUFAKKyNkZWZpbmUgTkROQ0VSVF9MT0dHSU5HX0hQUAorCisjaW5jbHVkZSA8bmRuLWN4eC91dGlsL2xvZ2dlci5ocHA+CisKK25hbWVzcGFjZSBuZG4geworbmFtZXNwYWNlIG5kbmNlcnQgeworCisjZGVmaW5lIF9MT0dfSU5JVChuYW1lKSBORE5fTE9HX0lOSVQobmRuY2VydC5uYW1lKQorCisjZGVmaW5lIF9MT0dfREVCVUcoeCkgTkROX0xPR19ERUJVRyhfX0ZJTEVfXyA8PCAiOiIgPDwgX19MSU5FX18gPDwgIjoiIDw8ICIgIiA8PCB4KQorCisjZGVmaW5lIF9MT0dfVFJBQ0UoeCkgTkROX0xPR19UUkFDRShfX0ZJTEVfXyA8PCAiOiIgPDwgX19MSU5FX18gPDwgIjoiIDw8ICIgIiA8PCB4KQorCisjZGVmaW5lIF9MT0dfRVJST1IoeCkgTkROX0xPR19FUlJPUih4KQorCit9IC8vIG5kbmNlcnQKK30gLy8gbmRuCisKKyNlbmRpZiAvLyBORE5DRVJUX0xPR0dJTkdfSFBQCmRpZmYgLS1naXQgYS9zcmMvbmRuY2VydC1jb21tb24uaHBwIGIvc3JjL25kbmNlcnQtY29tbW9uLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTkzMTY0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL25kbmNlcnQtY29tbW9uLmhwcApAQCAtMCwwICsxLDk3IEBACisvKiAtKi0gTW9kZTpDKys7IGMtZmlsZS1zdHlsZToiZ251IjsgaW5kZW50LXRhYnMtbW9kZTpuaWw7IC0qLSAqLworLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBuZG5jZXJ0LCBhIGNlcnRpZmljYXRlIG1hbmFnZW1lbnQgc3lzdGVtIGJhc2VkIG9uIE5ETi4KKyAqCisgKiBuZG5jZXJ0IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlcgorICogdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIG5kbmNlcnQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCisgKiBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogbmRuY2VydCwgZS5nLiwgaW4gQ09QWUlORy5tZCBmaWxlLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqIFNlZSBBVVRIT1JTLm1kIGZvciBjb21wbGV0ZSBsaXN0IG9mIG5kbmNlcnQgYXV0aG9ycyBhbmQgY29udHJpYnV0b3JzLgorICovCisKKyNpZm5kZWYgTkROQ0VSVF9DT01NT05fSFBQCisjZGVmaW5lIE5ETkNFUlRfQ09NTU9OX0hQUAorCisjaW5jbHVkZSAibmRuY2VydC1jb25maWcuaHBwIgorCisjaWZkZWYgV0lUSF9URVNUUworI2RlZmluZSBWSVJUVUFMX1dJVEhfVEVTVFMgdmlydHVhbAorI2RlZmluZSBQVUJMSUNfV0lUSF9URVNUU19FTFNFX1BST1RFQ1RFRCBwdWJsaWMKKyNkZWZpbmUgUFVCTElDX1dJVEhfVEVTVFNfRUxTRV9QUklWQVRFIHB1YmxpYworI2RlZmluZSBQUk9URUNURURfV0lUSF9URVNUU19FTFNFX1BSSVZBVEUgcHJvdGVjdGVkCisjZWxzZQorI2RlZmluZSBWSVJUVUFMX1dJVEhfVEVTVFMKKyNkZWZpbmUgUFVCTElDX1dJVEhfVEVTVFNfRUxTRV9QUk9URUNURUQgcHJvdGVjdGVkCisjZGVmaW5lIFBVQkxJQ19XSVRIX1RFU1RTX0VMU0VfUFJJVkFURSBwcml2YXRlCisjZGVmaW5lIFBST1RFQ1RFRF9XSVRIX1RFU1RTX0VMU0VfUFJJVkFURSBwcml2YXRlCisjZW5kaWYKKworI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgPG5kbi1jeHgvaW50ZXJlc3QuaHBwPgorI2luY2x1ZGUgPG5kbi1jeHgvZGF0YS5ocHA+CisjaW5jbHVkZSA8bmRuLWN4eC9uYW1lLmhwcD4KKyNpbmNsdWRlIDxuZG4tY3h4L2VuY29kaW5nL2Jsb2NrLmhwcD4KKyNpbmNsdWRlIDxuZG4tY3h4L2xwL25hY2suaHBwPgorI2luY2x1ZGUgPG5kbi1jeHgvdXRpbC9iYWNrcG9ydHMuaHBwPgorI2luY2x1ZGUgPG5kbi1jeHgvdXRpbC9mYWNlLXVyaS5ocHA+CisjaW5jbHVkZSA8bmRuLWN4eC91dGlsL3NpZ25hbC5ocHA+CisjaW5jbHVkZSA8bmRuLWN4eC9zZWN1cml0eS92Mi9rZXktY2hhaW4uaHBwPgorI2luY2x1ZGUgPG5kbi1jeHgvc2VjdXJpdHkvdmFsaWRhdG9yLmhwcD4KKyNpbmNsdWRlIDxuZG4tY3h4L3NlY3VyaXR5L3YyL2NlcnRpZmljYXRlLmhwcD4KKworI2luY2x1ZGUgPGJvb3N0L2FsZ29yaXRobS9zdHJpbmcuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2Fzc2VydC5ocHA+CisjaW5jbHVkZSA8Ym9vc3Qvbm9uY29weWFibGUuaHBwPgorI2luY2x1ZGUgPGJvb3N0L3Byb3BlcnR5X3RyZWUvcHRyZWUuaHBwPgorI2luY2x1ZGUgPGJvb3N0L3Byb3BlcnR5X3RyZWUvanNvbl9wYXJzZXIuaHBwPgorI2luY2x1ZGUgPGJvb3N0L3Byb3BlcnR5X3RyZWUvaW5mb19wYXJzZXIuaHBwPgorI2luY2x1ZGUgPGJvb3N0L3Rocm93X2V4Y2VwdGlvbi5ocHA+CisKK25hbWVzcGFjZSBuZG4geworbmFtZXNwYWNlIG5kbmNlcnQgeworCit1c2luZyBzdGQ6OnNpemVfdDsKKwordXNpbmcgYm9vc3Q6Om5vbmNvcHlhYmxlOworCit1c2luZyBzdGQ6OnNoYXJlZF9wdHI7Cit1c2luZyBzdGQ6OnVuaXF1ZV9wdHI7Cit1c2luZyBzdGQ6OndlYWtfcHRyOwordXNpbmcgc3RkOjptYWtlX3NoYXJlZDsKK3VzaW5nIG5kbjo6bWFrZV91bmlxdWU7Cit1c2luZyBzdGQ6OmVuYWJsZV9zaGFyZWRfZnJvbV90aGlzOworCit1c2luZyBzdGQ6OmZ1bmN0aW9uOwordXNpbmcgc3RkOjpiaW5kOworCit1c2luZyBuZG46OkludGVyZXN0OwordXNpbmcgbmRuOjpEYXRhOwordXNpbmcgbmRuOjpOYW1lOwordXNpbmcgbmRuOjpQYXJ0aWFsTmFtZTsKK3VzaW5nIG5kbjo6QmxvY2s7Cit1c2luZyBuZG46OnRpbWU6OnN5c3RlbV9jbG9jazsKK3VzaW5nIG5kbjo6dGltZTo6dG9Vbml4VGltZXN0YW1wOworCit9IC8vIG5hbWVzcGFjZSBuZG5jZXJ0Cit9IC8vIG5hbWVzcGFjZSBuZG4KKworI2VuZGlmIC8vIE5ETkNFUlRfQ09NTU9OX0hQUApkaWZmIC0tZ2l0IGEvdGVzdHMvYm9vc3QtbXVsdGktbG9nLWZvcm1hdHRlci5ocHAgYi90ZXN0cy9ib29zdC1tdWx0aS1sb2ctZm9ybWF0dGVyLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTM3NDE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYm9vc3QtbXVsdGktbG9nLWZvcm1hdHRlci5ocHAKQEAgLTAsMCArMSwyMTQgQEAKKy8qIC0qLSBNb2RlOkMrKzsgYy1maWxlLXN0eWxlOiJnbnUiOyBpbmRlbnQtdGFicy1tb2RlOm5pbDsgLSotICovCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxNSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKgorICogQmFzZWQgb24gd29yayBieSBNYXJ0aW4gQmEgKGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NzE4MTg5KQorICoKKyAqIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCisgKiAoU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKyAqLworCisjaWZuZGVmIE5ETl9URVNUU19CT09TVF9NVUxUSV9MT0dfRk9STUFUVEVSX0hQUAorI2RlZmluZSBORE5fVEVTVFNfQk9PU1RfTVVMVElfTE9HX0ZPUk1BVFRFUl9IUFAKKworI2luY2x1ZGUgPGJvb3N0L3ZlcnNpb24uaHBwPgorCisjaWYgQk9PU1RfVkVSU0lPTiA+PSAxMDU5MDAKKyNpbmNsdWRlIDxib29zdC90ZXN0L3VuaXRfdGVzdF9wYXJhbWV0ZXJzLmhwcD4KKyNlbHNlCisjaW5jbHVkZSA8Ym9vc3QvdGVzdC9kZXRhaWwvdW5pdF90ZXN0X3BhcmFtZXRlcnMuaHBwPgorI2VuZGlmIC8vIEJPT1NUX1ZFUlNJT04gPj0gMTA1OTAwCisKKyNpbmNsdWRlIDxib29zdC90ZXN0L3VuaXRfdGVzdF9sb2dfZm9ybWF0dGVyLmhwcD4KKyNpbmNsdWRlIDxib29zdC90ZXN0L291dHB1dC9jb21waWxlcl9sb2dfZm9ybWF0dGVyLmhwcD4KKyNpbmNsdWRlIDxib29zdC90ZXN0L291dHB1dC94bWxfbG9nX2Zvcm1hdHRlci5ocHA+CisKK25hbWVzcGFjZSBib29zdCB7CituYW1lc3BhY2UgdW5pdF90ZXN0IHsKK25hbWVzcGFjZSBvdXRwdXQgeworCisvKioKKyAqIEBicmllZiBMb2cgZm9ybWF0dGVyIGZvciBCb29zdC5UZXN0IHRoYXQgb3V0cHV0cyB0aGUgbG9nZ2luZyB0byBtdWx0aXBsZSBmb3JtYXR0ZXJzCisgKgorICogVGhlIGxvZyBmb3JtYXR0ZXIgaXMgZGVzaWduZWQgdG8gb3V0cHV0IHRvIG9uZSBvciBtdWx0aXBsZSBmb3JtYXR0ZXJzIGF0IHRoZSBzYW1lIHRpbWUuICBGb3IKKyAqIGV4YW1wbGUsIG9uZSBIUkYgZm9ybWF0dGVyIGNhbiBvdXRwdXQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCwgd2hpbGUgWE1MIGZvcm1hdHRlciBvdXRwdXQgdG8KKyAqIHRoZSBmaWxlLgorICoKKyAqIFVzYWdlOgorICoKKyAqICAgICAvLyBDYWxsIGluIGluaXRfdW5pdF90ZXN0X3N1aXRlOiAodGhpcyB3aWxsIG92ZXJyaWRlIHRoZSAtLWxvZ19mb3JtYXQgcGFyYW1ldGVyKQorICogICAgIGF1dG8gZm9ybWF0dGVyID0gbmV3IGJvb3N0Ojp1bml0X3Rlc3Q6Om91dHB1dDo6bXVsdGlfbG9nX2Zvcm1hdHRlcjsgLy8gc2FtZSBhcyBhbHJlYWR5IGNvbmZpZ3VyZWQgbG9nZ2VyCisgKgorICogICAgIC8vIFByZXBhcmUgYW5kIGFkZCBhZGRpdGlvbmFsIGxvZ2dlcihzKQorICogICAgIGZvcm1hdHRlci5hZGQoc3RkOjptYWtlX3NoYXJlZDxib29zdDo6dW5pdF90ZXN0OjpvdXRwdXQ6OnhtbF9sb2dfZm9ybWF0dGVyPigpLAorICogICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxzdGQ6Om9mc3RyZWFtPigib3V0LnhtbCIpKTsKKyAqCisgKiAgICAgIGJvb3N0Ojp1bml0X3Rlc3Q6OnVuaXRfdGVzdF9sb2cuc2V0X2Zvcm1hdHRlcihmb3JtYXR0ZXIpOworICoKKyAqIEBub3RlIENhbGxpbmcgYGJvb3N0Ojp1bml0X3Rlc3Q6OnVuaXRfdGVzdF9sb2cuc2V0X3N0cmVhbSguLi4pYCB3aWxsIGNoYW5nZSB0aGUgc3RyZWFtIGZvcgorICogICAgICAgdGhlIG9yaWdpbmFsIGxvZ2dlci4KKyAqLworY2xhc3MgbXVsdGlfbG9nX2Zvcm1hdHRlciA6IHB1YmxpYyB1bml0X3Rlc3RfbG9nX2Zvcm1hdHRlcgoreworcHVibGljOgorICAvKioKKyAgICogQGJyaWVmIENyZWF0ZSBpbnN0YW5jZSBvZiB0aGUgbG9nZ2VyLCBiYXNlZCBvbiB0aGUgY29uZmlndXJlZCBsb2dnZXIgaW5zdGFuY2UKKyAgICovCisgIG11bHRpX2xvZ19mb3JtYXR0ZXIoKQorICB7CisgICAgYXV0byBmb3JtYXQgPQorI2lmIEJPT1NUX1ZFUlNJT04gPiAxMDU5MDAKKyAgICAgIHJ1bnRpbWVfY29uZmlnOjpnZXQ8b3V0cHV0X2Zvcm1hdD4ocnVudGltZV9jb25maWc6OkxPR19GT1JNQVQpOworI2Vsc2UKKyAgICAgIHJ1bnRpbWVfY29uZmlnOjpsb2dfZm9ybWF0KCk7CisjZW5kaWYgLy8gQk9PU1RfVkVSU0lPTiA+IDEwNTkwMAorCisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgIGRlZmF1bHQ6CisjaWYgQk9PU1RfVkVSU0lPTiA+PSAxMDU5MDAKKyAgICAgIGNhc2UgT0ZfQ0xGOgorI2Vsc2UKKyAgICAgIGNhc2UgQ0xGOgorI2VuZGlmIC8vIEJPT1NUX1ZFUlNJT04gPj0gMTA1OTAwCisgICAgICAgIG1fbG9nZ2Vycy5wdXNoX2JhY2soe3N0ZDo6bWFrZV9zaGFyZWQ8Y29tcGlsZXJfbG9nX2Zvcm1hdHRlcj4oKSwgbnVsbHB0cn0pOworICAgICAgICBicmVhazsKKyNpZiBCT09TVF9WRVJTSU9OID49IDEwNTkwMAorICAgICAgY2FzZSBPRl9YTUw6CisjZWxzZQorICAgICAgY2FzZSBYTUw6CisjZW5kaWYgLy8gQk9PU1RfVkVSU0lPTiA+PSAxMDU5MDAKKyAgICAgICAgbV9sb2dnZXJzLnB1c2hfYmFjayh7c3RkOjptYWtlX3NoYXJlZDx4bWxfbG9nX2Zvcm1hdHRlcj4oKSwgbnVsbHB0cn0pOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICB2b2lkCisgIGFkZChzdGQ6OnNoYXJlZF9wdHI8dW5pdF90ZXN0X2xvZ19mb3JtYXR0ZXI+IGZvcm1hdHRlciwgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6b3N0cmVhbT4gb3MpCisgIHsKKyAgICBtX2xvZ2dlcnMucHVzaF9iYWNrKHtmb3JtYXR0ZXIsIG9zfSk7CisgIH0KKworICAvLyBGb3JtYXR0ZXIgaW50ZXJmYWNlCisgIHZvaWQKKyAgbG9nX3N0YXJ0KHN0ZDo6b3N0cmVhbSYgb3MsIGNvdW50ZXJfdCB0ZXN0X2Nhc2VzX2Ftb3VudCkKKyAgeworICAgIGZvciAoYXV0byYgbCA6IG1fbG9nZ2VycykKKyAgICAgIGwubG9nZ2VyLT5sb2dfc3RhcnQobC5vcyA9PSBudWxscHRyID8gb3MgOiAqbC5vcywgdGVzdF9jYXNlc19hbW91bnQpOworICB9CisKKyAgdm9pZAorICBsb2dfZmluaXNoKHN0ZDo6b3N0cmVhbSYgb3MpCisgIHsKKyAgICBmb3IgKGF1dG8mIGwgOiBtX2xvZ2dlcnMpCisgICAgICBsLmxvZ2dlci0+bG9nX2ZpbmlzaChsLm9zID09IG51bGxwdHIgPyBvcyA6ICpsLm9zKTsKKyAgfQorCisgIHZvaWQKKyAgbG9nX2J1aWxkX2luZm8oc3RkOjpvc3RyZWFtJiBvcykKKyAgeworICAgIGZvciAoYXV0byYgbCA6IG1fbG9nZ2VycykKKyAgICAgIGwubG9nZ2VyLT5sb2dfYnVpbGRfaW5mbyhsLm9zID09IG51bGxwdHIgPyBvcyA6ICpsLm9zKTsKKyAgfQorCisgIHZvaWQKKyAgdGVzdF91bml0X3N0YXJ0KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IHRlc3RfdW5pdCYgdHUpCisgIHsKKyAgICBmb3IgKGF1dG8mIGwgOiBtX2xvZ2dlcnMpCisgICAgICBsLmxvZ2dlci0+dGVzdF91bml0X3N0YXJ0KGwub3MgPT0gbnVsbHB0ciA/IG9zIDogKmwub3MsIHR1KTsKKyAgfQorCisgIHZvaWQKKyAgdGVzdF91bml0X2ZpbmlzaChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCB0ZXN0X3VuaXQmIHR1LCB1bnNpZ25lZCBsb25nIGVsYXBzZWQpCisgIHsKKyAgICBmb3IgKGF1dG8mIGwgOiBtX2xvZ2dlcnMpCisgICAgICBsLmxvZ2dlci0+dGVzdF91bml0X2ZpbmlzaChsLm9zID09IG51bGxwdHIgPyBvcyA6ICpsLm9zLCB0dSwgZWxhcHNlZCk7CisgIH0KKworICB2b2lkCisgIHRlc3RfdW5pdF9za2lwcGVkKHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IHRlc3RfdW5pdCYgdHUpCisgIHsKKyAgICBmb3IgKGF1dG8mIGwgOiBtX2xvZ2dlcnMpCisgICAgICBsLmxvZ2dlci0+dGVzdF91bml0X3NraXBwZWQobC5vcyA9PSBudWxscHRyID8gb3MgOiAqbC5vcywgdHUpOworICB9CisKKyNpZiBCT09TVF9WRVJTSU9OID49IDEwNTkwMAorICB2b2lkCisgIGxvZ19leGNlcHRpb25fc3RhcnQoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgbG9nX2NoZWNrcG9pbnRfZGF0YSYgbGNkLCBjb25zdCBleGVjdXRpb25fZXhjZXB0aW9uJiBleCkKKyAgeworICAgIGZvciAoYXV0byYgbCA6IG1fbG9nZ2VycykKKyAgICAgIGwubG9nZ2VyLT5sb2dfZXhjZXB0aW9uX3N0YXJ0KGwub3MgPT0gbnVsbHB0ciA/IG9zIDogKmwub3MsIGxjZCwgZXgpOworICB9CisKKyAgdm9pZAorICBsb2dfZXhjZXB0aW9uX2ZpbmlzaChzdGQ6Om9zdHJlYW0mIG9zKQorICB7CisgICAgZm9yIChhdXRvJiBsIDogbV9sb2dnZXJzKQorICAgICAgbC5sb2dnZXItPmxvZ19leGNlcHRpb25fZmluaXNoKGwub3MgPT0gbnVsbHB0ciA/IG9zIDogKmwub3MpOworICB9CisjZWxzZQorICB2b2lkCisgIGxvZ19leGNlcHRpb24oc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgbG9nX2NoZWNrcG9pbnRfZGF0YSYgbGNkLCBjb25zdCBleGVjdXRpb25fZXhjZXB0aW9uJiBleCkKKyAgeworICAgIGZvciAoYXV0byYgbCA6IG1fbG9nZ2VycykKKyAgICAgIGwubG9nZ2VyLT5sb2dfZXhjZXB0aW9uKGwub3MgPT0gbnVsbHB0ciA/IG9zIDogKmwub3MsIGxjZCwgZXgpOworICB9CisjZW5kaWYgLy8gQk9PU1RfVkVSU0lPTiA+PSAxMDU5MDAKKworICB2b2lkCisgIGxvZ19lbnRyeV9zdGFydChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBsb2dfZW50cnlfZGF0YSYgZW50cnlfZGF0YSwgbG9nX2VudHJ5X3R5cGVzIGxldCkKKyAgeworICAgIGZvciAoYXV0byYgbCA6IG1fbG9nZ2VycykKKyAgICAgIGwubG9nZ2VyLT5sb2dfZW50cnlfc3RhcnQobC5vcyA9PSBudWxscHRyID8gb3MgOiAqbC5vcywgZW50cnlfZGF0YSwgbGV0KTsKKyAgfQorCisgIHZvaWQKKyAgbG9nX2VudHJ5X3ZhbHVlKHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0X3N0cmluZyB2YWx1ZSkKKyAgeworICAgIGZvciAoYXV0byYgbCA6IG1fbG9nZ2VycykKKyAgICAgIGwubG9nZ2VyLT5sb2dfZW50cnlfdmFsdWUobC5vcyA9PSBudWxscHRyID8gb3MgOiAqbC5vcywgdmFsdWUpOworICB9CisKKyAgdm9pZAorICBsb2dfZW50cnlfZmluaXNoKHN0ZDo6b3N0cmVhbSYgb3MpCisgIHsKKyAgICBmb3IgKGF1dG8mIGwgOiBtX2xvZ2dlcnMpCisgICAgICBsLmxvZ2dlci0+bG9nX2VudHJ5X2ZpbmlzaChsLm9zID09IG51bGxwdHIgPyBvcyA6ICpsLm9zKTsKKyAgfQorCisjaWYgQk9PU1RfVkVSU0lPTiA+PSAxMDU5MDAKKyAgdm9pZAorICBlbnRyeV9jb250ZXh0X3N0YXJ0KHN0ZDo6b3N0cmVhbSYgb3MsIGxvZ19sZXZlbCBsZXZlbCkKKyAgeworICAgIGZvciAoYXV0byYgbCA6IG1fbG9nZ2VycykKKyAgICAgIGwubG9nZ2VyLT5lbnRyeV9jb250ZXh0X3N0YXJ0KGwub3MgPT0gbnVsbHB0ciA/IG9zIDogKmwub3MsIGxldmVsKTsKKyAgfQorCisgIHZvaWQKKyAgbG9nX2VudHJ5X2NvbnRleHQoc3RkOjpvc3RyZWFtJiBvcywgY29uc3Rfc3RyaW5nIHZhbHVlKQorICB7CisgICAgZm9yIChhdXRvJiBsIDogbV9sb2dnZXJzKQorICAgICAgbC5sb2dnZXItPmxvZ19lbnRyeV9jb250ZXh0KGwub3MgPT0gbnVsbHB0ciA/IG9zIDogKmwub3MsIHZhbHVlKTsKKyAgfQorCisgIHZvaWQKKyAgZW50cnlfY29udGV4dF9maW5pc2goc3RkOjpvc3RyZWFtJiBvcykKKyAgeworICAgIGZvciAoYXV0byYgbCA6IG1fbG9nZ2VycykKKyAgICAgIGwubG9nZ2VyLT5lbnRyeV9jb250ZXh0X2ZpbmlzaChsLm9zID09IG51bGxwdHIgPyBvcyA6ICpsLm9zKTsKKyAgfQorI2VuZGlmIC8vIEJPT1NUX1ZFUlNJT04gPj0gMTA1OTAwCisKK3ByaXZhdGU6CisgIHN0cnVjdCBMb2dnZXJJbmZvCisgIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8dW5pdF90ZXN0X2xvZ19mb3JtYXR0ZXI+IGxvZ2dlcjsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8c3RkOjpvc3RyZWFtPiBvczsKKyAgfTsKKyAgc3RkOjp2ZWN0b3I8TG9nZ2VySW5mbz4gbV9sb2dnZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2Ugb3V0cHV0Cit9IC8vIG5hbWVzcGFjZSB1bml0X3Rlc3QKK30gLy8gbmFtZXNwYWNlIGJvb3N0CisKKyNlbmRpZiAvLyBORE5fVEVTVFNfQk9PU1RfTVVMVElfTE9HX0ZPUk1BVFRFUl9IUFAKZGlmZiAtLWdpdCBhL3Rlc3RzL2Jvb3N0LXRlc3QuaHBwIGIvdGVzdHMvYm9vc3QtdGVzdC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIwYTQ4MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Jvb3N0LXRlc3QuaHBwCkBAIC0wLDAgKzEsMzkgQEAKKy8qIC0qLSBNb2RlOkMrKzsgYy1maWxlLXN0eWxlOiJnbnUiOyBpbmRlbnQtdGFicy1tb2RlOm5pbDsgLSotICovCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpem9uYSBCb2FyZCBvZiBSZWdlbnRzLAorICogICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yYWRvIFN0YXRlIFVuaXZlcnNpdHksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0eSBQaWVycmUgJiBNYXJpZSBDdXJpZSwgU29yYm9ubmUgVW5pdmVyc2l0eSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBXYXNoaW5ndG9uIFVuaXZlcnNpdHkgaW4gU3QuIExvdWlzLAorICogICAgICAgICAgICAgICAgICAgICAgICAgIEJlaWppbmcgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFVuaXZlcnNpdHkgb2YgTWVtcGhpcy4KKyAqCisgKiBUaGlzIGZpbGUsIG9yaWdpbmFsbHkgd3JpdHRlbiBhcyBwYXJ0IG9mIE5GRCAoTmFtZWQgRGF0YSBOZXR3b3JraW5nIEZvcndhcmRpbmcgRGFlbW9uKSwKKyAqIGlzIGEgcGFydCBvZiBuZG5jZXJ0LCBhIGNlcnRpZmljYXRlIG1hbmFnZW1lbnQgc3lzdGVtIGJhc2VkIG9uIE5ETi4KKyAqCisgKiBuZG5jZXJ0IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlcgorICogdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIG5kbmNlcnQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCisgKiBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogbmRuY2VydCwgZS5nLiwgaW4gQ09QWUlORy5tZCBmaWxlLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqIFNlZSBBVVRIT1JTLm1kIGZvciBjb21wbGV0ZSBsaXN0IG9mIG5kbmNlcnQgYXV0aG9ycyBhbmQgY29udHJpYnV0b3JzLgorICovCisKKyNpZm5kZWYgQ0VSVF9URVNUU19CT09TVF9URVNUX0hQUAorI2RlZmluZSBDRVJUX1RFU1RTX0JPT1NUX1RFU1RfSFBQCisKKy8vIHN1cHByZXNzIHdhcm5pbmdzIGZyb20gQm9vc3QuVGVzdAorI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorI3ByYWdtYSBjbGFuZyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxib29zdC90ZXN0L3VuaXRfdGVzdC5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvY29uY2VwdF9jaGVjay5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvdGVzdC9vdXRwdXRfdGVzdF9zdHJlYW0uaHBwPgorCisjZW5kaWYgLy8gQ0VSVF9URVNUU19CT09TVF9URVNUX0hQUApkaWZmIC0tZ2l0IGEvdGVzdHMvZ2xvYmFsLWNvbmZpZ3VyYXRpb24tZml4dHVyZS5jcHAgYi90ZXN0cy9nbG9iYWwtY29uZmlndXJhdGlvbi1maXh0dXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjRkODY0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZ2xvYmFsLWNvbmZpZ3VyYXRpb24tZml4dHVyZS5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyogLSotIE1vZGU6QysrOyBjLWZpbGUtc3R5bGU6ImdudSI7IGluZGVudC10YWJzLW1vZGU6bmlsOyAtKi0gKi8KKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbmRuY2VydCwgYSBjZXJ0aWZpY2F0ZSBtYW5hZ2VtZW50IHN5c3RlbSBiYXNlZCBvbiBORE4uCisgKgorICogbmRuY2VydCBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIKKyAqIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBuZG5jZXJ0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorICogV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICogUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIG5kbmNlcnQsIGUuZy4sIGluIENPUFlJTkcubWQgZmlsZS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiBTZWUgQVVUSE9SUy5tZCBmb3IgY29tcGxldGUgbGlzdCBvZiBuZG5jZXJ0IGF1dGhvcnMgYW5kIGNvbnRyaWJ1dG9ycy4KKyAqLworCisjaW5jbHVkZSAibmRuY2VydC1jb25maWcuaHBwIgorCisjaW5jbHVkZSA8Ym9vc3QvdmVyc2lvbi5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvZmlsZXN5c3RlbS5ocHA+CisKKyNpbmNsdWRlICJ0ZXN0LWNvbW1vbi5ocHAiCisKK25hbWVzcGFjZSBuZG4geworbmFtZXNwYWNlIGNocm9ub3NoYXJlIHsKK25hbWVzcGFjZSB0ZXN0cyB7CisKK2NsYXNzIEdsb2JhbENvbmZpZ3VyYXRpb25GaXh0dXJlIDogYm9vc3Q6Om5vbmNvcHlhYmxlCit7CitwdWJsaWM6CisgIEdsb2JhbENvbmZpZ3VyYXRpb25GaXh0dXJlKCkKKyAgeworICAgIGlmIChnZXRlbnYoIkhPTUUiKSAhPSBudWxscHRyKSB7CisgICAgICBtX2hvbWUgPSBnZXRlbnYoIkhPTUUiKTsKKyAgICB9CisgICAgaWYgKGdldGVudigiTkROX0NMSUVOVF9QSUIiKSAhPSBudWxscHRyKSB7CisgICAgICBtX3BpYiA9IGdldGVudigiTkROX0NMSUVOVF9QSUIiKTsKKyAgICB9CisgICAgaWYgKGdldGVudigiTkROX0NMSUVOVF9UUE0iKSAhPSBudWxscHRyKSB7CisgICAgICBtX3RwbSA9IGdldGVudigiTkROX0NMSUVOVF9UUE0iKTsKKyAgICB9CisKKyAgICBib29zdDo6ZmlsZXN5c3RlbTo6cGF0aCBkaXIoVE1QX1RFU1RTX1BBVEgpOworICAgIGRpciAvPSAidGVzdC1ob21lIjsKKyAgICBzZXRlbnYoIkhPTUUiLCBkaXIuZ2VuZXJpY19zdHJpbmcoKS5jX3N0cigpLCAxKTsKKworICAgIGlmIChleGlzdHMoZGlyKSkgeworICAgICAgcmVtb3ZlX2FsbChkaXIpOworICAgIH0KKworICAgIHNldGVudigiTkROX0NMSUVOVF9QSUIiLCAoInBpYi1zcWxpdGUzOiIgKyBkaXIuc3RyaW5nKCkpLmNfc3RyKCksIDEpOworICAgIHNldGVudigiTkROX0NMSUVOVF9UUE0iLCAoInRwbS1maWxlOiIgKyBkaXIuc3RyaW5nKCkpLmNfc3RyKCksIDEpOworICAgIGNyZWF0ZV9kaXJlY3RvcmllcyhkaXIpOworICB9CisKKyAgfkdsb2JhbENvbmZpZ3VyYXRpb25GaXh0dXJlKCkKKyAgeworICAgIGlmICghbV9ob21lLmVtcHR5KCkpIHsKKyAgICAgIHNldGVudigiSE9NRSIsIG1faG9tZS5jX3N0cigpLCAxKTsKKyAgICB9CisgICAgaWYgKCFtX3BpYi5lbXB0eSgpKSB7CisgICAgICBzZXRlbnYoIk5ETl9DTElFTlRfUElCIiwgbV9waWIuY19zdHIoKSwgMSk7CisgICAgfQorICAgIGlmICghbV90cG0uZW1wdHkoKSkgeworICAgICAgc2V0ZW52KCJORE5fQ0xJRU5UX1RQTSIsIG1fdHBtLmNfc3RyKCksIDEpOworICAgIH0KKyAgfQorCitwcml2YXRlOgorICBzdGQ6OnN0cmluZyBtX2hvbWU7CisgIHN0ZDo6c3RyaW5nIG1fcGliOworICBzdGQ6OnN0cmluZyBtX3RwbTsKK307CisKK0JPT1NUX0dMT0JBTF9GSVhUVVJFKEdsb2JhbENvbmZpZ3VyYXRpb25GaXh0dXJlKQorI2lmIChCT09TVF9WRVJTSU9OID49IDEwNTkwMCkKKzsKKyNlbmRpZiAvLyBCT09TVF9WRVJTSU9OID49IDEwNTkwMAorCit9IC8vIG5hbWVzcGFjZSB0ZXN0cworfSAvLyBuYW1lc3BhY2UgY2hyb25vc2hhcmUKK30gLy8gbmFtZXNwYWNlIG5kbgpkaWZmIC0tZ2l0IGEvdGVzdHMvaWRlbnRpdHktbWFuYWdlbWVudC1maXh0dXJlLmNwcCBiL3Rlc3RzL2lkZW50aXR5LW1hbmFnZW1lbnQtZml4dHVyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlkNmQ0MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2lkZW50aXR5LW1hbmFnZW1lbnQtZml4dHVyZS5jcHAKQEAgLTAsMCArMSw5NSBAQAorLyogLSotIE1vZGU6QysrOyBjLWZpbGUtc3R5bGU6ImdudSI7IGluZGVudC10YWJzLW1vZGU6bmlsOyAtKi0gKi8KKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBBcml6b25hIEJvYXJkIG9mIFJlZ2VudHMsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JhZG8gU3RhdGUgVW5pdmVyc2l0eSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXR5IFBpZXJyZSAmIE1hcmllIEN1cmllLCBTb3Jib25uZSBVbml2ZXJzaXR5LAorICogICAgICAgICAgICAgICAgICAgICAgICAgIFdhc2hpbmd0b24gVW5pdmVyc2l0eSBpbiBTdC4gTG91aXMsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVpamluZyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgVW5pdmVyc2l0eSBvZiBNZW1waGlzLgorICoKKyAqIFRoaXMgZmlsZSwgb3JpZ2luYWxseSB3cml0dGVuIGFzIHBhcnQgb2YgTkZEIChOYW1lZCBEYXRhIE5ldHdvcmtpbmcgRm9yd2FyZGluZyBEYWVtb24pLAorICogaXMgYSBwYXJ0IG9mIG5kbmNlcnQsIGEgY2VydGlmaWNhdGUgbWFuYWdlbWVudCBzeXN0ZW0gYmFzZWQgb24gTkROLgorICoKKyAqIG5kbmNlcnQgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyCisgKiB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogbmRuY2VydCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKKyAqIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiBuZG5jZXJ0LCBlLmcuLCBpbiBDT1BZSU5HLm1kIGZpbGUuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogU2VlIEFVVEhPUlMubWQgZm9yIGNvbXBsZXRlIGxpc3Qgb2YgbmRuY2VydCBhdXRob3JzIGFuZCBjb250cmlidXRvcnMuCisgKi8KKworI2luY2x1ZGUgImlkZW50aXR5LW1hbmFnZW1lbnQtZml4dHVyZS5ocHAiCisKKyNpbmNsdWRlIDxuZG4tY3h4L3V0aWwvaW8uaHBwPgorI2luY2x1ZGUgPGJvb3N0L2ZpbGVzeXN0ZW0uaHBwPgorCituYW1lc3BhY2UgbmRuIHsKK25hbWVzcGFjZSBuZG5jZXJ0IHsKK25hbWVzcGFjZSB0ZXN0cyB7CisKK0lkZW50aXR5TWFuYWdlbWVudEZpeHR1cmU6OklkZW50aXR5TWFuYWdlbWVudEZpeHR1cmUoKQorICA6IG1fa2V5Q2hhaW4oInNxbGl0ZTMiLCAiZmlsZSIpCit7CisgIG1fa2V5Q2hhaW4uZ2V0RGVmYXVsdENlcnRpZmljYXRlKCk7IC8vIHNpZGUgZWZmZWN0OiBjcmVhdGUgYSBkZWZhdWx0IGNlcnQgaWYgaXQgZG9lc24ndCBleGlzdAorfQorCitJZGVudGl0eU1hbmFnZW1lbnRGaXh0dXJlOjp+SWRlbnRpdHlNYW5hZ2VtZW50Rml4dHVyZSgpCit7CisgIGZvciAoY29uc3QgYXV0byYgaWQgOiBtX2lkZW50aXRpZXMpIHsKKyAgICBtX2tleUNoYWluLmRlbGV0ZUlkZW50aXR5KGlkKTsKKyAgfQorCisgIGJvb3N0OjpzeXN0ZW06OmVycm9yX2NvZGUgZWM7CisgIGZvciAoY29uc3QgYXV0byYgY2VydEZpbGUgOiBtX2NlcnRGaWxlcykgeworICAgIGJvb3N0OjpmaWxlc3lzdGVtOjpyZW1vdmUoY2VydEZpbGUsIGVjKTsgLy8gaWdub3JlIGVycm9yCisgIH0KK30KKworYm9vbAorSWRlbnRpdHlNYW5hZ2VtZW50Rml4dHVyZTo6YWRkSWRlbnRpdHkoY29uc3QgTmFtZSYgaWRlbnRpdHksIGNvbnN0IG5kbjo6S2V5UGFyYW1zJiBwYXJhbXMpCit7CisgIHRyeSB7CisgICAgbV9rZXlDaGFpbi5jcmVhdGVJZGVudGl0eShpZGVudGl0eSwgcGFyYW1zKTsKKyAgICBtX2lkZW50aXRpZXMucHVzaF9iYWNrKGlkZW50aXR5KTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICBjYXRjaCAoc3RkOjpydW50aW1lX2Vycm9yJikgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQorCitib29sCitJZGVudGl0eU1hbmFnZW1lbnRGaXh0dXJlOjpzYXZlSWRlbnRpdHlDZXJ0aWZpY2F0ZShjb25zdCBOYW1lJiBpZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSwgYm9vbCB3YW50QWRkKQoreworICBzaGFyZWRfcHRyPG5kbjo6SWRlbnRpdHlDZXJ0aWZpY2F0ZT4gY2VydDsKKyAgdHJ5IHsKKyAgICBjZXJ0ID0gbV9rZXlDaGFpbi5nZXRDZXJ0aWZpY2F0ZShtX2tleUNoYWluLmdldERlZmF1bHRDZXJ0aWZpY2F0ZU5hbWVGb3JJZGVudGl0eShpZGVudGl0eSkpOworICB9CisgIGNhdGNoIChjb25zdCBuZG46OlNlY1B1YmxpY0luZm86OkVycm9yJikgeworICAgIGlmICh3YW50QWRkICYmIHRoaXMtPmFkZElkZW50aXR5KGlkZW50aXR5KSkgeworICAgICAgcmV0dXJuIHRoaXMtPnNhdmVJZGVudGl0eUNlcnRpZmljYXRlKGlkZW50aXR5LCBmaWxlbmFtZSwgZmFsc2UpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBtX2NlcnRGaWxlcy5wdXNoX2JhY2soZmlsZW5hbWUpOworICB0cnkgeworICAgIG5kbjo6aW86OnNhdmUoKmNlcnQsIGZpbGVuYW1lKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICBjYXRjaCAoY29uc3QgbmRuOjppbzo6RXJyb3ImKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIHRlc3RzCit9IC8vIG5hbWVzcGFjZSBuZG5jZXJ0Cit9IC8vIG5hbWVzcGFjZSBuZG4KZGlmZiAtLWdpdCBhL3Rlc3RzL2lkZW50aXR5LW1hbmFnZW1lbnQtZml4dHVyZS5ocHAgYi90ZXN0cy9pZGVudGl0eS1tYW5hZ2VtZW50LWZpeHR1cmUuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZWVlZGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pZGVudGl0eS1tYW5hZ2VtZW50LWZpeHR1cmUuaHBwCkBAIC0wLDAgKzEsODYgQEAKKy8qIC0qLSBNb2RlOkMrKzsgYy1maWxlLXN0eWxlOiJnbnUiOyBpbmRlbnQtdGFicy1tb2RlOm5pbDsgLSotICovCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpem9uYSBCb2FyZCBvZiBSZWdlbnRzLAorICogICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yYWRvIFN0YXRlIFVuaXZlcnNpdHksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0eSBQaWVycmUgJiBNYXJpZSBDdXJpZSwgU29yYm9ubmUgVW5pdmVyc2l0eSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBXYXNoaW5ndG9uIFVuaXZlcnNpdHkgaW4gU3QuIExvdWlzLAorICogICAgICAgICAgICAgICAgICAgICAgICAgIEJlaWppbmcgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFVuaXZlcnNpdHkgb2YgTWVtcGhpcy4KKyAqCisgKiBUaGlzIGZpbGUsIG9yaWdpbmFsbHkgd3JpdHRlbiBhcyBwYXJ0IG9mIE5GRCAoTmFtZWQgRGF0YSBOZXR3b3JraW5nIEZvcndhcmRpbmcgRGFlbW9uKSwKKyAqIGlzIGEgcGFydCBvZiBuZG5jZXJ0LCBhIGNlcnRpZmljYXRlIG1hbmFnZW1lbnQgc3lzdGVtIGJhc2VkIG9uIE5ETi4KKyAqCisgKiBuZG5jZXJ0IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlcgorICogdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIG5kbmNlcnQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCisgKiBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogbmRuY2VydCwgZS5nLiwgaW4gQ09QWUlORy5tZCBmaWxlLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqIFNlZSBBVVRIT1JTLm1kIGZvciBjb21wbGV0ZSBsaXN0IG9mIG5kbmNlcnQgYXV0aG9ycyBhbmQgY29udHJpYnV0b3JzLgorICovCisKKyNpZm5kZWYgTkROQ0VSVF9URVNUU19JREVOVElUWV9NQU5BR0VNRU5UX0ZJWFRVUkVfSFBQCisjZGVmaW5lIE5ETkNFUlRfVEVTVFNfSURFTlRJVFlfTUFOQUdFTUVOVF9GSVhUVVJFX0hQUAorCisjaW5jbHVkZSAidGVzdC1jb21tb24uaHBwIgorCisjaW5jbHVkZSA8bmRuLWN4eC9zZWN1cml0eS9rZXktY2hhaW4uaHBwPgorCituYW1lc3BhY2UgbmRuIHsKK25hbWVzcGFjZSBuZG5jZXJ0IHsKK25hbWVzcGFjZSB0ZXN0cyB7CisKKy8qKiBcYnJpZWYgYSBmaXh0dXJlIHRoYXQgY2xlYW5zIHVwIEtleUNoYWluIGlkZW50aXRpZXMgYW5kIGNlcnRpZmljYXRlIGZpbGVzIHVwb24gZGVzdHJ1Y3Rpb24KKyAqLworY2xhc3MgSWRlbnRpdHlNYW5hZ2VtZW50Rml4dHVyZSA6IHB1YmxpYyB2aXJ0dWFsIEJhc2VGaXh0dXJlCit7CitwdWJsaWM6CisgIElkZW50aXR5TWFuYWdlbWVudEZpeHR1cmUoKTsKKworICAvKiogXGJyaWVmIGRlbGV0ZXMgY3JlYXRlZCBpZGVudGl0aWVzIGFuZCBzYXZlZCBjZXJ0aWZpY2F0ZSBmaWxlcworICAgKi8KKyAgfklkZW50aXR5TWFuYWdlbWVudEZpeHR1cmUoKTsKKworICAvKiogXGJyaWVmIGFkZCBpZGVudGl0eQorICAgKiAgXHJldHVybiB3aGV0aGVyIHN1Y2Nlc3NmdWwKKyAgICovCisgIGJvb2wKKyAgYWRkSWRlbnRpdHkoY29uc3QgTmFtZSYgaWRlbnRpdHksCisgICAgICAgICAgICAgIGNvbnN0IG5kbjo6S2V5UGFyYW1zJiBwYXJhbXMgPSBuZG46OktleUNoYWluOjpERUZBVUxUX0tFWV9QQVJBTVMpOworCisgIC8qKiBcYnJpZWYgc2F2ZSBpZGVudGl0eSBjZXJ0aWZpY2F0ZSB0byBhIGZpbGUKKyAgICogIFxwYXJhbSBpZGVudGl0eSBpZGVudGl0eSBuYW1lCisgICAqICBccGFyYW0gZmlsZW5hbWUgZmlsZSBuYW1lLCBzaG91bGQgYmUgd3JpdGFibGUKKyAgICogIFxwYXJhbSB3YW50QWRkIGlmIHRydWUsIGFkZCBuZXcgaWRlbnRpdHkgd2hlbiBuZWNlc3NhcnkKKyAgICogIFxyZXR1cm4gd2hldGhlciBzdWNjZXNzZnVsCisgICAqLworICBib29sCisgIHNhdmVJZGVudGl0eUNlcnRpZmljYXRlKGNvbnN0IE5hbWUmIGlkZW50aXR5LCBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUsIGJvb2wgd2FudEFkZCA9IGZhbHNlKTsKKworcHJvdGVjdGVkOgorICBuZG46OktleUNoYWluIG1fa2V5Q2hhaW47CisKK3ByaXZhdGU6CisgIHN0ZDo6dmVjdG9yPG5kbjo6TmFtZT4gbV9pZGVudGl0aWVzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbV9jZXJ0RmlsZXM7Cit9OworCisvKiogXGJyaWVmIGNvbnZlbmllbmNlIGJhc2UgY2xhc3MgZm9yIGluaGVyaXRpbmcgZnJvbSBib3RoIFVuaXRUZXN0VGltZUZpeHR1cmUKKyAqICAgICAgICAgYW5kIElkZW50aXR5TWFuYWdlbWVudEZpeHR1cmUKKyAqLworY2xhc3MgSWRlbnRpdHlNYW5hZ2VtZW50VGltZUZpeHR1cmUgOiBwdWJsaWMgVW5pdFRlc3RUaW1lRml4dHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgSWRlbnRpdHlNYW5hZ2VtZW50Rml4dHVyZQoreworfTsKKworfSAvLyBuYW1lc3BhY2UgdGVzdHMKK30gLy8gbmFtZXNwYWNlIG5kbmNlcnQKK30gLy8gbmFtZXNwYWNlIG5kbgorCisjZW5kaWYgLy8gTkROQ0VSVF9URVNUU19JREVOVElUWV9NQU5BR0VNRU5UX0ZJWFRVUkVfSFBQCmRpZmYgLS1naXQgYS90ZXN0cy9tYWluLmNwcCBiL3Rlc3RzL21haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MzgwYzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tYWluLmNwcApAQCAtMCwwICsxLDExNyBAQAorLyogLSotIE1vZGU6QysrOyBjLWZpbGUtc3R5bGU6ImdudSI7IGluZGVudC10YWJzLW1vZGU6bmlsOyAtKi0gKi8KKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBBcml6b25hIEJvYXJkIG9mIFJlZ2VudHMsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JhZG8gU3RhdGUgVW5pdmVyc2l0eSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXR5IFBpZXJyZSAmIE1hcmllIEN1cmllLCBTb3Jib25uZSBVbml2ZXJzaXR5LAorICogICAgICAgICAgICAgICAgICAgICAgICAgIFdhc2hpbmd0b24gVW5pdmVyc2l0eSBpbiBTdC4gTG91aXMsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVpamluZyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgVW5pdmVyc2l0eSBvZiBNZW1waGlzLgorICoKKyAqIFRoaXMgZmlsZSwgb3JpZ2luYWxseSB3cml0dGVuIGFzIHBhcnQgb2YgTkZEIChOYW1lZCBEYXRhIE5ldHdvcmtpbmcgRm9yd2FyZGluZyBEYWVtb24pLAorICogaXMgYSBwYXJ0IG9mIG5kbmNlcnQsIGEgY2VydGlmaWNhdGUgbWFuYWdlbWVudCBzeXN0ZW0gYmFzZWQgb24gTkROLgorICoKKyAqIG5kbmNlcnQgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyCisgKiB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogbmRuY2VydCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKKyAqIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiBuZG5jZXJ0LCBlLmcuLCBpbiBDT1BZSU5HLm1kIGZpbGUuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogU2VlIEFVVEhPUlMubWQgZm9yIGNvbXBsZXRlIGxpc3Qgb2YgbmRuY2VydCBhdXRob3JzIGFuZCBjb250cmlidXRvcnMuCisgKi8KKworI2RlZmluZSBCT09TVF9URVNUX0RZTl9MSU5LCisjZGVmaW5lIEJPT1NUX1RFU1RfQUxURVJOQVRJVkVfSU5JVF9BUEkKKworI2luY2x1ZGUgPGJvb3N0L3ZlcnNpb24uaHBwPgorCisjaWYgQk9PU1RfVkVSU0lPTiA+PSAxMDYyMDAKKy8vIEJvb3N0LlRlc3QgdjMuMyAoQm9vc3QgMS42MikgbmF0aXZlbHkgc3VwcG9ydHMgbXVsdGktbG9nZ2VyIG91dHB1dAorI2luY2x1ZGUgImJvb3N0LXRlc3QuaHBwIgorI2Vsc2UKKyNkZWZpbmUgQk9PU1RfVEVTVF9OT19NQUlOCisjaW5jbHVkZSAiYm9vc3QtdGVzdC5ocHAiCisKKyNpbmNsdWRlICJib29zdC1tdWx0aS1sb2ctZm9ybWF0dGVyLmhwcCIKKworI2luY2x1ZGUgPGJvb3N0L3Byb2dyYW1fb3B0aW9ucy9vcHRpb25zX2Rlc2NyaXB0aW9uLmhwcD4KKyNpbmNsdWRlIDxib29zdC9wcm9ncmFtX29wdGlvbnMvdmFyaWFibGVzX21hcC5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvcHJvZ3JhbV9vcHRpb25zL3BhcnNlcnMuaHBwPgorCisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworc3RhdGljIGJvb2wKK2luaXRfdGVzdHMoKQoreworICBpbml0X3VuaXRfdGVzdCgpOworCisgIG5hbWVzcGFjZSBwbyA9IGJvb3N0Ojpwcm9ncmFtX29wdGlvbnM7CisgIG5hbWVzcGFjZSB1dCA9IGJvb3N0Ojp1bml0X3Rlc3Q7CisKKyAgcG86Om9wdGlvbnNfZGVzY3JpcHRpb24gZXh0cmFPcHRpb25zOworICBzdGQ6OnN0cmluZyBsb2dnZXI7CisgIHN0ZDo6c3RyaW5nIG91dHB1dEZpbGUgPSAiLSI7CisgIGV4dHJhT3B0aW9ucy5hZGRfb3B0aW9ucygpCisgICAgKCJsb2dfZm9ybWF0MiIsIHBvOjp2YWx1ZTxzdGQ6OnN0cmluZz4oJmxvZ2dlciksICJUeXBlIG9mIHNlY29uZCBsb2cgZm9ybWF0dGVyOiBIUkYgb3IgWE1MIikKKyAgICAoImxvZ19zaW5rMiIsIHBvOjp2YWx1ZTxzdGQ6OnN0cmluZz4oJm91dHB1dEZpbGUpLT5kZWZhdWx0X3ZhbHVlKG91dHB1dEZpbGUpLCAiU2Vjb25kIGxvZyBzaW5rLCAtIGZvciBzdGRvdXQiKQorICAgIDsKKyAgcG86OnZhcmlhYmxlc19tYXAgdm07CisgIHRyeSB7CisgICAgcG86OnN0b3JlKHBvOjpjb21tYW5kX2xpbmVfcGFyc2VyKHV0OjpmcmFtZXdvcms6Om1hc3Rlcl90ZXN0X3N1aXRlKCkuYXJnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXQ6OmZyYW1ld29yazo6bWFzdGVyX3Rlc3Rfc3VpdGUoKS5hcmd2KQorICAgICAgICAgICAgICAgIC5vcHRpb25zKGV4dHJhT3B0aW9ucykKKyAgICAgICAgICAgICAgICAucnVuKCksCisgICAgICAgICAgICAgIHZtKTsKKyAgICBwbzo6bm90aWZ5KHZtKTsKKyAgfQorICBjYXRjaCAoY29uc3Qgc3RkOjpleGNlcHRpb24mIGUpIHsKKyAgICBzdGQ6OmNlcnIgPDwgIkVSUk9SOiAiIDw8IGUud2hhdCgpIDw8ICJcbiIKKyAgICAgICAgICAgICAgPDwgZXh0cmFPcHRpb25zIDw8IHN0ZDo6ZW5kbDsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBpZiAodm0uY291bnQoImxvZ19mb3JtYXQyIikgPT0gMCkgeworICAgIC8vIHNlY29uZCBsb2dnZXIgaXMgbm90IGNvbmZpZ3VyZWQKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIHN0ZDo6c2hhcmVkX3B0cjx1dDo6dW5pdF90ZXN0X2xvZ19mb3JtYXR0ZXI+IGZvcm1hdHRlcjsKKyAgaWYgKGxvZ2dlciA9PSAiWE1MIikgeworICAgIGZvcm1hdHRlciA9IHN0ZDo6bWFrZV9zaGFyZWQ8dXQ6Om91dHB1dDo6eG1sX2xvZ19mb3JtYXR0ZXI+KCk7CisgIH0KKyAgZWxzZSBpZiAobG9nZ2VyID09ICJIUkYiKSB7CisgICAgZm9ybWF0dGVyID0gc3RkOjptYWtlX3NoYXJlZDx1dDo6b3V0cHV0Ojpjb21waWxlcl9sb2dfZm9ybWF0dGVyPigpOworICB9CisgIGVsc2UgeworICAgIHN0ZDo6Y2VyciA8PCAiRVJST1I6IG9ubHkgSFJGIG9yIFhNTCBsb2cgZm9ybWF0dGVyIGNhbiBiZSBzcGVjaWZpZWQiIDw8IHN0ZDo6ZW5kbDsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBzdGQ6OnNoYXJlZF9wdHI8c3RkOjpvc3RyZWFtPiBvdXRwdXQ7CisgIGlmIChvdXRwdXRGaWxlID09ICItIikgeworICAgIG91dHB1dCA9IHN0ZDo6c2hhcmVkX3B0cjxzdGQ6Om9zdHJlYW0+KCZzdGQ6OmNvdXQsIHN0ZDo6YmluZChbXXt9KSk7CisgIH0KKyAgZWxzZSB7CisgICAgb3V0cHV0ID0gc3RkOjptYWtlX3NoYXJlZDxzdGQ6Om9mc3RyZWFtPihvdXRwdXRGaWxlLmNfc3RyKCkpOworICB9CisKKyAgYXV0byBtdWx0aUZvcm1hdHRlciA9IG5ldyB1dDo6b3V0cHV0OjptdWx0aV9sb2dfZm9ybWF0dGVyOworICBtdWx0aUZvcm1hdHRlci0+YWRkKGZvcm1hdHRlciwgb3V0cHV0KTsKKyAgdXQ6OnVuaXRfdGVzdF9sb2cuc2V0X2Zvcm1hdHRlcihtdWx0aUZvcm1hdHRlcik7CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQoreworICByZXR1cm4gOjpib29zdDo6dW5pdF90ZXN0Ojp1bml0X3Rlc3RfbWFpbigmaW5pdF90ZXN0cywgYXJnYywgYXJndik7Cit9CisKKyNlbmRpZiAvLyBCT09TVF9WRVJTSU9OID49IDEwNjIwMApkaWZmIC0tZ2l0IGEvdGVzdHMvdGVzdC1jb21tb24uY3BwIGIvdGVzdHMvdGVzdC1jb21tb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMTRjZjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy90ZXN0LWNvbW1vbi5jcHAKQEAgLTAsMCArMSwxMzYgQEAKKy8qIC0qLSBNb2RlOkMrKzsgYy1maWxlLXN0eWxlOiJnbnUiOyBpbmRlbnQtdGFicy1tb2RlOm5pbDsgLSotICovCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpem9uYSBCb2FyZCBvZiBSZWdlbnRzLAorICogICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yYWRvIFN0YXRlIFVuaXZlcnNpdHksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0eSBQaWVycmUgJiBNYXJpZSBDdXJpZSwgU29yYm9ubmUgVW5pdmVyc2l0eSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBXYXNoaW5ndG9uIFVuaXZlcnNpdHkgaW4gU3QuIExvdWlzLAorICogICAgICAgICAgICAgICAgICAgICAgICAgIEJlaWppbmcgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFVuaXZlcnNpdHkgb2YgTWVtcGhpcy4KKyAqCisgKiBUaGlzIGZpbGUsIG9yaWdpbmFsbHkgd3JpdHRlbiBhcyBwYXJ0IG9mIE5GRCAoTmFtZWQgRGF0YSBOZXR3b3JraW5nIEZvcndhcmRpbmcgRGFlbW9uKSwKKyAqIGlzIGEgcGFydCBvZiBuZG5jZXJ0LCBhIGNlcnRpZmljYXRlIG1hbmFnZW1lbnQgc3lzdGVtIGJhc2VkIG9uIE5ETi4KKyAqCisgKiBuZG5jZXJ0IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlcgorICogdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIG5kbmNlcnQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCisgKiBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogbmRuY2VydCwgZS5nLiwgaW4gQ09QWUlORy5tZCBmaWxlLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqIFNlZSBBVVRIT1JTLm1kIGZvciBjb21wbGV0ZSBsaXN0IG9mIG5kbmNlcnQgYXV0aG9ycyBhbmQgY29udHJpYnV0b3JzLgorICovCisKKyNpbmNsdWRlICJ0ZXN0LWNvbW1vbi5ocHAiCisKKyNpbmNsdWRlIDxuZG4tY3h4L3V0aWwvZGlnZXN0LmhwcD4KKyNpbmNsdWRlIDxuZG4tY3h4L3NlY3VyaXR5L3NpZ25hdHVyZS1zaGEyNTYtd2l0aC1yc2EuaHBwPgorCituYW1lc3BhY2UgbmRuIHsKK25hbWVzcGFjZSBuZG5jZXJ0IHsKK25hbWVzcGFjZSB0ZXN0cyB7CisKK1VuaXRUZXN0VGltZUZpeHR1cmU6OlVuaXRUZXN0VGltZUZpeHR1cmUoKQorICA6IHN0ZWFkeUNsb2NrKG1ha2Vfc2hhcmVkPHRpbWU6OlVuaXRUZXN0U3RlYWR5Q2xvY2s+KCkpCisgICwgc3lzdGVtQ2xvY2sobWFrZV9zaGFyZWQ8dGltZTo6VW5pdFRlc3RTeXN0ZW1DbG9jaz4oKSkKK3sKKyAgdGltZTo6c2V0Q3VzdG9tQ2xvY2tzKHN0ZWFkeUNsb2NrLCBzeXN0ZW1DbG9jayk7Cit9CisKK1VuaXRUZXN0VGltZUZpeHR1cmU6On5Vbml0VGVzdFRpbWVGaXh0dXJlKCkKK3sKKyAgdGltZTo6c2V0Q3VzdG9tQ2xvY2tzKG51bGxwdHIsIG51bGxwdHIpOworfQorCit2b2lkCitVbml0VGVzdFRpbWVGaXh0dXJlOjphZHZhbmNlQ2xvY2tzKGNvbnN0IHRpbWU6Om5hbm9zZWNvbmRzJiB0aWNrLCBzaXplX3QgblRpY2tzKQoreworICB0aGlzLT5hZHZhbmNlQ2xvY2tzKHRpY2ssIHRpY2sgKiBuVGlja3MpOworfQorCit2b2lkCitVbml0VGVzdFRpbWVGaXh0dXJlOjphZHZhbmNlQ2xvY2tzKGNvbnN0IHRpbWU6Om5hbm9zZWNvbmRzJiB0aWNrLCBjb25zdCB0aW1lOjpuYW5vc2Vjb25kcyYgdG90YWwpCit7CisgIEJPT1NUX0FTU0VSVCh0aWNrID4gdGltZTo6bmFub3NlY29uZHM6Onplcm8oKSk7CisgIEJPT1NUX0FTU0VSVCh0b3RhbCA+PSB0aW1lOjpuYW5vc2Vjb25kczo6emVybygpKTsKKworICB0aW1lOjpuYW5vc2Vjb25kcyByZW1haW5pbmcgPSB0b3RhbDsKKyAgd2hpbGUgKHJlbWFpbmluZyA+IHRpbWU6Om5hbm9zZWNvbmRzOjp6ZXJvKCkpIHsKKyAgICBpZiAocmVtYWluaW5nID49IHRpY2spIHsKKyAgICAgIHN0ZWFkeUNsb2NrLT5hZHZhbmNlKHRpY2spOworICAgICAgc3lzdGVtQ2xvY2stPmFkdmFuY2UodGljayk7CisgICAgICByZW1haW5pbmcgLT0gdGljazsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBzdGVhZHlDbG9jay0+YWR2YW5jZShyZW1haW5pbmcpOworICAgICAgc3lzdGVtQ2xvY2stPmFkdmFuY2UocmVtYWluaW5nKTsKKyAgICAgIHJlbWFpbmluZyA9IHRpbWU6Om5hbm9zZWNvbmRzOjp6ZXJvKCk7CisgICAgfQorCisgICAgaWYgKG1faW8uc3RvcHBlZCgpKQorICAgICAgbV9pby5yZXNldCgpOworICAgIG1faW8ucG9sbCgpOworICB9Cit9CisKK3NoYXJlZF9wdHI8SW50ZXJlc3Q+CittYWtlSW50ZXJlc3QoY29uc3QgTmFtZSYgbmFtZSwgdWludDMyX3Qgbm9uY2UpCit7CisgIGF1dG8gaW50ZXJlc3QgPSBtYWtlX3NoYXJlZDxJbnRlcmVzdD4obmFtZSk7CisgIGlmIChub25jZSAhPSAwKSB7CisgICAgaW50ZXJlc3QtPnNldE5vbmNlKG5vbmNlKTsKKyAgfQorICByZXR1cm4gaW50ZXJlc3Q7Cit9CisKK3NoYXJlZF9wdHI8RGF0YT4KK21ha2VEYXRhKGNvbnN0IE5hbWUmIG5hbWUpCit7CisgIGF1dG8gZGF0YSA9IG1ha2Vfc2hhcmVkPERhdGE+KG5hbWUpOworICByZXR1cm4gc2lnbkRhdGEoZGF0YSk7Cit9CisKK0RhdGEmCitzaWduRGF0YShEYXRhJiBkYXRhKQoreworICBuZG46OlNpZ25hdHVyZVNoYTI1NldpdGhSc2EgZmFrZVNpZ25hdHVyZTsKKyAgZmFrZVNpZ25hdHVyZS5zZXRWYWx1ZShuZG46OmVuY29kaW5nOjptYWtlRW1wdHlCbG9jayh0bHY6OlNpZ25hdHVyZVZhbHVlKSk7CisgIGRhdGEuc2V0U2lnbmF0dXJlKGZha2VTaWduYXR1cmUpOworICBkYXRhLndpcmVFbmNvZGUoKTsKKworICByZXR1cm4gZGF0YTsKK30KKworc2hhcmVkX3B0cjxMaW5rPgorbWFrZUxpbmsoY29uc3QgTmFtZSYgbmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjx1aW50MzJfdCwgTmFtZT4+IGRlbGVnYXRpb25zKQoreworICBhdXRvIGxpbmsgPSBtYWtlX3NoYXJlZDxMaW5rPihuYW1lLCBkZWxlZ2F0aW9ucyk7CisgIHNpZ25EYXRhKGxpbmspOworICByZXR1cm4gbGluazsKK30KKworbHA6Ok5hY2sKK21ha2VOYWNrKGNvbnN0IE5hbWUmIG5hbWUsIHVpbnQzMl90IG5vbmNlLCBscDo6TmFja1JlYXNvbiByZWFzb24pCit7CisgIEludGVyZXN0IGludGVyZXN0KG5hbWUpOworICBpbnRlcmVzdC5zZXROb25jZShub25jZSk7CisgIGxwOjpOYWNrIG5hY2soc3RkOjptb3ZlKGludGVyZXN0KSk7CisgIG5hY2suc2V0UmVhc29uKHJlYXNvbik7CisgIHJldHVybiBuYWNrOworfQorCitDb25zdEJ1ZmZlclB0cgorZGlnZXN0RnJvbUZpbGUoY29uc3QgYm9vc3Q6OmZpbGVzeXN0ZW06OnBhdGgmIGZpbGVuYW1lKQoreworICBib29zdDo6ZmlsZXN5c3RlbTo6aWZzdHJlYW0gaWZmKGZpbGVuYW1lLCBzdGQ6Omlvczo6aW4gfCBzdGQ6Omlvczo6YmluYXJ5KTsKKyAgdXRpbDo6U2hhMjU2IGRpZ2VzdChpZmYpOworICByZXR1cm4gZGlnZXN0LmNvbXB1dGVEaWdlc3QoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgdGVzdHMKK30gLy8gbmFtZXNwYWNlIG5kbmNlcnQKK30gLy8gbmFtZXNwYWNlIG5kbgpkaWZmIC0tZ2l0IGEvdGVzdHMvdGVzdC1jb21tb24uaHBwIGIvdGVzdHMvdGVzdC1jb21tb24uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMmFiNmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy90ZXN0LWNvbW1vbi5ocHAKQEAgLTAsMCArMSwxODAgQEAKKy8qIC0qLSBNb2RlOkMrKzsgYy1maWxlLXN0eWxlOiJnbnUiOyBpbmRlbnQtdGFicy1tb2RlOm5pbDsgLSotICovCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpem9uYSBCb2FyZCBvZiBSZWdlbnRzLAorICogICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yYWRvIFN0YXRlIFVuaXZlcnNpdHksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0eSBQaWVycmUgJiBNYXJpZSBDdXJpZSwgU29yYm9ubmUgVW5pdmVyc2l0eSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBXYXNoaW5ndG9uIFVuaXZlcnNpdHkgaW4gU3QuIExvdWlzLAorICogICAgICAgICAgICAgICAgICAgICAgICAgIEJlaWppbmcgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFVuaXZlcnNpdHkgb2YgTWVtcGhpcy4KKyAqCisgKiBUaGlzIGZpbGUsIG9yaWdpbmFsbHkgd3JpdHRlbiBhcyBwYXJ0IG9mIE5GRCAoTmFtZWQgRGF0YSBOZXR3b3JraW5nIEZvcndhcmRpbmcgRGFlbW9uKSwKKyAqIGlzIGEgcGFydCBvZiBuZG5jZXJ0LCBhIGNlcnRpZmljYXRlIG1hbmFnZW1lbnQgc3lzdGVtIGJhc2VkIG9uIE5ETi4KKyAqCisgKiBuZG5jZXJ0IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlcgorICogdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIG5kbmNlcnQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCisgKiBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogbmRuY2VydCwgZS5nLiwgaW4gQ09QWUlORy5tZCBmaWxlLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqIFNlZSBBVVRIT1JTLm1kIGZvciBjb21wbGV0ZSBsaXN0IG9mIG5kbmNlcnQgYXV0aG9ycyBhbmQgY29udHJpYnV0b3JzLgorICovCisKKyNpZm5kZWYgTkROQ0VSVF9URVNUU19URVNUX0NPTU1PTl9IUFAKKyNkZWZpbmUgTkROQ0VSVF9URVNUU19URVNUX0NPTU1PTl9IUFAKKworI2luY2x1ZGUgImxvZ2dpbmcuaHBwIgorCisjaW5jbHVkZSAiYm9vc3QtdGVzdC5ocHAiCisKKyNpbmNsdWRlIDxib29zdC9hc2lvL2lvX3NlcnZpY2UuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2ZpbGVzeXN0ZW0uaHBwPgorI2luY2x1ZGUgPGJvb3N0L2ZpbGVzeXN0ZW0vZnN0cmVhbS5ocHA+CisKKyNpbmNsdWRlIDxuZG4tY3h4L25hbWUuaHBwPgorI2luY2x1ZGUgPG5kbi1jeHgvZGF0YS5ocHA+CisjaW5jbHVkZSA8bmRuLWN4eC9scC9uYWNrLmhwcD4KKyNpbmNsdWRlIDxuZG4tY3h4L3V0aWwvdGltZS11bml0LXRlc3QtY2xvY2suaHBwPgorI2luY2x1ZGUgPG5kbi1jeHgvdXRpbC9zdHJpbmctaGVscGVyLmhwcD4KKworbmFtZXNwYWNlIG5kbiB7CituYW1lc3BhY2UgbmRuY2VydCB7CituYW1lc3BhY2UgdGVzdHMgeworCisvKiogXGJyaWVmIGJhc2UgdGVzdCBmaXh0dXJlCisgKgorICogIEV2ZXJ5IHRlc3QgY2FzZSBzaG91bGQgYmUgYmFzZWQgb24gdGhpcyBmaXh0dXJlLAorICogIHRvIGhhdmUgcGVyIHRlc3QgY2FzZSBpb19zZXJ2aWNlIGluaXRpYWxpemF0aW9uLgorICovCitjbGFzcyBCYXNlRml4dHVyZQoreworcHJvdGVjdGVkOgorICAvKiogXGJyaWVmIHJlZmVyZW5jZSB0byBnbG9iYWwgaW9fc2VydmljZQorICAgKi8KKyAgYm9vc3Q6OmFzaW86OmlvX3NlcnZpY2UgbV9pbzsKK307CisKKy8qKiBcYnJpZWYgYSBiYXNlIHRlc3QgZml4dHVyZSB0aGF0IG92ZXJyaWRlcyBzdGVhZHkgY2xvY2sgYW5kIHN5c3RlbSBjbG9jaworICovCitjbGFzcyBVbml0VGVzdFRpbWVGaXh0dXJlIDogcHVibGljIHZpcnR1YWwgQmFzZUZpeHR1cmUKK3sKK3Byb3RlY3RlZDoKKyAgVW5pdFRlc3RUaW1lRml4dHVyZSgpOworCisgIH5Vbml0VGVzdFRpbWVGaXh0dXJlKCk7CisKKyAgLyoqIFxicmllZiBhZHZhbmNlIHN0ZWFkeSBhbmQgc3lzdGVtIGNsb2NrcworICAgKgorICAgKiAgQ2xvY2tzIGFyZSBhZHZhbmNlZCBpbiBpbmNyZW1lbnRzIG9mIFxwIHRpY2sgZm9yIFxwIG5UaWNrcyB0aWNrcy4KKyAgICogIEFmdGVyIGVhY2ggdGljaywgZ2xvYmFsIGlvX3NlcnZpY2UgaXMgcG9sbGVkIHRvIHByb2Nlc3MgcGVuZGluZyBJL08gZXZlbnRzLgorICAgKgorICAgKiAgRXhjZXB0aW9ucyB0aHJvd24gZHVyaW5nIEkvTyBldmVudHMgYXJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNhbGxlci4KKyAgICogIENsb2NrIGFkdmFuY2luZyB3b3VsZCBzdG9wIGluIGNhc2Ugb2YgYW4gZXhjZXB0aW9uLgorICAgKi8KKyAgdm9pZAorICBhZHZhbmNlQ2xvY2tzKGNvbnN0IHRpbWU6Om5hbm9zZWNvbmRzJiB0aWNrLCBzaXplX3QgblRpY2tzID0gMSk7CisKKyAgLyoqIFxicmllZiBhZHZhbmNlIHN0ZWFkeSBhbmQgc3lzdGVtIGNsb2NrcworICAgKgorICAgKiAgQ2xvY2tzIGFyZSBhZHZhbmNlZCBpbiBpbmNyZW1lbnRzIG9mIFxwIHRpY2sgZm9yIFxwIHRvdGFsIHRpbWUuCisgICAqICBUaGUgbGFzdCBpbmNyZW1lbnQgbWlnaHQgYmUgc2hvcnRlciB0aGFuIFxwIHRpY2suCisgICAqICBBZnRlciBlYWNoIHRpY2ssIGdsb2JhbCBpb19zZXJ2aWNlIGlzIHBvbGxlZCB0byBwcm9jZXNzIHBlbmRpbmcgSS9PIGV2ZW50cy4KKyAgICoKKyAgICogIEV4Y2VwdGlvbnMgdGhyb3duIGR1cmluZyBJL08gZXZlbnRzIGFyZSBwcm9wYWdhdGVkIHRvIHRoZSBjYWxsZXIuCisgICAqICBDbG9jayBhZHZhbmNpbmcgd291bGQgc3RvcCBpbiBjYXNlIG9mIGFuIGV4Y2VwdGlvbi4KKyAgICovCisgIHZvaWQKKyAgYWR2YW5jZUNsb2Nrcyhjb25zdCB0aW1lOjpuYW5vc2Vjb25kcyYgdGljaywgY29uc3QgdGltZTo6bmFub3NlY29uZHMmIHRvdGFsKTsKKworcHJvdGVjdGVkOgorICBzaGFyZWRfcHRyPHRpbWU6OlVuaXRUZXN0U3RlYWR5Q2xvY2s+IHN0ZWFkeUNsb2NrOworICBzaGFyZWRfcHRyPHRpbWU6OlVuaXRUZXN0U3lzdGVtQ2xvY2s+IHN5c3RlbUNsb2NrOworCisgIGZyaWVuZCBjbGFzcyBMaW1pdGVkSW87Cit9OworCisvKiogXGJyaWVmIGNyZWF0ZSBhbiBJbnRlcmVzdAorICogIFxwYXJhbSBuYW1lIEludGVyZXN0IG5hbWUKKyAqICBccGFyYW0gbm9uY2UgaWYgbm9uLXplcm8sIHNldCBOb25jZSB0byB0aGlzIHZhbHVlCisgKiAgICAgICAgICAgICAgICh1c2VmdWwgZm9yIGNyZWF0aW5nIE5hY2sgd2l0aCBzYW1lIE5vbmNlKQorICovCitzaGFyZWRfcHRyPEludGVyZXN0PgorbWFrZUludGVyZXN0KGNvbnN0IE5hbWUmIG5hbWUsIHVpbnQzMl90IG5vbmNlID0gMCk7CisKKy8qKiBcYnJpZWYgY3JlYXRlIGEgRGF0YSB3aXRoIGZha2Ugc2lnbmF0dXJlCisgKiAgXG5vdGUgRGF0YSBtYXkgYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB3aXRob3V0IGxvc2luZyB0aGUgZmFrZSBzaWduYXR1cmUuCisgKiAgICAgICAgSWYgYSByZWFsIHNpZ25hdHVyZSBpcyBkZXNpcmVkLCBzaWduIGFnYWluIHdpdGggS2V5Q2hhaW4uCisgKi8KK3NoYXJlZF9wdHI8RGF0YT4KK21ha2VEYXRhKGNvbnN0IE5hbWUmIG5hbWUpOworCisvKiogXGJyaWVmIGFkZCBhIGZha2Ugc2lnbmF0dXJlIHRvIERhdGEKKyAqLworRGF0YSYKK3NpZ25EYXRhKERhdGEmIGRhdGEpOworCisvKiogXGJyaWVmIGFkZCBhIGZha2Ugc2lnbmF0dXJlIHRvIERhdGEKKyAqLworaW5saW5lIHNoYXJlZF9wdHI8RGF0YT4KK3NpZ25EYXRhKHNoYXJlZF9wdHI8RGF0YT4gZGF0YSkKK3sKKyAgc2lnbkRhdGEoKmRhdGEpOworICByZXR1cm4gZGF0YTsKK30KKworLyoqIFxicmllZiBjcmVhdGUgYSBMaW5rIG9iamVjdCB3aXRoIGZha2Ugc2lnbmF0dXJlCisgKiAgXG5vdGUgTGluayBtYXkgYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB3aXRob3V0IGxvc2luZyB0aGUgZmFrZSBzaWduYXR1cmUuCisgKiAgICAgICAgSWYgYSByZWFsIHNpZ25hdHVyZSBpcyBkZXNpcmVkLCBzaWduIGFnYWluIHdpdGggS2V5Q2hhaW4uCisgKi8KK3NoYXJlZF9wdHI8TGluaz4KK21ha2VMaW5rKGNvbnN0IE5hbWUmIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8dWludDMyX3QsIE5hbWU+PiBkZWxlZ2F0aW9ucyk7CisKKy8qKiBcYnJpZWYgY3JlYXRlIGEgTmFjaworICogIFxwYXJhbSBuYW1lIEludGVyZXN0IG5hbWUKKyAqICBccGFyYW0gbm9uY2UgSW50ZXJlc3Qgbm9uY2UKKyAqICBccGFyYW0gcmVhc29uIE5hY2sgcmVhc29uCisgKi8KK2xwOjpOYWNrCittYWtlTmFjayhjb25zdCBOYW1lJiBuYW1lLCB1aW50MzJfdCBub25jZSwgbHA6Ok5hY2tSZWFzb24gcmVhc29uKTsKKworLyoqIFxicmllZiByZXBsYWNlIGEgbmFtZSBjb21wb25lbnQKKyAqICBccGFyYW1baW5vdXRdIG5hbWUgbmFtZQorICogIFxwYXJhbSBpbmRleCBuYW1lIGNvbXBvbmVudCBpbmRleAorICogIFxwYXJhbSBhIGFyZ3VtZW50cyB0byBuYW1lOjpDb21wb25lbnQgY29uc3RydWN0b3IKKyAqLwordGVtcGxhdGU8dHlwZW5hbWUuLi5BPgordm9pZAorc2V0TmFtZUNvbXBvbmVudChOYW1lJiBuYW1lLCBzc2l6ZV90IGluZGV4LCBjb25zdCBBJiAuLi5hKQoreworICBOYW1lIG5hbWUyID0gbmFtZS5nZXRQcmVmaXgoaW5kZXgpOworICBuYW1lMi5hcHBlbmQobmFtZTo6Q29tcG9uZW50KGEuLi4pKTsKKyAgbmFtZTIuYXBwZW5kKG5hbWUuZ2V0U3ViTmFtZShuYW1lMi5zaXplKCkpKTsKKyAgbmFtZSA9IG5hbWUyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQYWNrZXQsIHR5cGVuYW1lLi4uQT4KK3ZvaWQKK3NldE5hbWVDb21wb25lbnQoUGFja2V0JiBwYWNrZXQsIHNzaXplX3QgaW5kZXgsIGNvbnN0IEEmIC4uLmEpCit7CisgIE5hbWUgbmFtZSA9IHBhY2tldC5nZXROYW1lKCk7CisgIHNldE5hbWVDb21wb25lbnQobmFtZSwgaW5kZXgsIGEuLi4pOworICBwYWNrZXQuc2V0TmFtZShuYW1lKTsKK30KKworLyoqIFxicmllZiBjb252ZXJ0IGZpbGUgdG8gZGlnZXN0CisgKi8KK25kbjo6Q29uc3RCdWZmZXJQdHIKK2RpZ2VzdEZyb21GaWxlKGNvbnN0IGJvb3N0OjpmaWxlc3lzdGVtOjpwYXRoJiBmaWxlbmFtZSk7CisKK30gLy8gbmFtZXNwYWNlIHRlc3RzCit9IC8vIG5hbWVzcGFjZSBuZG5jZXJ0Cit9IC8vIG5hbWVzcGFjZSBuZG4KKworI2luY2x1ZGUgImlkZW50aXR5LW1hbmFnZW1lbnQtZml4dHVyZS5ocHAiCisKKyNlbmRpZiAvLyBORE5DRVJUX1RFU1RTX1RFU1RfQ09NTU9OX0hQUApkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC10ZXN0cy9kdW1teS10ZXN0LnQuY3BwIGIvdGVzdHMvdW5pdC10ZXN0cy9kdW1teS10ZXN0LnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2Y2NkMWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91bml0LXRlc3RzL2R1bW15LXRlc3QudC5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyogLSotIE1vZGU6QysrOyBjLWZpbGUtc3R5bGU6ImdudSI7IGluZGVudC10YWJzLW1vZGU6bmlsOyAtKi0gKi8KKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbmRuY2VydCwgYSBjZXJ0aWZpY2F0ZSBtYW5hZ2VtZW50IHN5c3RlbSBiYXNlZCBvbiBORE4uCisgKgorICogbmRuY2VydCBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIKKyAqIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBuZG5jZXJ0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorICogV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICogUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIG5kbmNlcnQsIGUuZy4sIGluIENPUFlJTkcubWQgZmlsZS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiBTZWUgQVVUSE9SUy5tZCBmb3IgY29tcGxldGUgbGlzdCBvZiBuZG5jZXJ0IGF1dGhvcnMgYW5kIGNvbnRyaWJ1dG9ycy4KKyAqLworCisjaW5jbHVkZSAidGVzdC1jb21tb24uaHBwIgorCituYW1lc3BhY2UgbmRuIHsKK25hbWVzcGFjZSBuZG5jZXJ0IHsKK25hbWVzcGFjZSB0ZXN0cyB7CisKKy8vIFNlZSBodHRwOi8vcmVkbWluZS5uYW1lZC1kYXRhLm5ldC9wcm9qZWN0cy9uZmQvd2lraS9Vbml0VGVzdGluZyBvbiBob3cgdG8gbmFtZSBhIHRlc3Qgc3VpdGUuCitCT09TVF9BVVRPX1RFU1RfU1VJVEUoVGVzdFNrZWxldG9uKQorCitCT09TVF9BVVRPX1RFU1RfQ0FTRShUZXN0MSkKK3sKKyAgaW50IGkgPSAwOworCisgIC8vIEZvciByZWZlcmVuY2Ugb2YgYXZhaWxhYmxlIEJvb3N0LlRlc3QgbWFjcm9zLCBzZWUKKyAgLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2xpYnMvMV81NF8wL2xpYnMvdGVzdC9kb2MvaHRtbC91dGYvdGVzdGluZy10b29scy9yZWZlcmVuY2UuaHRtbAorCisgIEJPT1NUX1JFUVVJUkVfTk9fVEhST1coaSA9IDEpOworICBCT09TVF9SRVFVSVJFX0VRVUFMKGksIDEpOworfQorCisvLyBVc2UgVW5pdFRlc3RUaW1lRml4dHVyZSB0byBtb2NrIGNsb2Nrcy4KK0JPT1NUX0ZJWFRVUkVfVEVTVF9DQVNFKFRlc3QyLCBVbml0VGVzdFRpbWVGaXh0dXJlKQoreworICAvLyB0aGlzLT5hZHZhbmNlQ2xvY2tzIGluY3JlbWVudHMgbW9jayBjbG9ja3MuCisgIGFkdmFuY2VDbG9ja3ModGltZTo6bWlsbGlzZWNvbmRzKDUwMCksIDIpOworfQorCitCT09TVF9BVVRPX1RFU1RfU1VJVEVfRU5EKCkKKworfSAvLyBuYW1lc3BhY2UgdGVzdHMKK30gLy8gbmFtZXNwYWNlIG5kbmNlcnQKK30gLy8gbmFtZXNwYWNlIG5kbgpkaWZmIC0tZ2l0IGEvdGVzdHMvd3NjcmlwdCBiL3Rlc3RzL3dzY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM1MThiNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3dzY3JpcHQKQEAgLTAsMCArMSwyOCBAQAorIyAtKi0gTW9kZTogcHl0aG9uOyBweS1pbmRlbnQtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGNvZGluZzogdXRmLTg7IC0qLQorZnJvbSB3YWZsaWIgaW1wb3J0IFV0aWxzCisKK3RvcCA9ICcuLicKKworZGVmIGJ1aWxkKGJsZCk6CisgICAgaWYgbm90IGJsZC5lbnZbIldJVEhfVEVTVFMiXToKKyAgICAgICAgcmV0dXJuCisKKyAgICB0ZXN0c19tYWluID0gYmxkKAorICAgICAgICB0YXJnZXQ9J3Rlc3RzLW1haW4nLAorICAgICAgICBuYW1lPSd0ZXN0cy1tYWluJywKKyAgICAgICAgZmVhdHVyZXM9J2N4eCcsCisgICAgICAgIHNvdXJjZT0ibWFpbi5jcHAiLAorICAgICAgICB1c2U9J29iamVjdHMgQk9PU1QnLAorICAgICAgICBkZWZpbmVzPVsnQk9PU1RfVEVTVF9NT0RVTEU9XCJORE5DRVJUIFRlc3RzXCInXQorICAgICAgICApCisKKyAgICB1bml0X3Rlc3QgPSBibGQucHJvZ3JhbSgKKyAgICAgICAgdGFyZ2V0PSIuLi91bml0LXRlc3RzIiwKKyAgICAgICAgc291cmNlPWJsZC5wYXRoLmFudF9nbG9iKFsnKi5jcHAnLCAndW5pdC10ZXN0cy8qKi8qLmNwcCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbD1bJ21haW4uY3BwJ10pLAorICAgICAgICBmZWF0dXJlcz1bJ2N4eCcsICdjeHhwcm9ncmFtJ10sCisgICAgICAgIHVzZT0nb2JqZWN0cyB0ZXN0cy1tYWluJywKKyAgICAgICAgaW5jbHVkZXM9WycuJ10sCisgICAgICAgIGluc3RhbGxfcGF0aD1Ob25lLAorICAgICAgICBkZWZpbmVzPSdUTVBfVEVTVFNfUEFUSD1cIiVzL3RtcC10ZXN0c1wiJyAlIGJsZC5ibGRub2RlLAorICAgICAgICApCmRpZmYgLS1naXQgYS93YWYgYi93YWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmE2OGUxYQotLS0gL2Rldi9udWxsCisrKyBiL3dhZgpAQCAtMCwwICsxLDE2OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGVuY29kaW5nOiBJU084ODU5LTEKKyMgVGhvbWFzIE5hZ3ksIDIwMDUtMjAxNgorIworIiIiCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKK1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCitJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIiIiCisKK2ltcG9ydCBvcywgc3lzLCBpbnNwZWN0CisKK1ZFUlNJT049IjEuOS43IgorUkVWSVNJT049ImMwMGYyMjE0NDNmYzVkOGY2MGVkZmNhZDMwOWQwNjAxIgorR0lUPSI0MDk1ZjE0MDNhMTFlNDEzOGQ3MjBlNjUwYjQzNTQxMWU3NTdlZDcwIgorSU5TVEFMTD0nJworQzE9JyMuJworQzI9JyMpJworQzM9JyMlJworY3dkID0gb3MuZ2V0Y3dkKCkKK2pvaW4gPSBvcy5wYXRoLmpvaW4KKworCitXQUY9J3dhZicKK2RlZiBiKHgpOgorCXJldHVybiB4CitpZiBzeXMuaGV4dmVyc2lvbj4weDMwMDAwMGY6CisJV0FGPSd3YWYzJworCWRlZiBiKHgpOgorCQlyZXR1cm4geC5lbmNvZGUoKQorCitkZWYgZXJyKG0pOgorCXByaW50KCgnXDAzM1s5MW1FcnJvcjogJXNcMDMzWzBtJyAlIG0pKQorCXN5cy5leGl0KDEpCisKK2RlZiB1bnBhY2tfd2FmZGlyKGRpciwgc3JjKToKKwlmID0gb3BlbihzcmMsJ3JiJykKKwljID0gJ2NvcnJ1cHQgYXJjaGl2ZSAoJWQpJworCXdoaWxlIDE6CisJCWxpbmUgPSBmLnJlYWRsaW5lKCkKKwkJaWYgbm90IGxpbmU6IGVycigncnVuIHdhZi1saWdodCBmcm9tIGEgZm9sZGVyIGNvbnRhaW5pbmcgd2FmbGliJykKKwkJaWYgbGluZSA9PSBiKCcjPT0+XG4nKToKKwkJCXR4dCA9IGYucmVhZGxpbmUoKQorCQkJaWYgbm90IHR4dDogZXJyKGMgJSAxKQorCQkJaWYgZi5yZWFkbGluZSgpICE9IGIoJyM8PT1cbicpOiBlcnIoYyAlIDIpCisJCQlicmVhaworCWlmIG5vdCB0eHQ6IGVycihjICUgMykKKwl0eHQgPSB0eHRbMTotMV0ucmVwbGFjZShiKEMxKSwgYignXG4nKSkucmVwbGFjZShiKEMyKSwgYignXHInKSkucmVwbGFjZShiKEMzKSwgYignXHgwMCcpKQorCisJaW1wb3J0IHNodXRpbCwgdGFyZmlsZQorCXRyeTogc2h1dGlsLnJtdHJlZShkaXIpCisJZXhjZXB0IE9TRXJyb3I6IHBhc3MKKwl0cnk6CisJCWZvciB4IGluICgnVG9vbHMnLCAnZXh0cmFzJyk6CisJCQlvcy5tYWtlZGlycyhqb2luKGRpciwgJ3dhZmxpYicsIHgpKQorCWV4Y2VwdCBPU0Vycm9yOgorCQllcnIoIkNhbm5vdCB1bnBhY2sgd2FmIGxpYiBpbnRvICVzXG5Nb3ZlIHdhZiBpbiBhIHdyaXRhYmxlIGRpcmVjdG9yeSIgJSBkaXIpCisKKwlvcy5jaGRpcihkaXIpCisJdG1wID0gJ3QuYnoyJworCXQgPSBvcGVuKHRtcCwnd2InKQorCXRyeTogdC53cml0ZSh0eHQpCisJZmluYWxseTogdC5jbG9zZSgpCisKKwl0cnk6CisJCXQgPSB0YXJmaWxlLm9wZW4odG1wKQorCWV4Y2VwdDoKKwkJdHJ5OgorCQkJb3Muc3lzdGVtKCdidW56aXAyIHQuYnoyJykKKwkJCXQgPSB0YXJmaWxlLm9wZW4oJ3QnKQorCQkJdG1wID0gJ3QnCisJCWV4Y2VwdDoKKwkJCW9zLmNoZGlyKGN3ZCkKKwkJCXRyeTogc2h1dGlsLnJtdHJlZShkaXIpCisJCQlleGNlcHQgT1NFcnJvcjogcGFzcworCQkJZXJyKCJXYWYgY2Fubm90IGJlIHVucGFja2VkLCBjaGVjayB0aGF0IGJ6aXAyIHN1cHBvcnQgaXMgcHJlc2VudCIpCisKKwl0cnk6CisJCWZvciB4IGluIHQ6IHQuZXh0cmFjdCh4KQorCWZpbmFsbHk6CisJCXQuY2xvc2UoKQorCisJZm9yIHggaW4gKCdUb29scycsICdleHRyYXMnKToKKwkJb3MuY2htb2Qoam9pbignd2FmbGliJyx4KSwgNDkzKQorCisJaWYgc3lzLmhleHZlcnNpb248MHgzMDAwMDBmOgorCQlzeXMucGF0aCA9IFtqb2luKGRpciwgJ3dhZmxpYicpXSArIHN5cy5wYXRoCisJCWltcG9ydCBmaXhweTIKKwkJZml4cHkyLmZpeGRpcihkaXIpCisKKwlvcy5yZW1vdmUodG1wKQorCW9zLmNoZGlyKGN3ZCkKKworCXRyeTogZGlyID0gdW5pY29kZShkaXIsICdtYmNzJykKKwlleGNlcHQ6IHBhc3MKKwl0cnk6CisJCWZyb20gY3R5cGVzIGltcG9ydCB3aW5kbGwKKwkJd2luZGxsLmtlcm5lbDMyLlNldEZpbGVBdHRyaWJ1dGVzVyhkaXIsIDIpCisJZXhjZXB0OgorCQlwYXNzCisKK2RlZiB0ZXN0KGRpcik6CisJdHJ5OgorCQlvcy5zdGF0KGpvaW4oZGlyLCAnd2FmbGliJykpCisJCXJldHVybiBvcy5wYXRoLmFic3BhdGgoZGlyKQorCWV4Y2VwdCBPU0Vycm9yOgorCQlwYXNzCisKK2RlZiBmaW5kX2xpYigpOgorCXNyYyA9IG9zLnBhdGguYWJzcGF0aChpbnNwZWN0LmdldGZpbGUoaW5zcGVjdC5nZXRtb2R1bGUoZXJyKSkpCisJYmFzZSwgbmFtZSA9IG9zLnBhdGguc3BsaXQoc3JjKQorCisJI2RldnMgdXNlICRXQUZESVIKKwl3PXRlc3Qob3MuZW52aXJvbi5nZXQoJ1dBRkRJUicsICcnKSkKKwlpZiB3OiByZXR1cm4gdworCisJI3dhZi1saWdodAorCWlmIG5hbWUuZW5kc3dpdGgoJ3dhZi1saWdodCcpOgorCQl3ID0gdGVzdChiYXNlKQorCQlpZiB3OiByZXR1cm4gdworCQllcnIoJ3dhZi1saWdodCByZXF1aXJlcyB3YWZsaWIgLT4gZXhwb3J0IFdBRkRJUj0vZm9sZGVyJykKKworCWRpcm5hbWUgPSAnJXMtJXMtJXMnICUgKFdBRiwgVkVSU0lPTiwgUkVWSVNJT04pCisJZm9yIGkgaW4gKElOU1RBTEwsJy91c3InLCcvdXNyL2xvY2FsJywnL29wdCcpOgorCQl3ID0gdGVzdChpICsgJy9saWIvJyArIGRpcm5hbWUpCisJCWlmIHc6IHJldHVybiB3CisKKwkjd2FmLWxvY2FsCisJZGlyID0gam9pbihiYXNlLCAoc3lzLnBsYXRmb3JtICE9ICd3aW4zMicgYW5kICcuJyBvciAnJykgKyBkaXJuYW1lKQorCXcgPSB0ZXN0KGRpcikKKwlpZiB3OiByZXR1cm4gdworCisJI3VucGFjaworCXVucGFja193YWZkaXIoZGlyLCBzcmMpCisJcmV0dXJuIGRpcgorCit3YWZkaXIgPSBmaW5kX2xpYigpCitzeXMucGF0aC5pbnNlcnQoMCwgd2FmZGlyKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorCisJZnJvbSB3YWZsaWIg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ICdkZWZhdWx0LWNvbXBpbGVyLWZsYWdzJywgJ3NxbGl0ZTMnLAorICAgICAgICAgICAgICAnY292ZXJhZ2UnLCAnc2FuaXRpemVycycsCisgICAgICAgICAgICAgICdkb3h5Z2VuJywgJ3NwaGlueF9idWlsZCddLCB0b29sZGlyPVsnLndhZi10b29scyddKQorCisgICAgc3luY29wdCA9IG9wdC5hZGRfb3B0aW9uX2dyb3VwICgibmRuY2VydCBvcHRpb25zIikKKyAgICBzeW5jb3B0LmFkZF9vcHRpb24oJy0td2l0aC10ZXN0cycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsIGRlc3Q9J3dpdGhfdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPScnJ2J1aWxkIHVuaXQgdGVzdHMnJycpCisKK2RlZiBjb25maWd1cmUoY29uZik6CisgICAgY29uZi5sb2FkKFsnY29tcGlsZXJfY3h4JywgJ2dudV9kaXJzJywKKyAgICAgICAgICAgICAgICdib29zdCcsICdkZWZhdWx0LWNvbXBpbGVyLWZsYWdzJywgJ3NxbGl0ZTMnLAorICAgICAgICAgICAgICAgJ2RveHlnZW4nLCAnc3BoaW54X2J1aWxkJ10pCisKKyAgICBpZiAnUEtHX0NPTkZJR19QQVRIJyBub3QgaW4gb3MuZW52aXJvbjoKKyAgICAgICBvcy5lbnZpcm9uWydQS0dfQ09ORklHX1BBVEgnXSA9IFV0aWxzLnN1YnN0X3ZhcnMoJyR7TElCRElSfS9wa2djb25maWcnLCBjb25mLmVudikKKworICAgIGNvbmYuY2hlY2tfY2ZnKHBhY2thZ2U9J2xpYm5kbi1jeHgnLCBhcmdzPVsnLS1jZmxhZ3MnLCAnLS1saWJzJ10sCisgICAgICAgICAgICAgICAgICAgdXNlbGliX3N0b3JlPSdORE5fQ1hYJywgbWFuZGF0b3J5PVRydWUpCisKKyAgICBVU0VEX0JPT1NUX0xJQlMgPSBbJ3N5c3RlbScsICdmaWxlc3lzdGVtJywgJ2lvc3RyZWFtcycsCisgICAgICAgICAgICAgICAgICAgICAgICdwcm9ncmFtX29wdGlvbnMnLCAndGhyZWFkJywgJ2xvZycsICdsb2dfc2V0dXAnXQorCisgICAgY29uZi5lbnZbJ1dJVEhfVEVTVFMnXSA9IGNvbmYub3B0aW9ucy53aXRoX3Rlc3RzCisgICAgaWYgY29uZi5lbnZbJ1dJVEhfVEVTVFMnXToKKyAgICAgICAgVVNFRF9CT09TVF9MSUJTICs9IFsndW5pdF90ZXN0X2ZyYW1ld29yayddCisgICAgICAgIGNvbmYuZGVmaW5lKCdIQVZFX1RFU1RTJywgMSkKKworICAgIGNvbmYuY2hlY2tfYm9vc3QobGliPVVTRURfQk9PU1RfTElCUywgbXQ9VHJ1ZSkKKyAgICBpZiBjb25mLmVudi5CT09TVF9WRVJTSU9OX05VTUJFUiA8IDEwNTQwMDoKKyAgICAgICAgTG9ncy5lcnJvcigiTWluaW11bSByZXF1aXJlZCBib29zdCB2ZXJzaW9uIGlzIDEuNTQuMCIpCisgICAgICAgIExvZ3MuZXJyb3IoIlBsZWFzZSB1cGdyYWRlIHlvdXIgZGlzdHJpYnV0aW9uIG9yIGluc3RhbGwgY3VzdG9tIGJvb3N0IGxpYnJhcmllcyIgKworICAgICAgICAgICAgICAgICAgICAiIChodHRwczovL3JlZG1pbmUubmFtZWQtZGF0YS5uZXQvcHJvamVjdHMvbmZkL3dpa2kvQm9vc3RfRkFRKSIpCisgICAgICAgIHJldHVybgorCisgICAgIyBMb2FkaW5nICJsYXRlIiB0byBwcmV2ZW50IHRlc3RzIHRvIGJlIGNvbXBpbGVkIHdpdGggcHJvZmlsaW5nIGZsYWdzCisgICAgY29uZi5sb2FkKCdjb3ZlcmFnZScpCisKKyAgICBjb25mLmxvYWQoJ3Nhbml0aXplcnMnKQorICAgIAorICAgIGNvbmYud3JpdGVfY29uZmlnX2hlYWRlcignc3JjL25kbmNlcnQtY29uZmlnLmhwcCcpCisKK2RlZiBidWlsZChibGQpOgorICAgIGNvcmUgPSBibGQoCisgICAgICAgIHRhcmdldCA9ICJvYmplY3RzIiwKKyAgICAgICAgZmVhdHVyZXM9WydjeHgnXSwKKyAgICAgICAgc291cmNlID0gIGJsZC5wYXRoLmFudF9nbG9iKFsnc3JjLyoqLyouY3BwJ10pLAorICAgICAgICB1c2UgPSAnTkROX0NYWCBCT09TVCcsCisgICAgICAgIGluY2x1ZGVzID0gWydzcmMnXSwKKyAgICAgICAgZXhwb3J0X2luY2x1ZGVzPVsnc3JjJ10sCisgICAgKQorCisgICAgYmxkLnJlY3Vyc2UoJ3Rlc3RzJykK