ZGlmZiAtLWdpdCBhL2F1dGh6LWZzL3NyYy9tYWluL2NvbmZpZy9GaWxlU2VydmVyLnByb3BzIGIvYXV0aHotZnMvc3JjL21haW4vY29uZmlnL0ZpbGVTZXJ2ZXIucHJvcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQxNTA2ZQotLS0gL2Rldi9udWxsCisrKyBiL2F1dGh6LWZzL3NyYy9tYWluL2NvbmZpZy9GaWxlU2VydmVyLnByb3BzCkBAIC0wLDAgKzEsMjAgQEAKKyMjCisjIyBBVVRIWiBBUEkgKGF1dGh6LXNlcnZpY2UpIFByb3BlcnRpZXMKKyMjCisKK2hvc3RuYW1lPV9IT1NUTkFNRV8KKworIyMgRElTQ09WRVJZIChETUUyKSBQYXJhbWV0ZXJzIG9uIHRoZSBDb21tYW5kIExpbmUKK0FGVF9MQVRJVFVERT1fQUZUX0xBVElUVURFXworQUZUX0xPTkdJVFVERT1fQUZUX0xPTkdJVFVERV8KK0FGVF9FTlZJUk9OTUVOVD1fQUZUX0VOVklST05NRU5UXworREVQTE9ZRURfVkVSU0lPTj1fQVJUSUZBQ1RfVkVSU0lPTl8KKworRE1FU2VydmljZU5hbWU9c2VydmljZT1jb20uYXR0LmF1dGh6LmF1dGh6LWZzL3ZlcnNpb249X01BSk9SX1ZFUl8uX01JTk9SX1ZFUl8uX1BBVENIX1ZFUl8vZW52Q29udGV4dD1fRU5WX0NPTlRFWFRfL3JvdXRlT2ZmZXI9X1JPVVRFX09GRkVSXworQUZUX0RNRTJfUE9SVF9SQU5HRT1fQVVUSFpfRlNfUE9SVF9SQU5HRV8KK0FGVF9ETUUyX1NTTF9FTkFCTEU9ZmFsc2UKK0FGVF9ETUUyX0RJU0FCTEVfUEVSU0lTVEVOVF9DQUNIRT10cnVlCisKK0NGQV9XZWJQYXRoPV9ST09UX0RJUl8vZGF0YQorQ0ZBX0NsZWFyQ29tbWFuZD1GbXpZUHBNWTkxOE13RTFoeWFjb2lGU3QKK0NGQV9NYXhTaXplPTIwMDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hdXRoei1mcy9zcmMvbWFpbi9jb25maWcvbG9nNGoucHJvcGVydGllcyBiL2F1dGh6LWZzL3NyYy9tYWluL2NvbmZpZy9sb2c0ai5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NTkzZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hdXRoei1mcy9zcmMvbWFpbi9jb25maWcvbG9nNGoucHJvcGVydGllcwpAQCAtMCwwICsxLDkxIEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyMgPT09PT09PT09PT09TElDRU5TRV9TVEFSVD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjICogb3JnLm9uYXAuYWFpDQorIyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyMgKiBDb3B5cmlnaHQgqSAyMDE3IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyMgKiBDb3B5cmlnaHQgqSAyMDE3IEFtZG9jcw0KKyMgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQorIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIyAqIA0KKyMgICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjICogDQorIyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyMgKiA9PT09PT09PT09PT1MSUNFTlNFX0VORD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjICoNCisjICogRUNPTVAgaXMgYSB0cmFkZW1hcmsgYW5kIHNlcnZpY2UgbWFyayBvZiBBVCZUIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4NCisjICoNCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIENvcHlyaWdodCAoYykgMjAxNiBBVCZUIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIw0KKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMNCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyMNCitsb2c0ai5hcHBlbmRlci5JTklUPW9yZy5hcGFjaGUubG9nNGouRGFpbHlSb2xsaW5nRmlsZUFwcGVuZGVyIA0KK2xvZzRqLmFwcGVuZGVyLklOSVQuRmlsZT1fTE9HX0RJUl8vJHtMT0c0Sl9GSUxFTkFNRV9pbml0fQ0KK2xvZzRqLmFwcGVuZGVyLklOSVQuRGF0ZVBhdHRlcm49Jy4neXl5eS1NTS1kZA0KKyNsb2c0ai5hcHBlbmRlci5JTklULk1heEZpbGVTaXplPV9NQVhfTE9HX0ZJTEVfU0laRV8NCisjbG9nNGouYXBwZW5kZXIuSU5JVC5NYXhCYWNrdXBJbmRleD1fTUFYX0xPR19GSUxFX0JBQ0tVUF9DT1VOVF8NCitsb2c0ai5hcHBlbmRlci5JTklULmxheW91dD1vcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQgDQorbG9nNGouYXBwZW5kZXIuSU5JVC5sYXlvdXQuQ29udmVyc2lvblBhdHRlcm49JWR7eXl5eS1NTS1kZCBISDptbTpzcyxTU1NafSAlbSAlbg0KKw0KKw0KK2xvZzRqLmFwcGVuZGVyLkZTPW9yZy5hcGFjaGUubG9nNGouRGFpbHlSb2xsaW5nRmlsZUFwcGVuZGVyIA0KK2xvZzRqLmFwcGVuZGVyLkZTLkZpbGU9bG9ncy8ke0xPRzRKX0ZJTEVOQU1FX2F1dGh6fQ0KK2xvZzRqLmFwcGVuZGVyLkZTLkRhdGVQYXR0ZXJuPScuJ3l5eXktTU0tZGQNCisjbG9nNGouYXBwZW5kZXIuRlMuTWF4RmlsZVNpemU9X01BWF9MT0dfRklMRV9TSVpFXw0KKyNsb2c0ai5hcHBlbmRlci5GUy5NYXhCYWNrdXBJbmRleD1fTUFYX0xPR19GSUxFX0JBQ0tVUF9DT1VOVF8NCitsb2c0ai5hcHBlbmRlci5GUy5sYXlvdXQ9b3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0IA0KK2xvZzRqLmFwcGVuZGVyLkZTLmxheW91dC5Db252ZXJzaW9uUGF0dGVybj0lZHt5eXl5LU1NLWRkIEhIOm1tOnNzLFNTU1p9ICVwIFslY10gJW0gJW4NCisNCitsb2c0ai5hcHBlbmRlci5BVURJVD1vcmcuYXBhY2hlLmxvZzRqLkRhaWx5Um9sbGluZ0ZpbGVBcHBlbmRlcg0KK2xvZzRqLmFwcGVuZGVyLkFVRElULkZpbGU9X0xPR19ESVJfLyR7TE9HNEpfRklMRU5BTUVfYXVkaXR9DQorbG9nNGouYXBwZW5kZXIuQVVESVQuRGF0ZVBhdHRlcm49Jy4neXl5eS1NTS1kZA0KKyNsb2c0ai5hcHBlbmRlci5BVURJVC5NYXhGaWxlU2l6ZT1fTUFYX0xPR19GSUxFX1NJWkVfDQorI2xvZzRqLmFwcGVuZGVyLkFVRElULk1heEJhY2t1cEluZGV4PV9NQVhfTE9HX0ZJTEVfQkFDS1VQX0NPVU5UXw0KK2xvZzRqLmFwcGVuZGVyLkFVRElULmxheW91dD1vcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQgDQorbG9nNGouYXBwZW5kZXIuQVVESVQubGF5b3V0LkNvbnZlcnNpb25QYXR0ZXJuPSVke3l5eXktTU0tZGQgSEg6bW06c3MsU1NTWn0gJW0gJW4NCisNCitsb2c0ai5hcHBlbmRlci5UUkFDRT1vcmcuYXBhY2hlLmxvZzRqLkRhaWx5Um9sbGluZ0ZpbGVBcHBlbmRlcg0KK2xvZzRqLmFwcGVuZGVyLlRSQUNFLkZpbGU9bG9ncy8ke0xPRzRKX0ZJTEVOQU1FX3RyYWNlfQ0KK2xvZzRqLmFwcGVuZGVyLlRSQUNFLkRhdGVQYXR0ZXJuPScuJ3l5eXktTU0tZGQNCisjbG9nNGouYXBwZW5kZXIuVFJBQ0UuTWF4RmlsZVNpemU9X01BWF9MT0dfRklMRV9TSVpFXw0KKyNsb2c0ai5hcHBlbmRlci5UUkFDRS5NYXhCYWNrdXBJbmRleD1fTUFYX0xPR19GSUxFX0JBQ0tVUF9DT1VOVF8NCitsb2c0ai5hcHBlbmRlci5UUkFDRS5sYXlvdXQ9b3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0IA0KK2xvZzRqLmFwcGVuZGVyLlRSQUNFLmxheW91dC5Db252ZXJzaW9uUGF0dGVybj0lZHt5eXl5LU1NLWRkIEhIOm1tOnNzLFNTU1p9ICVtICVuDQorDQorbG9nNGouYXBwZW5kZXIuc3Rkb3V0PW9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyDQorbG9nNGouYXBwZW5kZXIuc3Rkb3V0LmxheW91dD1vcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQNCitsb2c0ai5hcHBlbmRlci5zdGRvdXQubGF5b3V0LkNvbnZlcnNpb25QYXR0ZXJuPSVkICVwIFslY10gJW0gJW4NCisNCisjIEdlbmVyYWwgQXBhY2hlIGxpYnJhcmllcw0KK2xvZzRqLnJvb3RMb2dnZXI9V0FSTg0KK2xvZzRqLmxvZ2dlci5vcmcuYXBhY2hlPVdBUk4sSU5JVA0KK2xvZzRqLmxvZ2dlci5kbWUyPVdBUk4sSU5JVA0KK2xvZzRqLmxvZ2dlci5pbml0PUlORk8sSU5JVA0KK2xvZzRqLmxvZ2dlci5hdXRoej1fTE9HNEpfTEVWRUxfLEZTDQorbG9nNGoubG9nZ2VyLmF1ZGl0PUlORk8sQVVESVQNCitsb2c0ai5sb2dnZXIudHJhY2U9VFJBQ0UsVFJBQ0UNCisNCisNCmRpZmYgLS1naXQgYS9hdXRoei1mcy9zcmMvbWFpbi9jb25maWcvbHJtLWF1dGh6LWZzLnhtbCBiL2F1dGh6LWZzL3NyYy9tYWluL2NvbmZpZy9scm0tYXV0aHotZnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MWRiMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hdXRoei1mcy9zcmMvbWFpbi9jb25maWcvbHJtLWF1dGh6LWZzLnhtbApAQCAtMCwwICsxLDgzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQorPCEtLQ0KKyAgPT09PT09PT09PT09TElDRU5TRV9TVEFSVD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogb3JnLm9uYXAuYWFpDQorICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBDb3B5cmlnaHQgwqkgMjAxNyBBVCZUIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgICogQ29weXJpZ2h0IMKpIDIwMTcgQW1kb2NzDQorICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsNCisgICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICogDQorICAgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgKiANCisgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqID09PT09PT09PT09PUxJQ0VOU0VfRU5EPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKg0KKyAgKiBFQ09NUCBpcyBhIHRyYWRlbWFyayBhbmQgc2VydmljZSBtYXJrIG9mIEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5Lg0KKyAgKg0KKy0tPg0KKzxuczI6TWFuYWdlZFJlc291cmNlTGlzdCB4bWxuczpuczI9Imh0dHA6Ly9zY2xkLmF0dC5jb20vbHJtL3V0aWwiIHhtbG5zPSJodHRwOi8vc2NsZC5hdHQuY29tL2xybS9jb21tb250eXBlcyIgeG1sbnM6bnMzPSJodHRwOi8vc2NsZC5hdHQuY29tL2xybS90eXBlcyI+DQorICAgIDxuczI6TWFuYWdlZFJlc291cmNlPg0KKyAgICAgICAgPFJlc291cmNlRGVzY3JpcHRvcj4NCisgICAgICAgICAgICA8UmVzb3VyY2VOYW1lPmNvbS5hdHQuYXV0aHouX0FSVElGQUNUX0lEXzwvUmVzb3VyY2VOYW1lPg0KKyAgICAgICAgICAgIDxSZXNvdXJjZVZlcnNpb24+DQorICAgICAgICAgICAgICAgIDxNYWpvcj5fTUFKT1JfVkVSXzwvTWFqb3I+DQorICAgICAgICAgICAgICAgIDxNaW5vcj5fTUlOT1JfVkVSXzwvTWlub3I+DQorICAgICAgICAgICAgICAgIDxQYXRjaD5fUEFUQ0hfVkVSXzwvUGF0Y2g+ICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgIDwvUmVzb3VyY2VWZXJzaW9uPg0KKyAgICAgICAgICAgIDxSb3V0ZU9mZmVyPl9ST1VURV9PRkZFUl88L1JvdXRlT2ZmZXI+DQorICAgICAgICA8L1Jlc291cmNlRGVzY3JpcHRvcj4NCisgICAgICAgIDxSZXNvdXJjZVR5cGU+SmF2YTwvUmVzb3VyY2VUeXBlPg0KKyAgICAgICAgPFJlc291cmNlUGF0aD5jb20uYXR0LmF1dGh6LmZzLkZpbGVTZXJ2ZXI8L1Jlc291cmNlUGF0aD4NCisgICAgICAgIDxSZXNvdXJjZVByb3BzPg0KKyAgICAgICAgICAgIDxUYWc+cHJvY2Vzcy53b3JrZGlyPC9UYWc+DQorICAgICAgICAgICAgPFZhbHVlPl9ST09UX0RJUl88L1ZhbHVlPg0KKyAgICAgICAgPC9SZXNvdXJjZVByb3BzPiAgICAJICAgICAgIA0KKyAgICAgICAgPFJlc291cmNlUHJvcHM+DQorICAgICAgICAgICAgPFRhZz5qdm0udmVyc2lvbjwvVGFnPg0KKyAgICAgICAgICAgIDxWYWx1ZT4xLjg8L1ZhbHVlPg0KKyAgICAgICAgPC9SZXNvdXJjZVByb3BzPg0KKyAgICAgICAgPFJlc291cmNlUHJvcHM+DQorICAgICAgICAgICAgPFRhZz5qdm0uYXJnczwvVGFnPg0KKyAgICAgICAgICAgIDxWYWx1ZT4tREFGVF9MQVRJVFVERT1fQUZUX0xBVElUVURFXyAtREFGVF9MT05HSVRVREU9X0FGVF9MT05HSVRVREVfIC1EQUZUX0VOVklST05NRU5UPV9BRlRfRU5WSVJPTk1FTlRfIC1EcGxhdGZvcm09X1NDTERfUExBVEZPUk1fIC1EY29tLnN1bi5qbmRpLmxkYXAuY29ubmVjdC5wb29sLm1heHNpemU9MjAgIC1EY29tLnN1bi5qbmRpLmxkYXAuY29ubmVjdC5wb29sLnByZWZzaXplPTEwIC1EY29tLnN1bi5qbmRpLmxkYXAuY29ubmVjdC5wb29sLnRpbWVvdXQ9MzAwMCA8L1ZhbHVlPg0KKyAgICAgICAgPC9SZXNvdXJjZVByb3BzPg0KKyAgICAgICAgPFJlc291cmNlUHJvcHM+DQorICAgICAgICAgICAgPFRhZz5qdm0uY2xhc3NwYXRoPC9UYWc+DQorICAgICAgICAgICAgPFZhbHVlPl9ST09UX0RJUl8vZXRjOl9ST09UX0RJUl8vbGliLyo6PC9WYWx1ZT4NCisgICAgICAgIDwvUmVzb3VyY2VQcm9wcz4NCisgICAgICAgIDxSZXNvdXJjZVByb3BzPg0KKyAgICAgICAgICAgIDxUYWc+anZtLmhlYXAubWluPC9UYWc+DQorICAgICAgICAgICAgPFZhbHVlPjEwMjRtPC9WYWx1ZT4NCisgICAgICAgIDwvUmVzb3VyY2VQcm9wcz4NCisgICAgICAgIDxSZXNvdXJjZVByb3BzPg0KKyAgICAgICAgICAgIDxUYWc+anZtLmhlYXAubWF4PC9UYWc+DQorICAgICAgICAgICAgPFZhbHVlPjIwNDhtPC9WYWx1ZT4NCisgICAgICAgIDwvUmVzb3VyY2VQcm9wcz4NCisgICAgICAgIDxSZXNvdXJjZVByb3BzPg0KKyAgICAgICAgICAgIDxUYWc+c3RhcnQuY2xhc3M8L1RhZz4NCisgICAgICAgICAgICA8VmFsdWU+Y29tLmF0dC5hdXRoei5mcy5GaWxlU2VydmVyPC9WYWx1ZT4NCisgICAgICAgIDwvUmVzb3VyY2VQcm9wcz4NCisgICAgICAgIDxSZXNvdXJjZVByb3BzPg0KKyAgICAgICAgICAgIDxUYWc+c3Rkb3V0LnJlZGlyZWN0PC9UYWc+DQorICAgICAgICAgICAgPFZhbHVlPl9ST09UX0RJUl8vbG9ncy9TeXN0ZW1PdXQubG9nPC9WYWx1ZT4NCisgICAgICAgIDwvUmVzb3VyY2VQcm9wcz4NCisgICAgICAgIDxSZXNvdXJjZVByb3BzPg0KKyAgICAgICAgICAgIDxUYWc+c3RkZXJyLnJlZGlyZWN0PC9UYWc+DQorICAgICAgICAgICAgPFZhbHVlPl9ST09UX0RJUl8vbG9ncy9TeXN0ZW1FcnIubG9nPC9WYWx1ZT4NCisgICAgICAgIDwvUmVzb3VyY2VQcm9wcz4NCisgICAgICAgIDxSZXNvdXJjZU9TSUQ+YWZ0PC9SZXNvdXJjZU9TSUQ+DQorICAgICAgICA8UmVzb3VyY2VTdGFydFR5cGU+QVVUTzwvUmVzb3VyY2VTdGFydFR5cGU+DQorICAgICAgICA8UmVzb3VyY2VTdGFydFByaW9yaXR5PjI8L1Jlc291cmNlU3RhcnRQcmlvcml0eT4NCisJCTxSZXNvdXJjZU1pbkNvdW50Pl9SRVNPVVJDRV9NSU5fQ09VTlRfPC9SZXNvdXJjZU1pbkNvdW50Pg0KKwkJPFJlc291cmNlTWF4Q291bnQ+X1JFU09VUkNFX01BWF9DT1VOVF88L1Jlc291cmNlTWF4Q291bnQ+ICAgICAgICANCisJCTxSZXNvdXJjZVJlZ2lzdHJhdGlvbj5fUkVTT1VSQ0VfUkVHSVNUUkFUSU9OXzwvUmVzb3VyY2VSZWdpc3RyYXRpb24+DQorICAgICAgICA8UmVzb3VyY2VTV01Db21wb25lbnQ+Y29tLmF0dC5hdXRoejpfQVJUSUZBQ1RfSURfPC9SZXNvdXJjZVNXTUNvbXBvbmVudD4NCisgICAgICAgIDxSZXNvdXJjZVNXTUNvbXBvbmVudFZlcnNpb24+X0FSVElGQUNUX1ZFUlNJT05fPC9SZXNvdXJjZVNXTUNvbXBvbmVudFZlcnNpb24+DQorICAgIDwvbnMyOk1hbmFnZWRSZXNvdXJjZT4NCis8L25zMjpNYW5hZ2VkUmVzb3VyY2VMaXN0Pg0KZGlmZiAtLWdpdCBhL2F1dGh6LWZzL3NyYy9tYWluL2RhdGEvdGVzdC5odG1sIGIvYXV0aHotZnMvc3JjL21haW4vZGF0YS90ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI4YTI3NAotLS0gL2Rldi9udWxsCisrKyBiL2F1dGh6LWZzL3NyYy9tYWluL2RhdGEvdGVzdC5odG1sCkBAIC0wLDAgKzEsNDMgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIyA9PT09PT09PT09PT1MSUNFTlNFX1NUQVJUPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyMgKiBvcmcub25hcC5hYWkNCisjICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorIyAqIENvcHlyaWdodCDCqSAyMDE3IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyMgKiBDb3B5cmlnaHQgwqkgMjAxNyBBbWRvY3MNCisjICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgKiANCisjICAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorIyAqIA0KKyMgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisjICogPT09PT09PT09PT09TElDRU5TRV9FTkQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorIyAqDQorIyAqIEVDT01QIGlzIGEgdHJhZGVtYXJrIGFuZCBzZXJ2aWNlIG1hcmsgb2YgQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuDQorIyAqDQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCis8aHRtbD4NCisgIDxoZWFkPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW4gaGVhZCAtLT4NCisgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgICA8dGl0bGU+QVQmYW1wO1QgQXV0aGVudGljYXRpb24vQXV0aG9yaXphdGlvbiBUb29sPC90aXRsZT4NCisgICAgPCEtLSANCisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJfQVVUSFpfR1VJX1VSTF8vdGhlbWUvYWFmNS5jc3MiPg0KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJfQVVUSFpfR1VJX1VSTF8vdGhlbWUvY29tbS5qcyI+PC9zY3JpcHQ+DQorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Il9BVVRIWl9HVUlfVVJMXy90aGVtZS9jb25zb2xlLmpzIj48L3NjcmlwdD4NCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iX0FVVEhaX0dVSV9VUkxfL3RoZW1lL2NvbW1vbi5qcyI+PC9zY3JpcHQ+DQorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iX0FVVEhaX0dVSV9VUkxfL3RoZW1lL2FhZjVEZXNrdG9wLmNzcyI+DQorICAgICAtLT4NCisgIDwvaGVhZD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZW5kIGhlYWQgLS0+DQorICA8Ym9keT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGJlZ2luIGJvZHkgLS0+DQorICAgIDxoZWFkZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGJlZ2luIGhlYWRlciAtLT4NCisgICAgICAgICAgICA8aDE+QVQmYW1wO1QgQXV0aCBUb29sIG9uIF9FTlZfQ09OVEVYVF88L2gxPg0KKyAgICAgIDxwIGlkPSJ2ZXJzaW9uIj5BQUYgVmVyc2lvbjogX0FSVElGQUNUX1ZFUlNJT05fPC9wPg0KKyAgICA8L2hlYWRlcj4NCisgIDxoMT5TdWNjZXNzIGZvciBGaWxlIFNlcnZlciBBY2Nlc3M8L2gxPg0KKyAgPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9hdXRoei1mcy9zcmMvbWFpbi9qYXZhL2NvbS9hdHQvYXV0aHovZnMvRmlsZVNlcnZlci5qYXZhIGIvYXV0aHotZnMvc3JjL21haW4vamF2YS9jb20vYXR0L2F1dGh6L2ZzL0ZpbGVTZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2QyOTk1Ci0tLSAvZGV2L251bGwKKysrIGIvYXV0aHotZnMvc3JjL21haW4vamF2YS9jb20vYXR0L2F1dGh6L2ZzL0ZpbGVTZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDE1NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiA9PT09PT09PT09PT1MSUNFTlNFX1NUQVJUPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAqICogb3JnLm9uYXAuYWFpDQorICogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgKiAqIENvcHlyaWdodCDCqSAyMDE3IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqICogQ29weXJpZ2h0IMKpIDIwMTcgQW1kb2NzDQorICogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgKiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KKyAqICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAqICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogKiANCisgKiAgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqICogDQorICogICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAqICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgKiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAqICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAqICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICogKiA9PT09PT09PT09PT1MSUNFTlNFX0VORD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgKiAqDQorICogKiBFQ09NUCBpcyBhIHRyYWRlbWFyayBhbmQgc2VydmljZSBtYXJrIG9mIEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5Lg0KKyAqICoNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3BhY2thZ2UgY29tLmF0dC5hdXRoei5mczsNCisNCitpbXBvcnQgc3RhdGljIGNvbS5hdHQuY3NzYS5yc2Vydi5IdHRwTWV0aG9kcy5HRVQ7DQorDQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQoraW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07DQoraW1wb3J0IGphdmEubmV0LlVSTDsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkVudW1TZXQ7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsNCisNCitpbXBvcnQgY29tLmF0dC5hZnQuZG1lMi5hcGkuRE1FMk1hbmFnZXI7DQoraW1wb3J0IGNvbS5hdHQuYWZ0LmRtZTIuYXBpLkRNRTJTZXJ2ZXI7DQoraW1wb3J0IGNvbS5hdHQuYWZ0LmRtZTIuYXBpLkRNRTJTZXJ2ZXJQcm9wZXJ0aWVzOw0KK2ltcG9ydCBjb20uYXR0LmFmdC5kbWUyLmFwaS5ETUUyU2VydmljZUhvbGRlcjsNCitpbXBvcnQgY29tLmF0dC5hZnQuZG1lMi5hcGkudXRpbC5ETUUyRmlsdGVySG9sZGVyOw0KK2ltcG9ydCBjb20uYXR0LmFmdC5kbWUyLmFwaS51dGlsLkRNRTJGaWx0ZXJIb2xkZXIuUmVxdWVzdERpc3BhdGNoZXJUeXBlOw0KK2ltcG9ydCBjb20uYXR0LmFmdC5kbWUyLmFwaS51dGlsLkRNRTJTZXJ2bGV0SG9sZGVyOw0KK2ltcG9ydCBjb20uYXR0LmF1dGh6LmVudi5BdXRoekVudjsNCitpbXBvcnQgY29tLmF0dC5hdXRoei5lbnYuQXV0aHpUcmFuczsNCitpbXBvcnQgY29tLmF0dC5hdXRoei5lbnYuQXV0aHpUcmFuc09ubHlGaWx0ZXI7DQoraW1wb3J0IGNvbS5hdHQuY3NzYS5yc2Vydi5DYWNoaW5nRmlsZUFjY2VzczsNCitpbXBvcnQgY29tLmF0dC5jc3NhLnJzZXJ2LlJTZXJ2bGV0Ow0KK2ltcG9ydCBjb20uYXR0Lmlubm8uZW52LkFQSUV4Y2VwdGlvbjsNCisNCisNCitwdWJsaWMgY2xhc3MgRmlsZVNlcnZlciBleHRlbmRzIFJTZXJ2bGV0PEF1dGh6VHJhbnM+ICB7DQorCXB1YmxpYyBGaWxlU2VydmVyKGZpbmFsIEF1dGh6RW52IGVudikgdGhyb3dzIEFQSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gew0KKwkJdHJ5IHsNCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAgDQorCQkJLy8gRmlsZSBTZXJ2ZXIgDQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisJCQkNCisJCQlDYWNoaW5nRmlsZUFjY2VzczxBdXRoelRyYW5zPiBjZmEgPSBuZXcgQ2FjaGluZ0ZpbGVBY2Nlc3M8QXV0aHpUcmFucz4oZW52KTsNCisJCQlyb3V0ZShlbnYsR0VULCIvOmtleSIsIGNmYSk7IA0KKwkJCXJvdXRlKGVudixHRVQsIi86a2V5LzpjbWQiLCBjZmEpOyANCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKwkNCisJDQorCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgew0KKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQl9DQorCX0NCisJDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsNCisJCXRyeSB7DQorCQkJLy8gTG9hZCBQcm9wZXJ0aWVzIGZyb20gYXV0aEZyYW1ld29yay5wcm9wZXJ0aWVzLiAgTmVlZGVkIGZvciBETUUyIGFuZCBBdXRoekVudg0KKwkJCVByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOw0KKwkJCVVSTCByc3JjID0gQ2xhc3NMb2FkZXIuZ2V0U3lzdGVtUmVzb3VyY2UoIkZpbGVTZXJ2ZXIucHJvcHMiKTsNCisJCQlpZihyc3JjPT1udWxsKSB7DQorCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiRm9sZGVyIGNvbnRhaW5pbmcgRmlsZVNlcnZlci5wcm9wcyBtdXN0IGJlIG9uIENsYXNzcGF0aCIpOw0KKwkJCQlTeXN0ZW0uZXhpdCgxKTsNCisJCQl9DQorCQkJSW5wdXRTdHJlYW0gaXMgPSByc3JjLm9wZW5TdHJlYW0oKTsNCisJCQl0cnkgew0KKwkJCQlwcm9wcy5sb2FkKGlzKTsNCisJCQl9IGZpbmFsbHkgew0KKwkJCQlpcy5jbG9zZSgpOw0KKwkJCX0NCisJCQkNCisJCQkvLyBMb2FkIFByb3BlcnRpZXMgaW50byBBdXRoekVudg0KKwkJCUF1dGh6RW52IGVudiA9IG5ldyBBdXRoekVudihwcm9wcyk7IA0KKwkJCWVudi5zZXRMb2c0Sk5hbWVzKCJsb2c0ai5wcm9wZXJ0aWVzIiwiYXV0aHoiLCJmcyIsImF1ZGl0IiwiaW5pdCIsbnVsbCk7DQorCQkJDQorCQkJLy8gQUZUIERpc2NvdmVyeSBMaWJyYXJpZXMgb25seSByZWFkIFN5c3RlbSBQcm9wcw0KKwkJCWVudi5sb2FkVG9TeXN0ZW1Qcm9wc1N0YXJ0c1dpdGgoIkFGVF8iLCJETUUyXyIpOw0KKwkJCWVudi5pbml0KCkubG9nKCJETUUyIHVzaW5nICIgKyBlbnYuZ2V0UHJvcGVydHkoIkRNRVNlcnZpY2VOYW1lIiwidW5rbm93biIpICsgIiBVUkkiKTsNCisJCQkNCisJCQkvLyBTdGFydCBETUUyIChETUUyIG5lZWRzIFByb3BlcnRpZXMgZm9ybSBvZiBwcm9wcykNCisJCSAgICBETUUyTWFuYWdlciBkbWUyID0gbmV3IERNRTJNYW5hZ2VyKCJSU2VydkRNRTJNYW5hZ2VyIixwcm9wcyk7DQorCQkgICAgDQorCQkgICAgRE1FMlNlcnZpY2VIb2xkZXIgc3ZjSG9sZGVyOw0KKwkJICAgIExpc3Q8RE1FMlNlcnZsZXRIb2xkZXI+IHNsaXN0ID0gbmV3IEFycmF5TGlzdDxETUUyU2VydmxldEhvbGRlcj4oKTsNCisJCSAgICBzdmNIb2xkZXIgPSBuZXcgRE1FMlNlcnZpY2VIb2xkZXIoKTsNCisJCSAgICBTdHJpbmcgc2VydmljZU5hbWUgPSBlbnYuZ2V0UHJvcGVydHkoIkRNRVNlcnZpY2VOYW1lIixudWxsKTsNCisJCQlpZihzZXJ2aWNlTmFtZSE9bnVsbCkgew0KKwkJICAgIAlzdmNIb2xkZXIuc2V0U2VydmljZVVSSShzZXJ2aWNlTmFtZSk7DQorCQkgICAgICAgIHN2Y0hvbGRlci5zZXRNYW5hZ2VyKGRtZTIpOw0KKwkJICAgICAgICBzdmNIb2xkZXIuc2V0Q29udGV4dCgiLyIpOw0KKwkJICAgICAgICANCisJCSAgICAgICAgRmlsZVNlcnZlciBmcyA9IG5ldyBGaWxlU2VydmVyKGVudik7DQorCQkgICAgICAgIERNRTJTZXJ2bGV0SG9sZGVyIHNydkhvbGRlciA9IG5ldyBETUUyU2VydmxldEhvbGRlcihmcyk7DQorCQkgICAgICAgIHNydkhvbGRlci5zZXRDb250ZXh0UGF0aCgiLyoiKTsNCisJCSAgICAgICAgc2xpc3QuYWRkKHNydkhvbGRlcik7DQorCQkgICAgICAgIA0KKwkJICAgICAgICBFbnVtU2V0PFJlcXVlc3REaXNwYXRjaGVyVHlwZT4gZWRsaXN0ID0gRW51bVNldC5vZigNCisJCSAgICAgICAgCQlSZXF1ZXN0RGlzcGF0Y2hlclR5cGUuUkVRVUVTVCwNCisJCSAgICAgICAgCQlSZXF1ZXN0RGlzcGF0Y2hlclR5cGUuRk9SV0FSRCwNCisJCSAgICAgICAgCQlSZXF1ZXN0RGlzcGF0Y2hlclR5cGUuQVNZTkMNCisJCSAgICAgICAgCQkpOw0KKw0KKwkJICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKwkJICAgICAgICAvLyBBcHBseSBGaWx0ZXJzDQorCQkgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorCQkgICAgICAgIExpc3Q8RE1FMkZpbHRlckhvbGRlcj4gZmxpc3QgPSBuZXcgQXJyYXlMaXN0PERNRTJGaWx0ZXJIb2xkZXI+KCk7DQorCQkgICAgICAgIA0KKwkJICAgIAkvLyBOZWVkIFRyYW5zRmlsdGVyDQorCQkgICAgCWZsaXN0LmFkZChuZXcgRE1FMkZpbHRlckhvbGRlcihuZXcgQXV0aHpUcmFuc09ubHlGaWx0ZXIoZW52KSwiLyoiLGVkbGlzdCkpOw0KKwkJICAgICAgICBzdmNIb2xkZXIuc2V0RmlsdGVycyhmbGlzdCk7DQorCQkgICAgICAgIHN2Y0hvbGRlci5zZXRTZXJ2bGV0SG9sZGVycyhzbGlzdCk7DQorCQkgICAgICAgIA0KKwkJICAgICAgICBETUUyU2VydmVyIGRtZTJzdnIgPSBkbWUyLmdldFNlcnZlcigpOw0KKwkJICAgICAgICBETUUyU2VydmVyUHJvcGVydGllcyBkc3Byb3BzID0gZG1lMnN2ci5nZXRTZXJ2ZXJQcm9wZXJ0aWVzKCk7DQorCQkgICAgICAgIGRzcHJvcHMuc2V0R3JhY2VmdWxTaHV0ZG93blRpbWVNcygxMDAwKTsNCisNCisJCSAgICAgICAgZW52LmluaXQoKS5sb2coIlN0YXJ0aW5nIEFBRiBGaWxlU2VydmVyIHdpdGggSmV0dHkvRE1FMiBzZXJ2ZXIuLi4iKTsNCisJCSAgICAgICAgZG1lMnN2ci5zdGFydCgpOw0KKwkJICAgICAgICB0cnkgew0KKy8vCQkgICAgICAgIAlpZihlbnYuZ2V0UHJvcGVydHkoIk5PX1JFR0lTVEVSIixudWxsKSE9bnVsbCkNCisJCSAgICAgICAgCWRtZTIuYmluZFNlcnZpY2Uoc3ZjSG9sZGVyKTsNCisJCSAgICAgICAgCWVudi5pbml0KCkubG9nKCJETUUyIGlzIGF2YWlsYWJsZSBhcyBIVFRQIisoZHNwcm9wcy5pc1NzbEVuYWJsZSgpPyIvUyI6IiIpLCJvbiBwb3J0OiIsZHNwcm9wcy5nZXRQb3J0KCkpOw0KKw0KKwkJICAgICAgICAgICAgd2hpbGUodHJ1ZSkgeyAvLyBQZXIgRE1FMiBFeGFtcGxlcy4uLg0KKwkJICAgICAgICAgICAgCVRocmVhZC5zbGVlcCg1MDAwKTsNCisJCSAgICAgICAgICAgIH0NCisJCSAgICAgICAgfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7DQorCQkgICAgICAgICAgICBlbnYuaW5pdCgpLmxvZygiQUFGIEpldHR5IFNlcnZlciBpbnRlcnJ1cHRlZCEiKTsNCisJCSAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeyAvLyBFcnJvciBiaW5kaW5nIHNlcnZpY2UgZG9lc24ndCBzZWVtIHRvIHN0b3AgRE1FMiBvciBQcm9jZXNzDQorCQkgICAgICAgICAgICBlbnYuaW5pdCgpLmxvZyhlLCJETUUyIEluaXRpYWxpemF0aW9uIEVycm9yIik7DQorCQkgICAgICAgIAlkbWUyc3ZyLnN0b3AoKTsNCisJCSAgICAgICAgCVN5c3RlbS5leGl0KDEpOw0KKwkJICAgICAgICB9DQorCQkJfSBlbHNlIHsNCisJCQkJZW52LmluaXQoKS5sb2coIlByb3BlcnRpZXMgbXVzdCBjb250YWluIERNRVNlcnZpY2VOYW1lIik7DQorCQkJfQ0KKw0KKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCisJCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsNCisJCQlTeXN0ZW0uZXhpdCgxKTsNCisJCX0NCisJfQ0KK30NCg==