[mono/monodevelop] [29 commits] e62279dd: Remove the BUILD_REVISION check and the ENABLE_RAYGUN constant.
| Newsgroups | gmane.comp.gnome.mono.patches |
|---|---|
| Message-ID | <0000014272512a41-486f29f7-374b-4157-9d79-57edf4f1a5b0-000000@email.amazonses.com> |
DQogICBCcmFuY2g6IHJlZnMvaGVhZHMvbW9ub2RldmVsb3AtNC4zLjAtYnJhbmNoDQogICAgIEhv bWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wDQogIENvbXBhcmU6IGh0dHBz Oi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbXBhcmUvYzExNmZmNGRmM2Y1Li4uOGM0 MDk2MWY5YTA4DQoNCiAgIENvbW1pdDogZTYyMjc5ZGQzM2MwZTQ0YTU1ZjUwNDhkNWZjN2MwMjAy NDY1YjQ2Mg0KICAgQXV0aG9yOiBDb2R5IFJ1c3NlbGwgPGNvZHlAamh1LmVkdT4gKGJyYXRzY2hl KQ0KICAgICBEYXRlOiAyMDEzLTExLTE1IDE4OjU5OjI5IEdNVA0KICAgICAgVVJMOiBodHRwczov L2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21taXQvZTYyMjc5ZGQzM2MwZTQ0YTU1ZjUw NDhkNWZjN2MwMjAyNDY1YjQ2Mg0KDQpSZW1vdmUgdGhlIEJVSUxEX1JFVklTSU9OIGNoZWNrIGFu ZCB0aGUgRU5BQkxFX1JBWUdVTiBjb25zdGFudC4NCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1haW4v c3JjL2NvcmUvTW9ub0RldmVsb3AuQ29yZS9Nb25vRGV2ZWxvcC5Db3JlLmNzcHJvagogIE0gbWFp bi9zcmMvY29yZS9Nb25vRGV2ZWxvcC5Db3JlL01vbm9EZXZlbG9wLkNvcmUvTG9nZ2luZ1NlcnZp Y2UuY3MKDQpNb2RpZmllZDogbWFpbi9zcmMvY29yZS9Nb25vRGV2ZWxvcC5Db3JlL01vbm9EZXZl bG9wLkNvcmUuY3Nwcm9qDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMTIsOSArMTIsNiBAQAogICAgIDxCdWls ZEluZm8+Li5cLi5cLi5cYnVpbGRcYmluXGJ1aWxkaW5mbzwvQnVpbGRJbmZvPgogICAgIDxWY1Jl dmlzaW9uPi4uXC4uXC4uXHZjcmV2aXNpb248L1ZjUmV2aXNpb24+CiAgIDwvUHJvcGVydHlHcm91 cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChCVUlMRF9SRVZJU0lPTiknICE9ICcn Ij4KLSAgICAgIDxEZWZpbmVDb25zdGFudHM+JChEZWZpbmVDb25zdGFudHMpO0VOQUJMRV9SQVlH VU48L0RlZmluZUNvbnN0YW50cz4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8Q2hvb3NlPgogICAg IDxXaGVuIENvbmRpdGlvbj0iIEV4aXN0cygnYzpcUHJvZ3JhbSBGaWxlc1xHaXRcYmluXGdpdC5l eGUnKSAiPgogICAgICAgPFByb3BlcnR5R3JvdXA+DQoNCk1vZGlmaWVkOiBtYWluL3NyYy9jb3Jl L01vbm9EZXZlbG9wLkNvcmUvTW9ub0RldmVsb3AuQ29yZS9Mb2dnaW5nU2VydmljZS5jcw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KQEAgLTEwMSwxMiArMTAxLDEwIEBAIHN0YXRpYyBMb2dnaW5nU2VydmljZSAoKQog CiAJCQl0aW1lc3RhbXAgPSBEYXRlVGltZS5Ob3c7CiAKLSNpZiBFTkFCTEVfUkFZR1VOCiAJCQlz dHJpbmcgcmF5Z3VuS2V5ID0gQnJhbmRpbmdTZXJ2aWNlLkdldFN0cmluZyAoIlJheWd1bkFwaUtl eSIpOwogCQkJaWYgKHJheWd1bktleSAhPSBudWxsKSB7CiAJCQkJcmF5Z3VuQ2xpZW50ID0gbmV3 IFJheWd1bkNsaWVudCAocmF5Z3VuS2V5KTsKIAkJCX0KLSNlbmRpZgogCiAJCQkvL3JlbW92ZSB0 aGUgZGVmYXVsdCB0cmFjZSBsaXN0ZW5lciBvbiAuTkVULCBpdCB0aHJvd3MgdXAgaG9ycmlibGUg ZGlhbG9nIGJveGVzIGZvciBhc3NlcnRzCiAJCQlTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWcuTGlz dGVuZXJzLkNsZWFyICgpOw0KDQogICBDb21taXQ6IDMzNjgzOWNmNzMwNDkxODZkZTZlYzFkODUw NzBiNDZjNGM5NWNkMDYNCiAgIEF1dGhvcjogQ29keSBSdXNzZWxsIDxjb2R5QGpodS5lZHU+IChi cmF0c2NoZSkNCiAgICAgRGF0ZTogMjAxMy0xMS0xNSAxOToxNDoxMCBHTVQNCiAgICAgIFVSTDog aHR0cHM6Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVsb3AvY29tbWl0LzMzNjgzOWNmNzMwNDkx ODZkZTZlYzFkODUwNzBiNDZjNGM5NWNkMDYNCg0KUHV0IHRoZSBCVUlMRF9SRVZJU0lPTiBjaGVj a2luZyBiYWNrIGluLCBidXQgaW4gdGhlIHJpZ2h0IHBsYWNlLiBJdCB3YXMgYmVpbmcgb3Zlcndy aXR0ZW4gYnkgbGF0ZXIgUHJvcGVydHlHcm91cHMgYmVmb3JlLg0KDQpDaGFuZ2VkIHBhdGhzOgog IE0gbWFpbi9zcmMvY29yZS9Nb25vRGV2ZWxvcC5Db3JlL01vbm9EZXZlbG9wLkNvcmUuY3Nwcm9q CiAgTSBtYWluL3NyYy9jb3JlL01vbm9EZXZlbG9wLkNvcmUvTW9ub0RldmVsb3AuQ29yZS9Mb2dn aW5nU2VydmljZS5jcwoNCk1vZGlmaWVkOiBtYWluL3NyYy9jb3JlL01vbm9EZXZlbG9wLkNvcmUv TW9ub0RldmVsb3AuQ29yZS5jc3Byb2oNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC02OCw2ICs2OCw5IEBACiAg ICAgPEdlbmVyYXRlRG9jdW1lbnRhdGlvbj50cnVlPC9HZW5lcmF0ZURvY3VtZW50YXRpb24+CiAg ICAgPE5vV2Fybj4xNTkxOzE1NzM8L05vV2Fybj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJv cGVydHlHcm91cCBDb25kaXRpb249IickKEJVSUxEX1JFVklTSU9OKScgIT0gJyciPgorICAgIDxE ZWZpbmVDb25zdGFudHM+JChEZWZpbmVDb25zdGFudHMpO0VOQUJMRV9SQVlHVU48L0RlZmluZUNv bnN0YW50cz4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxSZWZlcmVu Y2UgSW5jbHVkZT0iU3lzdGVtIiAvPgogICAgIDxSZWZlcmVuY2UgSW5jbHVkZT0iTW9uby5Qb3Np eCIgLz4NCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuQ29yZS9Nb25vRGV2 ZWxvcC5Db3JlL0xvZ2dpbmdTZXJ2aWNlLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMTAxLDEwICsxMDEs MTIgQEAgc3RhdGljIExvZ2dpbmdTZXJ2aWNlICgpCiAKIAkJCXRpbWVzdGFtcCA9IERhdGVUaW1l Lk5vdzsKIAorI2lmIEVOQUJMRV9SQVlHVU4KIAkJCXN0cmluZyByYXlndW5LZXkgPSBCcmFuZGlu Z1NlcnZpY2UuR2V0U3RyaW5nICgiUmF5Z3VuQXBpS2V5Iik7CiAJCQlpZiAocmF5Z3VuS2V5ICE9 IG51bGwpIHsKIAkJCQlyYXlndW5DbGllbnQgPSBuZXcgUmF5Z3VuQ2xpZW50IChyYXlndW5LZXkp OwogCQkJfQorI2VuZGlmCiAKIAkJCS8vcmVtb3ZlIHRoZSBkZWZhdWx0IHRyYWNlIGxpc3RlbmVy IG9uIC5ORVQsIGl0IHRocm93cyB1cCBob3JyaWJsZSBkaWFsb2cgYm94ZXMgZm9yIGFzc2VydHMK IAkJCVN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Zy5MaXN0ZW5lcnMuQ2xlYXIgKCk7DQoNCiAgIENv bW1pdDogNTA5YWEwMTk3ZWFkOWQ0ZTRjMGQyNDM1ZmMxOTNjOTYxYTNlNDNhZQ0KICAgQXV0aG9y OiBKZWZmcmV5IFN0ZWRmYXN0IDxqZWZmQHhhbWFyaW4uY29tPiAoanN0ZWRmYXN0KQ0KICAgICBE YXRlOiAyMDEzLTExLTE1IDIwOjQzOjE0IEdNVA0KICAgICAgVVJMOiBodHRwczovL2dpdGh1Yi5j b20vbW9uby9tb25vZGV2ZWxvcC9jb21taXQvNTA5YWEwMTk3ZWFkOWQ0ZTRjMGQyNDM1ZmMxOTNj OTYxYTNlNDNhZQ0KDQp1cGRhdGVkIGRlYnVnZ2VyLWxpYnMNCg0KQ2hhbmdlZCBwYXRoczoKICBN IG1haW4vZXh0ZXJuYWwvZGVidWdnZXItbGlicwoNCk1vZGlmaWVkOiBtYWluL2V4dGVybmFsL2Rl YnVnZ2VyLWxpYnMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC0xICsxIEBACi1TdWJwcm9qZWN0IGNvbW1pdCBm NzQ5MWU1MzU3MDNiODM1MjQzMmZiNzYwZGRjMDQxNzQzZjkwMGMzCitTdWJwcm9qZWN0IGNvbW1p dCBmMDRjYjUwNzBmYTM4YWNkYWZmNDZkMTQxNmE3ZDQxZGE1YmI1NzhkDQoNCiAgIENvbW1pdDog NDdiYzJkZTA1ZjNiMGJjYmNmZGUxMzMzNTFjMTExOTQ2Y2RkODU4ZQ0KICAgQXV0aG9yOiBKZWZm cmV5IFN0ZWRmYXN0IDxqZWZmQHhhbWFyaW4uY29tPiAoanN0ZWRmYXN0KQ0KICAgICBEYXRlOiAy MDEzLTExLTE1IDIxOjI4OjM3IEdNVA0KICAgICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9u by9tb25vZGV2ZWxvcC9jb21taXQvNDdiYzJkZTA1ZjNiMGJjYmNmZGUxMzMzNTFjMTExOTQ2Y2Rk ODU4ZQ0KDQpmaXhlZCB0aGUgYnVpbGQNCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1haW4vZXh0ZXJu YWwvZGVidWdnZXItbGlicwoNCk1vZGlmaWVkOiBtYWluL2V4dGVybmFsL2RlYnVnZ2VyLWxpYnMN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCkBAIC0xICsxIEBACi1TdWJwcm9qZWN0IGNvbW1pdCBmMDRjYjUwNzBmYTM4 YWNkYWZmNDZkMTQxNmE3ZDQxZGE1YmI1NzhkCitTdWJwcm9qZWN0IGNvbW1pdCAzNDU5NTAyNGYw MDcyYzFjZmM1YjFkZGUxZDE5NGQwZGNjNWMxMWZiDQoNCiAgIENvbW1pdDogNWJiY2MwMzUxZGEx ZjRmNDQ2NzUwZjM5NTdhM2M1MjFiZjRiNzNlZQ0KICAgQXV0aG9yOiBDb2R5IFJ1c3NlbGwgPGNv ZHlAamh1LmVkdT4gKGJyYXRzY2hlKQ0KICAgICBEYXRlOiAyMDEzLTExLTE2IDAzOjIyOjQ0IEdN VA0KICAgICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21taXQv NWJiY2MwMzUxZGExZjRmNDQ2NzUwZjM5NTdhM2M1MjFiZjRiNzNlZQ0KDQpbQ29yZV0gUmVtb3Zl IHRoZSBvbGQsIHByZS1SYXlndW4gbG9nIHVwbG9hZGluZy4NCg0KQ2hhbmdlZCBwYXRoczoKICBN IG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuQ29yZS9Nb25vRGV2ZWxvcC5Db3JlL0xvZ2dpbmdT ZXJ2aWNlLmNzCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuQ29yZS9Nb25v RGV2ZWxvcC5Db3JlL0xvZ2dpbmdTZXJ2aWNlLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMTgxLDIwICsx ODEsNiBAQCBpbnRlcm5hbCBzdGF0aWMgdm9pZCBSZXBvcnRVbmhhbmRsZWRFeGNlcHRpb24gKEV4 Y2VwdGlvbiBleCwgYm9vbCB3aWxsU2h1dERvd24sCiAJCQkJaWYgKFJlcG9ydENyYXNoZXMuSGFz VmFsdWUgJiYgIVJlcG9ydENyYXNoZXMuVmFsdWUpCiAJCQkJCXJldHVybjsKIAotCQkJCWJ5dGVb XSBkYXRhOwotCQkJCXVzaW5nICh2YXIgc3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSAoKSkgewot CQkJCQl1c2luZyAodmFyIHdyaXRlciA9IFN5c3RlbS5YbWwuWG1sV3JpdGVyLkNyZWF0ZSAoc3Ry ZWFtKSkgewotCQkJCQkJd3JpdGVyLldyaXRlU3RhcnRFbGVtZW50ICgiQ3Jhc2hMb2ciKTsKLQkJ CQkJCXdyaXRlci5Xcml0ZUF0dHJpYnV0ZVN0cmluZyAoInZlcnNpb24iLCBTZXJ2aWNlVmVyc2lv bik7Ci0KLQkJCQkJCXdyaXRlci5Xcml0ZUVsZW1lbnRTdHJpbmcgKCJTeXN0ZW1JbmZvcm1hdGlv biIsIFN5c3RlbUluZm9ybWF0aW9uLkdldFRleHREZXNjcmlwdGlvbiAoKSk7Ci0JCQkJCQl3cml0 ZXIuV3JpdGVFbGVtZW50U3RyaW5nICgiRXhjZXB0aW9uIiwgZXguVG9TdHJpbmcgKCkpOwotCi0J CQkJCQl3cml0ZXIuV3JpdGVFbmRFbGVtZW50ICgpOwotCQkJCQl9Ci0JCQkJCWRhdGEgPSBzdHJl YW0uVG9BcnJheSAoKTsKLQkJCQl9Ci0KIAkJCQl2YXIgY3VzdG9tRGF0YSA9IG5ldyBIYXNodGFi bGUgKCk7CiAJCQkJY3VzdG9tRGF0YVsiU3lzdGVtSW5mb3JtYXRpb24iXSA9IFN5c3RlbUluZm9y bWF0aW9uLkdldFRleHREZXNjcmlwdGlvbiAoKTsKIApAQCAtMjA0LDE3ICsxOTAsNiBAQCBpbnRl cm5hbCBzdGF0aWMgdm9pZCBSZXBvcnRVbmhhbmRsZWRFeGNlcHRpb24gKEV4Y2VwdGlvbiBleCwg Ym9vbCB3aWxsU2h1dERvd24sCiAJCQkJCX0pOwogCQkJCX0KIAotCQkJCS8vIExvZyB0byBkaXNr IG9ubHkgaWYgdXBsb2FkaW5nIGZhaWxzLgotCQkJCXZhciBmaWxlbmFtZSA9IHN0cmluZy5Gb3Jt YXQgKCJ7MH0uezF9LnsyfS5jcmFzaGxvZyIsIERhdGVUaW1lLlV0Y05vdy5Ub1N0cmluZyAoInl5 eXktTU0tZGRfX0hILW1tLXNzIiksIFN5c3RlbUluZm9ybWF0aW9uLlNlc3Npb25VdWlkLCBJbnRl cmxvY2tlZC5JbmNyZW1lbnQgKHJlZiBDcmFzaElkKSk7Ci0JCQkJVGhyZWFkUG9vbC5RdWV1ZVVz ZXJXb3JrSXRlbSAoZGVsZWdhdGUgewotCQkJCQlpZiAoIVRyeVVwbG9hZFJlcG9ydCAoZmlsZW5h bWUsIGRhdGEpKSB7Ci0JCQkJCQlpZiAoIURpcmVjdG9yeS5FeGlzdHMgKENyYXNoTG9nRGlyZWN0 b3J5KSkKLQkJCQkJCQlEaXJlY3RvcnkuQ3JlYXRlRGlyZWN0b3J5IChDcmFzaExvZ0RpcmVjdG9y eSk7Ci0KLQkJCQkJCUZpbGUuV3JpdGVBbGxCeXRlcyAoQ3Jhc2hMb2dEaXJlY3RvcnkuQ29tYmlu ZSAoZmlsZW5hbWUpLCBkYXRhKTsKLQkJCQkJfQotCQkJCX0pOwotCiAJCQkJLy9lbnN1cmUgd2Ug ZG9uJ3QgbG9zZSB0aGUgc2V0dGluZwogCQkJCWlmIChSZXBvcnRDcmFzaGVzICE9IG9sZFJlcG9y dENyYXNoZXMpIHsKIAkJCQkJUHJvcGVydHlTZXJ2aWNlLlNhdmVQcm9wZXJ0aWVzICgpOw0KDQog ICBDb21taXQ6IDYyZmUwYTA5ZmYxYjgyYmYzZDVkNzBjMWU1OWU4ZTNjYjE2YjMxNzcNCiAgIEF1 dGhvcjogTWlrZSBLcsO8Z2VyIDxta3J1ZWdlckB4YW1hcmluLmNvbT4gKG1rcnVlZ2VyKQ0KICAg ICBEYXRlOiAyMDEzLTExLTE2IDA2OjA2OjQ1IEdNVA0KICAgICAgVVJMOiBodHRwczovL2dpdGh1 Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21taXQvNjJmZTBhMDlmZjFiODJiZjNkNWQ3MGMxZTU5 ZThlM2NiMTZiMzE3Nw0KDQpGaXhlZCAnQnVnIDE2MjY4IC0gVHlwZSBzeXN0ZW0gZXhjZXB0aW9u cyBpbiB0aGUgbG9nJy4NCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1haW4vc3JjL2NvcmUvTW9ub0Rl dmVsb3AuSWRlL01vbm9EZXZlbG9wLklkZS5UeXBlU3lzdGVtL1R5cGVTeXN0ZW1TZXJ2aWNlLmNz Cg0KTW9kaWZpZWQ6IG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuSWRlL01vbm9EZXZlbG9wLklk ZS5UeXBlU3lzdGVtL1R5cGVTeXN0ZW1TZXJ2aWNlLmNzDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMTEyOCwx OSArMTEyOCwyNSBAQCBwdWJsaWMgdm9pZCBJbmZvcm1GaWxlQWRkZWQgKFBhcnNlZEZpbGVFdmVu dEFyZ3MgZSkKIAogCQkJW05vblNlcmlhbGl6ZWRdCiAJCQlpbnQgbG9hZE9wZXJhdGlvbkRlcHRo ID0gMDsKKwkJCVtOb25TZXJpYWxpemVkXQorCQkJcmVhZG9ubHkgb2JqZWN0IGxvYWRPcGVyYXRp b25Mb2NrZXIgPSBuZXcgb2JqZWN0ICgpOwogCi0JCQlpbnRlcm5hbCBpbnQgTG9hZE9wZXJhdGlv bkRlcHRoIHsKLQkJCQlnZXQgewotCQkJCQlyZXR1cm4gbG9hZE9wZXJhdGlvbkRlcHRoOwotCQkJ CX0KLQkJCQlzZXQgewotCQkJCQlsb2FkT3BlcmF0aW9uRGVwdGggPSB2YWx1ZTsKLQkJCQkJaWYg KGxvYWRPcGVyYXRpb25EZXB0aCA8IDApCi0JCQkJCQl0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlv bkV4Y2VwdGlvbiAoKTsKLQkJCQkJT25Mb2FkIChFdmVudEFyZ3MuRW1wdHkpOworCQkJaW50ZXJu YWwgdm9pZCBCZWdpbkxvYWRPcGVyYXRpb24gKCkKKwkJCXsKKwkJCQlsb2NrIChsb2FkT3BlcmF0 aW9uTG9ja2VyKSB7CisJCQkJCWxvYWRPcGVyYXRpb25EZXB0aCsrOwogCQkJCX0KIAkJCX0KIAor CQkJaW50ZXJuYWwgdm9pZCBFbmRMb2FkT3BlcmF0aW9uICgpCisJCQl7CisJCQkJbG9jayAobG9h ZE9wZXJhdGlvbkxvY2tlcikgeworCQkJCQlpZiAobG9hZE9wZXJhdGlvbkRlcHRoID4gMCkgewor CQkJCQkJbG9hZE9wZXJhdGlvbkRlcHRoLS07CisJCQkJCX0KKwkJCQl9CisJCQkJT25Mb2FkIChF dmVudEFyZ3MuRW1wdHkpOworCQkJfQogCQkJYm9vbCBpbkxvYWQ7CiAJCQlwdWJsaWMgYm9vbCBJ bkxvYWQgewogCQkJCWdldCB7CkBAIC0xMjY5LDcgKzEyNzUsNyBAQCBwdWJsaWMgTGF6eVByb2pl Y3RMb2FkZXIgKFByb2plY3RDb250ZW50V3JhcHBlciB3cmFwcGVyKQogCQkJCQl0aGlzLndyYXBw ZXIgPSB3cmFwcGVyOwogCQkJCQljb250ZXh0VGFzayA9IFRhc2suRmFjdG9yeS5TdGFydE5ldyAo ZGVsZWdhdGUgewogCQkJCQkJdHJ5IHsKLQkJCQkJCQl0aGlzLndyYXBwZXIuTG9hZE9wZXJhdGlv bkRlcHRoKys7CisJCQkJCQkJdGhpcy53cmFwcGVyLkJlZ2luTG9hZE9wZXJhdGlvbiAoKTsKIAkJ CQkJCQl2YXIgcCA9IHRoaXMud3JhcHBlci5Qcm9qZWN0OwogCQkJCQkJCXZhciBjb250ZXh0ID0g TG9hZFByb2plY3RDYWNoZSAocCk7CiAKQEAgLTEyODgsNyArMTI5NCw3IEBAIHB1YmxpYyBMYXp5 UHJvamVjdExvYWRlciAoUHJvamVjdENvbnRlbnRXcmFwcGVyIHdyYXBwZXIpCiAJCQkJCQkJUXVl dWVQYXJzZUpvYiAodGhpcy53cmFwcGVyKTsKIAkJCQkJCQlyZXR1cm4gY29udGV4dDsKIAkJCQkJ CX0gZmluYWxseSB7Ci0JCQkJCQkJdGhpcy53cmFwcGVyLkxvYWRPcGVyYXRpb25EZXB0aC0tOwor CQkJCQkJCXRoaXMud3JhcHBlci5FbmRMb2FkT3BlcmF0aW9uICgpOwogCQkJCQkJfQogCQkJCQl9 KTsKIAkJCQl9CkBAIC0yNTM3LDcgKzI1NDMsNyBAQCBwdWJsaWMgdm9pZCBSdW4gKElQcm9ncmVz c01vbml0b3IgbW9uaXRvcikKIAkJCQlUeXBlU3lzdGVtUGFyc2VyIHBhcnNlciA9IG51bGw7CiAJ CQkJdmFyIHRhZ3MgPSBDb250ZXh0LkdldEV4dGVuc2lvbk9iamVjdCA8UHJvamVjdENvbW1lbnRU YWdzPiAoKTsKIAkJCQl0cnkgewotCQkJCQlDb250ZXh0LkxvYWRPcGVyYXRpb25EZXB0aCsrOwor CQkJCQlDb250ZXh0LkJlZ2luTG9hZE9wZXJhdGlvbiAoKTsKIAkJCQkJZm9yZWFjaCAodmFyIGZp bGUgaW4gKEZpbGVMaXN0ID8/IENvbnRleHQuUHJvamVjdC5GaWxlcykpIHsKIAkJCQkJCXZhciBm aWxlTmFtZSA9IGZpbGUuRmlsZVBhdGg7CiAJCQkJCQlpZiAoZmlsZXNTa2lwcGVkSW5QYXJzZVRo cmVhZC5BbnkgKGYgPT4gZiA9PSBmaWxlTmFtZSkpCkBAIC0yNTU4LDcgKzI1NjQsNyBAQCBwdWJs aWMgdm9pZCBSdW4gKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKIAkJCQkJCUNvbnRleHQuSW5m b3JtRmlsZUFkZGVkIChuZXcgUGFyc2VkRmlsZUV2ZW50QXJncyAocGFyc2VkRG9jdW1lbnQuUGFy c2VkRmlsZSkpOwogCQkJCQl9CiAJCQkJfSBmaW5hbGx5IHsKLQkJCQkJQ29udGV4dC5Mb2FkT3Bl cmF0aW9uRGVwdGgtLTsKKwkJCQkJQ29udGV4dC5FbmRMb2FkT3BlcmF0aW9uICgpOwogCQkJCX0K IAkJCX0KIAkJfQpAQCAtMjYxNCw3ICsyNjIwLDcgQEAgc3RhdGljIHZvaWQgUXVldWVQYXJzZUpv YiAoUHJvamVjdENvbnRlbnRXcmFwcGVyIGNvbnRleHQsIElFbnVtZXJhYmxlPFByb2plY3RGaWwK IAkJCX07CiAJCQlsb2NrIChwYXJzZVF1ZXVlTG9jaykgewogCQkJCVJlbW92ZVBhcnNlSm9iIChj b250ZXh0KTsKLQkJCQljb250ZXh0LkxvYWRPcGVyYXRpb25EZXB0aCsrOworCQkJCWNvbnRleHQu QmVnaW5Mb2FkT3BlcmF0aW9uICgpOwogCQkJCXBhcnNlUXVldWVJbmRleCBbY29udGV4dF0gPSBq b2I7CiAJCQkJcGFyc2VRdWV1ZS5FbnF1ZXVlIChqb2IpOwogCQkJCXBhcnNlRXZlbnQuU2V0ICgp OwpAQCAtMjY1Miw3ICsyNjU4LDcgQEAgc3RhdGljIHZvaWQgUmVtb3ZlUGFyc2VKb2IgKFByb2pl Y3RDb250ZW50V3JhcHBlciBwcm9qZWN0KQogCQkJCVBhcnNpbmdKb2Igam9iOwogCQkJCWlmIChw YXJzZVF1ZXVlSW5kZXguVHJ5R2V0VmFsdWUgKHByb2plY3QsIG91dCBqb2IpKSB7CiAJCQkJCXBh cnNlUXVldWVJbmRleC5SZW1vdmUgKHByb2plY3QpOwotCQkJCQlwcm9qZWN0LkxvYWRPcGVyYXRp b25EZXB0aC0tOworCQkJCQlwcm9qZWN0LkVuZExvYWRPcGVyYXRpb24gKCk7CiAJCQkJfQogCQkJ fQogCQl9CkBAIC0yNzA1LDcgKzI3MTEsNyBAQCBzdGF0aWMgdm9pZCBDaGVja01vZGlmaWVkRmls ZXMgKFByb2plY3QgcHJvamVjdCwgUHJvamVjdEZpbGVbXSBwcm9qZWN0RmlsZXMsIFBybwogCQl7 CiAJCQljb250ZW50LlJ1bldoZW5Mb2FkZWQgKGRlbGVnYXRlKElQcm9qZWN0Q29udGVudCBjbnQp IHsKIAkJCQl0cnkgewotCQkJCQljb250ZW50LkxvYWRPcGVyYXRpb25EZXB0aCsrOworCQkJCQlj b250ZW50LkJlZ2luTG9hZE9wZXJhdGlvbiAoKTsKIAkJCQkJdmFyIG1vZGlmaWVkRmlsZXMgPSBu ZXcgTGlzdDxQcm9qZWN0RmlsZT4gKCk7CiAJCQkJCXZhciBvbGRGaWxlTmV3RmlsZSA9IG5ldyBM aXN0PFR1cGxlPFByb2plY3RGaWxlLCBJVW5yZXNvbHZlZEZpbGU+PiAoKTsKIApAQCAtMjc0Nyw3 ICsyNzUzLDcgQEAgc3RhdGljIHZvaWQgQ2hlY2tNb2RpZmllZEZpbGVzIChQcm9qZWN0IHByb2pl Y3QsIFByb2plY3RGaWxlW10gcHJvamVjdEZpbGVzLCBQcm8KIAkJCQl9IGNhdGNoIChFeGNlcHRp b24gZSkgewogCQkJCQlMb2dnaW5nU2VydmljZS5Mb2dFcnJvciAoIkV4Y2VwdGlvbiBpbiBjaGVj ayBtb2RpZmllZCBmaWxlcy4iLCBlKTsKIAkJCQl9IGZpbmFsbHkgewotCQkJCQljb250ZW50Lkxv YWRPcGVyYXRpb25EZXB0aC0tOworCQkJCQljb250ZW50LkVuZExvYWRPcGVyYXRpb24gKCk7CiAJ CQkJfQogCiAJCQl9KTsKQEAgLTI4MjAsNyArMjgyNiw3IEBAIHN0YXRpYyB2b2lkIENvbnN1bWVQ YXJzaW5nUXVldWUgKCkKIAkJCQkJCQkJbW9uaXRvciA9IEdldFBhcnNlUHJvZ3Jlc3NNb25pdG9y ICgpOwogCQkJCQkJCW1vbml0b3IuUmVwb3J0RXJyb3IgKG51bGwsIGV4KTsKIAkJCQkJCX0gZmlu YWxseSB7Ci0JCQkJCQkJam9iLkNvbnRleHQuTG9hZE9wZXJhdGlvbkRlcHRoLS07CisJCQkJCQkJ am9iLkNvbnRleHQuRW5kTG9hZE9wZXJhdGlvbiAoKTsKIAkJCQkJCX0KIAkJCQkJfQogCQkJCQkN Cg0KICAgQ29tbWl0OiA4MzQ0M2Y2NjJlM2IxZWE2NGU4YjZhZmU4MWU4MjdhMDQ4YzFkZmQ3DQog ICBBdXRob3I6IE1pa2UgS3LDvGdlciA8bWtydWVnZXJAeGFtYXJpbi5jb20+IChta3J1ZWdlcikN CiAgICAgRGF0ZTogMjAxMy0xMS0xNiAwNjoyMzowMSBHTVQNCiAgICAgIFVSTDogaHR0cHM6Ly9n aXRodWIuY29tL21vbm8vbW9ub2RldmVsb3AvY29tbWl0LzgzNDQzZjY2MmUzYjFlYTY0ZThiNmFm ZTgxZTgyN2EwNDhjMWRmZDcNCg0KRml4ZWQgJ0J1ZyAxNjI4MyAtIFdyb25nIGxpdGVyYWwgc3Ry aW5nIGFkZGl0aW9uJw0KDQpDaGFuZ2VkIHBhdGhzOgogIE0gbWFpbi9leHRlcm5hbC9ucmVmYWN0 b3J5CiAgTSBtYWluL3Rlc3RzL1VuaXRUZXN0cy9Nb25vRGV2ZWxvcC5DU2hhcnBCaW5kaW5nL09u VGhlRmx5Rm9ybWF0dGVyVGVzdHMuY3MKDQpNb2RpZmllZDogbWFpbi9leHRlcm5hbC9ucmVmYWN0 b3J5DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQpAQCAtMSArMSBAQAotU3VicHJvamVjdCBjb21taXQgMjA0NGVhMzZk M2NmODMxY2FjMWMwYzliZjZkZjBlZmRjZTAyMzBiMAorU3VicHJvamVjdCBjb21taXQgNDY3ZGQ3 NDgwMTllYWYwNDA0ODVkN2JmYjE2M2VhMDM4M2QyOGEzOA0KDQpNb2RpZmllZDogbWFpbi90ZXN0 cy9Vbml0VGVzdHMvTW9ub0RldmVsb3AuQ1NoYXJwQmluZGluZy9PblRoZUZseUZvcm1hdHRlclRl c3RzLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQpAQCAtMjczLDYgKzI3MywyMSBAQCBwdWJsaWMgdm9pZCBUZXN0 QnVnMTYxNzRfVmlydHVhbEluZGVudCAoKQogCQkJCUNvbnNvbGUuV3JpdGVMaW5lIChuZXdUZXh0 KTsKIAkJCUFzc2VydC5BcmVFcXVhbCAoZXhwZWN0ZWQsIG5ld1RleHQpOwogCQl9CisKKworCQkv Ly8gPHN1bW1hcnk+CisJCS8vLyBCdWcgMTYyODMgLSBXcm9uZyBsaXRlcmFsIHN0cmluZyBhZGRp dGlvbgorCQkvLy8gPC9zdW1tYXJ5PgorCQlbVGVzdF0KKwkJcHVibGljIHZvaWQgVGVzdEJ1ZzE2 MjgzICgpCisJCXsKKwkJCVRlc3RWaWV3Q29udGVudCBjb250ZW50OworCQkJdmFyIGV4dCA9IFNl dHVwICgiJFwiXFxkZXZcXG51bGwgezB9XCIiLCBvdXQgY29udGVudCk7CisJCQljb250ZW50Lkdl dFRleHRFZGl0b3JEYXRhICgpLkluc2VydCAoMCwgIkAiKTsKKwkJCWV4dC5LZXlQcmVzcyAoKEdk ay5LZXkpJ0AnLCAnQCcsIEdkay5Nb2RpZmllclR5cGUuTm9uZSk7CisJCQl2YXIgbmV3VGV4dCA9 IGNvbnRlbnQuVGV4dDsKKwkJCUFzc2VydC5BcmVFcXVhbCAoIkBcIlxcZGV2XG51bGwgezB9XCIi LCBuZXdUZXh0KTsKKwkJfQogCX0KIH0KIA0KDQogICBDb21taXQ6IDVjZjc1NTE0ZjYxMTZmZWQx ZTRhZGFkYWMwMmQ5YjJmMDllZTNiYTYNCiAgIEF1dGhvcjogTWlrZSBLcsO8Z2VyIDxta3J1ZWdl ckB4YW1hcmluLmNvbT4gKG1rcnVlZ2VyKQ0KICAgICBEYXRlOiAyMDEzLTExLTE2IDA2OjI1OjIz IEdNVA0KICAgICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21t aXQvNWNmNzU1MTRmNjExNmZlZDFlNGFkYWRhYzAyZDliMmYwOWVlM2JhNg0KDQpGaXhlZCAnQnVn IDE2MjgxIC0gRXJyb3IgY2xvc2luZyB0aGUgTW9ub0RldmVsb3AgcHJvamVjdCB1c2luZyA0LjIu MCcuDQoNCkNoYW5nZWQgcGF0aHM6CiAgTSBtYWluL3NyYy9jb3JlL01vbm9EZXZlbG9wLklkZS9N b25vRGV2ZWxvcC5JZGUuVHlwZVN5c3RlbS9UeXBlU3lzdGVtU2VydmljZS5jcwoNCk1vZGlmaWVk OiBtYWluL3NyYy9jb3JlL01vbm9EZXZlbG9wLklkZS9Nb25vRGV2ZWxvcC5JZGUuVHlwZVN5c3Rl bS9UeXBlU3lzdGVtU2VydmljZS5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTE3MzYsNyArMTczNiw4IEBA IGludGVybmFsIHN0YXRpYyB2b2lkIFVubG9hZFByb2plY3QgKFByb2plY3QgcHJvamVjdCkKIAkJ CQkKIAkJCVByb2plY3RDb250ZW50V3JhcHBlciB3cmFwcGVyOwogCQkJbG9jayAocHJvamVjdFdy YXBwZXJVcGRhdGVMb2NrKSB7Ci0JCQkJd3JhcHBlciA9IHByb2plY3RDb250ZW50cyBbcHJvamVj dF07CisJCQkJaWYgKCFwcm9qZWN0Q29udGVudHMuVHJ5R2V0VmFsdWUgKHByb2plY3QsIG91dCB3 cmFwcGVyKSkKKwkJCQkJcmV0dXJuOwogCQkJCXByb2plY3RDb250ZW50cy5SZW1vdmUgKHByb2pl Y3QpOwogCQkJfQogCQkJU3RvcmVQcm9qZWN0Q2FjaGUgKHByb2plY3QsIHdyYXBwZXIpOw0KDQog ICBDb21taXQ6IGZjZWFkNTc4OWU5NjI1NGNhYmM0N2M4ZWMxN2NiMWQ3YWM2MzU2OTgNCiAgIEF1 dGhvcjogU3RlcGhlbiBHcmVhbSA8c3RlcGhlbi5ncmVhbUBnbWFpbC5jb20+IChUaHJlZVRvZXMp DQogICAgIERhdGU6IDIwMTMtMTEtMTYgMTU6MDM6MzEgR01UDQogICAgICBVUkw6IGh0dHBzOi8v Z2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbW1pdC9mY2VhZDU3ODllOTYyNTRjYWJjNDdj OGVjMTdjYjFkN2FjNjM1Njk4DQoNCkZpeGVkIGEgYnVnIHdoZXJlIFhTUCB3b3VsZCBmYWlsIHRv IGxhdW5jaCB3aGVuIHVzaW5nIC5ORVQgNCBjb25maWd1cmF0aW9uIG9uIFdpbmRvd3MuIFBhdGgg Z2VuZXJhdG9yIHdvdWxkIGdlbmVyYXRlIHRoZSBjb3JyZWN0IHBhdGgsIGFuZCB0aGVuIHN3aXRj aCBpdCBvdXQgZm9yIHRoZSA0LjUgbGlicmFyeSBwYXRoIGluc3RlYWQuIFhTUCBpc24ndCBwYWNr YWdlZCBpbnRvIHRoYXQgZGlyZWN0b3J5IG9uIFdpbmRvd3MsIHNvIE1vbm9EZXZlbG9wIHdvdWxk IHRocm93IGFuIGV4Y2VwdGlvbiB3aGVuIGl0IGNvdWxkbid0IGZpbmQgaXQNCg0KQ2hhbmdlZCBw YXRoczoKICBNIG1haW4vc3JjL2FkZGlucy9Nb25vRGV2ZWxvcC5EZWJ1Z2dlci5Tb2Z0L01vbm9E ZXZlbG9wLkRlYnVnZ2VyLlNvZnQuQXNwTmV0L0FzcE5ldFNvZnREZWJ1Z2dlckVuZ2luZS5jcwoN Ck1vZGlmaWVkOiBtYWluL3NyYy9hZGRpbnMvTW9ub0RldmVsb3AuRGVidWdnZXIuU29mdC9Nb25v RGV2ZWxvcC5EZWJ1Z2dlci5Tb2Z0LkFzcE5ldC9Bc3BOZXRTb2Z0RGVidWdnZXJFbmdpbmUuY3MN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCkBAIC01Nyw3ICs1Nyw3IEBAIEZpbGVQYXRoIEdldEZ4RGlyIChNb25vVGFy Z2V0UnVudGltZSBydW50aW1lLCBDbHJWZXJzaW9uIHZlcnNpb24pCiAJCQkJcmV0dXJuIHByZWZp eC5Db21iaW5lICgibGliIiwgIm1vbm8iLCAiMi4wIik7CiAJCQljYXNlIENsclZlcnNpb24uTmV0 XzRfMDoKIAkJCQl2YXIgbmV0NDVQYXRoID0gcHJlZml4LkNvbWJpbmUgKCJsaWIiLCAibW9ubyIs ICI0LjUiKTsKLQkJCQlpZiAoRGlyZWN0b3J5LkV4aXN0cyAobmV0NDVQYXRoKSkgcmV0dXJuIG5l dDQ1UGF0aDsKKwkJCQlpZiAoRGlyZWN0b3J5LkV4aXN0cyAobmV0NDVQYXRoKSAmJiAhTW9ub0Rl dmVsb3AuQ29yZS5QbGF0Zm9ybS5Jc1dpbmRvd3MpIHJldHVybiBuZXQ0NVBhdGg7CiAJCQkJcmV0 dXJuIHByZWZpeC5Db21iaW5lICgibGliIiwgIm1vbm8iLCAiNC4wIik7CiAJCQljYXNlIENsclZl cnNpb24uTmV0XzRfNToKIAkJCQlyZXR1cm4gcHJlZml4LkNvbWJpbmUgKCJsaWIiLCAibW9ubyIs ICI0LjUiKTsNCg0KICAgQ29tbWl0OiA5YjZkMDVlODljOTA2NjQ5NmUxY2ZiY2FhZDdjMTNjZGY4 YTVkNjFjDQogICBBdXRob3I6IEFsYW4gTWNHb3Zlcm4gPGFsYW4ubWNnb3Zlcm5AZ21haWwuY29t PiAoYWxhbm1jZ292ZXJuKQ0KICAgICBEYXRlOiAyMDEzLTExLTE3IDE4OjAxOjA4IEdNVA0KICAg ICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21taXQvOWI2ZDA1 ZTg5YzkwNjY0OTZlMWNmYmNhYWQ3YzEzY2RmOGE1ZDYxYw0KDQpNZXJnZSBwdWxsIHJlcXVlc3Qg IzQzNyBmcm9tIFRocmVlVG9lcy9tYXN0ZXIKCkZpeGVkIGEgYnVnIHdoZXJlIFhTUCB3b3VsZCBm YWlsIHRvIGxhdW5jaCB3aGVuIHVzaW5nIC5ORVQgNCBjb25maWd1cmF0aW9uDQoNCkNoYW5nZWQg cGF0aHM6CiAgTSBtYWluL3NyYy9hZGRpbnMvTW9ub0RldmVsb3AuRGVidWdnZXIuU29mdC9Nb25v RGV2ZWxvcC5EZWJ1Z2dlci5Tb2Z0LkFzcE5ldC9Bc3BOZXRTb2Z0RGVidWdnZXJFbmdpbmUuY3MK DQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL01vbm9EZXZlbG9wLkRlYnVnZ2VyLlNvZnQvTW9u b0RldmVsb3AuRGVidWdnZXIuU29mdC5Bc3BOZXQvQXNwTmV0U29mdERlYnVnZ2VyRW5naW5lLmNz DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQpAQCAtNTcsNyArNTcsNyBAQCBGaWxlUGF0aCBHZXRGeERpciAoTW9ub1Rh cmdldFJ1bnRpbWUgcnVudGltZSwgQ2xyVmVyc2lvbiB2ZXJzaW9uKQogCQkJCXJldHVybiBwcmVm aXguQ29tYmluZSAoImxpYiIsICJtb25vIiwgIjIuMCIpOwogCQkJY2FzZSBDbHJWZXJzaW9uLk5l dF80XzA6CiAJCQkJdmFyIG5ldDQ1UGF0aCA9IHByZWZpeC5Db21iaW5lICgibGliIiwgIm1vbm8i LCAiNC41Iik7Ci0JCQkJaWYgKERpcmVjdG9yeS5FeGlzdHMgKG5ldDQ1UGF0aCkpIHJldHVybiBu ZXQ0NVBhdGg7CisJCQkJaWYgKERpcmVjdG9yeS5FeGlzdHMgKG5ldDQ1UGF0aCkgJiYgIU1vbm9E ZXZlbG9wLkNvcmUuUGxhdGZvcm0uSXNXaW5kb3dzKSByZXR1cm4gbmV0NDVQYXRoOwogCQkJCXJl dHVybiBwcmVmaXguQ29tYmluZSAoImxpYiIsICJtb25vIiwgIjQuMCIpOwogCQkJY2FzZSBDbHJW ZXJzaW9uLk5ldF80XzU6CiAJCQkJcmV0dXJuIHByZWZpeC5Db21iaW5lICgibGliIiwgIm1vbm8i LCAiNC41Iik7DQoNCiAgIENvbW1pdDogMDgwYTEzY2UwYjg1ZDQ3MjhkM2YyN2ZmNzcyMDQwZDlh YTc1ZTVhYQ0KICAgQXV0aG9yOiBUaGVyem9rIDx0ZXJvbWFyaW9AeWFob28uY29tPiAoVGhlcnpv aykNCiAgICAgRGF0ZTogMjAxMy0xMS0xNyAyMjo1NjoxNyBHTVQNCiAgICAgIFVSTDogaHR0cHM6 Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVsb3AvY29tbWl0LzA4MGExM2NlMGI4NWQ0NzI4ZDNm MjdmZjc3MjA0MGQ5YWE3NWU1YWENCg0KW1ZlcnNpb25Db250cm9sXSBJbXBsZW1lbnRlZCBiYWNr ZW5kIHNwZWNpZmljIHRlc3RzCgpJbmNsdWRlIGEgZml4dXAgZm9yIEdldFB1c2hEaWZmLg0KDQpD aGFuZ2VkIHBhdGhzOgogIE0gbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZl bG9wLlZlcnNpb25Db250cm9sLkdpdC5UZXN0cy9CYXNlR2l0UmVwb3NpdG9yeVRlc3RzLmNzCiAg TSBtYWluL3NyYy9hZGRpbnMvVmVyc2lvbkNvbnRyb2wvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRy b2wuR2l0LlRlc3RzL0Jhc2VSZXBvc2l0b3J5VGVzdHMuY3MKICBNIG1haW4vc3JjL2FkZGlucy9W ZXJzaW9uQ29udHJvbC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5HaXQvTW9ub0RldmVsb3Au VmVyc2lvbkNvbnRyb2wuR2l0L0dpdFJlcG9zaXRvcnkuY3MKICBNIG1haW4vc3JjL2FkZGlucy9W ZXJzaW9uQ29udHJvbC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5TdWJ2ZXJzaW9uLlRlc3Rz L0Jhc2VTdm5SZXBvc2l0b3J5VGVzdHMuY3MKICBNIG1haW4vc3JjL2FkZGlucy9WZXJzaW9uQ29u dHJvbC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5TdWJ2ZXJzaW9uLlRlc3RzL1JlcG9zaXRv cnlUZXN0cy5jcwogIE0gbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL1N1YnZlcnNpb24u V2luMzIuVGVzdHMvUmVwb3NpdG9yeVRlc3RzLmNzCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2FkZGlu cy9WZXJzaW9uQ29udHJvbC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5HaXQuVGVzdHMvQmFz ZUdpdFJlcG9zaXRvcnlUZXN0cy5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTMyLDE0ICszMiwxNCBAQAog dXNpbmcgTkdpdC5BcGk7DQogdXNpbmcgTlVuaXQuRnJhbWV3b3JrOw0KIHVzaW5nIFN5c3RlbS5J TzsNCi11c2luZyBTeXN0ZW07DQogdXNpbmcgTkdpdC5TdG9yYWdlLkZpbGU7DQogdXNpbmcgTkdp dC5SZXZ3YWxrOw0KK3VzaW5nIFN5c3RlbS5MaW5xOw0KIA0KIG5hbWVzcGFjZSBNb25vRGV2ZWxv cC5WZXJzaW9uQ29udHJvbC5HaXQuVGVzdHMNCiB7DQogCVtUZXN0Rml4dHVyZV0NCi0JcHVibGlj IGNsYXNzIEJhc2VHaXRVdGlsc1Rlc3QgOiBCYXNlUmVwb1V0aWxzVGVzdA0KKwlzZWFsZWQgY2xh c3MgQmFzZUdpdFV0aWxzVGVzdCA6IEJhc2VSZXBvVXRpbHNUZXN0DQogCXsNCiAJCVtTZXRVcF0N CiAJCXB1YmxpYyBvdmVycmlkZSB2b2lkIFNldHVwICgpDQpAQCAtMTYxLDYgKzE2MSwxODQgQEAg cHJvdGVjdGVkIG92ZXJyaWRlIHZvaWQgQmxhbWVFeHRyYUludGVybmFscyAoQW5ub3RhdGlvbiBb XSBhbm5vdGF0aW9ucykKIAkJCUFzc2VydC5Jc1RydWUgKGFubm90YXRpb25zIFsyXS5IYXNEYXRl KTsNCiAJCX0NCiANCisJCVtUZXN0XQ0KKwkJcHVibGljIHZvaWQgVGVzdEdpdFN0YXNoICgpDQor CQl7DQorCQkJdmFyIHJlcG8yID0gKEdpdFJlcG9zaXRvcnkpUmVwbzsNCisJCQlBZGRGaWxlICgi ZmlsZTIiLCAibm90aGluZyIsIHRydWUsIHRydWUpOw0KKwkJCUFkZEZpbGUgKCJmaWxlMSIsICJ0 ZXh0IiwgdHJ1ZSwgZmFsc2UpOw0KKwkJCXJlcG8yLkdldFN0YXNoZXMgKCkuQ3JlYXRlIChudWxs KTsNCisJCQlBc3NlcnQuSXNUcnVlICghRmlsZS5FeGlzdHMgKFJvb3RDaGVja291dCArICJmaWxl MSIpLCAiU3Rhc2ggY3JlYXRpb24gZmFpbHVyZSIpOw0KKwkJCXJlcG8yLkdldFN0YXNoZXMgKCku UG9wIChudWxsKTsNCisNCisJCQlWZXJzaW9uSW5mbyB2aSA9IHJlcG8yLkdldFZlcnNpb25JbmZv IChSb290Q2hlY2tvdXQgKyAiZmlsZTEiLCBWZXJzaW9uSW5mb1F1ZXJ5RmxhZ3MuSWdub3JlQ2Fj aGUpOw0KKwkJCUFzc2VydC5BcmVFcXVhbCAoVmVyc2lvblN0YXR1cy5TY2hlZHVsZWRBZGQsIHZp LlN0YXR1cyAmIFZlcnNpb25TdGF0dXMuU2NoZWR1bGVkQWRkLCAiU3Rhc2ggcG9wIGZhaWx1cmUi KTsNCisJCX0NCisNCisJCVtUZXN0XQ0KKwkJcHVibGljIHZvaWQgVGVzdEdpdEJyYW5jaENyZWF0 aW9uICgpDQorCQl7DQorCQkJdmFyIHJlcG8yID0gKEdpdFJlcG9zaXRvcnkpUmVwbzsNCisNCisJ CQlBZGRGaWxlICgiZmlsZTEiLCAidGV4dCIsIHRydWUsIHRydWUpOw0KKwkJCXJlcG8yLkNyZWF0 ZUJyYW5jaCAoImJyYW5jaDEiLCBudWxsKTsNCisNCisJCQlyZXBvMi5Td2l0Y2hUb0JyYW5jaCAo bmV3IE1vbm9EZXZlbG9wLkNvcmUuUHJvZ3Jlc3NNb25pdG9yaW5nLk51bGxQcm9ncmVzc01vbml0 b3IgKCksICJicmFuY2gxIik7DQorCQkJQXNzZXJ0LkFyZUVxdWFsICgiYnJhbmNoMSIsIHJlcG8y LkdldEN1cnJlbnRCcmFuY2ggKCkpOw0KKwkJCUFzc2VydC5Jc1RydWUgKEZpbGUuRXhpc3RzIChS b290Q2hlY2tvdXQgKyAiZmlsZTEiKSwgIkJyYW5jaCBub3QgaW5oZXJpdGluZyBmcm9tIGN1cnJl bnQuIik7DQorDQorCQkJQWRkRmlsZSAoImZpbGUyIiwgInRleHQiLCB0cnVlLCBmYWxzZSk7DQor CQkJcmVwbzIuQ3JlYXRlQnJhbmNoICgiYnJhbmNoMiIsIG51bGwpOw0KKwkJCXJlcG8yLlN3aXRj aFRvQnJhbmNoIChuZXcgTW9ub0RldmVsb3AuQ29yZS5Qcm9ncmVzc01vbml0b3JpbmcuTnVsbFBy b2dyZXNzTW9uaXRvciAoKSwgImJyYW5jaDIiKTsNCisJCQlBc3NlcnQuSXNUcnVlICghRmlsZS5F eGlzdHMgKFJvb3RDaGVja291dCArICJmaWxlMiIpLCAiVW5jb21taXR0ZWQgY2hhbmdlcyB3ZXJl IG5vdCBzdGFzaGVkIik7DQorCQkJcmVwbzIuR2V0U3Rhc2hlcyAoKS5Qb3AgKG5ldyBOdWxsUHJv Z3Jlc3NNb25pdG9yICgpKTsNCisNCisJCQlBc3NlcnQuSXNUcnVlIChGaWxlLkV4aXN0cyAoUm9v dENoZWNrb3V0ICsgImZpbGUyIiksICJVbmNvbW1pdHRlZCBjaGFuZ2VzIHdlcmUgbm90IHN0YXNo ZWQgY29ycmVjdGx5Iik7DQorDQorCQkJcmVwbzIuU3dpdGNoVG9CcmFuY2ggKG5ldyBNb25vRGV2 ZWxvcC5Db3JlLlByb2dyZXNzTW9uaXRvcmluZy5OdWxsUHJvZ3Jlc3NNb25pdG9yICgpLCAibWFz dGVyIik7DQorCQkJcmVwbzIuUmVtb3ZlQnJhbmNoICgiYnJhbmNoMSIpOw0KKwkJCUFzc2VydC5J c0ZhbHNlIChyZXBvMi5HZXRCcmFuY2hlcyAoKS5BbnkgKGIgPT4gYi5OYW1lID09ICJicmFuY2gx IiksICJGYWlsZWQgdG8gZGVsZXRlIGJyYW5jaCIpOw0KKw0KKwkJCXJlcG8yLlJlbmFtZUJyYW5j aCAoImJyYW5jaDIiLCAiYnJhbmNoMyIpOw0KKwkJCUFzc2VydC5Jc1RydWUgKHJlcG8yLkdldEJy YW5jaGVzICgpLkFueSAoYiA9PiBiLk5hbWUgPT0gImJyYW5jaDMiKSAmJiByZXBvMi5HZXRCcmFu Y2hlcyAoKS5BbGwgKGIgPT4gYi5OYW1lICE9ICJicmFuY2gyIiksICJGYWlsZWQgdG8gcmVuYW1l IGJyYW5jaCIpOw0KKwkJfQ0KKw0KKwkJW1Rlc3RdDQorCQlwdWJsaWMgdm9pZCBUZXN0R2l0U3lu Y0JyYW5jaGVzICgpDQorCQl7DQorCQkJdmFyIHJlcG8yID0gKEdpdFJlcG9zaXRvcnkpUmVwbzsN CisJCQlBZGRGaWxlICgiZmlsZTEiLCAidGV4dCIsIHRydWUsIHRydWUpOw0KKwkJCVBvc3RDb21t aXQgKHJlcG8yKTsNCisNCisJCQlyZXBvMi5DcmVhdGVCcmFuY2ggKCJicmFuY2gzIiwgbnVsbCk7 DQorCQkJcmVwbzIuU3dpdGNoVG9CcmFuY2ggKG5ldyBNb25vRGV2ZWxvcC5Db3JlLlByb2dyZXNz TW9uaXRvcmluZy5OdWxsUHJvZ3Jlc3NNb25pdG9yICgpLCAiYnJhbmNoMyIpOw0KKwkJCUFkZEZp bGUgKCJmaWxlMiIsICJhc2RmIiwgdHJ1ZSwgdHJ1ZSk7DQorCQkJcmVwbzIuUHVzaCAobmV3IE1v bm9EZXZlbG9wLkNvcmUuUHJvZ3Jlc3NNb25pdG9yaW5nLk51bGxQcm9ncmVzc01vbml0b3IgKCks ICJvcmlnaW4iLCAiYnJhbmNoMyIpOw0KKw0KKwkJCXJlcG8yLlN3aXRjaFRvQnJhbmNoIChuZXcg TW9ub0RldmVsb3AuQ29yZS5Qcm9ncmVzc01vbml0b3JpbmcuTnVsbFByb2dyZXNzTW9uaXRvciAo KSwgIm1hc3RlciIpOw0KKw0KKwkJCXJlcG8yLkNyZWF0ZUJyYW5jaCAoImJyYW5jaDQiLCAib3Jp Z2luL2JyYW5jaDMiKTsNCisJCQlyZXBvMi5Td2l0Y2hUb0JyYW5jaCAobmV3IE1vbm9EZXZlbG9w LkNvcmUuUHJvZ3Jlc3NNb25pdG9yaW5nLk51bGxQcm9ncmVzc01vbml0b3IgKCksICJicmFuY2g0 Iik7DQorCQkJQXNzZXJ0LklzVHJ1ZSAoRmlsZS5FeGlzdHMgKFJvb3RDaGVja291dCArICJmaWxl MiIpLCAiVHJhY2tpbmcgcmVtb3RlIGlzIG5vdCBncmFiYmluZyBjb3JyZWN0IGNvbW1pdHMiKTsN CisJCX0NCisNCisJCVtUZXN0XQ0KKwkJcHVibGljIHZvaWQgVGVzdFB1c2hDaGFuZ2VzZXQgKCkN CisJCXsNCisJCQl2YXIgcmVwbzIgPSAoR2l0UmVwb3NpdG9yeSlSZXBvOw0KKwkJCUFkZEZpbGUg KCJmaWxlIiwgIm1laCIsIHRydWUsIHRydWUpOw0KKwkJCVBvc3RDb21taXQgKHJlcG8yKTsNCisN CisJCQlBZGRGaWxlICgiZmlsZTEiLCAidGV4dCIsIHRydWUsIHRydWUpOw0KKwkJCUFkZEZpbGUg KCJmaWxlMiIsICJ0ZXh0MiIsIHRydWUsIHRydWUpOw0KKw0KKwkJCUNoYW5nZVNldCBkaWZmID0g cmVwbzIuR2V0UHVzaENoYW5nZVNldCAoIm9yaWdpbiIsICJtYXN0ZXIiKTsNCisJCQlBc3NlcnQu QXJlRXF1YWwgKDIsIGRpZmYuSXRlbXMuQ291bnQgKCkpOw0KKw0KKwkJCUNoYW5nZVNldEl0ZW0g aXRlbSA9IGRpZmYuR2V0RmlsZUl0ZW0gKFJvb3RDaGVja291dCArICJmaWxlMSIpOw0KKwkJCUFz c2VydC5Jc05vdE51bGwgKGl0ZW0pOw0KKwkJCUFzc2VydC5BcmVFcXVhbCAoVmVyc2lvblN0YXR1 cy5TY2hlZHVsZWRBZGQsIGl0ZW0uU3RhdHVzICYgVmVyc2lvblN0YXR1cy5TY2hlZHVsZWRBZGQp Ow0KKw0KKwkJCWl0ZW0gPSBkaWZmLkdldEZpbGVJdGVtIChSb290Q2hlY2tvdXQgKyAiZmlsZTEi KTsNCisJCQlBc3NlcnQuSXNOb3ROdWxsIChpdGVtKTsNCisJCQlBc3NlcnQuQXJlRXF1YWwgKFZl cnNpb25TdGF0dXMuU2NoZWR1bGVkQWRkLCBpdGVtLlN0YXR1cyAmIFZlcnNpb25TdGF0dXMuU2No ZWR1bGVkQWRkKTsNCisJCX0NCisNCisJCVtUZXN0XQ0KKwkJW0lnbm9yZSAoIkdldFB1c2hEaWZm IGNvbnRlbnQgaXMgYWx3YXlzIGVtcHR5IildDQorCQlwdWJsaWMgdm9pZCBUZXN0UHVzaERpZmYg KCkNCisJCXsNCisJCQl2YXIgcmVwbzIgPSAoR2l0UmVwb3NpdG9yeSlSZXBvOw0KKwkJCUFkZEZp bGUgKCJmaWxlIiwgIm1laCIsIHRydWUsIHRydWUpOw0KKwkJCVBvc3RDb21taXQgKHJlcG8yKTsN CisNCisJCQlBZGRGaWxlICgiZmlsZTEiLCAidGV4dCIsIHRydWUsIHRydWUpOw0KKwkJCUFkZEZp bGUgKCJmaWxlMiIsICJ0ZXh0MiIsIHRydWUsIHRydWUpOw0KKw0KKwkJCURpZmZJbmZvW10gZGlm ZiA9IHJlcG8yLkdldFB1c2hEaWZmICgib3JpZ2luIiwgIm1hc3RlciIpOw0KKwkJCUFzc2VydC5B cmVFcXVhbCAoMiwgZGlmZi5MZW5ndGgpOw0KKw0KKwkJCURpZmZJbmZvIGl0ZW0gPSBkaWZmIFsw XTsNCisJCQlBc3NlcnQuSXNOb3ROdWxsIChpdGVtKTsNCisJCQlBc3NlcnQuQXJlRXF1YWwgKCJm aWxlMSIsIGl0ZW0uRmlsZU5hbWUuRmlsZU5hbWUpOw0KKwkJCS8vQXNzZXJ0LkFyZUVxdWFsICgi dGV4dCIsIGl0ZW0uQ29udGVudCk7DQorDQorCQkJaXRlbSA9IGRpZmYgWzFdOw0KKwkJCUFzc2Vy dC5Jc05vdE51bGwgKGl0ZW0pOw0KKwkJCUFzc2VydC5BcmVFcXVhbCAoImZpbGUyIiwgaXRlbS5G aWxlTmFtZS5GaWxlTmFtZSk7DQorCQkJLy9Bc3NlcnQuQXJlRXF1YWwgKCJ0ZXh0MiIsIGl0ZW0u Q29udGVudCk7DQorCQl9DQorDQorCQlbVGVzdF0NCisJCXB1YmxpYyB2b2lkIFRlc3RHaXRVcmwg KCkNCisJCXsNCisJCQl2YXIgcmVwbzIgPSAoR2l0UmVwb3NpdG9yeSlSZXBvOw0KKwkJCUFzc2Vy dC5Jc1RydWUgKHJlcG8yLklzVXJsVmFsaWQgKCJnaXRAZ2l0aHViLmNvbTptb25vL21vbm9kZXZl bG9wIikpOw0KKwkJCUFzc2VydC5Jc1RydWUgKHJlcG8yLklzVXJsVmFsaWQgKCJnaXQ6Ly9naXRo dWIuY29tOjgwL21vbm8vbW9ub2RldmVsb3AuZ2l0IikpOw0KKwkJCUFzc2VydC5Jc1RydWUgKHJl cG8yLklzVXJsVmFsaWQgKCJzc2g6Ly91c2VyQGhvc3QuY29tOjgwL21vbm8vbW9ub2RldmVsb3Au Z2l0IikpOw0KKwkJCUFzc2VydC5Jc1RydWUgKHJlcG8yLklzVXJsVmFsaWQgKCJodHRwOi8vZ2l0 aHViLmNvbTo4MC9tb25vL21vbm9kZXZlbG9wLmdpdCIpKTsNCisJCQlBc3NlcnQuSXNUcnVlIChy ZXBvMi5Jc1VybFZhbGlkICgiaHR0cHM6Ly9naXRodWIuY29tOjgwL21vbm8vbW9ub2RldmVsb3Au Z2l0IikpOw0KKwkJCUFzc2VydC5Jc1RydWUgKHJlcG8yLklzVXJsVmFsaWQgKCJmdHA6Ly9naXRo dWIuY29tOjgwL21vbm8vbW9ub2RldmVsb3AuZ2l0IikpOw0KKwkJCUFzc2VydC5Jc1RydWUgKHJl cG8yLklzVXJsVmFsaWQgKCJmdHBzOi8vZ2l0aHViLmNvbTo4MC9tb25vL21vbm9kZXZlbG9wLmdp dCIpKTsNCisJCQlBc3NlcnQuSXNUcnVlIChyZXBvMi5Jc1VybFZhbGlkICgiZmlsZTovLy9tb25v L21vbm9kZXZlbG9wLmdpdCIpKTsNCisJCQlBc3NlcnQuSXNUcnVlIChyZXBvMi5Jc1VybFZhbGlk ICgicnN5bmM6Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVscG8uZ2l0IikpOw0KKwkJfQ0KKw0K KwkJW1Rlc3RdDQorCQlwdWJsaWMgdm9pZCBUZXN0UmVtb3RlICgpDQorCQl7DQorCQkJdmFyIHJl cG8yID0gKEdpdFJlcG9zaXRvcnkpUmVwbzsNCisNCisJCQlBc3NlcnQuQXJlRXF1YWwgKCJvcmln aW4iLCByZXBvMi5HZXRDdXJyZW50UmVtb3RlICgpKTsNCisNCisJCQlBZGRGaWxlICgiZmlsZTEi LCAidGV4dCIsIHRydWUsIHRydWUpOw0KKwkJCVBvc3RDb21taXQgKHJlcG8yKTsNCisJCQlyZXBv Mi5DcmVhdGVCcmFuY2ggKCJicmFuY2gxIiwgbnVsbCk7DQorCQkJcmVwbzIuU3dpdGNoVG9CcmFu Y2ggKG5ldyBNb25vRGV2ZWxvcC5Db3JlLlByb2dyZXNzTW9uaXRvcmluZy5OdWxsUHJvZ3Jlc3NN b25pdG9yICgpLCAiYnJhbmNoMSIpOw0KKwkJCUFkZEZpbGUgKCJmaWxlMiIsICJ0ZXh0IiwgdHJ1 ZSwgdHJ1ZSk7DQorCQkJUG9zdENvbW1pdCAocmVwbzIpOw0KKwkJCUFzc2VydC5BcmVFcXVhbCAo MiwgcmVwbzIuR2V0QnJhbmNoZXMgKCkuQ291bnQgKCkpOw0KKwkJCUFzc2VydC5BcmVFcXVhbCAo MSwgcmVwbzIuR2V0UmVtb3RlcyAoKS5Db3VudCAoKSk7DQorDQorCQkJcmVwbzIuUmVuYW1lUmVt b3RlICgib3JpZ2luIiwgIm90aGVyIik7DQorCQkJQXNzZXJ0LkFyZUVxdWFsICgib3RoZXIiLCBy ZXBvMi5HZXRDdXJyZW50UmVtb3RlICgpKTsNCisNCisJCQlyZXBvMi5SZW1vdmVSZW1vdGUgKCJv dGhlciIpOw0KKwkJCUFzc2VydC5Jc0ZhbHNlIChyZXBvMi5HZXRSZW1vdGVzICgpLkFueSAoKSk7 DQorCQl9DQorDQorCQlbVGVzdF0NCisJCXB1YmxpYyB2b2lkIFRlc3RJc01lcmdlZCAoKQ0KKwkJ ew0KKwkJCXZhciByZXBvMiA9IChHaXRSZXBvc2l0b3J5KVJlcG87DQorCQkJQWRkRmlsZSAoImZp bGUxIiwgInRleHQiLCB0cnVlLCB0cnVlKTsNCisNCisJCQlBc3NlcnQuSXNUcnVlIChyZXBvMi5J c0JyYW5jaE1lcmdlZCAoIm1hc3RlciIpKTsNCisNCisJCQlyZXBvMi5DcmVhdGVCcmFuY2ggKCJi cmFuY2gxIiwgbnVsbCk7DQorCQkJcmVwbzIuU3dpdGNoVG9CcmFuY2ggKG5ldyBNb25vRGV2ZWxv cC5Db3JlLlByb2dyZXNzTW9uaXRvcmluZy5OdWxsUHJvZ3Jlc3NNb25pdG9yICgpLCAiYnJhbmNo MSIpOw0KKwkJCUFkZEZpbGUgKCJmaWxlMiIsICJ0ZXh0IiwgdHJ1ZSwgdHJ1ZSk7DQorDQorCQkJ cmVwbzIuU3dpdGNoVG9CcmFuY2ggKG5ldyBNb25vRGV2ZWxvcC5Db3JlLlByb2dyZXNzTW9uaXRv cmluZy5OdWxsUHJvZ3Jlc3NNb25pdG9yICgpLCAibWFzdGVyIik7DQorCQkJQXNzZXJ0LklzRmFs c2UgKHJlcG8yLklzQnJhbmNoTWVyZ2VkICgiYnJhbmNoMSIpKTsNCisJCQlyZXBvMi5NZXJnZSAo ImJyYW5jaDEiLCBHaXRVcGRhdGVPcHRpb25zLk5vcm1hbFVwZGF0ZSwgbmV3IE1vbm9EZXZlbG9w LkNvcmUuUHJvZ3Jlc3NNb25pdG9yaW5nLk51bGxQcm9ncmVzc01vbml0b3IgKCkpOw0KKwkJCUFz c2VydC5Jc1RydWUgKHJlcG8yLklzQnJhbmNoTWVyZ2VkICgiYnJhbmNoMSIpKTsNCisJCX0NCisN CisJCVtUZXN0XQ0KKwkJcHVibGljIHZvaWQgVGVzdFRhZ3MgKCkNCisJCXsNCisJCQl2YXIgcmVw bzIgPSAoR2l0UmVwb3NpdG9yeSlSZXBvOw0KKwkJCUFkZEZpbGUgKCJmaWxlMSIsICJ0ZXh0Iiwg dHJ1ZSwgdHJ1ZSk7DQorCQkJcmVwbzIuQWRkVGFnICgidGFnMSIsIEdldEhlYWRSZXZpc2lvbiAo KSwgIm15LXRhZyIpOw0KKwkJCUFzc2VydC5BcmVFcXVhbCAoMSwgcmVwbzIuR2V0VGFncyAoKS5D b3VudCAoKSk7DQorCQkJQXNzZXJ0LkFyZUVxdWFsICgidGFnMSIsIHJlcG8yLkdldFRhZ3MgKCku Rmlyc3QgKCkpOw0KKwkJCXJlcG8yLlJlbW92ZVRhZyAoInRhZzEiKTsNCisJCQlBc3NlcnQuQXJl RXF1YWwgKDAsIHJlcG8yLkdldFRhZ3MgKCkuQ291bnQgKCkpOw0KKwkJfQ0KKw0KKwkJLy8gVE9E TzogVGVzdCByZWJhc2UgYW5kIG1lcmdlIC0gVGhpcyBpcyBicm9rZW4gb24gV2luZG93cw0KKw0K IAkJcHJvdGVjdGVkIG92ZXJyaWRlIFJlcG9zaXRvcnkgR2V0UmVwbyAoc3RyaW5nIHBhdGgsIHN0 cmluZyB1cmwpDQogCQl7DQogCQkJcmV0dXJuIG5ldyBHaXRSZXBvc2l0b3J5IChwYXRoLCB1cmwp Ow0NCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2FkZGlucy9WZXJzaW9uQ29udHJvbC9Nb25vRGV2ZWxv cC5WZXJzaW9uQ29udHJvbC5HaXQuVGVzdHMvQmFzZVJlcG9zaXRvcnlUZXN0cy5jcw0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KQEAgLTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFjZSBNb25vRGV2ZWxvcC5WZXJzaW9uQ29u dHJvbC5UZXN0cwogewogCVtUZXN0Rml4dHVyZV0KLQlwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFz ZVJlcG9VdGlsc1Rlc3QKKwlhYnN0cmFjdCBjbGFzcyBCYXNlUmVwb1V0aWxzVGVzdAogCXsKIAkJ Ly8gW0dpdF0gU2V0IHVzZXIgYW5kIGVtYWlsLgogCQlwcm90ZWN0ZWQgY29uc3Qgc3RyaW5nIEF1 dGhvciA9ICJhdXRob3IiOw0KDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250 cm9sL01vbm9EZXZlbG9wLlZlcnNpb25Db250cm9sLkdpdC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29u dHJvbC5HaXQvR2l0UmVwb3NpdG9yeS5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTE1NTcsNyArMTU1Nyw3 IEBAIHB1YmxpYyBDaGFuZ2VTZXQgR2V0UHVzaENoYW5nZVNldCAoc3RyaW5nIHJlbW90ZSwgc3Ry aW5nIGJyYW5jaCkKIAkJCUNoYW5nZVNldCBjc2V0ID0gQ3JlYXRlQ2hhbmdlU2V0IChSb290UGF0 aCk7CiAJCQlPYmplY3RJZCBjaWQxID0gUm9vdFJlcG9zaXRvcnkuUmVzb2x2ZSAocmVtb3RlICsg Ii8iICsgYnJhbmNoKTsKIAkJCU9iamVjdElkIGNpZDIgPSBSb290UmVwb3NpdG9yeS5SZXNvbHZl IChSb290UmVwb3NpdG9yeS5HZXRCcmFuY2ggKCkpOwotCQkJUmV2V2FsayBydyA9IG5ldyBSZXZX YWxrIChSb290UmVwb3NpdG9yeSk7CisJCQlSZXZXYWxrCXJ3ID0gbmV3IFJldldhbGsgKFJvb3RS ZXBvc2l0b3J5KTsKIAkJCVJldkNvbW1pdCBjMSA9IHJ3LlBhcnNlQ29tbWl0IChjaWQxKTsKIAkJ CVJldkNvbW1pdCBjMiA9IHJ3LlBhcnNlQ29tbWl0IChjaWQyKTsKIAkJCQpAQCAtMTU4OSw3ICsx NTg5LDcgQEAgcHVibGljIERpZmZJbmZvW10gR2V0UHVzaERpZmYgKHN0cmluZyByZW1vdGUsIHN0 cmluZyBicmFuY2gpCiAJCQlSZXZDb21taXQgYzIgPSBydy5QYXJzZUNvbW1pdCAoY2lkMik7CiAJ CQkKIAkJCUxpc3Q8RGlmZkluZm8+IGRpZmZzID0gbmV3IExpc3Q8RGlmZkluZm8+ICgpOwotCQkJ Zm9yZWFjaCAodmFyIGNoYW5nZSBpbiBHaXRVdGlsLkNvbXBhcmVDb21taXRzIChSb290UmVwb3Np dG9yeSwgYzEsIGMyKSkgeworCQkJZm9yZWFjaCAodmFyIGNoYW5nZSBpbiBHaXRVdGlsLkNvbXBh cmVDb21taXRzIChSb290UmVwb3NpdG9yeSwgYzIsIGMxKSkgewogCQkJCXN0cmluZyBkaWZmOwog CQkJCXN3aXRjaCAoY2hhbmdlLkdldENoYW5nZVR5cGUgKCkpIHsKIAkJCQljYXNlIERpZmZFbnRy eS5DaGFuZ2VUeXBlLkRFTEVURToNCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2FkZGlucy9WZXJzaW9u Q29udHJvbC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5TdWJ2ZXJzaW9uLlRlc3RzL0Jhc2VT dm5SZXBvc2l0b3J5VGVzdHMuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC0zMyw5ICszMyw5IEBACiBuYW1l c3BhY2UgTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuU3VidmVyc2lvbi5UZXN0cw0KIHsNCiAJ W1Rlc3RGaXh0dXJlXQ0KLQlwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZVN2blV0aWxzVGVzdCA6 IEJhc2VSZXBvVXRpbHNUZXN0DQorCWFic3RyYWN0IGNsYXNzIEJhc2VTdm5VdGlsc1Rlc3QgOiBC YXNlUmVwb1V0aWxzVGVzdA0KIAl7DQotCQlwcm90ZWN0ZWQgUHJvY2VzcyBzdm5TZXJ2ZSA9IG51 bGw7DQorCQlwcm90ZWN0ZWQgUHJvY2VzcyBTdm5TZXJ2ZSA9IG51bGw7DQogDQogCQlbU2V0VXBd DQogCQlwdWJsaWMgb3ZlcnJpZGUgdm9pZCBTZXR1cCAoKQ0KQEAgLTU5LDEzICs1OSwxMyBAQCBw dWJsaWMgb3ZlcnJpZGUgdm9pZCBTZXR1cCAoKQogCQkJLy8gQ3JlYXRlIGhvc3QgKFdpbjMyKQ0K IAkJCS8vIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciBkb2luZyB0aGUgc3ZuQWRtaW4gY3Jl YXRpb24uDQogCQkJLy8gQW5kIGJlZm9yZSBjaGVja291dC4NCi0JCQlpZiAoc3ZuU2VydmUgIT0g bnVsbCkgew0KKwkJCWlmIChTdm5TZXJ2ZSAhPSBudWxsKSB7DQogCQkJCWluZm8gPSBuZXcgUHJv Y2Vzc1N0YXJ0SW5mbyAoKTsNCiAJCQkJaW5mby5GaWxlTmFtZSA9ICJzdm5zZXJ2ZSI7DQogCQkJ CWluZm8uQXJndW1lbnRzID0gIi1kciAiICsgUm9vdFVybDsNCiAJCQkJaW5mby5XaW5kb3dTdHls ZSA9IFByb2Nlc3NXaW5kb3dTdHlsZS5IaWRkZW47DQotCQkJCXN2blNlcnZlLlN0YXJ0SW5mbyA9 IGluZm87DQotCQkJCXN2blNlcnZlLlN0YXJ0ICgpOw0KKwkJCQlTdm5TZXJ2ZS5TdGFydEluZm8g PSBpbmZvOw0KKwkJCQlTdm5TZXJ2ZS5TdGFydCAoKTsNCiANCiAJCQkJLy8gQ3JlYXRlIHVzZXIg dG8gYXV0aC4NCiAJCQkJdXNpbmcgKHZhciBwZXJtID0gRmlsZS4gQ3JlYXRlVGV4dCAoUm9vdFVy bCArIFBhdGguRGlyZWN0b3J5U2VwYXJhdG9yQ2hhciArICJyZXBvIiArDQ0KDQpNb2RpZmllZDog bWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZlbG9wLlZlcnNpb25Db250cm9s LlN1YnZlcnNpb24uVGVzdHMvUmVwb3NpdG9yeVRlc3RzLmNzDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMzYs NyArMzYsNyBAQAogbmFtZXNwYWNlIFZlcnNpb25Db250cm9sLlN1YnZlcnNpb24uVW5peC5UZXN0 cwogewogCVtUZXN0Rml4dHVyZV0KLQlwdWJsaWMgY2xhc3MgVW5peFN2blV0aWxzVGVzdCA6IE1v bm9EZXZlbG9wLlZlcnNpb25Db250cm9sLlN1YnZlcnNpb24uVGVzdHMuQmFzZVN2blV0aWxzVGVz dAorCXNlYWxlZCBjbGFzcyBVbml4U3ZuVXRpbHNUZXN0IDogTW9ub0RldmVsb3AuVmVyc2lvbkNv bnRyb2wuU3VidmVyc2lvbi5UZXN0cy5CYXNlU3ZuVXRpbHNUZXN0CiAJewogCQlTdWJ2ZXJzaW9u QmFja2VuZCBTdm5DbGllbnQgewogCQkJZ2V0IHsgcmV0dXJuIFJlcG8uU3ZuOyB9DQoNCk1vZGlm aWVkOiBtYWluL3NyYy9hZGRpbnMvVmVyc2lvbkNvbnRyb2wvU3VidmVyc2lvbi5XaW4zMi5UZXN0 cy9SZXBvc2l0b3J5VGVzdHMuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC0zNiwyMSArMzYsMjEgQEAKIG5h bWVzcGFjZSBNb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5TdWJ2ZXJzaW9uLlRlc3RzDQogew0K IAlbVGVzdEZpeHR1cmVdDQotCXB1YmxpYyBjbGFzcyBTaGFycFN2blV0aWxzVGVzdCA6IEJhc2VT dm5VdGlsc1Rlc3QNCisJc2VhbGVkIGNsYXNzIFNoYXJwU3ZuVXRpbHNUZXN0IDogQmFzZVN2blV0 aWxzVGVzdA0KIAl7DQogCQlbU2V0VXBdDQogCQlwdWJsaWMgb3ZlcnJpZGUgdm9pZCBTZXR1cCAo KQ0KIAkJew0KIAkJCVJvb3RVcmwgPSBuZXcgRmlsZVBhdGggKEZpbGVTZXJ2aWNlLkNyZWF0ZVRl bXBEaXJlY3RvcnkgKCkpOw0KIAkJCVJlcG9Mb2NhdGlvbiA9ICJzdm46Ly9sb2NhbGhvc3Q6MzY5 MC9yZXBvIjsNCi0JCQlzdm5TZXJ2ZSA9IG5ldyBQcm9jZXNzICgpOw0KKwkJCVN2blNlcnZlID0g bmV3IFByb2Nlc3MgKCk7DQogCQkJYmFzZS5TZXR1cCAoKTsNCiAJCX0NCiANCiAJCVtUZWFyRG93 bl0NCiAJCXB1YmxpYyBvdmVycmlkZSB2b2lkIFRlYXJEb3duICgpDQogCQl7DQotCQkJc3ZuU2Vy dmUuS2lsbCAoKTsNCisJCQlTdm5TZXJ2ZS5LaWxsICgpOw0KIA0KIAkJCWJhc2UuVGVhckRvd24g KCk7DQogCQl9DQ0KDQogICBDb21taXQ6IDgwOWU1MTdiZDQ4MThmNzc2MzA1OGZiZjUxNTcyZDli M2UxNmMwZGMNCiAgIEF1dGhvcjogVGhlcnpvayA8dGVyb21hcmlvQHlhaG9vLmNvbT4gKFRoZXJ6 b2spDQogICAgIERhdGU6IDIwMTMtMTEtMTggMDE6MTc6MDAgR01UDQogICAgICBVUkw6IGh0dHBz Oi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbW1pdC84MDllNTE3YmQ0ODE4Zjc3NjMw NThmYmY1MTU3MmQ5YjNlMTZjMGRjDQoNCltDb2RlIElzc3VlcyBQYWRdIEZpeGVkIE5SRSBvbiB1 c2luZyBjb21ib2JveCBiZWZvcmUgcnVubmluZyBhbmFseXNpcw0KDQpDaGFuZ2VkIHBhdGhzOgog IE0gbWFpbi9zcmMvYWRkaW5zL01vbm9EZXZlbG9wLlJlZmFjdG9yaW5nL01vbm9EZXZlbG9wLkNv ZGVJc3N1ZXMvQ29kZUlzc3VlUGFkLmNzCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2FkZGlucy9Nb25v RGV2ZWxvcC5SZWZhY3RvcmluZy9Nb25vRGV2ZWxvcC5Db2RlSXNzdWVzL0NvZGVJc3N1ZVBhZC5j cw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KQEAgLTI5OSw2ICsyOTksOSBAQCB2b2lkIFNldE5vZGUgKFRyZWVOYXZp Z2F0b3IgbmF2aWdhdG9yLCBJSXNzdWVUcmVlTm9kZSBub2RlKQogCiAJCXZvaWQgQ2xlYXJTaWJs aW5nTm9kZXMgKFRyZWVOYXZpZ2F0b3IgbmF2aWdhdG9yKQogCQl7CisJCQlpZiAobmF2aWdhdG9y ID09IG51bGwpCisJCQkJcmV0dXJuOworCiAJCQlkbyB7CiAJCQkJdmFyIG5vZGUgPSBuYXZpZ2F0 b3IuR2V0VmFsdWUgKG5vZGVGaWVsZCk7CiAJCQkJaWYgKG5vZGUgIT0gbnVsbCkgew0KDQogICBD b21taXQ6IDc1ODE2NDUxYzM3N2RiMjQwM2EwNWZjY2I3Y2M5ODhlMzZmODAzMTMNCiAgIEF1dGhv cjogVGhlcnpvayA8dGVyb21hcmlvQHlhaG9vLmNvbT4gKFRoZXJ6b2spDQogICAgIERhdGU6IDIw MTMtMTEtMTggMDE6Mjk6MTEgR01UDQogICAgICBVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb25v L21vbm9kZXZlbG9wL2NvbW1pdC83NTgxNjQ1MWMzNzdkYjI0MDNhMDVmY2NiN2NjOTg4ZTM2Zjgw MzEzDQoNCkZpeHVwIHRvIHByZXZpb3VzIHJldmlzaW9uLgoKRGFtbiB5b3Ugc2F2ZSENCg0KQ2hh bmdlZCBwYXRoczoKICBNIG1haW4vc3JjL2FkZGlucy9Nb25vRGV2ZWxvcC5SZWZhY3RvcmluZy9N b25vRGV2ZWxvcC5Db2RlSXNzdWVzL0NvZGVJc3N1ZVBhZC5jcwoNCk1vZGlmaWVkOiBtYWluL3Ny Yy9hZGRpbnMvTW9ub0RldmVsb3AuUmVmYWN0b3JpbmcvTW9ub0RldmVsb3AuQ29kZUlzc3Vlcy9D b2RlSXNzdWVQYWQuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC0yOTksNyArMjk5LDcgQEAgdm9pZCBTZXRO b2RlIChUcmVlTmF2aWdhdG9yIG5hdmlnYXRvciwgSUlzc3VlVHJlZU5vZGUgbm9kZSkKIAogCQl2 b2lkIENsZWFyU2libGluZ05vZGVzIChUcmVlTmF2aWdhdG9yIG5hdmlnYXRvcikKIAkJewotCQkJ aWYgKG5hdmlnYXRvciA9PSBudWxsKQorCQkJaWYgKG5hdmlnYXRvci5DdXJyZW50UG9zaXRpb24g PT0gbnVsbCkKIAkJCQlyZXR1cm47CiAKIAkJCWRvIHsNCg0KICAgQ29tbWl0OiBiMzM1MTgxY2Ex NTlkYmI3ODA5OGNjNjM0ZDZmOGY0YTU0NmIyM2U0DQogICBBdXRob3I6IE1pa2UgS3LDvGdlciA8 bWtydWVnZXJAeGFtYXJpbi5jb20+IChta3J1ZWdlcikNCiAgICAgRGF0ZTogMjAxMy0xMS0xOCAw Nzo1ODowNCBHTVQNCiAgICAgIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVs b3AvY29tbWl0L2IzMzUxODFjYTE1OWRiYjc4MDk4Y2M2MzRkNmY4ZjRhNTQ2YjIzZTQNCg0KSW1w bGVtZW50ZWQgJ0J1ZyAxNjIyOCAtIE5hbWVzcGFjZXMgaW4gdG9vbHRpcHMnLg0KDQpDaGFuZ2Vk IHBhdGhzOgogIE0gbWFpbi9zcmMvYWRkaW5zL0NTaGFycEJpbmRpbmcvTW9ub0RldmVsb3AuQ1No YXJwLkNvbXBsZXRpb24vTWVtYmVyQ29tcGxldGlvbkRhdGEuY3MKICBNIG1haW4vc3JjL2FkZGlu cy9DU2hhcnBCaW5kaW5nL01vbm9EZXZlbG9wLkNTaGFycC5Ub29sdGlwcy9MYW5ndWFnZUl0ZW1U b29sdGlwUHJvdmlkZXIuY3MKICBNIG1haW4vc3JjL2FkZGlucy9DU2hhcnBCaW5kaW5nL01vbm9E ZXZlbG9wLkNTaGFycC9TaWduYXR1cmVNYXJrdXBDcmVhdG9yLmNzCg0KTW9kaWZpZWQ6IG1haW4v c3JjL2FkZGlucy9DU2hhcnBCaW5kaW5nL01vbm9EZXZlbG9wLkNTaGFycC5Db21wbGV0aW9uL01l bWJlckNvbXBsZXRpb25EYXRhLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtNjgyLDMwICs2ODIsNyBAQCBw dWJsaWMgc3RhdGljIFRvb2x0aXBJbmZvcm1hdGlvbiBDcmVhdGVUb29sdGlwSW5mb3JtYXRpb24g KElDb21waWxhdGlvbiBjb21waWxhdAogCQkJCX0KIAkJCX0KIAkJCWlmIChjcmVhdGVGb290ZXIp IHsKLQkJCQlpZiAoZW50aXR5IGlzIElUeXBlKSB7Ci0JCQkJCXZhciB0eXBlID0gZW50aXR5IGFz IElUeXBlOwotCQkJCQl2YXIgZGVmID0gdHlwZS5HZXREZWZpbml0aW9uICgpOwotCQkJCQlpZiAo ZGVmICE9IG51bGwpIHsKLQkJCQkJCWlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkgKGRlZi5QYXJl bnRBc3NlbWJseS5Bc3NlbWJseU5hbWUpKSB7Ci0JCQkJCQkJdmFyIHByb2plY3QgPSBkZWYuR2V0 U291cmNlUHJvamVjdCAoKTsKLQkJCQkJCQlpZiAocHJvamVjdCAhPSBudWxsKSB7Ci0JCQkJCQkJ CXZhciByZWxQYXRoID0gRmlsZVNlcnZpY2UuQWJzb2x1dGVUb1JlbGF0aXZlUGF0aCAocHJvamVj dC5CYXNlRGlyZWN0b3J5LCBkZWYuUmVnaW9uLkZpbGVOYW1lKTsKLQkJCQkJCQkJdG9vbHRpcElu Zm8uRm9vdGVyTWFya3VwID0gIjxzbWFsbD4iICsgR2V0dGV4dENhdGFsb2cuR2V0U3RyaW5nICgi UHJvamVjdDpcdHswfSIsIEFtYmllbmNlU2VydmljZS5Fc2NhcGVUZXh0IChkZWYuUGFyZW50QXNz ZW1ibHkuQXNzZW1ibHlOYW1lKSkgKyAiPC9zbWFsbD4iICsgRW52aXJvbm1lbnQuTmV3TGluZSAr Ci0JCQkJCQkJCQkiPHNtYWxsPiIgKyBHZXR0ZXh0Q2F0YWxvZy5HZXRTdHJpbmcgKCJGaWxlOlx0 XHR7MH0gKGxpbmUgezF9KSIsIEFtYmllbmNlU2VydmljZS5Fc2NhcGVUZXh0IChyZWxQYXRoKSwg ZGVmLlJlZ2lvbi5CZWdpbi5MaW5lKSArICI8L3NtYWxsPiI7Ci0JCQkJCQkJfQotCQkJCQkJfQot CQkJCQl9Ci0KLQkJCQl9IGVsc2UgaWYgKGVudGl0eS5EZWNsYXJpbmdUeXBlRGVmaW5pdGlvbiAh PSBudWxsKSB7Ci0JCQkJCXZhciBwcm9qZWN0ID0gZW50aXR5LkRlY2xhcmluZ1R5cGVEZWZpbml0 aW9uLkdldFNvdXJjZVByb2plY3QgKCk7Ci0JCQkJCWlmIChwcm9qZWN0ICE9IG51bGwpIHsKLQkJ CQkJCXZhciByZWxQYXRoID0gRmlsZVNlcnZpY2UuQWJzb2x1dGVUb1JlbGF0aXZlUGF0aCAocHJv amVjdC5CYXNlRGlyZWN0b3J5LCBlbnRpdHkuUmVnaW9uLkZpbGVOYW1lKTsKLQkJCQkJCXRvb2x0 aXBJbmZvLkZvb3Rlck1hcmt1cCA9IAotCQkJCQkJCSI8c21hbGw+IiArIEdldHRleHRDYXRhbG9n LkdldFN0cmluZyAoIlByb2plY3Q6XHR7MH0iLCBBbWJpZW5jZVNlcnZpY2UuRXNjYXBlVGV4dCAo cHJvamVjdC5OYW1lKSkgKyAiPC9zbWFsbD4iICsgRW52aXJvbm1lbnQuTmV3TGluZSArCi0JCQkJ CQkJIjxzbWFsbD4iICsgR2V0dGV4dENhdGFsb2cuR2V0U3RyaW5nICgiRnJvbTpcdHswfSIsIEFt YmllbmNlU2VydmljZS5Fc2NhcGVUZXh0IChlbnRpdHkuRGVjbGFyaW5nVHlwZS5GdWxsTmFtZSkp ICsgIjwvc21hbGw+IiArIEVudmlyb25tZW50Lk5ld0xpbmUgKwotCQkJCQkJCSI8c21hbGw+IiAr IEdldHRleHRDYXRhbG9nLkdldFN0cmluZyAoIkZpbGU6XHRcdHswfSAobGluZSB7MX0pIiwgQW1i aWVuY2VTZXJ2aWNlLkVzY2FwZVRleHQgKHJlbFBhdGgpLCBlbnRpdHkuUmVnaW9uLkJlZ2luLkxp bmUpICsgIjwvc21hbGw+IjsKLQkJCQkJfQotCQkJCX0KKwkJCQl0b29sdGlwSW5mby5Gb290ZXJN YXJrdXAgPSBzaWcuQ3JlYXRlRm9vdGVyIChlbnRpdHkpOwogCQkJfQogCQkJcmV0dXJuIHRvb2x0 aXBJbmZvOwogCQl9CkBAIC03MzIsOCArNzA5LDggQEAgcHVibGljIHN0YXRpYyBUb29sdGlwSW5m b3JtYXRpb24gQ3JlYXRlVG9vbHRpcEluZm9ybWF0aW9uIChJQ29tcGlsYXRpb24gY29tcGlsYXQK IAogCQkJdmFyIGRlZiA9IHR5cGUuR2V0RGVmaW5pdGlvbiAoKTsKIAkJCWlmIChkZWYgIT0gbnVs bCkgewotCQkJCWlmIChjcmVhdGVGb290ZXIgJiYgIXN0cmluZy5Jc051bGxPckVtcHR5IChkZWYu UGFyZW50QXNzZW1ibHkuQXNzZW1ibHlOYW1lKSkKLQkJCQkJdG9vbHRpcEluZm8uRm9vdGVyTWFy a3VwID0gIjxzbWFsbD4gRnJvbSAiICsgQW1iaWVuY2VTZXJ2aWNlLkVzY2FwZVRleHQgKGRlZi5Q YXJlbnRBc3NlbWJseS5Bc3NlbWJseU5hbWUpICsgIjwvc21hbGw+IjsKKwkJCQlpZiAoY3JlYXRl Rm9vdGVyKQorCQkJCQl0b29sdGlwSW5mby5Gb290ZXJNYXJrdXAgPSBzaWcuQ3JlYXRlRm9vdGVy IChkZWYpOwogCQkJCXRvb2x0aXBJbmZvLlN1bW1hcnlNYXJrdXAgPSBBbWJpZW5jZVNlcnZpY2Uu R2V0U3VtbWFyeU1hcmt1cCAoZGVmKSA/PyAiIjsKIAkJCX0KIAkJCXJldHVybiB0b29sdGlwSW5m bzsNCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2FkZGlucy9DU2hhcnBCaW5kaW5nL01vbm9EZXZlbG9w LkNTaGFycC5Ub29sdGlwcy9MYW5ndWFnZUl0ZW1Ub29sdGlwUHJvdmlkZXIuY3MNCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCkBAIC0xNDEsNyArMTQxLDcgQEAgcHJvdGVjdGVkIG92ZXJyaWRlIEd0ay5XaW5kb3cgQ3Jl YXRlVG9vbHRpcFdpbmRvdyAoTW9uby5UZXh0RWRpdG9yLlRleHRFZGl0b3IgZWQKIAogCQkJdmFy IHRpdGVtID0gKFRvb2xUaXBEYXRhKWl0ZW0uSXRlbTsKIAotCQkJdmFyIHRvb2x0aXBJbmZvcm1h dGlvbiA9IENyZWF0ZVRvb2x0aXAgKHRpdGVtLCBvZmZzZXQsIG51bGwpOworCQkJdmFyIHRvb2x0 aXBJbmZvcm1hdGlvbiA9IENyZWF0ZVRvb2x0aXAgKHRpdGVtLCBvZmZzZXQsIG51bGwsIG1vZGlm aWVyU3RhdGUpOwogCQkJaWYgKHRvb2x0aXBJbmZvcm1hdGlvbiA9PSBudWxsIHx8IHN0cmluZy5J c051bGxPckVtcHR5ICh0b29sdGlwSW5mb3JtYXRpb24uU2lnbmF0dXJlTWFya3VwKSkKIAkJCQly ZXR1cm4gbnVsbDsKIApAQCAtMTc5LDEyICsxNzksMTMgQEAgcHVibGljIG92ZXJyaWRlIEd0ay5X aW5kb3cgU2hvd1Rvb2x0aXBXaW5kb3cgKFRleHRFZGl0b3IgZWRpdG9yLCBpbnQgb2Zmc2V0LCBH ZGsKIAkJCXJldHVybiB0aXBXaW5kb3c7CiAJCX0KIAotCQlUb29sdGlwSW5mb3JtYXRpb24gQ3Jl YXRlVG9vbHRpcCAoVG9vbFRpcERhdGEgZGF0YSwgaW50IG9mZnNldCwgQW1iaWVuY2UgYW1iaWVu Y2UpCisJCVRvb2x0aXBJbmZvcm1hdGlvbiBDcmVhdGVUb29sdGlwIChUb29sVGlwRGF0YSBkYXRh LCBpbnQgb2Zmc2V0LCBBbWJpZW5jZSBhbWJpZW5jZSwgR2RrLk1vZGlmaWVyVHlwZSBtb2RpZmll clN0YXRlKQogCQl7CiAJCQlSZXNvbHZlUmVzdWx0IHJlc3VsdCA9IGRhdGEuUmVzdWx0OwogCQkJ dmFyIGRvYyA9IElkZUFwcC5Xb3JrYmVuY2guQWN0aXZlRG9jdW1lbnQ7CiAJCQlpZiAoZG9jID09 IG51bGwpCiAJCQkJcmV0dXJuIG51bGw7CisJCQlib29sIGNyZWF0ZUZvb3RlciA9IChtb2RpZmll clN0YXRlICYgR2RrLk1vZGlmaWVyVHlwZS5Nb2QxTWFzaykgIT0gMDsKIAkJCXRyeSB7CiAKIAkJ CQlpZiAocmVzdWx0IGlzIEFsaWFzTmFtZXNwYWNlUmVzb2x2ZVJlc3VsdCkgewpAQCAtMjc2LDEy ICsyNzcsMTMgQEAgVG9vbHRpcEluZm9ybWF0aW9uIENyZWF0ZVRvb2x0aXAgKFRvb2xUaXBEYXRh IGRhdGEsIGludCBvZmZzZXQsIEFtYmllbmNlIGFtYmllbmMKIAkJCQkJdmFyIG1ldGhvZCA9IGFs bE1ldGhvZHMuRmlyc3RPckRlZmF1bHQgKCk7CiAJCQkJCWlmIChtZXRob2QgIT0gbnVsbCkgewog CQkJCQkJcmV0dXJuIE1lbWJlckNvbXBsZXRpb25EYXRhLkNyZWF0ZVRvb2x0aXBJbmZvcm1hdGlv biAoCi0JCQkJCQlkb2MuQ29tcGlsYXRpb24sCi0JCQkJCQlkb2MuUGFyc2VkRG9jdW1lbnQuUGFy c2VkRmlsZSBhcyBDU2hhcnBVbnJlc29sdmVkRmlsZSwKLQkJCQkJCWRvYy5FZGl0b3IsCi0JCQkJ CQlkb2MuR2V0Rm9ybWF0dGluZ1BvbGljeSAoKSwKLQkJCQkJCW1ldGhvZCwgCi0JCQkJCQlmYWxz ZSk7CisJCQkJCQkJZG9jLkNvbXBpbGF0aW9uLAorCQkJCQkJCWRvYy5QYXJzZWREb2N1bWVudC5Q YXJzZWRGaWxlIGFzIENTaGFycFVucmVzb2x2ZWRGaWxlLAorCQkJCQkJCWRvYy5FZGl0b3IsCisJ CQkJCQkJZG9jLkdldEZvcm1hdHRpbmdQb2xpY3kgKCksCisJCQkJCQkJbWV0aG9kLAorCQkJCQkJ CWZhbHNlLAorCQkJCQkJCWNyZWF0ZUZvb3Rlcik7CiAJCQkJCX0KIAkJCQl9IGVsc2UgaWYgKHJl c3VsdCBpcyBDU2hhcnBJbnZvY2F0aW9uUmVzb2x2ZVJlc3VsdCkgewogCQkJCQl2YXIgaW52b2Nh dGlvblJlc3VsdCA9IChDU2hhcnBJbnZvY2F0aW9uUmVzb2x2ZVJlc3VsdClyZXN1bHQ7CkBAIC0y OTIsMTYgKzI5NCwxOCBAQCBUb29sdGlwSW5mb3JtYXRpb24gQ3JlYXRlVG9vbHRpcCAoVG9vbFRp cERhdGEgZGF0YSwgaW50IG9mZnNldCwgQW1iaWVuY2UgYW1iaWVuYwogCQkJCQkJZG9jLkVkaXRv ciwKIAkJCQkJCWRvYy5HZXRGb3JtYXR0aW5nUG9saWN5ICgpLAogCQkJCQkJbWVtYmVyLCAKLQkJ CQkJCWZhbHNlKTsKKwkJCQkJCWZhbHNlLAorCQkJCQkJY3JlYXRlRm9vdGVyKTsKIAkJCQl9IGVs c2UgaWYgKHJlc3VsdCBpcyBNZW1iZXJSZXNvbHZlUmVzdWx0KSB7CiAJCQkJCXZhciBtZW1iZXIg PSAoKE1lbWJlclJlc29sdmVSZXN1bHQpcmVzdWx0KS5NZW1iZXI7CiAJCQkJCXJldHVybiBNZW1i ZXJDb21wbGV0aW9uRGF0YS5DcmVhdGVUb29sdGlwSW5mb3JtYXRpb24gKAotCQkJCQlkb2MuQ29t cGlsYXRpb24sCi0JCQkJCWRvYy5QYXJzZWREb2N1bWVudC5QYXJzZWRGaWxlIGFzIENTaGFycFVu cmVzb2x2ZWRGaWxlLAotCQkJCQlkb2MuRWRpdG9yLAotCQkJCQlkb2MuR2V0Rm9ybWF0dGluZ1Bv bGljeSAoKSwKLQkJCQkJbWVtYmVyLCAKLQkJCQkJZmFsc2UpOworCQkJCQkJZG9jLkNvbXBpbGF0 aW9uLAorCQkJCQkJZG9jLlBhcnNlZERvY3VtZW50LlBhcnNlZEZpbGUgYXMgQ1NoYXJwVW5yZXNv bHZlZEZpbGUsCisJCQkJCQlkb2MuRWRpdG9yLAorCQkJCQkJZG9jLkdldEZvcm1hdHRpbmdQb2xp Y3kgKCksCisJCQkJCQltZW1iZXIsIAorCQkJCQkJZmFsc2UsCisJCQkJCQljcmVhdGVGb290ZXIp OwogCQkJCX0gZWxzZSBpZiAocmVzdWx0IGlzIE5hbWVzcGFjZVJlc29sdmVSZXN1bHQpIHsKIAkJ CQkJdmFyIHRvb2x0aXBJbmZvID0gbmV3IFRvb2x0aXBJbmZvcm1hdGlvbiAoKTsKIAkJCQkJdmFy IHJlc29sdmVyID0gKGRvYy5QYXJzZWREb2N1bWVudC5QYXJzZWRGaWxlIGFzIENTaGFycFVucmVz b2x2ZWRGaWxlKS5HZXRSZXNvbHZlciAoZG9jLkNvbXBpbGF0aW9uLCBkb2MuRWRpdG9yLkNhcmV0 LkxvY2F0aW9uKTsKQEAgLTMyOSwxMiArMzMzLDEzIEBAIFRvb2x0aXBJbmZvcm1hdGlvbiBDcmVh dGVUb29sdGlwIChUb29sVGlwRGF0YSBkYXRhLCBpbnQgb2Zmc2V0LCBBbWJpZW5jZSBhbWJpZW5j CiAJCQkJCXJldHVybiB0b29sdGlwSW5mbzsKIAkJCQl9IGVsc2UgewogCQkJCQlyZXR1cm4gTWVt YmVyQ29tcGxldGlvbkRhdGEuQ3JlYXRlVG9vbHRpcEluZm9ybWF0aW9uICgKLQkJCQkJZG9jLkNv bXBpbGF0aW9uLAotCQkJCQlkb2MuUGFyc2VkRG9jdW1lbnQuUGFyc2VkRmlsZSBhcyBDU2hhcnBV bnJlc29sdmVkRmlsZSwKLQkJCQkJZG9jLkVkaXRvciwKLQkJCQkJZG9jLkdldEZvcm1hdHRpbmdQ b2xpY3kgKCksCi0JCQkJCXJlc3VsdC5UeXBlLCAKLQkJCQkJZmFsc2UpOworCQkJCQkJZG9jLkNv bXBpbGF0aW9uLAorCQkJCQkJZG9jLlBhcnNlZERvY3VtZW50LlBhcnNlZEZpbGUgYXMgQ1NoYXJw VW5yZXNvbHZlZEZpbGUsCisJCQkJCQlkb2MuRWRpdG9yLAorCQkJCQkJZG9jLkdldEZvcm1hdHRp bmdQb2xpY3kgKCksCisJCQkJCQlyZXN1bHQuVHlwZSwgCisJCQkJCQlmYWxzZSwKKwkJCQkJCWNy ZWF0ZUZvb3Rlcik7CiAJCQkJfQogCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKIAkJCQlMb2dn aW5nU2VydmljZS5Mb2dFcnJvciAoIkVycm9yIHdoaWxlIGNyZWF0aW5nIHRvb2x0aXAuIiwgZSk7 DQoNCk1vZGlmaWVkOiBtYWluL3NyYy9hZGRpbnMvQ1NoYXJwQmluZGluZy9Nb25vRGV2ZWxvcC5D U2hhcnAvU2lnbmF0dXJlTWFya3VwQ3JlYXRvci5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTE2MTEsNSAr MTYxMSw0NiBAQCBzdHJpbmcgSGlnaGxpZ2h0U2VtYW50aWNhbGx5IChzdHJpbmcgc3RyLCBDaHVu a1N0eWxlIHN0eWxlKQogCQkJCXJldHVybiBzdHI7CiAJCQlyZXR1cm4gSGlnaGxpZ2h0IChzdHIs IHN0eWxlKTsKIAkJfQorCisJCXB1YmxpYyBzdHJpbmcgQ3JlYXRlRm9vdGVyIChJRW50aXR5IGVu dGl0eSkKKwkJeworCQkJdmFyIHR5cGUgPSBlbnRpdHkgYXMgSVR5cGU7CisJCQlpZiAodHlwZSAh PSBudWxsKSB7CisJCQkJdmFyIGRlZiA9IHR5cGUuR2V0RGVmaW5pdGlvbiAoKTsKKwkJCQlpZiAo ZGVmICE9IG51bGwpIHsKKwkJCQkJaWYgKCFkZWYuUmVnaW9uLklzRW1wdHkpIHsKKwkJCQkJCXZh ciBwcm9qZWN0ID0gZGVmLkdldFNvdXJjZVByb2plY3QgKCk7CisJCQkJCQlpZiAocHJvamVjdCAh PSBudWxsKSB7CisJCQkJCQkJdmFyIHJlbFBhdGggPSBGaWxlU2VydmljZS5BYnNvbHV0ZVRvUmVs YXRpdmVQYXRoIChwcm9qZWN0LkJhc2VEaXJlY3RvcnksIGRlZi5SZWdpb24uRmlsZU5hbWUpOwor CQkJCQkJCXJldHVybgorCQkJCQkJCQkoc3RyaW5nLklzTnVsbE9yRW1wdHkgKGRlZi5OYW1lc3Bh Y2UpID8gIiIgOiAiPHNtYWxsPiIgKyBHZXR0ZXh0Q2F0YWxvZy5HZXRTdHJpbmcgKCJOYW1lc3Bh Y2U6XHR7MH0iLCBBbWJpZW5jZVNlcnZpY2UuRXNjYXBlVGV4dCAoZGVmLk5hbWVzcGFjZSkpICsg Ijwvc21hbGw+IiArIEVudmlyb25tZW50Lk5ld0xpbmUpICsKKwkJCQkJCQkJIjxzbWFsbD4iICsg R2V0dGV4dENhdGFsb2cuR2V0U3RyaW5nICgiUHJvamVjdDpcdHswfSIsIEFtYmllbmNlU2Vydmlj ZS5Fc2NhcGVUZXh0IChkZWYuUGFyZW50QXNzZW1ibHkuQXNzZW1ibHlOYW1lKSkgKyAiPC9zbWFs bD4iICsgRW52aXJvbm1lbnQuTmV3TGluZSArCisJCQkJCQkJCSI8c21hbGw+IiArIEdldHRleHRD YXRhbG9nLkdldFN0cmluZyAoIkZpbGU6XHRcdHswfSAobGluZSB7MX0pIiwgQW1iaWVuY2VTZXJ2 aWNlLkVzY2FwZVRleHQgKHJlbFBhdGgpLCBkZWYuUmVnaW9uLkJlZ2luLkxpbmUpICsgIjwvc21h bGw+IjsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlyZXR1cm4KKwkJCQkJCShzdHJpbmcuSXNOdWxs T3JFbXB0eSAoZGVmLk5hbWVzcGFjZSkgPyAiIiA6ICI8c21hbGw+IiArIEdldHRleHRDYXRhbG9n LkdldFN0cmluZyAoIk5hbWVzcGFjZTpcdHswfSIsIEFtYmllbmNlU2VydmljZS5Fc2NhcGVUZXh0 IChkZWYuTmFtZXNwYWNlKSkgKyAiPC9zbWFsbD4iICsgRW52aXJvbm1lbnQuTmV3TGluZSkgKwor CQkJCQkJIjxzbWFsbD4iICsgR2V0dGV4dENhdGFsb2cuR2V0U3RyaW5nICgiQXNzZW1ibHk6XHR7 MH0iLCBBbWJpZW5jZVNlcnZpY2UuRXNjYXBlVGV4dCAoZGVmLlBhcmVudEFzc2VtYmx5LkFzc2Vt Ymx5TmFtZSkpICsgIjwvc21hbGw+IjsKKwkJCQl9CisJCQkJcmV0dXJuIG51bGw7CisJCQl9IAor CisJCQlpZiAoZW50aXR5LkRlY2xhcmluZ1R5cGVEZWZpbml0aW9uICE9IG51bGwpIHsKKwkJCQlp ZiAoIWVudGl0eS5SZWdpb24uSXNFbXB0eSkgeworCQkJCQl2YXIgcHJvamVjdCA9IGVudGl0eS5E ZWNsYXJpbmdUeXBlRGVmaW5pdGlvbi5HZXRTb3VyY2VQcm9qZWN0ICgpOworCQkJCQlpZiAocHJv amVjdCAhPSBudWxsKSB7CisJCQkJCQl2YXIgcmVsUGF0aCA9IEZpbGVTZXJ2aWNlLkFic29sdXRl VG9SZWxhdGl2ZVBhdGggKHByb2plY3QuQmFzZURpcmVjdG9yeSwgZW50aXR5LlJlZ2lvbi5GaWxl TmFtZSk7CisJCQkJCQlyZXR1cm4KKwkJCQkJCQkiPHNtYWxsPiIgKyBHZXR0ZXh0Q2F0YWxvZy5H ZXRTdHJpbmcgKCJQcm9qZWN0Olx0ezB9IiwgQW1iaWVuY2VTZXJ2aWNlLkVzY2FwZVRleHQgKHBy b2plY3QuTmFtZSkpICsgIjwvc21hbGw+IiArIEVudmlyb25tZW50Lk5ld0xpbmUgKworCQkJCQkJ CSI8c21hbGw+IiArIEdldHRleHRDYXRhbG9nLkdldFN0cmluZyAoIkZyb20gdHlwZTpcdHswfSIs IEFtYmllbmNlU2VydmljZS5Fc2NhcGVUZXh0IChlbnRpdHkuRGVjbGFyaW5nVHlwZURlZmluaXRp b24uRnVsbE5hbWUpKSArICI8L3NtYWxsPiIgKyBFbnZpcm9ubWVudC5OZXdMaW5lICsKKwkJCQkJ CQkiPHNtYWxsPiIgKyBHZXR0ZXh0Q2F0YWxvZy5HZXRTdHJpbmcgKCJGaWxlOlx0XHR7MH0gKGxp bmUgezF9KSIsIEFtYmllbmNlU2VydmljZS5Fc2NhcGVUZXh0IChyZWxQYXRoKSwgZW50aXR5LlJl Z2lvbi5CZWdpbi5MaW5lKSArICI8L3NtYWxsPiI7CisJCQkJCX0KKwkJCQl9CisJCQkJcmV0dXJu CisJCQkJCSI8c21hbGw+IiArIEdldHRleHRDYXRhbG9nLkdldFN0cmluZyAoIkZyb20gdHlwZTpc dHswfSIsIEFtYmllbmNlU2VydmljZS5Fc2NhcGVUZXh0IChlbnRpdHkuRGVjbGFyaW5nVHlwZURl ZmluaXRpb24uRnVsbE5hbWUpKSArICI8L3NtYWxsPiIgKyBFbnZpcm9ubWVudC5OZXdMaW5lICsK KwkJCQkJIjxzbWFsbD4iICsgR2V0dGV4dENhdGFsb2cuR2V0U3RyaW5nICgiQXNzZW1ibHk6XHR7 MH0iLCBBbWJpZW5jZVNlcnZpY2UuRXNjYXBlVGV4dCAoZW50aXR5LkRlY2xhcmluZ1R5cGVEZWZp bml0aW9uLlBhcmVudEFzc2VtYmx5LkFzc2VtYmx5TmFtZSkpICsgIjwvc21hbGw+IjsKKwkJCX0K KwkJCXJldHVybiBudWxsOworCQl9CiAJfQogfQ0KDQogICBDb21taXQ6IDNmZDk1ZmE1NzEzZTNh Yzk4OWYyY2Y5YjVlMDAxOThhYjQwNjNjYWYNCiAgIEF1dGhvcjogTWlrZSBLcsO8Z2VyIDxta3J1 ZWdlckB4YW1hcmluLmNvbT4gKG1rcnVlZ2VyKQ0KICAgICBEYXRlOiAyMDEzLTExLTE4IDA5OjQ1 OjUzIEdNVA0KICAgICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9j b21taXQvM2ZkOTVmYTU3MTNlM2FjOTg5ZjJjZjliNWUwMDE5OGFiNDA2M2NhZg0KDQpCdW1wIG5y ZWZhY3RvcnkuDQoNCkNoYW5nZWQgcGF0aHM6CiAgTSBtYWluL2V4dGVybmFsL25yZWZhY3RvcnkK DQpNb2RpZmllZDogbWFpbi9leHRlcm5hbC9ucmVmYWN0b3J5DQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMSAr MSBAQAotU3VicHJvamVjdCBjb21taXQgNDY3ZGQ3NDgwMTllYWYwNDA0ODVkN2JmYjE2M2VhMDM4 M2QyOGEzOAorU3VicHJvamVjdCBjb21taXQgZWE3NWJhYzNmMzc0MDYxYmEzYzI4YWUwMGY3Yjk2 NTE4OWY5M2YzMQ0KDQogICBDb21taXQ6IDNiOTY1OTZmNGJiYjg2OTkzZTA0MGJhZmEzMGVhODFh NzJlMjdmOTYNCiAgIEF1dGhvcjogVW5ndXJlYW51IE1hcml1cyA8dGVyb21hcmlvQHlhaG9vLmNv bT4gKFRoZXJ6b2spDQogICAgIERhdGU6IDIwMTMtMTEtMTggMTI6MzY6MjYgR01UDQogICAgICBV Ukw6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbW1pdC8zYjk2NTk2ZjRi YmI4Njk5M2UwNDBiYWZhMzBlYTgxYTcyZTI3Zjk2DQoNCk1lcmdlIHB1bGwgcmVxdWVzdCAjNDM2 IGZyb20gbW9uby92Y3NUZXN0cwoKW1ZlcnNpb25Db250cm9sXSBJbXBsZW1lbnRlZCBiYWNrZW5k IHNwZWNpZmljIHRlc3RzDQoNCkNoYW5nZWQgcGF0aHM6CiAgTSBtYWluL3NyYy9hZGRpbnMvVmVy c2lvbkNvbnRyb2wvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuR2l0LlRlc3RzL0Jhc2VHaXRS ZXBvc2l0b3J5VGVzdHMuY3MKICBNIG1haW4vc3JjL2FkZGlucy9WZXJzaW9uQ29udHJvbC9Nb25v RGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5HaXQuVGVzdHMvQmFzZVJlcG9zaXRvcnlUZXN0cy5jcwog IE0gbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZlbG9wLlZlcnNpb25Db250 cm9sLkdpdC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5HaXQvR2l0UmVwb3NpdG9yeS5jcwog IE0gbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZlbG9wLlZlcnNpb25Db250 cm9sLlN1YnZlcnNpb24uVGVzdHMvQmFzZVN2blJlcG9zaXRvcnlUZXN0cy5jcwogIE0gbWFpbi9z cmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZlbG9wLlZlcnNpb25Db250cm9sLlN1YnZl cnNpb24uVGVzdHMvUmVwb3NpdG9yeVRlc3RzLmNzCiAgTSBtYWluL3NyYy9hZGRpbnMvVmVyc2lv bkNvbnRyb2wvU3VidmVyc2lvbi5XaW4zMi5UZXN0cy9SZXBvc2l0b3J5VGVzdHMuY3MKDQpNb2Rp ZmllZDogbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZlbG9wLlZlcnNpb25D b250cm9sLkdpdC5UZXN0cy9CYXNlR2l0UmVwb3NpdG9yeVRlc3RzLmNzDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpA QCAtMzIsMTQgKzMyLDE0IEBACiB1c2luZyBOR2l0LkFwaTsNCiB1c2luZyBOVW5pdC5GcmFtZXdv cms7DQogdXNpbmcgU3lzdGVtLklPOw0KLXVzaW5nIFN5c3RlbTsNCiB1c2luZyBOR2l0LlN0b3Jh Z2UuRmlsZTsNCiB1c2luZyBOR2l0LlJldndhbGs7DQordXNpbmcgU3lzdGVtLkxpbnE7DQogDQog bmFtZXNwYWNlIE1vbm9EZXZlbG9wLlZlcnNpb25Db250cm9sLkdpdC5UZXN0cw0KIHsNCiAJW1Rl c3RGaXh0dXJlXQ0KLQlwdWJsaWMgY2xhc3MgQmFzZUdpdFV0aWxzVGVzdCA6IEJhc2VSZXBvVXRp bHNUZXN0DQorCXNlYWxlZCBjbGFzcyBCYXNlR2l0VXRpbHNUZXN0IDogQmFzZVJlcG9VdGlsc1Rl c3QNCiAJew0KIAkJW1NldFVwXQ0KIAkJcHVibGljIG92ZXJyaWRlIHZvaWQgU2V0dXAgKCkNCkBA IC0xNjEsNiArMTYxLDE4NCBAQCBwcm90ZWN0ZWQgb3ZlcnJpZGUgdm9pZCBCbGFtZUV4dHJhSW50 ZXJuYWxzIChBbm5vdGF0aW9uIFtdIGFubm90YXRpb25zKQogCQkJQXNzZXJ0LklzVHJ1ZSAoYW5u b3RhdGlvbnMgWzJdLkhhc0RhdGUpOw0KIAkJfQ0KIA0KKwkJW1Rlc3RdDQorCQlwdWJsaWMgdm9p ZCBUZXN0R2l0U3Rhc2ggKCkNCisJCXsNCisJCQl2YXIgcmVwbzIgPSAoR2l0UmVwb3NpdG9yeSlS ZXBvOw0KKwkJCUFkZEZpbGUgKCJmaWxlMiIsICJub3RoaW5nIiwgdHJ1ZSwgdHJ1ZSk7DQorCQkJ QWRkRmlsZSAoImZpbGUxIiwgInRleHQiLCB0cnVlLCBmYWxzZSk7DQorCQkJcmVwbzIuR2V0U3Rh c2hlcyAoKS5DcmVhdGUgKG51bGwpOw0KKwkJCUFzc2VydC5Jc1RydWUgKCFGaWxlLkV4aXN0cyAo Um9vdENoZWNrb3V0ICsgImZpbGUxIiksICJTdGFzaCBjcmVhdGlvbiBmYWlsdXJlIik7DQorCQkJ cmVwbzIuR2V0U3Rhc2hlcyAoKS5Qb3AgKG51bGwpOw0KKw0KKwkJCVZlcnNpb25JbmZvIHZpID0g cmVwbzIuR2V0VmVyc2lvbkluZm8gKFJvb3RDaGVja291dCArICJmaWxlMSIsIFZlcnNpb25JbmZv UXVlcnlGbGFncy5JZ25vcmVDYWNoZSk7DQorCQkJQXNzZXJ0LkFyZUVxdWFsIChWZXJzaW9uU3Rh dHVzLlNjaGVkdWxlZEFkZCwgdmkuU3RhdHVzICYgVmVyc2lvblN0YXR1cy5TY2hlZHVsZWRBZGQs ICJTdGFzaCBwb3AgZmFpbHVyZSIpOw0KKwkJfQ0KKw0KKwkJW1Rlc3RdDQorCQlwdWJsaWMgdm9p ZCBUZXN0R2l0QnJhbmNoQ3JlYXRpb24gKCkNCisJCXsNCisJCQl2YXIgcmVwbzIgPSAoR2l0UmVw b3NpdG9yeSlSZXBvOw0KKw0KKwkJCUFkZEZpbGUgKCJmaWxlMSIsICJ0ZXh0IiwgdHJ1ZSwgdHJ1 ZSk7DQorCQkJcmVwbzIuQ3JlYXRlQnJhbmNoICgiYnJhbmNoMSIsIG51bGwpOw0KKw0KKwkJCXJl cG8yLlN3aXRjaFRvQnJhbmNoIChuZXcgTW9ub0RldmVsb3AuQ29yZS5Qcm9ncmVzc01vbml0b3Jp bmcuTnVsbFByb2dyZXNzTW9uaXRvciAoKSwgImJyYW5jaDEiKTsNCisJCQlBc3NlcnQuQXJlRXF1 YWwgKCJicmFuY2gxIiwgcmVwbzIuR2V0Q3VycmVudEJyYW5jaCAoKSk7DQorCQkJQXNzZXJ0Lklz VHJ1ZSAoRmlsZS5FeGlzdHMgKFJvb3RDaGVja291dCArICJmaWxlMSIpLCAiQnJhbmNoIG5vdCBp bmhlcml0aW5nIGZyb20gY3VycmVudC4iKTsNCisNCisJCQlBZGRGaWxlICgiZmlsZTIiLCAidGV4 dCIsIHRydWUsIGZhbHNlKTsNCisJCQlyZXBvMi5DcmVhdGVCcmFuY2ggKCJicmFuY2gyIiwgbnVs bCk7DQorCQkJcmVwbzIuU3dpdGNoVG9CcmFuY2ggKG5ldyBNb25vRGV2ZWxvcC5Db3JlLlByb2dy ZXNzTW9uaXRvcmluZy5OdWxsUHJvZ3Jlc3NNb25pdG9yICgpLCAiYnJhbmNoMiIpOw0KKwkJCUFz c2VydC5Jc1RydWUgKCFGaWxlLkV4aXN0cyAoUm9vdENoZWNrb3V0ICsgImZpbGUyIiksICJVbmNv bW1pdHRlZCBjaGFuZ2VzIHdlcmUgbm90IHN0YXNoZWQiKTsNCisJCQlyZXBvMi5HZXRTdGFzaGVz ICgpLlBvcCAobmV3IE51bGxQcm9ncmVzc01vbml0b3IgKCkpOw0KKw0KKwkJCUFzc2VydC5Jc1Ry dWUgKEZpbGUuRXhpc3RzIChSb290Q2hlY2tvdXQgKyAiZmlsZTIiKSwgIlVuY29tbWl0dGVkIGNo YW5nZXMgd2VyZSBub3Qgc3Rhc2hlZCBjb3JyZWN0bHkiKTsNCisNCisJCQlyZXBvMi5Td2l0Y2hU b0JyYW5jaCAobmV3IE1vbm9EZXZlbG9wLkNvcmUuUHJvZ3Jlc3NNb25pdG9yaW5nLk51bGxQcm9n cmVzc01vbml0b3IgKCksICJtYXN0ZXIiKTsNCisJCQlyZXBvMi5SZW1vdmVCcmFuY2ggKCJicmFu Y2gxIik7DQorCQkJQXNzZXJ0LklzRmFsc2UgKHJlcG8yLkdldEJyYW5jaGVzICgpLkFueSAoYiA9 PiBiLk5hbWUgPT0gImJyYW5jaDEiKSwgIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoIik7DQorDQor CQkJcmVwbzIuUmVuYW1lQnJhbmNoICgiYnJhbmNoMiIsICJicmFuY2gzIik7DQorCQkJQXNzZXJ0 LklzVHJ1ZSAocmVwbzIuR2V0QnJhbmNoZXMgKCkuQW55IChiID0+IGIuTmFtZSA9PSAiYnJhbmNo MyIpICYmIHJlcG8yLkdldEJyYW5jaGVzICgpLkFsbCAoYiA9PiBiLk5hbWUgIT0gImJyYW5jaDIi KSwgIkZhaWxlZCB0byByZW5hbWUgYnJhbmNoIik7DQorCQl9DQorDQorCQlbVGVzdF0NCisJCXB1 YmxpYyB2b2lkIFRlc3RHaXRTeW5jQnJhbmNoZXMgKCkNCisJCXsNCisJCQl2YXIgcmVwbzIgPSAo R2l0UmVwb3NpdG9yeSlSZXBvOw0KKwkJCUFkZEZpbGUgKCJmaWxlMSIsICJ0ZXh0IiwgdHJ1ZSwg dHJ1ZSk7DQorCQkJUG9zdENvbW1pdCAocmVwbzIpOw0KKw0KKwkJCXJlcG8yLkNyZWF0ZUJyYW5j aCAoImJyYW5jaDMiLCBudWxsKTsNCisJCQlyZXBvMi5Td2l0Y2hUb0JyYW5jaCAobmV3IE1vbm9E ZXZlbG9wLkNvcmUuUHJvZ3Jlc3NNb25pdG9yaW5nLk51bGxQcm9ncmVzc01vbml0b3IgKCksICJi cmFuY2gzIik7DQorCQkJQWRkRmlsZSAoImZpbGUyIiwgImFzZGYiLCB0cnVlLCB0cnVlKTsNCisJ CQlyZXBvMi5QdXNoIChuZXcgTW9ub0RldmVsb3AuQ29yZS5Qcm9ncmVzc01vbml0b3JpbmcuTnVs bFByb2dyZXNzTW9uaXRvciAoKSwgIm9yaWdpbiIsICJicmFuY2gzIik7DQorDQorCQkJcmVwbzIu U3dpdGNoVG9CcmFuY2ggKG5ldyBNb25vRGV2ZWxvcC5Db3JlLlByb2dyZXNzTW9uaXRvcmluZy5O dWxsUHJvZ3Jlc3NNb25pdG9yICgpLCAibWFzdGVyIik7DQorDQorCQkJcmVwbzIuQ3JlYXRlQnJh bmNoICgiYnJhbmNoNCIsICJvcmlnaW4vYnJhbmNoMyIpOw0KKwkJCXJlcG8yLlN3aXRjaFRvQnJh bmNoIChuZXcgTW9ub0RldmVsb3AuQ29yZS5Qcm9ncmVzc01vbml0b3JpbmcuTnVsbFByb2dyZXNz TW9uaXRvciAoKSwgImJyYW5jaDQiKTsNCisJCQlBc3NlcnQuSXNUcnVlIChGaWxlLkV4aXN0cyAo Um9vdENoZWNrb3V0ICsgImZpbGUyIiksICJUcmFja2luZyByZW1vdGUgaXMgbm90IGdyYWJiaW5n IGNvcnJlY3QgY29tbWl0cyIpOw0KKwkJfQ0KKw0KKwkJW1Rlc3RdDQorCQlwdWJsaWMgdm9pZCBU ZXN0UHVzaENoYW5nZXNldCAoKQ0KKwkJew0KKwkJCXZhciByZXBvMiA9IChHaXRSZXBvc2l0b3J5 KVJlcG87DQorCQkJQWRkRmlsZSAoImZpbGUiLCAibWVoIiwgdHJ1ZSwgdHJ1ZSk7DQorCQkJUG9z dENvbW1pdCAocmVwbzIpOw0KKw0KKwkJCUFkZEZpbGUgKCJmaWxlMSIsICJ0ZXh0IiwgdHJ1ZSwg dHJ1ZSk7DQorCQkJQWRkRmlsZSAoImZpbGUyIiwgInRleHQyIiwgdHJ1ZSwgdHJ1ZSk7DQorDQor CQkJQ2hhbmdlU2V0IGRpZmYgPSByZXBvMi5HZXRQdXNoQ2hhbmdlU2V0ICgib3JpZ2luIiwgIm1h c3RlciIpOw0KKwkJCUFzc2VydC5BcmVFcXVhbCAoMiwgZGlmZi5JdGVtcy5Db3VudCAoKSk7DQor DQorCQkJQ2hhbmdlU2V0SXRlbSBpdGVtID0gZGlmZi5HZXRGaWxlSXRlbSAoUm9vdENoZWNrb3V0 ICsgImZpbGUxIik7DQorCQkJQXNzZXJ0LklzTm90TnVsbCAoaXRlbSk7DQorCQkJQXNzZXJ0LkFy ZUVxdWFsIChWZXJzaW9uU3RhdHVzLlNjaGVkdWxlZEFkZCwgaXRlbS5TdGF0dXMgJiBWZXJzaW9u U3RhdHVzLlNjaGVkdWxlZEFkZCk7DQorDQorCQkJaXRlbSA9IGRpZmYuR2V0RmlsZUl0ZW0gKFJv b3RDaGVja291dCArICJmaWxlMSIpOw0KKwkJCUFzc2VydC5Jc05vdE51bGwgKGl0ZW0pOw0KKwkJ CUFzc2VydC5BcmVFcXVhbCAoVmVyc2lvblN0YXR1cy5TY2hlZHVsZWRBZGQsIGl0ZW0uU3RhdHVz ICYgVmVyc2lvblN0YXR1cy5TY2hlZHVsZWRBZGQpOw0KKwkJfQ0KKw0KKwkJW1Rlc3RdDQorCQlb SWdub3JlICgiR2V0UHVzaERpZmYgY29udGVudCBpcyBhbHdheXMgZW1wdHkiKV0NCisJCXB1Ymxp YyB2b2lkIFRlc3RQdXNoRGlmZiAoKQ0KKwkJew0KKwkJCXZhciByZXBvMiA9IChHaXRSZXBvc2l0 b3J5KVJlcG87DQorCQkJQWRkRmlsZSAoImZpbGUiLCAibWVoIiwgdHJ1ZSwgdHJ1ZSk7DQorCQkJ UG9zdENvbW1pdCAocmVwbzIpOw0KKw0KKwkJCUFkZEZpbGUgKCJmaWxlMSIsICJ0ZXh0IiwgdHJ1 ZSwgdHJ1ZSk7DQorCQkJQWRkRmlsZSAoImZpbGUyIiwgInRleHQyIiwgdHJ1ZSwgdHJ1ZSk7DQor DQorCQkJRGlmZkluZm9bXSBkaWZmID0gcmVwbzIuR2V0UHVzaERpZmYgKCJvcmlnaW4iLCAibWFz dGVyIik7DQorCQkJQXNzZXJ0LkFyZUVxdWFsICgyLCBkaWZmLkxlbmd0aCk7DQorDQorCQkJRGlm ZkluZm8gaXRlbSA9IGRpZmYgWzBdOw0KKwkJCUFzc2VydC5Jc05vdE51bGwgKGl0ZW0pOw0KKwkJ CUFzc2VydC5BcmVFcXVhbCAoImZpbGUxIiwgaXRlbS5GaWxlTmFtZS5GaWxlTmFtZSk7DQorCQkJ Ly9Bc3NlcnQuQXJlRXF1YWwgKCJ0ZXh0IiwgaXRlbS5Db250ZW50KTsNCisNCisJCQlpdGVtID0g ZGlmZiBbMV07DQorCQkJQXNzZXJ0LklzTm90TnVsbCAoaXRlbSk7DQorCQkJQXNzZXJ0LkFyZUVx dWFsICgiZmlsZTIiLCBpdGVtLkZpbGVOYW1lLkZpbGVOYW1lKTsNCisJCQkvL0Fzc2VydC5BcmVF cXVhbCAoInRleHQyIiwgaXRlbS5Db250ZW50KTsNCisJCX0NCisNCisJCVtUZXN0XQ0KKwkJcHVi bGljIHZvaWQgVGVzdEdpdFVybCAoKQ0KKwkJew0KKwkJCXZhciByZXBvMiA9IChHaXRSZXBvc2l0 b3J5KVJlcG87DQorCQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNVcmxWYWxpZCAoImdpdEBnaXRo dWIuY29tOm1vbm8vbW9ub2RldmVsb3AiKSk7DQorCQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNV cmxWYWxpZCAoImdpdDovL2dpdGh1Yi5jb206ODAvbW9uby9tb25vZGV2ZWxvcC5naXQiKSk7DQor CQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNVcmxWYWxpZCAoInNzaDovL3VzZXJAaG9zdC5jb206 ODAvbW9uby9tb25vZGV2ZWxvcC5naXQiKSk7DQorCQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNV cmxWYWxpZCAoImh0dHA6Ly9naXRodWIuY29tOjgwL21vbm8vbW9ub2RldmVsb3AuZ2l0IikpOw0K KwkJCUFzc2VydC5Jc1RydWUgKHJlcG8yLklzVXJsVmFsaWQgKCJodHRwczovL2dpdGh1Yi5jb206 ODAvbW9uby9tb25vZGV2ZWxvcC5naXQiKSk7DQorCQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNV cmxWYWxpZCAoImZ0cDovL2dpdGh1Yi5jb206ODAvbW9uby9tb25vZGV2ZWxvcC5naXQiKSk7DQor CQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNVcmxWYWxpZCAoImZ0cHM6Ly9naXRodWIuY29tOjgw L21vbm8vbW9ub2RldmVsb3AuZ2l0IikpOw0KKwkJCUFzc2VydC5Jc1RydWUgKHJlcG8yLklzVXJs VmFsaWQgKCJmaWxlOi8vL21vbm8vbW9ub2RldmVsb3AuZ2l0IikpOw0KKwkJCUFzc2VydC5Jc1Ry dWUgKHJlcG8yLklzVXJsVmFsaWQgKCJyc3luYzovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxw by5naXQiKSk7DQorCQl9DQorDQorCQlbVGVzdF0NCisJCXB1YmxpYyB2b2lkIFRlc3RSZW1vdGUg KCkNCisJCXsNCisJCQl2YXIgcmVwbzIgPSAoR2l0UmVwb3NpdG9yeSlSZXBvOw0KKw0KKwkJCUFz c2VydC5BcmVFcXVhbCAoIm9yaWdpbiIsIHJlcG8yLkdldEN1cnJlbnRSZW1vdGUgKCkpOw0KKw0K KwkJCUFkZEZpbGUgKCJmaWxlMSIsICJ0ZXh0IiwgdHJ1ZSwgdHJ1ZSk7DQorCQkJUG9zdENvbW1p dCAocmVwbzIpOw0KKwkJCXJlcG8yLkNyZWF0ZUJyYW5jaCAoImJyYW5jaDEiLCBudWxsKTsNCisJ CQlyZXBvMi5Td2l0Y2hUb0JyYW5jaCAobmV3IE1vbm9EZXZlbG9wLkNvcmUuUHJvZ3Jlc3NNb25p dG9yaW5nLk51bGxQcm9ncmVzc01vbml0b3IgKCksICJicmFuY2gxIik7DQorCQkJQWRkRmlsZSAo ImZpbGUyIiwgInRleHQiLCB0cnVlLCB0cnVlKTsNCisJCQlQb3N0Q29tbWl0IChyZXBvMik7DQor CQkJQXNzZXJ0LkFyZUVxdWFsICgyLCByZXBvMi5HZXRCcmFuY2hlcyAoKS5Db3VudCAoKSk7DQor CQkJQXNzZXJ0LkFyZUVxdWFsICgxLCByZXBvMi5HZXRSZW1vdGVzICgpLkNvdW50ICgpKTsNCisN CisJCQlyZXBvMi5SZW5hbWVSZW1vdGUgKCJvcmlnaW4iLCAib3RoZXIiKTsNCisJCQlBc3NlcnQu QXJlRXF1YWwgKCJvdGhlciIsIHJlcG8yLkdldEN1cnJlbnRSZW1vdGUgKCkpOw0KKw0KKwkJCXJl cG8yLlJlbW92ZVJlbW90ZSAoIm90aGVyIik7DQorCQkJQXNzZXJ0LklzRmFsc2UgKHJlcG8yLkdl dFJlbW90ZXMgKCkuQW55ICgpKTsNCisJCX0NCisNCisJCVtUZXN0XQ0KKwkJcHVibGljIHZvaWQg VGVzdElzTWVyZ2VkICgpDQorCQl7DQorCQkJdmFyIHJlcG8yID0gKEdpdFJlcG9zaXRvcnkpUmVw bzsNCisJCQlBZGRGaWxlICgiZmlsZTEiLCAidGV4dCIsIHRydWUsIHRydWUpOw0KKw0KKwkJCUFz c2VydC5Jc1RydWUgKHJlcG8yLklzQnJhbmNoTWVyZ2VkICgibWFzdGVyIikpOw0KKw0KKwkJCXJl cG8yLkNyZWF0ZUJyYW5jaCAoImJyYW5jaDEiLCBudWxsKTsNCisJCQlyZXBvMi5Td2l0Y2hUb0Jy YW5jaCAobmV3IE1vbm9EZXZlbG9wLkNvcmUuUHJvZ3Jlc3NNb25pdG9yaW5nLk51bGxQcm9ncmVz c01vbml0b3IgKCksICJicmFuY2gxIik7DQorCQkJQWRkRmlsZSAoImZpbGUyIiwgInRleHQiLCB0 cnVlLCB0cnVlKTsNCisNCisJCQlyZXBvMi5Td2l0Y2hUb0JyYW5jaCAobmV3IE1vbm9EZXZlbG9w LkNvcmUuUHJvZ3Jlc3NNb25pdG9yaW5nLk51bGxQcm9ncmVzc01vbml0b3IgKCksICJtYXN0ZXIi KTsNCisJCQlBc3NlcnQuSXNGYWxzZSAocmVwbzIuSXNCcmFuY2hNZXJnZWQgKCJicmFuY2gxIikp Ow0KKwkJCXJlcG8yLk1lcmdlICgiYnJhbmNoMSIsIEdpdFVwZGF0ZU9wdGlvbnMuTm9ybWFsVXBk YXRlLCBuZXcgTW9ub0RldmVsb3AuQ29yZS5Qcm9ncmVzc01vbml0b3JpbmcuTnVsbFByb2dyZXNz TW9uaXRvciAoKSk7DQorCQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNCcmFuY2hNZXJnZWQgKCJi cmFuY2gxIikpOw0KKwkJfQ0KKw0KKwkJW1Rlc3RdDQorCQlwdWJsaWMgdm9pZCBUZXN0VGFncyAo KQ0KKwkJew0KKwkJCXZhciByZXBvMiA9IChHaXRSZXBvc2l0b3J5KVJlcG87DQorCQkJQWRkRmls ZSAoImZpbGUxIiwgInRleHQiLCB0cnVlLCB0cnVlKTsNCisJCQlyZXBvMi5BZGRUYWcgKCJ0YWcx IiwgR2V0SGVhZFJldmlzaW9uICgpLCAibXktdGFnIik7DQorCQkJQXNzZXJ0LkFyZUVxdWFsICgx LCByZXBvMi5HZXRUYWdzICgpLkNvdW50ICgpKTsNCisJCQlBc3NlcnQuQXJlRXF1YWwgKCJ0YWcx IiwgcmVwbzIuR2V0VGFncyAoKS5GaXJzdCAoKSk7DQorCQkJcmVwbzIuUmVtb3ZlVGFnICgidGFn MSIpOw0KKwkJCUFzc2VydC5BcmVFcXVhbCAoMCwgcmVwbzIuR2V0VGFncyAoKS5Db3VudCAoKSk7 DQorCQl9DQorDQorCQkvLyBUT0RPOiBUZXN0IHJlYmFzZSBhbmQgbWVyZ2UgLSBUaGlzIGlzIGJy b2tlbiBvbiBXaW5kb3dzDQorDQogCQlwcm90ZWN0ZWQgb3ZlcnJpZGUgUmVwb3NpdG9yeSBHZXRS ZXBvIChzdHJpbmcgcGF0aCwgc3RyaW5nIHVybCkNCiAJCXsNCiAJCQlyZXR1cm4gbmV3IEdpdFJl cG9zaXRvcnkgKHBhdGgsIHVybCk7DQ0KDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL1ZlcnNp b25Db250cm9sL01vbm9EZXZlbG9wLlZlcnNpb25Db250cm9sLkdpdC5UZXN0cy9CYXNlUmVwb3Np dG9yeVRlc3RzLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIE1v bm9EZXZlbG9wLlZlcnNpb25Db250cm9sLlRlc3RzCiB7CiAJW1Rlc3RGaXh0dXJlXQotCXB1Ymxp YyBhYnN0cmFjdCBjbGFzcyBCYXNlUmVwb1V0aWxzVGVzdAorCWFic3RyYWN0IGNsYXNzIEJhc2VS ZXBvVXRpbHNUZXN0CiAJewogCQkvLyBbR2l0XSBTZXQgdXNlciBhbmQgZW1haWwuCiAJCXByb3Rl Y3RlZCBjb25zdCBzdHJpbmcgQXV0aG9yID0gImF1dGhvciI7DQoNCk1vZGlmaWVkOiBtYWluL3Ny Yy9hZGRpbnMvVmVyc2lvbkNvbnRyb2wvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuR2l0L01v bm9EZXZlbG9wLlZlcnNpb25Db250cm9sLkdpdC9HaXRSZXBvc2l0b3J5LmNzDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQpAQCAtMTU1Nyw3ICsxNTU3LDcgQEAgcHVibGljIENoYW5nZVNldCBHZXRQdXNoQ2hhbmdlU2V0 IChzdHJpbmcgcmVtb3RlLCBzdHJpbmcgYnJhbmNoKQogCQkJQ2hhbmdlU2V0IGNzZXQgPSBDcmVh dGVDaGFuZ2VTZXQgKFJvb3RQYXRoKTsKIAkJCU9iamVjdElkIGNpZDEgPSBSb290UmVwb3NpdG9y eS5SZXNvbHZlIChyZW1vdGUgKyAiLyIgKyBicmFuY2gpOwogCQkJT2JqZWN0SWQgY2lkMiA9IFJv b3RSZXBvc2l0b3J5LlJlc29sdmUgKFJvb3RSZXBvc2l0b3J5LkdldEJyYW5jaCAoKSk7Ci0JCQlS ZXZXYWxrIHJ3ID0gbmV3IFJldldhbGsgKFJvb3RSZXBvc2l0b3J5KTsKKwkJCVJldldhbGsJcncg PSBuZXcgUmV2V2FsayAoUm9vdFJlcG9zaXRvcnkpOwogCQkJUmV2Q29tbWl0IGMxID0gcncuUGFy c2VDb21taXQgKGNpZDEpOwogCQkJUmV2Q29tbWl0IGMyID0gcncuUGFyc2VDb21taXQgKGNpZDIp OwogCQkJCkBAIC0xNTg5LDcgKzE1ODksNyBAQCBwdWJsaWMgRGlmZkluZm9bXSBHZXRQdXNoRGlm ZiAoc3RyaW5nIHJlbW90ZSwgc3RyaW5nIGJyYW5jaCkKIAkJCVJldkNvbW1pdCBjMiA9IHJ3LlBh cnNlQ29tbWl0IChjaWQyKTsKIAkJCQogCQkJTGlzdDxEaWZmSW5mbz4gZGlmZnMgPSBuZXcgTGlz dDxEaWZmSW5mbz4gKCk7Ci0JCQlmb3JlYWNoICh2YXIgY2hhbmdlIGluIEdpdFV0aWwuQ29tcGFy ZUNvbW1pdHMgKFJvb3RSZXBvc2l0b3J5LCBjMSwgYzIpKSB7CisJCQlmb3JlYWNoICh2YXIgY2hh bmdlIGluIEdpdFV0aWwuQ29tcGFyZUNvbW1pdHMgKFJvb3RSZXBvc2l0b3J5LCBjMiwgYzEpKSB7 CiAJCQkJc3RyaW5nIGRpZmY7CiAJCQkJc3dpdGNoIChjaGFuZ2UuR2V0Q2hhbmdlVHlwZSAoKSkg ewogCQkJCWNhc2UgRGlmZkVudHJ5LkNoYW5nZVR5cGUuREVMRVRFOg0KDQpNb2RpZmllZDogbWFp bi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZlbG9wLlZlcnNpb25Db250cm9sLlN1 YnZlcnNpb24uVGVzdHMvQmFzZVN2blJlcG9zaXRvcnlUZXN0cy5jcw0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAg LTMzLDkgKzMzLDkgQEAKIG5hbWVzcGFjZSBNb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5TdWJ2 ZXJzaW9uLlRlc3RzDQogew0KIAlbVGVzdEZpeHR1cmVdDQotCXB1YmxpYyBhYnN0cmFjdCBjbGFz cyBCYXNlU3ZuVXRpbHNUZXN0IDogQmFzZVJlcG9VdGlsc1Rlc3QNCisJYWJzdHJhY3QgY2xhc3Mg QmFzZVN2blV0aWxzVGVzdCA6IEJhc2VSZXBvVXRpbHNUZXN0DQogCXsNCi0JCXByb3RlY3RlZCBQ cm9jZXNzIHN2blNlcnZlID0gbnVsbDsNCisJCXByb3RlY3RlZCBQcm9jZXNzIFN2blNlcnZlID0g bnVsbDsNCiANCiAJCVtTZXRVcF0NCiAJCXB1YmxpYyBvdmVycmlkZSB2b2lkIFNldHVwICgpDQpA QCAtNTksMTMgKzU5LDEzIEBAIHB1YmxpYyBvdmVycmlkZSB2b2lkIFNldHVwICgpCiAJCQkvLyBD cmVhdGUgaG9zdCAoV2luMzIpDQogCQkJLy8gVGhpcyBuZWVkcyB0byBiZSBkb25lIGFmdGVyIGRv aW5nIHRoZSBzdm5BZG1pbiBjcmVhdGlvbi4NCiAJCQkvLyBBbmQgYmVmb3JlIGNoZWNrb3V0Lg0K LQkJCWlmIChzdm5TZXJ2ZSAhPSBudWxsKSB7DQorCQkJaWYgKFN2blNlcnZlICE9IG51bGwpIHsN CiAJCQkJaW5mbyA9IG5ldyBQcm9jZXNzU3RhcnRJbmZvICgpOw0KIAkJCQlpbmZvLkZpbGVOYW1l ID0gInN2bnNlcnZlIjsNCiAJCQkJaW5mby5Bcmd1bWVudHMgPSAiLWRyICIgKyBSb290VXJsOw0K IAkJCQlpbmZvLldpbmRvd1N0eWxlID0gUHJvY2Vzc1dpbmRvd1N0eWxlLkhpZGRlbjsNCi0JCQkJ c3ZuU2VydmUuU3RhcnRJbmZvID0gaW5mbzsNCi0JCQkJc3ZuU2VydmUuU3RhcnQgKCk7DQorCQkJ CVN2blNlcnZlLlN0YXJ0SW5mbyA9IGluZm87DQorCQkJCVN2blNlcnZlLlN0YXJ0ICgpOw0KIA0K IAkJCQkvLyBDcmVhdGUgdXNlciB0byBhdXRoLg0KIAkJCQl1c2luZyAodmFyIHBlcm0gPSBGaWxl LiBDcmVhdGVUZXh0IChSb290VXJsICsgUGF0aC5EaXJlY3RvcnlTZXBhcmF0b3JDaGFyICsgInJl cG8iICsNDQoNCk1vZGlmaWVkOiBtYWluL3NyYy9hZGRpbnMvVmVyc2lvbkNvbnRyb2wvTW9ub0Rl dmVsb3AuVmVyc2lvbkNvbnRyb2wuU3VidmVyc2lvbi5UZXN0cy9SZXBvc2l0b3J5VGVzdHMuY3MN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCkBAIC0zNiw3ICszNiw3IEBACiBuYW1lc3BhY2UgVmVyc2lvbkNvbnRyb2wu U3VidmVyc2lvbi5Vbml4LlRlc3RzCiB7CiAJW1Rlc3RGaXh0dXJlXQotCXB1YmxpYyBjbGFzcyBV bml4U3ZuVXRpbHNUZXN0IDogTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuU3VidmVyc2lvbi5U ZXN0cy5CYXNlU3ZuVXRpbHNUZXN0CisJc2VhbGVkIGNsYXNzIFVuaXhTdm5VdGlsc1Rlc3QgOiBN b25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5TdWJ2ZXJzaW9uLlRlc3RzLkJhc2VTdm5VdGlsc1Rl c3QKIAl7CiAJCVN1YnZlcnNpb25CYWNrZW5kIFN2bkNsaWVudCB7CiAJCQlnZXQgeyByZXR1cm4g UmVwby5Tdm47IH0NCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2FkZGlucy9WZXJzaW9uQ29udHJvbC9T dWJ2ZXJzaW9uLldpbjMyLlRlc3RzL1JlcG9zaXRvcnlUZXN0cy5jcw0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAg LTM2LDIxICszNiwyMSBAQAogbmFtZXNwYWNlIE1vbm9EZXZlbG9wLlZlcnNpb25Db250cm9sLlN1 YnZlcnNpb24uVGVzdHMNCiB7DQogCVtUZXN0Rml4dHVyZV0NCi0JcHVibGljIGNsYXNzIFNoYXJw U3ZuVXRpbHNUZXN0IDogQmFzZVN2blV0aWxzVGVzdA0KKwlzZWFsZWQgY2xhc3MgU2hhcnBTdm5V dGlsc1Rlc3QgOiBCYXNlU3ZuVXRpbHNUZXN0DQogCXsNCiAJCVtTZXRVcF0NCiAJCXB1YmxpYyBv dmVycmlkZSB2b2lkIFNldHVwICgpDQogCQl7DQogCQkJUm9vdFVybCA9IG5ldyBGaWxlUGF0aCAo RmlsZVNlcnZpY2UuQ3JlYXRlVGVtcERpcmVjdG9yeSAoKSk7DQogCQkJUmVwb0xvY2F0aW9uID0g InN2bjovL2xvY2FsaG9zdDozNjkwL3JlcG8iOw0KLQkJCXN2blNlcnZlID0gbmV3IFByb2Nlc3Mg KCk7DQorCQkJU3ZuU2VydmUgPSBuZXcgUHJvY2VzcyAoKTsNCiAJCQliYXNlLlNldHVwICgpOw0K IAkJfQ0KIA0KIAkJW1RlYXJEb3duXQ0KIAkJcHVibGljIG92ZXJyaWRlIHZvaWQgVGVhckRvd24g KCkNCiAJCXsNCi0JCQlzdm5TZXJ2ZS5LaWxsICgpOw0KKwkJCVN2blNlcnZlLktpbGwgKCk7DQog DQogCQkJYmFzZS5UZWFyRG93biAoKTsNCiAJCX0NDQoNCiAgIENvbW1pdDogZmRlNThhNDg3ZTM5 OTViNDViYzk3MGI4NTg4M2RmNzMzMGViMjgwMw0KICAgQXV0aG9yOiBUaGVyem9rIDx0ZXJvbWFy aW9AeWFob28uY29tPiAoVGhlcnpvaykNCiAgICAgRGF0ZTogMjAxMy0xMS0xOCAxMzoxMzoyMiBH TVQNCiAgICAgIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVsb3AvY29tbWl0 L2ZkZTU4YTQ4N2UzOTk1YjQ1YmM5NzBiODU4ODNkZjczMzBlYjI4MDMNCg0KW0dpdF0gRml4IGEg dGVzdC4NCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1haW4vc3JjL2FkZGlucy9WZXJzaW9uQ29udHJv bC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5HaXQuVGVzdHMvQmFzZUdpdFJlcG9zaXRvcnlU ZXN0cy5jcwoNCk1vZGlmaWVkOiBtYWluL3NyYy9hZGRpbnMvVmVyc2lvbkNvbnRyb2wvTW9ub0Rl dmVsb3AuVmVyc2lvbkNvbnRyb2wuR2l0LlRlc3RzL0Jhc2VHaXRSZXBvc2l0b3J5VGVzdHMuY3MN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCkBAIC0xNjcsOSArMTY3LDkgQEAgcHVibGljIHZvaWQgVGVzdEdpdFN0YXNo ICgpCiAJCQl2YXIgcmVwbzIgPSAoR2l0UmVwb3NpdG9yeSlSZXBvOw0KIAkJCUFkZEZpbGUgKCJm aWxlMiIsICJub3RoaW5nIiwgdHJ1ZSwgdHJ1ZSk7DQogCQkJQWRkRmlsZSAoImZpbGUxIiwgInRl eHQiLCB0cnVlLCBmYWxzZSk7DQotCQkJcmVwbzIuR2V0U3Rhc2hlcyAoKS5DcmVhdGUgKG51bGwp Ow0KKwkJCXJlcG8yLkdldFN0YXNoZXMgKCkuQ3JlYXRlIChuZXcgTnVsbFByb2dyZXNzTW9uaXRv ciAoKSk7DQogCQkJQXNzZXJ0LklzVHJ1ZSAoIUZpbGUuRXhpc3RzIChSb290Q2hlY2tvdXQgKyAi ZmlsZTEiKSwgIlN0YXNoIGNyZWF0aW9uIGZhaWx1cmUiKTsNCi0JCQlyZXBvMi5HZXRTdGFzaGVz ICgpLlBvcCAobnVsbCk7DQorCQkJcmVwbzIuR2V0U3Rhc2hlcyAoKS5Qb3AgKG5ldyBOdWxsUHJv Z3Jlc3NNb25pdG9yICgpKTsNCiANCiAJCQlWZXJzaW9uSW5mbyB2aSA9IHJlcG8yLkdldFZlcnNp b25JbmZvIChSb290Q2hlY2tvdXQgKyAiZmlsZTEiLCBWZXJzaW9uSW5mb1F1ZXJ5RmxhZ3MuSWdu b3JlQ2FjaGUpOw0KIAkJCUFzc2VydC5BcmVFcXVhbCAoVmVyc2lvblN0YXR1cy5TY2hlZHVsZWRB ZGQsIHZpLlN0YXR1cyAmIFZlcnNpb25TdGF0dXMuU2NoZWR1bGVkQWRkLCAiU3Rhc2ggcG9wIGZh aWx1cmUiKTsNDQoNCiAgIENvbW1pdDogYjAzNjMzYzM5MTU3MWYwNDcyMzNmODQ0MTk4ZjFhOTY4 ZDY0MDIyOA0KICAgQXV0aG9yOiBUaGVyem9rIDx0ZXJvbWFyaW9AeWFob28uY29tPiAoVGhlcnpv aykNCiAgICAgRGF0ZTogMjAxMy0xMS0xOCAxNDo1MDoxMCBHTVQNCiAgICAgIFVSTDogaHR0cHM6 Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVsb3AvY29tbWl0L2IwMzYzM2MzOTE1NzFmMDQ3MjMz Zjg0NDE5OGYxYTk2OGQ2NDAyMjgNCg0KW0dpdF0gVW5pdCB0ZXN0cyBjbGVhbnVwLg0KDQpDaGFu Z2VkIHBhdGhzOgogIE0gbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZlbG9w LlZlcnNpb25Db250cm9sLkdpdC5UZXN0cy9CYXNlR2l0UmVwb3NpdG9yeVRlc3RzLmNzCg0KTW9k aWZpZWQ6IG1haW4vc3JjL2FkZGlucy9WZXJzaW9uQ29udHJvbC9Nb25vRGV2ZWxvcC5WZXJzaW9u Q29udHJvbC5HaXQuVGVzdHMvQmFzZUdpdFJlcG9zaXRvcnlUZXN0cy5jcw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K QEAgLTUxLDExICs1MSwxMSBAQCBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBTZXR1cCAoKQogCQkJUmVw b0xvY2F0aW9uID0gImZpbGU6Ly8vIiArIFJvb3RVcmwuRnVsbFBhdGggKyAicmVwby5naXQiOw0K IA0KIAkJCS8vIEluaXRpYWxpemUgdGhlIGJhcmUgcmVwby4NCi0JCQlJbml0Q29tbWFuZCBjaSA9 IG5ldyBJbml0Q29tbWFuZCAoKTsNCisJCQl2YXIgY2kgPSBuZXcgSW5pdENvbW1hbmQgKCk7DQog CQkJY2kuU2V0RGlyZWN0b3J5IChuZXcgU2hhcnBlbi5GaWxlUGF0aCAoUm9vdFVybC5GdWxsUGF0 aCArICJyZXBvLmdpdCIpKTsNCiAJCQljaS5TZXRCYXJlICh0cnVlKTsNCiAJCQljaS5DYWxsICgp Ow0KLQkJCUZpbGVSZXBvc2l0b3J5IGJhcmUgPSBuZXcgRmlsZVJlcG9zaXRvcnkgKG5ldyBTaGFy cGVuLkZpbGVQYXRoIChSb290VXJsLkZ1bGxQYXRoICsgInJlcG8uZ2l0IikpOw0KKwkJCXZhciBi YXJlID0gbmV3IEZpbGVSZXBvc2l0b3J5IChuZXcgU2hhcnBlbi5GaWxlUGF0aCAoUm9vdFVybC5G dWxsUGF0aCArICJyZXBvLmdpdCIpKTsNCiAJCQlzdHJpbmcgYnJhbmNoID0gQ29uc3RhbnRzLlJf SEVBRFMgKyAibWFzdGVyIjsNCiANCiAJCQlSZWZVcGRhdGUgaGVhZCA9IGJhcmUuVXBkYXRlUmVm IChDb25zdGFudHMuSEVBRCk7DQpAQCAtMTMyLDIxICsxMzIsMjEgQEAgcHVibGljIG92ZXJyaWRl IHZvaWQgTW92ZXNEaXJlY3RvcnkgKCkKIA0KIAkJcHJvdGVjdGVkIG92ZXJyaWRlIFJldmlzaW9u IEdldEhlYWRSZXZpc2lvbiAoKQ0KIAkJew0KLQkJCUdpdFJlcG9zaXRvcnkgcmVwbzIgPSAoR2l0 UmVwb3NpdG9yeSlSZXBvOw0KLQkJCVJldldhbGsgcncgPSBuZXcgUmV2V2FsayAocmVwbzIuUm9v dFJlcG9zaXRvcnkpOw0KKwkJCXZhciByZXBvMiA9IChHaXRSZXBvc2l0b3J5KVJlcG87DQorCQkJ dmFyIHJ3ID0gbmV3IFJldldhbGsgKHJlcG8yLlJvb3RSZXBvc2l0b3J5KTsNCiAJCQlPYmplY3RJ ZCBoZWFkSWQgPSByZXBvMi5Sb290UmVwb3NpdG9yeS5SZXNvbHZlIChDb25zdGFudHMuSEVBRCk7 DQogCQkJaWYgKGhlYWRJZCA9PSBudWxsKQ0KIAkJCQlyZXR1cm4gbnVsbDsNCiANCiAJCQlSZXZD b21taXQgY29tbWl0ID0gcncuUGFyc2VDb21taXQgKGhlYWRJZCk7DQotCQkJR2l0UmV2aXNpb24g cmV2ID0gbmV3IEdpdFJldmlzaW9uIChSZXBvLCByZXBvMi5Sb290UmVwb3NpdG9yeSwgY29tbWl0 LklkLk5hbWUpOw0KKwkJCXZhciByZXYgPSBuZXcgR2l0UmV2aXNpb24gKFJlcG8sIHJlcG8yLlJv b3RSZXBvc2l0b3J5LCBjb21taXQuSWQuTmFtZSk7DQogCQkJcmV2LkNvbW1pdCA9IGNvbW1pdDsN CiAJCQlyZXR1cm4gcmV2Ow0KIAkJfQ0KIA0KIAkJcHJvdGVjdGVkIG92ZXJyaWRlIHZvaWQgUG9z dENvbW1pdCAoUmVwb3NpdG9yeSByZXBvKQ0KIAkJew0KLQkJCUdpdFJlcG9zaXRvcnkgcmVwbzIg PSAoR2l0UmVwb3NpdG9yeSlyZXBvOw0KKwkJCXZhciByZXBvMiA9IChHaXRSZXBvc2l0b3J5KXJl cG87DQogCQkJcmVwbzIuUHVzaCAobmV3IE1vbm9EZXZlbG9wLkNvcmUuUHJvZ3Jlc3NNb25pdG9y aW5nLk51bGxQcm9ncmVzc01vbml0b3IgKCksIHJlcG8yLkdldEN1cnJlbnRSZW1vdGUgKCksIHJl cG8yLkdldEN1cnJlbnRCcmFuY2ggKCkpOw0KIAkJfQ0KIA0NCg0KICAgQ29tbWl0OiA2MjcyOTNh N2U2NGIyMjgyNzdmYzQ2ZDhhMjQwMjFkMTViYjIwZjJhDQogICBBdXRob3I6IFRoZXJ6b2sgPHRl cm9tYXJpb0B5YWhvby5jb20+IChUaGVyem9rKQ0KICAgICBEYXRlOiAyMDEzLTExLTE4IDE3OjQw OjI0IEdNVA0KICAgICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9j b21taXQvNjI3MjkzYTdlNjRiMjI4Mjc3ZmM0NmQ4YTI0MDIxZDE1YmIyMGYyYQ0KDQpbU3VidmVy c2lvbl0gQWRkZWQgVVJMIHZhbGlkYXRpb24gdGVzdHMuDQoNCkNoYW5nZWQgcGF0aHM6CiAgTSBt YWluL3NyYy9hZGRpbnMvVmVyc2lvbkNvbnRyb2wvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wu R2l0LlRlc3RzL0Jhc2VHaXRSZXBvc2l0b3J5VGVzdHMuY3MKICBNIG1haW4vc3JjL2FkZGlucy9W ZXJzaW9uQ29udHJvbC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5HaXQuVGVzdHMvQmFzZVJl cG9zaXRvcnlUZXN0cy5jcwogIE0gbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9E ZXZlbG9wLlZlcnNpb25Db250cm9sLlN1YnZlcnNpb24uVGVzdHMvQmFzZVN2blJlcG9zaXRvcnlU ZXN0cy5jcwogIE0gbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZlbG9wLlZl cnNpb25Db250cm9sLlN1YnZlcnNpb24uVGVzdHMvUmVwb3NpdG9yeVRlc3RzLmNzCiAgTSBtYWlu L3NyYy9hZGRpbnMvVmVyc2lvbkNvbnRyb2wvU3VidmVyc2lvbi5XaW4zMi5UZXN0cy9SZXBvc2l0 b3J5VGVzdHMuY3MKDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01v bm9EZXZlbG9wLlZlcnNpb25Db250cm9sLkdpdC5UZXN0cy9CYXNlR2l0UmVwb3NpdG9yeVRlc3Rz LmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQpAQCAtMjY5LDggKzI2OSw3IEBAIHB1YmxpYyB2b2lkIFRlc3RQdXNo RGlmZiAoKQogCQkJLy9Bc3NlcnQuQXJlRXF1YWwgKCJ0ZXh0MiIsIGl0ZW0uQ29udGVudCk7DQog CQl9DQogDQotCQlbVGVzdF0NCi0JCXB1YmxpYyB2b2lkIFRlc3RHaXRVcmwgKCkNCisJCXByb3Rl Y3RlZCBvdmVycmlkZSB2b2lkIFRlc3RWYWxpZFVybCAoKQ0KIAkJew0KIAkJCXZhciByZXBvMiA9 IChHaXRSZXBvc2l0b3J5KVJlcG87DQogCQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNVcmxWYWxp ZCAoImdpdEBnaXRodWIuY29tOm1vbm8vbW9ub2RldmVsb3AiKSk7DQ0KDQpNb2RpZmllZDogbWFp bi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZlbG9wLlZlcnNpb25Db250cm9sLkdp dC5UZXN0cy9CYXNlUmVwb3NpdG9yeVRlc3RzLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMTI1LDYgKzEy NSwxNCBAQCBwdWJsaWMgdm9pZCBSaWdodFJlcG9zaXRvcnlEZXRlY3Rpb24gKCkKIAkJcHJvdGVj dGVkIGFic3RyYWN0IE5Vbml0LkZyYW1ld29yay5Db25zdHJhaW50cy5JUmVzb2x2ZUNvbnN0cmFp bnQgSXNDb3JyZWN0VHlwZSAoKTsKIAogCQlbVGVzdF0KKwkJcHVibGljIHZvaWQgVXJsSXNWYWxp ZCAoKQorCQl7CisJCQlUZXN0VmFsaWRVcmwgKCk7CisJCX0KKworCQlwcm90ZWN0ZWQgYWJzdHJh Y3Qgdm9pZCBUZXN0VmFsaWRVcmwgKCk7CisKKwkJW1Rlc3RdCiAJCS8vIFRlc3RzIFJlcG9zaXRv cnkuQ2hlY2tvdXQuCiAJCXB1YmxpYyB2b2lkIENoZWNrb3V0RXhpc3RzICgpCiAJCXsNCg0KTW9k aWZpZWQ6IG1haW4vc3JjL2FkZGlucy9WZXJzaW9uQ29udHJvbC9Nb25vRGV2ZWxvcC5WZXJzaW9u Q29udHJvbC5TdWJ2ZXJzaW9uLlRlc3RzL0Jhc2VTdm5SZXBvc2l0b3J5VGVzdHMuY3MNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCkBAIC05Myw2ICs5MywxNSBAQCBwcm90ZWN0ZWQgb3ZlcnJpZGUgTlVuaXQuRnJhbWV3 b3JrLkNvbnN0cmFpbnRzLklSZXNvbHZlQ29uc3RyYWludCBJc0NvcnJlY3RUeXBlCiAJCQlyZXR1 cm4gSXMuSW5zdGFuY2VPZjxTdWJ2ZXJzaW9uUmVwb3NpdG9yeT4gKCk7DQogCQl9DQogDQorCQlw cm90ZWN0ZWQgb3ZlcnJpZGUgdm9pZCBUZXN0VmFsaWRVcmwgKCkNCisJCXsNCisJCQl2YXIgcmVw bzIgPSAoU3VidmVyc2lvblJlcG9zaXRvcnkpUmVwbzsNCisJCQlBc3NlcnQuSXNUcnVlIChyZXBv Mi5Jc1VybFZhbGlkICgic3ZuOi8vc3ZucmVwby5jb206ODAvcmVwbyIpKTsNCisJCQlBc3NlcnQu SXNUcnVlIChyZXBvMi5Jc1VybFZhbGlkICgic3ZuK3NzaDovL3VzZXJAaG9zdC5jb206ODAvcmVw byIpKTsNCisJCQlBc3NlcnQuSXNUcnVlIChyZXBvMi5Jc1VybFZhbGlkICgiaHR0cDovL3N2bnJl cG8uY29tOjgwL3JlcG8iKSk7DQorCQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNVcmxWYWxpZCAo Imh0dHBzOi8vc3ZucmVwby5jb206ODAvcmVwbyIpKTsNCisJCX0NCisNCiAJCXByb3RlY3RlZCBv dmVycmlkZSBSZXZpc2lvbiBHZXRIZWFkUmV2aXNpb24gKCkNCiAJCXsNCiAJCQlyZXR1cm4gU3Zu UmV2aXNpb24uSGVhZDsNDQoNCk1vZGlmaWVkOiBtYWluL3NyYy9hZGRpbnMvVmVyc2lvbkNvbnRy b2wvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuU3VidmVyc2lvbi5UZXN0cy9SZXBvc2l0b3J5 VGVzdHMuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NCkBAIC0xMjcsNiArMTI3LDEyIEBAIHByb3RlY3RlZCBvdmVy cmlkZSB2b2lkIFBvc3RVbmxvY2sgKCkKIAkJCX0pOwogCQl9CiAKKwkJcHVibGljIG92ZXJyaWRl IHZvaWQgVGVzdFZhbGlkVXJsICgpCisJCXsKKwkJCWJhc2UuVGVzdFZhbGlkVXJsICgpOworCQkJ QXNzZXJ0LklzVHJ1ZSAoUmVwby5Jc1VybFZhbGlkICgiZmlsZTovLy9kaXIvcmVwbyIpKTsKKwkJ fQorCiAJCXByb3RlY3RlZCBvdmVycmlkZSBSZXBvc2l0b3J5IEdldFJlcG8gKHN0cmluZyBwYXRo LCBzdHJpbmcgdXJsKQogCQl7CiAJCQlyZXR1cm4gbmV3IFN1YnZlcnNpb25SZXBvc2l0b3J5IChu ZXcgU3ZuQ2xpZW50ICgpLCB1cmwsIHBhdGgpOw0KDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5z L1ZlcnNpb25Db250cm9sL1N1YnZlcnNpb24uV2luMzIuVGVzdHMvUmVwb3NpdG9yeVRlc3RzLmNz DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQpAQCAtMTE3LDYgKzExNywxNiBAQCBwcm90ZWN0ZWQgb3ZlcnJpZGUgdm9p ZCBQb3N0VW5sb2NrICgpCiAJCQl9KTsNCiAJCX0NCiANCisJCVtUZXN0XQ0KKwkJcHJvdGVjdGVk IG92ZXJyaWRlIHZvaWQgVGVzdFZhbGlkVXJsICgpDQorCQl7DQorCQkJYmFzZS5UZXN0VmFsaWRV cmwgKCk7DQorDQorCQkJQXNzZXJ0Lklnbm9yZSAoIkZpbGUgc2NoZW1lIGlzIGJyb2tlbiBvbiBX aW5kb3dzIik7DQorCQkJdmFyIHJlcG8yID0gKFN1YnZlcnNpb25SZXBvc2l0b3J5KVJlcG87DQor CQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNVcmxWYWxpZCAoImZpbGU6Ly8vYzovZGlyL3JlcG8i KSk7DQorCQl9DQorDQogCQlwcm90ZWN0ZWQgb3ZlcnJpZGUgUmVwb3NpdG9yeSBHZXRSZXBvIChz dHJpbmcgcGF0aCwgc3RyaW5nIHVybCkNCiAJCXsNCiAJCQlyZXR1cm4gbmV3IFN1YnZlcnNpb25S ZXBvc2l0b3J5IChuZXcgU3ZuU2hhcnBDbGllbnQgKCksIHVybCwgcGF0aCk7DQ0KDQogICBDb21t aXQ6IDE2YTM0ZTdlMDU5OTY3NDk0NDY5MWI0YWQxZjAxMjdlYWZkMDVjYTMNCiAgIEF1dGhvcjog VGhlcnpvayA8dGVyb21hcmlvQHlhaG9vLmNvbT4gKFRoZXJ6b2spDQogICAgIERhdGU6IDIwMTMt MTEtMTggMTc6NDg6MTMgR01UDQogICAgICBVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb25vL21v bm9kZXZlbG9wL2NvbW1pdC8xNmEzNGU3ZTA1OTk2NzQ5NDQ2OTFiNGFkMWYwMTI3ZWFmZDA1Y2Ez DQoNCkZpeCBidWlsZC4gPl8+DQoNCkNoYW5nZWQgcGF0aHM6CiAgTSBtYWluL3NyYy9hZGRpbnMv VmVyc2lvbkNvbnRyb2wvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuU3VidmVyc2lvbi5UZXN0 cy9SZXBvc2l0b3J5VGVzdHMuY3MKDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25D b250cm9sL01vbm9EZXZlbG9wLlZlcnNpb25Db250cm9sLlN1YnZlcnNpb24uVGVzdHMvUmVwb3Np dG9yeVRlc3RzLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMTI3LDcgKzEyNyw3IEBAIHByb3RlY3RlZCBv dmVycmlkZSB2b2lkIFBvc3RVbmxvY2sgKCkKIAkJCX0pOwogCQl9CiAKLQkJcHVibGljIG92ZXJy aWRlIHZvaWQgVGVzdFZhbGlkVXJsICgpCisJCXByb3RlY3RlZCBvdmVycmlkZSB2b2lkIFRlc3RW YWxpZFVybCAoKQogCQl7CiAJCQliYXNlLlRlc3RWYWxpZFVybCAoKTsKIAkJCUFzc2VydC5Jc1Ry dWUgKFJlcG8uSXNVcmxWYWxpZCAoImZpbGU6Ly8vZGlyL3JlcG8iKSk7DQoNCiAgIENvbW1pdDog NzEwZTA0MDA3YjBhMjY5MTJiMTM5M2RjYWE5ODhiZjlhZDNhZjkwNg0KICAgQXV0aG9yOiBUaGVy em9rIDx0ZXJvbWFyaW9AeWFob28uY29tPiAoVGhlcnpvaykNCiAgICAgRGF0ZTogMjAxMy0xMS0x OCAyMjo0NTozMyBHTVQNCiAgICAgIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL21vbm8vbW9ub2Rl dmVsb3AvY29tbWl0LzcxMGUwNDAwN2IwYTI2OTEyYjEzOTNkY2FhOTg4YmY5YWQzYWY5MDYNCg0K W1dlYlJlZmVyZW5jZXNdIFBvc3NpYmlsaXR5IHRvIGNob29zZSB2aXNpYmlsaXR5CgpFaXRoZXIg Z2VuZXJhdGUgdGhlIHNlcnZpY2UgYXMgYSBwdWJsaWMgb3IgaW50ZXJuYWwgc2VydmljZS4NCg0K Q2hhbmdlZCBwYXRoczoKICBNIG1haW4vc3JjL2FkZGlucy9Nb25vRGV2ZWxvcC5XZWJSZWZlcmVu Y2VzL01vbm9EZXZlbG9wLldlYlJlZmVyZW5jZXMuRGlhbG9ncy9XQ0ZDb25maWdXaWRnZXQuY3MK ICBNIG1haW4vc3JjL2FkZGlucy9Nb25vRGV2ZWxvcC5XZWJSZWZlcmVuY2VzL2d0ay1ndWkvTW9u b0RldmVsb3AuV2ViUmVmZXJlbmNlcy5EaWFsb2dzLldDRkNvbmZpZ1dpZGdldC5jcwogIE0gbWFp bi9zcmMvYWRkaW5zL01vbm9EZXZlbG9wLldlYlJlZmVyZW5jZXMvZ3RrLWd1aS9ndWkuc3RldGlj Cg0KTW9kaWZpZWQ6IG1haW4vc3JjL2FkZGlucy9Nb25vRGV2ZWxvcC5XZWJSZWZlcmVuY2VzL01v bm9EZXZlbG9wLldlYlJlZmVyZW5jZXMuRGlhbG9ncy9XQ0ZDb25maWdXaWRnZXQuY3MNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCkBAIC00NSw2ICs0NSwxMSBAQCBwdWJsaWMgV0NGQ29uZmlnV2lkZ2V0IChDbGllbnRP cHRpb25zIG9wdGlvbnMpCiAJCQkKIAkJCWRpY3RUeXBlcyA9IG5ldyBMaXN0PFR5cGU+IChEZWZh dWx0RGljdGlvbmFyeVR5cGVzKTsKIAkJCVBvcHVsYXRlQm94IChkaWN0aW9uYXJ5Q29sbGVjdGlv biwgIkRpY3Rpb25hcnkiLCBkaWN0VHlwZXMpOworCisJCQlmb3JlYWNoICh2YXIgYWNjZXNzIGlu IEFjY2Vzc0dlbmVyYXRpb25UeXBlcykKKwkJCQlsaXN0QWNjZXNzLkFwcGVuZFRleHQgKGFjY2Vz cyk7CisKKwkJCWxpc3RBY2Nlc3MuQWN0aXZlID0gb3B0aW9ucy5HZW5lcmF0ZUludGVybmFsVHlw ZXMgPyAxIDogMDsKIAkJfQogCQkKIAkJcHVibGljIENsaWVudE9wdGlvbnMgT3B0aW9ucyB7CkBA IC03MSw2ICs3NiwxMSBAQCBwdWJsaWMgV0NGQ29uZmlnV2lkZ2V0IChDbGllbnRPcHRpb25zIG9w dGlvbnMpCiAJCQl0eXBlb2YgKFN5c3RlbS5Db2xsZWN0aW9ucy5TcGVjaWFsaXplZC5MaXN0RGlj dGlvbmFyeSksCiAJCQl0eXBlb2YgKFN5c3RlbS5Db2xsZWN0aW9ucy5TcGVjaWFsaXplZC5PcmRl cmVkRGljdGlvbmFyeSkKIAkJfTsKKworCQlzdGF0aWMgcmVhZG9ubHkgTGlzdDxzdHJpbmc+IEFj Y2Vzc0dlbmVyYXRpb25UeXBlcyA9IG5ldyBMaXN0PHN0cmluZz4geworCQkJIlB1YmxpYyIsCisJ CQkiSW50ZXJuYWwiCisJCX07CiAJCQogCQlwdWJsaWMgYm9vbCBNb2RpZmllZCB7CiAJCQlnZXQ7 CkBAIC0xNjIsNiArMTcyLDExIEBAIGludGVybmFsIHZvaWQgVXBkYXRlICgpCiAJCXsKIAkJCVVw ZGF0ZUJveCAobGlzdENvbGxlY3Rpb24sICJMaXN0IiwgbGlzdFR5cGVzKTsKIAkJCVVwZGF0ZUJv eCAoZGljdGlvbmFyeUNvbGxlY3Rpb24sICJEaWN0aW9uYXJ5IiwgZGljdFR5cGVzKTsKKworCQkJ aWYgKGxpc3RBY2Nlc3MuQWN0aXZlICE9IChPcHRpb25zLkdlbmVyYXRlSW50ZXJuYWxUeXBlcyA/ IDEgOiAwKSkgeworCQkJCU9wdGlvbnMuR2VuZXJhdGVJbnRlcm5hbFR5cGVzID0gIU9wdGlvbnMu R2VuZXJhdGVJbnRlcm5hbFR5cGVzOworCQkJCU1vZGlmaWVkID0gdHJ1ZTsKKwkJCX0KIAkJfQog CX0KIH0NCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2FkZGlucy9Nb25vRGV2ZWxvcC5XZWJSZWZlcmVu Y2VzL2d0ay1ndWkvTW9ub0RldmVsb3AuV2ViUmVmZXJlbmNlcy5EaWFsb2dzLldDRkNvbmZpZ1dp ZGdldC5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KQEAgLTksOCArOSwxMCBAQCBwdWJsaWMgcGFydGlhbCBjbGFz cyBXQ0ZDb25maWdXaWRnZXQKIAkJcHJpdmF0ZSBnbG9iYWw6Okd0ay5Db21ib0JveCBkaWN0aW9u YXJ5Q29sbGVjdGlvbjsKIAkJcHJpdmF0ZSBnbG9iYWw6Okd0ay5MYWJlbCBsYWJlbDE7CiAJCXBy aXZhdGUgZ2xvYmFsOjpHdGsuTGFiZWwgbGFiZWwyOworCQlwcml2YXRlIGdsb2JhbDo6R3RrLkxh YmVsIGxhYmVsMzsKKwkJcHJpdmF0ZSBnbG9iYWw6Okd0ay5Db21ib0JveCBsaXN0QWNjZXNzOwog CQlwcml2YXRlIGdsb2JhbDo6R3RrLkNvbWJvQm94IGxpc3RDb2xsZWN0aW9uOwotCQkKKwogCQlw cm90ZWN0ZWQgdmlydHVhbCB2b2lkIEJ1aWxkICgpCiAJCXsKIAkJCWdsb2JhbDo6U3RldGljLkd1 aS5Jbml0aWFsaXplICh0aGlzKTsKQEAgLTU4LDE3ICs2MCwzOCBAQCBwcm90ZWN0ZWQgdmlydHVh bCB2b2lkIEJ1aWxkICgpCiAJCQl3My5YT3B0aW9ucyA9ICgoZ2xvYmFsOjpHdGsuQXR0YWNoT3B0 aW9ucykoNCkpOwogCQkJdzMuWU9wdGlvbnMgPSAoKGdsb2JhbDo6R3RrLkF0dGFjaE9wdGlvbnMp KDQpKTsKIAkJCS8vIENvbnRhaW5lciBjaGlsZCB3Y2ZPcHRpb25zLkd0ay5UYWJsZStUYWJsZUNo aWxkCisJCQl0aGlzLmxhYmVsMyA9IG5ldyBnbG9iYWw6Okd0ay5MYWJlbCAoKTsKKwkJCXRoaXMu bGFiZWwzLk5hbWUgPSAibGFiZWwzIjsKKwkJCXRoaXMubGFiZWwzLkxhYmVsUHJvcCA9IGdsb2Jh bDo6TW9uby5Vbml4LkNhdGFsb2cuR2V0U3RyaW5nICgiQWNjZXNzIGxldmVsOiIpOworCQkJdGhp cy53Y2ZPcHRpb25zLkFkZCAodGhpcy5sYWJlbDMpOworCQkJZ2xvYmFsOjpHdGsuVGFibGUuVGFi bGVDaGlsZCB3NCA9ICgoZ2xvYmFsOjpHdGsuVGFibGUuVGFibGVDaGlsZCkodGhpcy53Y2ZPcHRp b25zIFt0aGlzLmxhYmVsM10pKTsKKwkJCXc0LlRvcEF0dGFjaCA9ICgodWludCkoMikpOworCQkJ dzQuQm90dG9tQXR0YWNoID0gKCh1aW50KSgzKSk7CisJCQl3NC5YT3B0aW9ucyA9ICgoZ2xvYmFs OjpHdGsuQXR0YWNoT3B0aW9ucykoNCkpOworCQkJdzQuWU9wdGlvbnMgPSAoKGdsb2JhbDo6R3Rr LkF0dGFjaE9wdGlvbnMpKDQpKTsKKwkJCS8vIENvbnRhaW5lciBjaGlsZCB3Y2ZPcHRpb25zLkd0 ay5UYWJsZStUYWJsZUNoaWxkCisJCQl0aGlzLmxpc3RBY2Nlc3MgPSBnbG9iYWw6Okd0ay5Db21i b0JveC5OZXdUZXh0ICgpOworCQkJdGhpcy5saXN0QWNjZXNzLk5hbWUgPSAibGlzdEFjY2VzcyI7 CisJCQl0aGlzLndjZk9wdGlvbnMuQWRkICh0aGlzLmxpc3RBY2Nlc3MpOworCQkJZ2xvYmFsOjpH dGsuVGFibGUuVGFibGVDaGlsZCB3NSA9ICgoZ2xvYmFsOjpHdGsuVGFibGUuVGFibGVDaGlsZCko dGhpcy53Y2ZPcHRpb25zIFt0aGlzLmxpc3RBY2Nlc3NdKSk7CisJCQl3NS5Ub3BBdHRhY2ggPSAo KHVpbnQpKDIpKTsKKwkJCXc1LkJvdHRvbUF0dGFjaCA9ICgodWludCkoMykpOworCQkJdzUuTGVm dEF0dGFjaCA9ICgodWludCkoMSkpOworCQkJdzUuUmlnaHRBdHRhY2ggPSAoKHVpbnQpKDIpKTsK KwkJCXc1LlhPcHRpb25zID0gKChnbG9iYWw6Okd0ay5BdHRhY2hPcHRpb25zKSg3KSk7CisJCQl3 NS5ZT3B0aW9ucyA9ICgoZ2xvYmFsOjpHdGsuQXR0YWNoT3B0aW9ucykoNCkpOworCQkJLy8gQ29u dGFpbmVyIGNoaWxkIHdjZk9wdGlvbnMuR3RrLlRhYmxlK1RhYmxlQ2hpbGQKIAkJCXRoaXMubGlz dENvbGxlY3Rpb24gPSBnbG9iYWw6Okd0ay5Db21ib0JveC5OZXdUZXh0ICgpOwogCQkJdGhpcy5s aXN0Q29sbGVjdGlvbi5OYW1lID0gImxpc3RDb2xsZWN0aW9uIjsKIAkJCXRoaXMud2NmT3B0aW9u cy5BZGQgKHRoaXMubGlzdENvbGxlY3Rpb24pOwotCQkJZ2xvYmFsOjpHdGsuVGFibGUuVGFibGVD aGlsZCB3NCA9ICgoZ2xvYmFsOjpHdGsuVGFibGUuVGFibGVDaGlsZCkodGhpcy53Y2ZPcHRpb25z IFt0aGlzLmxpc3RDb2xsZWN0aW9uXSkpOwotCQkJdzQuTGVmdEF0dGFjaCA9ICgodWludCkoMSkp OwotCQkJdzQuUmlnaHRBdHRhY2ggPSAoKHVpbnQpKDIpKTsKLQkJCXc0LlhPcHRpb25zID0gKChn bG9iYWw6Okd0ay5BdHRhY2hPcHRpb25zKSg3KSk7Ci0JCQl3NC5ZT3B0aW9ucyA9ICgoZ2xvYmFs OjpHdGsuQXR0YWNoT3B0aW9ucykoNCkpOworCQkJZ2xvYmFsOjpHdGsuVGFibGUuVGFibGVDaGls ZCB3NiA9ICgoZ2xvYmFsOjpHdGsuVGFibGUuVGFibGVDaGlsZCkodGhpcy53Y2ZPcHRpb25zIFt0 aGlzLmxpc3RDb2xsZWN0aW9uXSkpOworCQkJdzYuTGVmdEF0dGFjaCA9ICgodWludCkoMSkpOwor CQkJdzYuUmlnaHRBdHRhY2ggPSAoKHVpbnQpKDIpKTsKKwkJCXc2LlhPcHRpb25zID0gKChnbG9i YWw6Okd0ay5BdHRhY2hPcHRpb25zKSg3KSk7CisJCQl3Ni5ZT3B0aW9ucyA9ICgoZ2xvYmFsOjpH dGsuQXR0YWNoT3B0aW9ucykoNCkpOwogCQkJdGhpcy5kaWFsb2cxX1ZCb3guQWRkICh0aGlzLndj Zk9wdGlvbnMpOwotCQkJZ2xvYmFsOjpHdGsuQm94LkJveENoaWxkIHc1ID0gKChnbG9iYWw6Okd0 ay5Cb3guQm94Q2hpbGQpKHRoaXMuZGlhbG9nMV9WQm94IFt0aGlzLndjZk9wdGlvbnNdKSk7Ci0J CQl3NS5Qb3NpdGlvbiA9IDA7CisJCQlnbG9iYWw6Okd0ay5Cb3guQm94Q2hpbGQgdzcgPSAoKGds b2JhbDo6R3RrLkJveC5Cb3hDaGlsZCkodGhpcy5kaWFsb2cxX1ZCb3ggW3RoaXMud2NmT3B0aW9u c10pKTsKKwkJCXc3LlBvc2l0aW9uID0gMDsKIAkJCXRoaXMuQWRkICh0aGlzLmRpYWxvZzFfVkJv eCk7CiAJCQlpZiAoKHRoaXMuQ2hpbGQgIT0gbnVsbCkpIHsKIAkJCQl0aGlzLkNoaWxkLlNob3dB bGwgKCk7DQoNCk1vZGlmaWVkOiBtYWluL3NyYy9hZGRpbnMvTW9ub0RldmVsb3AuV2ViUmVmZXJl bmNlcy9ndGstZ3VpL2d1aS5zdGV0aWMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC02NDYsMTIgKzY0Niw2IEBA CiAgICAgICAgICAgICAgIDxwbGFjZWhvbGRlciAvPgogICAgICAgICAgICAgPC9jaGlsZD4KICAg ICAgICAgICAgIDxjaGlsZD4KLSAgICAgICAgICAgICAgPHBsYWNlaG9sZGVyIC8+Ci0gICAgICAg ICAgICA8L2NoaWxkPgotICAgICAgICAgICAgPGNoaWxkPgotICAgICAgICAgICAgICA8cGxhY2Vo b2xkZXIgLz4KLSAgICAgICAgICAgIDwvY2hpbGQ+Ci0gICAgICAgICAgICA8Y2hpbGQ+CiAgICAg ICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0ay5Db21ib0JveCIgaWQ9ImRpY3Rpb25hcnlDb2xs ZWN0aW9uIj4KICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iTWVtYmVyTmFtZSIgLz4K ICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iSXNUZXh0Q29tYm8iPlRydWU8L3Byb3Bl cnR5PgpAQCAtNzEyLDYgKzcwNiw0NyBAQAogICAgICAgICAgICAgICA8L3BhY2tpbmc+CiAgICAg ICAgICAgICA8L2NoaWxkPgogICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lk Z2V0IGNsYXNzPSJHdGsuTGFiZWwiIGlkPSJsYWJlbDMiPgorICAgICAgICAgICAgICAgIDxwcm9w ZXJ0eSBuYW1lPSJNZW1iZXJOYW1lIiAvPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1l PSJMYWJlbFByb3AiIHRyYW5zbGF0YWJsZT0ieWVzIj5BY2Nlc3MgbGV2ZWw6PC9wcm9wZXJ0eT4K KyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAg ICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJUb3BBdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAg ICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJCb3R0b21BdHRhY2giPjM8L3Byb3BlcnR5PgorICAg ICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJBdXRvU2l6ZSI+VHJ1ZTwvcHJvcGVydHk+Cisg ICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9IlhPcHRpb25zIj5GaWxsPC9wcm9wZXJ0eT4K KyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iWU9wdGlvbnMiPkZpbGw8L3Byb3BlcnR5 PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJYRXhwYW5kIj5GYWxzZTwvcHJvcGVy dHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9IlhGaWxsIj5UcnVlPC9wcm9wZXJ0 eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iWFNocmluayI+RmFsc2U8L3Byb3Bl cnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJZRXhwYW5kIj5GYWxzZTwvcHJv cGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9IllGaWxsIj5UcnVlPC9wcm9w ZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iWVNocmluayI+RmFsc2U8L3By b3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgor ICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGsuQ29t Ym9Cb3giIGlkPSJsaXN0QWNjZXNzIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0i TWVtYmVyTmFtZSIgLz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iSXNUZXh0Q29t Ym8iPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJJdGVt cyIgdHJhbnNsYXRhYmxlPSJ5ZXMiIC8+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAg ICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iVG9wQXR0 YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iQm90dG9t QXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iTGVm dEF0dGFjaCI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9IlJp Z2h0QXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0i QXV0b1NpemUiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFt ZT0iWE9wdGlvbnMiPkV4cGFuZCwgU2hyaW5rLCBGaWxsPC9wcm9wZXJ0eT4KKyAgICAgICAgICAg ICAgICA8cHJvcGVydHkgbmFtZT0iWU9wdGlvbnMiPkZpbGw8L3Byb3BlcnR5PgorICAgICAgICAg ICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJYRXhwYW5kIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAg ICAgICAgICA8cHJvcGVydHkgbmFtZT0iWEZpbGwiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAg ICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJYU2hyaW5rIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAg ICAgICAgICA8cHJvcGVydHkgbmFtZT0iWUV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAg ICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJZRmlsbCI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAg ICAgICAgICAgPHByb3BlcnR5IG5hbWU9IllTaHJpbmsiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAg ICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxj aGlsZD4KICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrLkNvbWJvQm94IiBpZD0ibGlz dENvbGxlY3Rpb24iPgogICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJNZW1iZXJOYW1l IiAvPgogICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJJc1RleHRDb21ibyI+VHJ1ZTwv cHJvcGVydHk+DQoNCiAgIENvbW1pdDogYjZiZTBmMTAzMGRlZTU0YTI2ZmQ2MjY2MDJlM2Y4NjIx NTlkMTBiYQ0KICAgQXV0aG9yOiBNaWNoYWVsIEh1dGNoaW5zb24gPG0uai5odXRjaGluc29uQGdt YWlsLmNvbT4gKG1odXRjaCkNCiAgICAgRGF0ZTogMjAxMy0xMS0xOCAyMzozODozMyBHTVQNCiAg ICAgIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVsb3AvY29tbWl0L2I2YmUw ZjEwMzBkZWU1NGEyNmZkNjI2NjAyZTNmODYyMTU5ZDEwYmENCg0KW0NvcmVdIE1ha2Ugc3VyZSBX ZWJTZXJ2aWNlIGlzIGluaXRpYWxpemVkIGZyYW1ld29yayBzZXJ2aWNlCgpUaGUgZnJhbWV3b3Jr IHNlcnZpY2UgY2FuIGtpY2sgb2ZmIHRoZSBhY3RpdmF0aW9uIHN5c3RlbSwgd2hpY2gKbWFrZXMg d2ViIHJlcXVlc3RzLgoKQlhDMTYyNDUgLSBbWFNdVXBncmFkZSB3b3JrZmxvdyB0aHJvd3MgYW4g TlJFIHdoaWxlIHRyeWluZyB0byBhY3RpdmF0ZQphIGxpY2Vuc2UNCg0KQ2hhbmdlZCBwYXRoczoK ICBNIG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuQ29yZS9Nb25vRGV2ZWxvcC5Db3JlL1J1bnRp bWUuY3MKDQpNb2RpZmllZDogbWFpbi9zcmMvY29yZS9Nb25vRGV2ZWxvcC5Db3JlL01vbm9EZXZl bG9wLkNvcmUvUnVudGltZS5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTExMiw2ICsxMTIsNyBAQCBwdWJs aWMgc3RhdGljIHZvaWQgSW5pdGlhbGl6ZSAoYm9vbCB1cGRhdGVBZGRpblJlZ2lzdHJ5KQogCQkJ CUNvdW50ZXJzLlJ1bnRpbWVJbml0aWFsaXphdGlvbi5UcmFjZSAoIkluaXRpYWxpemVkIEFkZGlu IE1hbmFnZXIiKTsKIAkJCQkKIAkJCQlQcm9wZXJ0eVNlcnZpY2UuSW5pdGlhbGl6ZSAoKTsKKwkJ CQlXZWJTZXJ2aWNlLkluaXRpYWxpemUgKCk7CiAJCQkJCiAJCQkJLy9oYXZlIHRvIGRvIHRoaXMg YWZ0ZXIgdGhlIGFkZGluIHNlcnZpY2UgYW5kIHByb3BlcnR5IHNlcnZpY2UgaGF2ZSBpbml0aWFs aXplZAogCQkJCWlmIChVc2VyRGF0YU1pZ3JhdGlvblNlcnZpY2UuSGFzU291cmNlKSB7CkBAIC0x MjQsOCArMTI1LDYgQEAgcHVibGljIHN0YXRpYyB2b2lkIEluaXRpYWxpemUgKGJvb2wgdXBkYXRl QWRkaW5SZWdpc3RyeSkKIAkJCQlDb3VudGVycy5SdW50aW1lSW5pdGlhbGl6YXRpb24uVHJhY2Ug KCJJbml0aWFsaXppbmcgQXNzZW1ibHkgU2VydmljZSIpOwogCQkJCXN5c3RlbUFzc2VtYmx5U2Vy dmljZSA9IG5ldyBTeXN0ZW1Bc3NlbWJseVNlcnZpY2UgKCk7CiAJCQkJc3lzdGVtQXNzZW1ibHlT ZXJ2aWNlLkluaXRpYWxpemUgKCk7Ci0KLQkJCQlXZWJTZXJ2aWNlLkluaXRpYWxpemUgKCk7CiAJ CQkJCiAJCQkJaW5pdGlhbGl6ZWQgPSB0cnVlOwogCQkJCQ0KDQogICBDb21taXQ6IDY2NDYyYzgx NmM3Y2IyMDdlM2Y4NGIzYmQ5Y2IzMzRmNmRiNWRiOTQNCiAgIEF1dGhvcjogTWljaGFlbCBIdXRj aGluc29uIDxtLmouaHV0Y2hpbnNvbkBnbWFpbC5jb20+IChtaHV0Y2gpDQogICAgIERhdGU6IDIw MTMtMTEtMTggMjM6Mzg6MzMgR01UDQogICAgICBVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb25v L21vbm9kZXZlbG9wL2NvbW1pdC82NjQ2MmM4MTZjN2NiMjA3ZTNmODRiM2JkOWNiMzM0ZjZkYjVk Yjk0DQoNCltDb3JlXSBDbGVhbiB1cCB0aGUgV2ViU2VydmljZQoKSGFkIGxvdHMgb2YgcG9pbnRs ZXNzIGxhemllcyBhbmQgc2luZ2xldG9ucywgYW5kIGNvdWxkIGV4cGxvZGUgb24KcGxhdGZvcm1z IHdpdGhvdXQgYSBjcmVkZW50aWFscyBwcm92aWRlci4NCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1h aW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuQ29yZS9Nb25vRGV2ZWxvcC5Db3JlLldlYi9DcmVkZW50 aWFsU3RvcmUuY3MKICBNIG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuQ29yZS9Nb25vRGV2ZWxv cC5Db3JlLldlYi9JQ3JlZGVudGlhbFByb3ZpZGVyLmNzCiAgTSBtYWluL3NyYy9jb3JlL01vbm9E ZXZlbG9wLkNvcmUvTW9ub0RldmVsb3AuQ29yZS5XZWIvUHJveHlDYWNoZS5jcwogIE0gbWFpbi9z cmMvY29yZS9Nb25vRGV2ZWxvcC5Db3JlL01vbm9EZXZlbG9wLkNvcmUuV2ViL1JlcXVlc3RIZWxw ZXIuY3MKICBNIG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuQ29yZS9Nb25vRGV2ZWxvcC5Db3Jl LldlYi9XZWJTZXJ2aWNlLmNzCiAgTSBtYWluL3NyYy9jb3JlL01vbm9EZXZlbG9wLkNvcmUvTW9u b0RldmVsb3AuQ29yZS9SdW50aW1lLmNzCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2NvcmUvTW9ub0Rl dmVsb3AuQ29yZS9Nb25vRGV2ZWxvcC5Db3JlLldlYi9DcmVkZW50aWFsU3RvcmUuY3MNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCkBAIC03LDEzICs3LDYgQEAgbmFtZXNwYWNlIE1vbm9EZXZlbG9wLkNvcmUuV2ViCiAJ Y2xhc3MgQ3JlZGVudGlhbFN0b3JlIDogSUNyZWRlbnRpYWxDYWNoZQogCXsKIAkJcmVhZG9ubHkg Q29uY3VycmVudERpY3Rpb25hcnk8VXJpLCBJQ3JlZGVudGlhbHM+IGNyZWRlbnRpYWxDYWNoZSA9 IG5ldyBDb25jdXJyZW50RGljdGlvbmFyeTxVcmksIElDcmVkZW50aWFscz4gKCk7Ci0JCXN0YXRp YyByZWFkb25seSBDcmVkZW50aWFsU3RvcmUgaW5zdGFuY2UgPSBuZXcgQ3JlZGVudGlhbFN0b3Jl ICgpOw0KLQ0KLQkJcHVibGljIHN0YXRpYyBDcmVkZW50aWFsU3RvcmUgSW5zdGFuY2UgewotCQkJ Z2V0IHsKLQkJCQlyZXR1cm4gaW5zdGFuY2U7Ci0JCQl9Ci0JCX0KIAogCQlwdWJsaWMgSUNyZWRl bnRpYWxzIEdldENyZWRlbnRpYWxzIChVcmkgdXJpLCBDcmVkZW50aWFsVHlwZSBjcmVkZW50aWFs VHlwZSkNCiAJCXsNDQoNCk1vZGlmaWVkOiBtYWluL3NyYy9jb3JlL01vbm9EZXZlbG9wLkNvcmUv TW9ub0RldmVsb3AuQ29yZS5XZWIvSUNyZWRlbnRpYWxQcm92aWRlci5jcw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K QEAgLTEwLDcgKzEwLDcgQEAgbmFtZXNwYWNlIE1vbm9EZXZlbG9wLkNvcmUuV2ViCiAJcHVibGlj IGludGVyZmFjZSBJQ3JlZGVudGlhbFByb3ZpZGVyCiAJewogCQkvLy8gPHN1bW1hcnk+Ci0JCS8v LyBSZXR1cm5zIENyZWRlbnRpYWxTdGF0ZSBzdGF0ZSB0aGF0IGxldCdzIHRoZSBjb25zdW1lciBr bm93IGlmIElDcmVkZW50aWFscworCQkvLy8gUmV0dXJucyBDcmVkZW50aWFsU3RhdGUgc3RhdGUg dGhhdCBsZXRzIHRoZSBjb25zdW1lciBrbm93IGlmIElDcmVkZW50aWFscwogCQkvLy8gd2VyZSBk aXNjb3ZlcmVkIGJ5IHRoZSBJQ3JlZGVudGlhbFByb3ZpZGVyLiBUaGUgY3JlZGVudGlhbHMgYXJn dW1lbnQgaXMgdGhlbgogCQkvLy8gcG9wdWxhdGVkIHdpdGggdGhlIGRpc2NvdmVyZWQgdmFsaWQg Y3JlZGVudGlhbHMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgdGhlIGdpdmVuIFVyaS4KIAkJLy8vIFRo ZSBwcm94eSBpbnN0YW5jZSBpZiBwYXNzZWQgd2lsbCBiZSB1c2VkIHRvIGVuc3VyZSB0aGF0IHRo ZSByZXF1ZXN0IGdvZXMgdGhyb3VnaCB0aGUgcHJveHkNCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2Nv cmUvTW9ub0RldmVsb3AuQ29yZS9Nb25vRGV2ZWxvcC5Db3JlLldlYi9Qcm94eUNhY2hlLmNzDQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQpAQCAtMTQsMTUgKzE0LDYgQEAgY2xhc3MgUHJveHlDYWNoZSA6IElQcm94eUNh Y2hlCiAJCXN0YXRpYyByZWFkb25seSBJV2ViUHJveHkgb3JpZ2luYWxTeXN0ZW1Qcm94eSA9IFdl YlJlcXVlc3QuR2V0U3lzdGVtV2ViUHJveHkgKCk7CiAKIAkJcmVhZG9ubHkgQ29uY3VycmVudERp Y3Rpb25hcnk8VXJpLCBXZWJQcm94eT4gY2FjaGUgPSBuZXcgQ29uY3VycmVudERpY3Rpb25hcnk8 VXJpLCBXZWJQcm94eT4gKCk7Ci0JCXN0YXRpYyByZWFkb25seSBMYXp5PFByb3h5Q2FjaGU+IGlu c3RhbmNlID0gbmV3IExhenk8UHJveHlDYWNoZT4gKCgpID0+IG5ldyBQcm94eUNhY2hlICgpKTsK LQotCQlwdWJsaWMgc3RhdGljIFByb3h5Q2FjaGUgSW5zdGFuY2UgewotCQkJZ2V0IHsKLQkJCQly ZXR1cm4gaW5zdGFuY2UuVmFsdWU7Ci0JCQl9Ci0JCX0KLQotCQlQcm94eUNhY2hlICgpIHt9CiAK IAkJcHVibGljIElXZWJQcm94eSBHZXRQcm94eSAoVXJpIHVyaSkKIAkJew0KDQpNb2RpZmllZDog bWFpbi9zcmMvY29yZS9Nb25vRGV2ZWxvcC5Db3JlL01vbm9EZXZlbG9wLkNvcmUuV2ViL1JlcXVl c3RIZWxwZXIuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC0xMyw5ICsxMyw5IEBAIHB1YmxpYyBzdGF0aWMg Y2xhc3MgUmVxdWVzdEhlbHBlcgogCQkvLy8gPC9zdW1tYXJ5Pg0KIAkJaW50ZXJuYWwgc3RhdGlj IFdlYlJlc3BvbnNlIEdldFJlc3BvbnNlIChGdW5jPFdlYlJlcXVlc3Q+IGNyZWF0ZVJlcXVlc3Qs IEFjdGlvbjxXZWJSZXF1ZXN0PiBwcmVwYXJlUmVxdWVzdCkNCiAJCXsNCi0JCQl2YXIgcHJveHlD YWNoZSA9IFdlYlNlcnZpY2UuSW5zdGFuY2UuUHJveHlDYWNoZTsNCi0JCQl2YXIgY3JlZGVudGlh bENhY2hlID0gV2ViU2VydmljZS5JbnN0YW5jZS5DcmVkZW50aWFsQ2FjaGU7DQotCQkJdmFyIGNy ZWRlbnRpYWxQcm92aWRlciA9IFdlYlNlcnZpY2UuSW5zdGFuY2UuQ3JlZGVudGlhbFByb3ZpZGVy Ow0KKwkJCXZhciBwcm94eUNhY2hlID0gV2ViU2VydmljZS5Qcm94eUNhY2hlOworCQkJdmFyIGNy ZWRlbnRpYWxDYWNoZSA9IFdlYlNlcnZpY2UuQ3JlZGVudGlhbENhY2hlOworCQkJdmFyIGNyZWRl bnRpYWxQcm92aWRlciA9IFdlYlNlcnZpY2UuQ3JlZGVudGlhbFByb3ZpZGVyOwogDQogCQkJSHR0 cFdlYlJlcXVlc3QgcHJldmlvdXNSZXF1ZXN0ID0gbnVsbDsNCiAJCQlJSHR0cFdlYlJlc3BvbnNl IHByZXZpb3VzUmVzcG9uc2UgPSBudWxsOw0NCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2NvcmUvTW9u b0RldmVsb3AuQ29yZS9Nb25vRGV2ZWxvcC5Db3JlLldlYi9XZWJTZXJ2aWNlLmNzDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQpAQCAtMjMsNDAgKzIzLDQyIEBACiAvLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogLy8gT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUyBJTgogLy8gVEhFIFNPRlRXQVJFLgorCiB1c2luZyBTeXN0ZW07CiB1c2luZyBT eXN0ZW0uTGlucTsKIAogdXNpbmcgTW9uby5BZGRpbnM7Cit1c2luZyBTeXN0ZW0uTmV0OwogCiBu YW1lc3BhY2UgTW9ub0RldmVsb3AuQ29yZS5XZWIKIHsKLQlwdWJsaWMgY2xhc3MgV2ViU2Vydmlj ZQorCXB1YmxpYyBzdGF0aWMgY2xhc3MgV2ViU2VydmljZQogCXsKIAkJY29uc3Qgc3RyaW5nIFdl YkNyZWRlbnRpYWxQcm92aWRlcnNQYXRoID0gIi9Nb25vRGV2ZWxvcC9Db3JlL1dlYkNyZWRlbnRp YWxQcm92aWRlcnMiOwogCi0JCXN0YXRpYyByZWFkb25seSBMYXp5PFdlYlNlcnZpY2U+IGluc3Rh bmNlID0gbmV3IExhenk8V2ViU2VydmljZT4gKCgpID0+IG5ldyBXZWJTZXJ2aWNlICgpKTsKKwkJ cHVibGljIHN0YXRpYyBJUHJveHlDYWNoZSBQcm94eUNhY2hlIHsgZ2V0OyBwcml2YXRlIHNldDsg fQorCQlwdWJsaWMgc3RhdGljIElDcmVkZW50aWFsQ2FjaGUgQ3JlZGVudGlhbENhY2hlIHsgZ2V0 OyBwcml2YXRlIHNldDsgfQorCQlwdWJsaWMgc3RhdGljIElDcmVkZW50aWFsUHJvdmlkZXIgQ3Jl ZGVudGlhbFByb3ZpZGVyIHsgZ2V0OyBwcml2YXRlIHNldDsgfQogCi0JCXB1YmxpYyBzdGF0aWMg V2ViU2VydmljZSBJbnN0YW5jZSB7Ci0JCQlnZXQgewotCQkJCXJldHVybiBpbnN0YW5jZS5WYWx1 ZTsKLQkJCX0KLQkJfQorCQlpbnRlcm5hbCBzdGF0aWMgdm9pZCBJbml0aWFsaXplICgpCisJCXsK KwkJCUNyZWRlbnRpYWxDYWNoZSA9IG5ldyBDcmVkZW50aWFsU3RvcmUgKCk7CisJCQlQcm94eUNh Y2hlID0gbmV3IFByb3h5Q2FjaGUgKCk7CisJCQlDcmVkZW50aWFsUHJvdmlkZXIgPSBBZGRpbk1h bmFnZXIuR2V0RXh0ZW5zaW9uT2JqZWN0czxJQ3JlZGVudGlhbFByb3ZpZGVyPiAoV2ViQ3JlZGVu dGlhbFByb3ZpZGVyc1BhdGgpLkZpcnN0T3JEZWZhdWx0ICgpOwogCi0JCXB1YmxpYyBJUHJveHlD YWNoZSBQcm94eUNhY2hlIHsgZ2V0OyBzZXQ7IH0KLQkJcHVibGljIElDcmVkZW50aWFsQ2FjaGUg Q3JlZGVudGlhbENhY2hlIHsgZ2V0OyBzZXQ7IH0KLQkJcHVibGljIElDcmVkZW50aWFsUHJvdmlk ZXIgQ3JlZGVudGlhbFByb3ZpZGVyIHsgZ2V0OyBzZXQ7IH0KKwkJCWlmIChDcmVkZW50aWFsUHJv dmlkZXIgPT0gbnVsbCkgeworCQkJCUxvZ2dpbmdTZXJ2aWNlLkxvZ1dhcm5pbmcgKCJObyBwcm94 eSBjcmVkZW50aWFsIHByb3ZpZGVyIHdhcyBmb3VuZCIpOwogCi0JCVdlYlNlcnZpY2UgKCkge30K KwkJCX0KKwkJfQogCi0JCXB1YmxpYyBzdGF0aWMgdm9pZCBJbml0aWFsaXplICgpCisJCWNsYXNz IE51bGxDcmVkZW50aWFsc1Byb3ZpZGVyIDogSUNyZWRlbnRpYWxQcm92aWRlcgogCQl7Ci0JCQkv LyBXZSBjYW4gYWNjZXNzIGV4dGVuc2lvbiBwb2ludHMgbm93LCBzbyB3ZSBuZWVkIHRvIGdldCB0 aGUgY3JlZGVudGlhbCBwcm92aWRlciwgd2hpY2ggaXMgcGxhdGZvcm0tc3BlY2lmaWMuCi0JCQkv LyBUaGUgY3JlZGVudGlhbCBjYWNoZSBhbmQgcHJveHkgY2FjaGUgYXJlIHB1cmUgbWFuYWdlZCBp bXBsZW1lbnRhdGlvbi4KLQkJCUluc3RhbmNlLkNyZWRlbnRpYWxDYWNoZSA9IENyZWRlbnRpYWxT dG9yZS5JbnN0YW5jZTsKLQkJCUluc3RhbmNlLlByb3h5Q2FjaGUgPSBXZWIuUHJveHlDYWNoZS5J bnN0YW5jZTsKLQotCQkJLy8gR2V0IHRoZSBmaXJzdCByZWdpc3RlcmVkIGNyZWRlbnRpYWwgcHJv dmlkZXIKLQkJCUluc3RhbmNlLkNyZWRlbnRpYWxQcm92aWRlciA9IEFkZGluTWFuYWdlci5HZXRF eHRlbnNpb25PYmplY3RzPElDcmVkZW50aWFsUHJvdmlkZXI+IChXZWJDcmVkZW50aWFsUHJvdmlk ZXJzUGF0aCkuRmlyc3RPckRlZmF1bHQgKCk7CisJCQlwdWJsaWMgSUNyZWRlbnRpYWxzIEdldENy ZWRlbnRpYWxzICgKKwkJCQlVcmkgdXJpLCBJV2ViUHJveHkgcHJveHksIENyZWRlbnRpYWxUeXBl IGNyZWRlbnRpYWxUeXBlLCBJQ3JlZGVudGlhbHMgZXhpc3RpbmdDcmVkZW50aWFscywgYm9vbCBy ZXRyeWluZykKKwkJCXsKKwkJCQlyZXR1cm4gbnVsbDsKKwkJCX0KIAkJfQogCX0KIH0NCg0KTW9k aWZpZWQ6IG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuQ29yZS9Nb25vRGV2ZWxvcC5Db3JlL1J1 bnRpbWUuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NCkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYyBzdGF0aWMgdm9p ZCBJbml0aWFsaXplIChib29sIHVwZGF0ZUFkZGluUmVnaXN0cnkpCiAJCQkJU3luY2hyb25pemF0 aW9uQ29udGV4dC5TZXRTeW5jaHJvbml6YXRpb25Db250ZXh0IChuZXcgU3luY2hyb25pemF0aW9u Q29udGV4dCAoKSk7CiAKIAkJCS8vIEhvb2sgdXAgdGhlIFNTTCBjZXJ0aWZpY2F0ZSB2YWxpZGF0 aW9uIGNvZGVwYXRoCi0JCQlTeXN0ZW0uTmV0LlNlcnZpY2VQb2ludE1hbmFnZXIuU2VydmVyQ2Vy dGlmaWNhdGVWYWxpZGF0aW9uQ2FsbGJhY2sgKz0gZGVsZWdhdGUob2JqZWN0IHNlbmRlciwgWDUw OUNlcnRpZmljYXRlIGNlcnRpZmljYXRlLCBYNTA5Q2hhaW4gY2hhaW4sIFNzbFBvbGljeUVycm9y cyBzc2xQb2xpY3lFcnJvcnMpIHsKKwkJCVNlcnZpY2VQb2ludE1hbmFnZXIuU2VydmVyQ2VydGlm aWNhdGVWYWxpZGF0aW9uQ2FsbGJhY2sgKz0gZGVsZWdhdGUob2JqZWN0IHNlbmRlciwgWDUwOUNl cnRpZmljYXRlIGNlcnRpZmljYXRlLCBYNTA5Q2hhaW4gY2hhaW4sIFNzbFBvbGljeUVycm9ycyBz c2xQb2xpY3lFcnJvcnMpIHsKIAkJCQlpZiAoc3NsUG9saWN5RXJyb3JzID09IFNzbFBvbGljeUVy cm9ycy5Ob25lKQogCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCQkNCg0KICAgQ29tbWl0OiAwNzZmMWI5 ZDBhZjA0MGVhNzQ3YmQzMzQxZjA5YTJkODRlYjJiM2ZhDQogICBBdXRob3I6IE1pY2hhZWwgSHV0 Y2hpbnNvbiA8bS5qLmh1dGNoaW5zb25AZ21haWwuY29tPiAobWh1dGNoKQ0KICAgICBEYXRlOiAy MDEzLTExLTE4IDIzOjUxOjU2IEdNVA0KICAgICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9u by9tb25vZGV2ZWxvcC9jb21taXQvMDc2ZjFiOWQwYWYwNDBlYTc0N2JkMzM0MWYwOWEyZDg0ZWIy YjNmYQ0KDQpbbWQtYWRkaW5zXSBCdW1wIHRvIHRyYWNrIFdlYlNlcnZpY2UgQVBJDQoNCkNoYW5n ZWQgcGF0aHM6CiAgTSB2ZXJzaW9uLWNoZWNrcwoNCk1vZGlmaWVkOiB2ZXJzaW9uLWNoZWNrcw0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KQEAgLTE3LDcgKzE3LDcgQEAgREVQWzBdPW1kLWFkZGlucwogREVQX05BTUVb MF09TURBRERJTlMKIERFUF9QQVRIWzBdPSR7dG9wX3NyY2Rpcn0vLi4vbWQtYWRkaW5zCiBERVBf TU9EVUxFWzBdPWdpdEBnaXRodWIuY29tOnhhbWFyaW4vbWQtYWRkaW5zLmdpdAotREVQX05FRURF RF9WRVJTSU9OWzBdPTRlYTA0ZGE2YjIwN2FkYWVkNTc4YjI2OWQ5ODhmMWFlM2Y2MDIxZmEKK0RF UF9ORUVERURfVkVSU0lPTlswXT1jNTFlZTNiM2UxY2Q0N2YzZmIyODg2YjczMWVmOThlODNlMTM4 ZTIxCiBERVBfQlJBTkNIX0FORF9SRU1PVEVbMF09Im1hc3RlciBvcmlnaW4vbWFzdGVyIgogCiAj IGhlYXAtc2hvdA0KDQogICBDb21taXQ6IDYyODZhMTBlYjFmNjNmYzQ5YzQwMjFlMWZjMWEyNmI0 ZmJiYWZkM2QNCiAgIEF1dGhvcjogQWxleCBDb3JyYWRvIDxhbGV4Y0B4YW1hcmluLmNvbT4gKGNo a24pDQogICAgIERhdGU6IDIwMTMtMTEtMTkgMDI6Mjg6MTMgR01UDQogICAgICBVUkw6IGh0dHBz Oi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbW1pdC82Mjg2YTEwZWIxZjYzZmM0OWM0 MDIxZTFmYzFhMjZiNGZiYmFmZDNkDQoNCltidWlsZF0gQnVtcCBtZC1hZGRpbnMgYW5kIHh3dA0K DQpDaGFuZ2VkIHBhdGhzOgogIE0gbWFpbi9leHRlcm5hbC94d3QKICBNIHZlcnNpb24tY2hlY2tz Cg0KTW9kaWZpZWQ6IG1haW4vZXh0ZXJuYWwveHd0DQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMSArMSBAQAot U3VicHJvamVjdCBjb21taXQgZWY1NGQwNjVjNzIxY2UwMTNkMmRjOTYyODQ2Mjk0NDFhYmExNjcy YgorU3VicHJvamVjdCBjb21taXQgMGY2NTQxZjY0ODY2YjZmNDVlZmQxMTFmYTExNmFkZjkzNjk0 ZjQ4ZA0KDQpNb2RpZmllZDogdmVyc2lvbi1jaGVja3MNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC0xNyw3ICsx Nyw3IEBAIERFUFswXT1tZC1hZGRpbnMKIERFUF9OQU1FWzBdPU1EQURESU5TCiBERVBfUEFUSFsw XT0ke3RvcF9zcmNkaXJ9Ly4uL21kLWFkZGlucwogREVQX01PRFVMRVswXT1naXRAZ2l0aHViLmNv bTp4YW1hcmluL21kLWFkZGlucy5naXQKLURFUF9ORUVERURfVkVSU0lPTlswXT1jNTFlZTNiM2Ux Y2Q0N2YzZmIyODg2YjczMWVmOThlODNlMTM4ZTIxCitERVBfTkVFREVEX1ZFUlNJT05bMF09ZmYy NWVhOTA3NmI3YTgwZmJiNTJiY2RhODI3OTQ1NzlmMmFhNTc1YgogREVQX0JSQU5DSF9BTkRfUkVN T1RFWzBdPSJtYXN0ZXIgb3JpZ2luL21hc3RlciIKIAogIyBoZWFwLXNob3QNCg0KICAgQ29tbWl0 OiA0NGVhYWIyMjM2MjI1NGRmY2VjMzM2MzZiOTRlNWE3MzZiYWQ0Mzk1DQogICBBdXRob3I6IE1p a2UgS3LDvGdlciA8bWtydWVnZXJAeGFtYXJpbi5jb20+IChta3J1ZWdlcikNCiAgICAgRGF0ZTog MjAxMy0xMS0xOSAwNToyNjo1MSBHTVQNCiAgICAgIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL21v bm8vbW9ub2RldmVsb3AvY29tbWl0LzQ0ZWFhYjIyMzYyMjU0ZGZjZWMzMzYzNmI5NGU1YTczNmJh ZDQzOTUNCg0KRml4ZWQgJ0J1ZyAxNjMyMyAtIFhTIGxvY2tzIHVwIHdoZW4gZ29pbmcgdG8gZGVj bGFyYXRpb24gJy4NCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1haW4vc3JjL2NvcmUvTW9ub0RldmVs b3AuSWRlL01vbm9EZXZlbG9wLklkZS5UeXBlU3lzdGVtL1R5cGVTeXN0ZW1TZXJ2aWNlLmNzCg0K TW9kaWZpZWQ6IG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuSWRlL01vbm9EZXZlbG9wLklkZS5U eXBlU3lzdGVtL1R5cGVTeXN0ZW1TZXJ2aWNlLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMjE2Miw3ICsy MTYyLDEwIEBAIGludGVybmFsIHZvaWQgRW5zdXJlQXNzZW1ibHlMb2FkZWQgKCkKIAkJCQlsb2Nr IChhc21Mb2NrZXIpIHsKIAkJCQkJaWYgKGFzc2VtYmx5ICE9IG51bGwpCiAJCQkJCQlyZXR1cm47 Ci0JCQkJCWFzc2VtYmx5ID0gTG9hZEFzc2VtYmx5ICgpID8/IG5ldyBEZWZhdWx0VW5yZXNvbHZl ZEFzc2VtYmx5IChmaWxlTmFtZSk7CisJCQkJCWFzc2VtYmx5ID0gbmV3IERlZmF1bHRVbnJlc29s dmVkQXNzZW1ibHkgKGZpbGVOYW1lKTsKKworCQkJCQlhc3NlbWJseSA9IExvYWRBc3NlbWJseSAo KSA/PyBhc3NlbWJseTsgCisKIAkJCQkJT25Mb2FkIChFdmVudEFyZ3MuRW1wdHkpOwogCQkJCX0K IAkJCX0NCg0KICAgQ29tbWl0OiA4NGY3YjQyODUxNmM2MTdhYTYzNzM4ZTMxOWU1MjFlOTg4MDQ5 ZGYwDQogICBBdXRob3I6IEFsYW4gTWNHb3Zlcm4gPGFsYW5AeGFtYXJpbi5jb20+IChhbGFubWNn b3Zlcm4pDQogICAgIERhdGU6IDIwMTMtMTEtMTkgMTk6NDY6MTkgR01UDQogICAgICBVUkw6IGh0 dHBzOi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbW1pdC84NGY3YjQyODUxNmM2MTdh YTYzNzM4ZTMxOWU1MjFlOTg4MDQ5ZGYwDQoNCltidWlsZF0gTm9ybWFsIHZlcmJvc2l0eSBieSBk ZWZhdWx0DQoNCkNoYW5nZWQgcGF0aHM6CiAgTSBtYWluL3hidWlsZC5pbmNsdWRlCg0KTW9kaWZp ZWQ6IG1haW4veGJ1aWxkLmluY2x1ZGUNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC0xNCw3ICsxNCw3IEBAIFBS T0ZJTEVfTkFNRT1EZWJ1Z1dpbjMyCiBlbmRpZgogCiBYQlVJTEQ9eGJ1aWxkCi1YQlVJTERfVkVS Qk9TSVRZPXF1aWV0CitYQlVJTERfVkVSQk9TSVRZPW5vcm1hbAogWEJVSUxEX0FSR1M9L3ZlcmJv c2l0eTokKFhCVUlMRF9WRVJCT1NJVFkpIC9ub2xvZ28gL3Byb3BlcnR5OkNvZGVQYWdlPTY1MDAx CiBYQlVJTERfUFJPRklMRT0vcHJvcGVydHk6Q29uZmlndXJhdGlvbj0kKFBST0ZJTEVfTkFNRSkK IA0KDQogICBDb21taXQ6IDg2NjM3MjBhNDdiZGM2NGY1ZTdjYjQ4MjgxZTA3MDU0MmYzMDc2MjYN CiAgIEF1dGhvcjogSsOpcsOpbWllIExhdmFsIDxqZXJlbWllLmxhdmFsQGdtYWlsLmNvbT4gKGdh cnVtYSkNCiAgICAgRGF0ZTogMjAxMy0xMS0xOSAyMTowMjoyMCBHTVQNCiAgICAgIFVSTDogaHR0 cHM6Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVsb3AvY29tbWl0Lzg2NjM3MjBhNDdiZGM2NGY1 ZTdjYjQ4MjgxZTA3MDU0MmYzMDc2MjYNCg0KW2J1aWxkXSBCdW1wIG1kLWFkZGlucw0KDQpDaGFu Z2VkIHBhdGhzOgogIE0gdmVyc2lvbi1jaGVja3MKDQpNb2RpZmllZDogdmVyc2lvbi1jaGVja3MN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCkBAIC0xNyw3ICsxNyw3IEBAIERFUFswXT1tZC1hZGRpbnMKIERFUF9OQU1F WzBdPU1EQURESU5TCiBERVBfUEFUSFswXT0ke3RvcF9zcmNkaXJ9Ly4uL21kLWFkZGlucwogREVQ X01PRFVMRVswXT1naXRAZ2l0aHViLmNvbTp4YW1hcmluL21kLWFkZGlucy5naXQKLURFUF9ORUVE RURfVkVSU0lPTlswXT0zZDgxNjQ1NzM3Y2MyMDkwZjgyY2NiOWNjMzMwZGNiY2I1YWM4N2NkCitE RVBfTkVFREVEX1ZFUlNJT05bMF09ZWQ1OTg2NzZlNWVhZGU1NTFlYmVhYTNhOGM4OGFiZDViYWQ3 NjRmMQogREVQX0JSQU5DSF9BTkRfUkVNT1RFWzBdPSJtb25vZGV2ZWxvcC00LjMuMC1icmFuY2gg b3JpZ2luL21vbm9kZXZlbG9wLTQuMy4wLWJyYW5jaCIKIAogIyBoZWFwLXNob3QNCg0KICAgQ29t bWl0OiA4YzQwOTYxZjlhMDhjMTQwMDNjYWQ3MTIxNjRiZjc0ZmQwYzc1YmFiDQogICBBdXRob3I6 IErDqXLDqW1pZSBMYXZhbCA8amVyZW1pZS5sYXZhbEBnbWFpbC5jb20+IChnYXJ1bWEpDQogICAg IERhdGU6IDIwMTMtMTEtMTkgMjE6MDI6NTggR01UDQogICAgICBVUkw6IGh0dHBzOi8vZ2l0aHVi LmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbW1pdC84YzQwOTYxZjlhMDhjMTQwMDNjYWQ3MTIxNjRi Zjc0ZmQwYzc1YmFiDQoNCk1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIG1vbm9kZXZlbG9wLTQu My4wLWJyYW5jaAoKQ29uZmxpY3RzOgoJdmVyc2lvbi1jaGVja3MNCg0KQ2hhbmdlZCBwYXRoczoK ICBNIG1haW4vZXh0ZXJuYWwvZGVidWdnZXItbGlicwogIE0gbWFpbi9leHRlcm5hbC9ucmVmYWN0 b3J5CiAgTSBtYWluL2V4dGVybmFsL3h3dAogIE0gbWFpbi9zcmMvYWRkaW5zL0NTaGFycEJpbmRp bmcvTW9ub0RldmVsb3AuQ1NoYXJwLkNvbXBsZXRpb24vTWVtYmVyQ29tcGxldGlvbkRhdGEuY3MK ICBNIG1haW4vc3JjL2FkZGlucy9DU2hhcnBCaW5kaW5nL01vbm9EZXZlbG9wLkNTaGFycC5Ub29s dGlwcy9MYW5ndWFnZUl0ZW1Ub29sdGlwUHJvdmlkZXIuY3MKICBNIG1haW4vc3JjL2FkZGlucy9D U2hhcnBCaW5kaW5nL01vbm9EZXZlbG9wLkNTaGFycC9TaWduYXR1cmVNYXJrdXBDcmVhdG9yLmNz CiAgTSBtYWluL3NyYy9hZGRpbnMvTW9ub0RldmVsb3AuRGVidWdnZXIuU29mdC9Nb25vRGV2ZWxv cC5EZWJ1Z2dlci5Tb2Z0LkFzcE5ldC9Bc3BOZXRTb2Z0RGVidWdnZXJFbmdpbmUuY3MKICBNIG1h aW4vc3JjL2FkZGlucy9Nb25vRGV2ZWxvcC5SZWZhY3RvcmluZy9Nb25vRGV2ZWxvcC5Db2RlSXNz dWVzL0NvZGVJc3N1ZVBhZC5jcwogIE0gbWFpbi9zcmMvYWRkaW5zL01vbm9EZXZlbG9wLldlYlJl ZmVyZW5jZXMvTW9ub0RldmVsb3AuV2ViUmVmZXJlbmNlcy5EaWFsb2dzL1dDRkNvbmZpZ1dpZGdl dC5jcwogIE0gbWFpbi9zcmMvYWRkaW5zL01vbm9EZXZlbG9wLldlYlJlZmVyZW5jZXMvZ3RrLWd1 aS9Nb25vRGV2ZWxvcC5XZWJSZWZlcmVuY2VzLkRpYWxvZ3MuV0NGQ29uZmlnV2lkZ2V0LmNzCiAg TSBtYWluL3NyYy9hZGRpbnMvTW9ub0RldmVsb3AuV2ViUmVmZXJlbmNlcy9ndGstZ3VpL2d1aS5z dGV0aWMKICBNIG1haW4vc3JjL2FkZGlucy9WZXJzaW9uQ29udHJvbC9Nb25vRGV2ZWxvcC5WZXJz aW9uQ29udHJvbC5HaXQuVGVzdHMvQmFzZUdpdFJlcG9zaXRvcnlUZXN0cy5jcwogIE0gbWFpbi9z cmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZlbG9wLlZlcnNpb25Db250cm9sLkdpdC5U ZXN0cy9CYXNlUmVwb3NpdG9yeVRlc3RzLmNzCiAgTSBtYWluL3NyYy9hZGRpbnMvVmVyc2lvbkNv bnRyb2wvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuR2l0L01vbm9EZXZlbG9wLlZlcnNpb25D b250cm9sLkdpdC9HaXRSZXBvc2l0b3J5LmNzCiAgTSBtYWluL3NyYy9hZGRpbnMvVmVyc2lvbkNv bnRyb2wvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuU3VidmVyc2lvbi5UZXN0cy9CYXNlU3Zu UmVwb3NpdG9yeVRlc3RzLmNzCiAgTSBtYWluL3NyYy9hZGRpbnMvVmVyc2lvbkNvbnRyb2wvTW9u b0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuU3VidmVyc2lvbi5UZXN0cy9SZXBvc2l0b3J5VGVzdHMu Y3MKICBNIG1haW4vc3JjL2FkZGlucy9WZXJzaW9uQ29udHJvbC9TdWJ2ZXJzaW9uLldpbjMyLlRl c3RzL1JlcG9zaXRvcnlUZXN0cy5jcwogIE0gbWFpbi9zcmMvY29yZS9Nb25vRGV2ZWxvcC5Db3Jl L01vbm9EZXZlbG9wLkNvcmUuV2ViL0NyZWRlbnRpYWxTdG9yZS5jcwogIE0gbWFpbi9zcmMvY29y ZS9Nb25vRGV2ZWxvcC5Db3JlL01vbm9EZXZlbG9wLkNvcmUuV2ViL0lDcmVkZW50aWFsUHJvdmlk ZXIuY3MKICBNIG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuQ29yZS9Nb25vRGV2ZWxvcC5Db3Jl LldlYi9Qcm94eUNhY2hlLmNzCiAgTSBtYWluL3NyYy9jb3JlL01vbm9EZXZlbG9wLkNvcmUvTW9u b0RldmVsb3AuQ29yZS5XZWIvUmVxdWVzdEhlbHBlci5jcwogIE0gbWFpbi9zcmMvY29yZS9Nb25v RGV2ZWxvcC5Db3JlL01vbm9EZXZlbG9wLkNvcmUuV2ViL1dlYlNlcnZpY2UuY3MKICBNIG1haW4v c3JjL2NvcmUvTW9ub0RldmVsb3AuQ29yZS9Nb25vRGV2ZWxvcC5Db3JlLmNzcHJvagogIE0gbWFp bi9zcmMvY29yZS9Nb25vRGV2ZWxvcC5Db3JlL01vbm9EZXZlbG9wLkNvcmUvTG9nZ2luZ1NlcnZp Y2UuY3MKICBNIG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuQ29yZS9Nb25vRGV2ZWxvcC5Db3Jl L1J1bnRpbWUuY3MKICBNIG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuSWRlL01vbm9EZXZlbG9w LklkZS5UeXBlU3lzdGVtL1R5cGVTeXN0ZW1TZXJ2aWNlLmNzCiAgTSBtYWluL3Rlc3RzL1VuaXRU ZXN0cy9Nb25vRGV2ZWxvcC5DU2hhcnBCaW5kaW5nL09uVGhlRmx5Rm9ybWF0dGVyVGVzdHMuY3MK ICBNIG1haW4veGJ1aWxkLmluY2x1ZGUKDQpNb2RpZmllZDogbWFpbi9leHRlcm5hbC9kZWJ1Z2dl ci1saWJzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQpAQCAtMSArMSBAQAotU3VicHJvamVjdCBjb21taXQgZjc0OTFl NTM1NzAzYjgzNTI0MzJmYjc2MGRkYzA0MTc0M2Y5MDBjMworU3VicHJvamVjdCBjb21taXQgMzQ1 OTUwMjRmMDA3MmMxY2ZjNWIxZGRlMWQxOTRkMGRjYzVjMTFmYg0KDQpNb2RpZmllZDogbWFpbi9l eHRlcm5hbC9ucmVmYWN0b3J5DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMSArMSBAQAotU3VicHJvamVjdCBj b21taXQgMjA0NGVhMzZkM2NmODMxY2FjMWMwYzliZjZkZjBlZmRjZTAyMzBiMAorU3VicHJvamVj dCBjb21taXQgZWE3NWJhYzNmMzc0MDYxYmEzYzI4YWUwMGY3Yjk2NTE4OWY5M2YzMQ0KDQpNb2Rp ZmllZDogbWFpbi9leHRlcm5hbC94d3QNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC0xICsxIEBACi1TdWJwcm9q ZWN0IGNvbW1pdCBlZjU0ZDA2NWM3MjFjZTAxM2QyZGM5NjI4NDYyOTQ0MWFiYTE2NzJiCitTdWJw cm9qZWN0IGNvbW1pdCAwZjY1NDFmNjQ4NjZiNmY0NWVmZDExMWZhMTE2YWRmOTM2OTRmNDhkDQoN Ck1vZGlmaWVkOiBtYWluL3NyYy9hZGRpbnMvQ1NoYXJwQmluZGluZy9Nb25vRGV2ZWxvcC5DU2hh cnAuQ29tcGxldGlvbi9NZW1iZXJDb21wbGV0aW9uRGF0YS5jcw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTY4 MiwzMCArNjgyLDcgQEAgcHVibGljIHN0YXRpYyBUb29sdGlwSW5mb3JtYXRpb24gQ3JlYXRlVG9v bHRpcEluZm9ybWF0aW9uIChJQ29tcGlsYXRpb24gY29tcGlsYXQKIAkJCQl9CiAJCQl9CiAJCQlp ZiAoY3JlYXRlRm9vdGVyKSB7Ci0JCQkJaWYgKGVudGl0eSBpcyBJVHlwZSkgewotCQkJCQl2YXIg dHlwZSA9IGVudGl0eSBhcyBJVHlwZTsKLQkJCQkJdmFyIGRlZiA9IHR5cGUuR2V0RGVmaW5pdGlv biAoKTsKLQkJCQkJaWYgKGRlZiAhPSBudWxsKSB7Ci0JCQkJCQlpZiAoIXN0cmluZy5Jc051bGxP ckVtcHR5IChkZWYuUGFyZW50QXNzZW1ibHkuQXNzZW1ibHlOYW1lKSkgewotCQkJCQkJCXZhciBw cm9qZWN0ID0gZGVmLkdldFNvdXJjZVByb2plY3QgKCk7Ci0JCQkJCQkJaWYgKHByb2plY3QgIT0g bnVsbCkgewotCQkJCQkJCQl2YXIgcmVsUGF0aCA9IEZpbGVTZXJ2aWNlLkFic29sdXRlVG9SZWxh dGl2ZVBhdGggKHByb2plY3QuQmFzZURpcmVjdG9yeSwgZGVmLlJlZ2lvbi5GaWxlTmFtZSk7Ci0J CQkJCQkJCXRvb2x0aXBJbmZvLkZvb3Rlck1hcmt1cCA9ICI8c21hbGw+IiArIEdldHRleHRDYXRh bG9nLkdldFN0cmluZyAoIlByb2plY3Q6XHR7MH0iLCBBbWJpZW5jZVNlcnZpY2UuRXNjYXBlVGV4 dCAoZGVmLlBhcmVudEFzc2VtYmx5LkFzc2VtYmx5TmFtZSkpICsgIjwvc21hbGw+IiArIEVudmly b25tZW50Lk5ld0xpbmUgKwotCQkJCQkJCQkJIjxzbWFsbD4iICsgR2V0dGV4dENhdGFsb2cuR2V0 U3RyaW5nICgiRmlsZTpcdFx0ezB9IChsaW5lIHsxfSkiLCBBbWJpZW5jZVNlcnZpY2UuRXNjYXBl VGV4dCAocmVsUGF0aCksIGRlZi5SZWdpb24uQmVnaW4uTGluZSkgKyAiPC9zbWFsbD4iOwotCQkJ CQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCi0JCQkJfSBlbHNlIGlmIChlbnRpdHkuRGVjbGFyaW5n VHlwZURlZmluaXRpb24gIT0gbnVsbCkgewotCQkJCQl2YXIgcHJvamVjdCA9IGVudGl0eS5EZWNs YXJpbmdUeXBlRGVmaW5pdGlvbi5HZXRTb3VyY2VQcm9qZWN0ICgpOwotCQkJCQlpZiAocHJvamVj dCAhPSBudWxsKSB7Ci0JCQkJCQl2YXIgcmVsUGF0aCA9IEZpbGVTZXJ2aWNlLkFic29sdXRlVG9S ZWxhdGl2ZVBhdGggKHByb2plY3QuQmFzZURpcmVjdG9yeSwgZW50aXR5LlJlZ2lvbi5GaWxlTmFt ZSk7Ci0JCQkJCQl0b29sdGlwSW5mby5Gb290ZXJNYXJrdXAgPSAKLQkJCQkJCQkiPHNtYWxsPiIg KyBHZXR0ZXh0Q2F0YWxvZy5HZXRTdHJpbmcgKCJQcm9qZWN0Olx0ezB9IiwgQW1iaWVuY2VTZXJ2 aWNlLkVzY2FwZVRleHQgKHByb2plY3QuTmFtZSkpICsgIjwvc21hbGw+IiArIEVudmlyb25tZW50 Lk5ld0xpbmUgKwotCQkJCQkJCSI8c21hbGw+IiArIEdldHRleHRDYXRhbG9nLkdldFN0cmluZyAo IkZyb206XHR7MH0iLCBBbWJpZW5jZVNlcnZpY2UuRXNjYXBlVGV4dCAoZW50aXR5LkRlY2xhcmlu Z1R5cGUuRnVsbE5hbWUpKSArICI8L3NtYWxsPiIgKyBFbnZpcm9ubWVudC5OZXdMaW5lICsKLQkJ CQkJCQkiPHNtYWxsPiIgKyBHZXR0ZXh0Q2F0YWxvZy5HZXRTdHJpbmcgKCJGaWxlOlx0XHR7MH0g KGxpbmUgezF9KSIsIEFtYmllbmNlU2VydmljZS5Fc2NhcGVUZXh0IChyZWxQYXRoKSwgZW50aXR5 LlJlZ2lvbi5CZWdpbi5MaW5lKSArICI8L3NtYWxsPiI7Ci0JCQkJCX0KLQkJCQl9CisJCQkJdG9v bHRpcEluZm8uRm9vdGVyTWFya3VwID0gc2lnLkNyZWF0ZUZvb3RlciAoZW50aXR5KTsKIAkJCX0K IAkJCXJldHVybiB0b29sdGlwSW5mbzsKIAkJfQpAQCAtNzMyLDggKzcwOSw4IEBAIHB1YmxpYyBz dGF0aWMgVG9vbHRpcEluZm9ybWF0aW9uIENyZWF0ZVRvb2x0aXBJbmZvcm1hdGlvbiAoSUNvbXBp bGF0aW9uIGNvbXBpbGF0CiAKIAkJCXZhciBkZWYgPSB0eXBlLkdldERlZmluaXRpb24gKCk7CiAJ CQlpZiAoZGVmICE9IG51bGwpIHsKLQkJCQlpZiAoY3JlYXRlRm9vdGVyICYmICFzdHJpbmcuSXNO dWxsT3JFbXB0eSAoZGVmLlBhcmVudEFzc2VtYmx5LkFzc2VtYmx5TmFtZSkpCi0JCQkJCXRvb2x0 aXBJbmZvLkZvb3Rlck1hcmt1cCA9ICI8c21hbGw+IEZyb20gIiArIEFtYmllbmNlU2VydmljZS5F c2NhcGVUZXh0IChkZWYuUGFyZW50QXNzZW1ibHkuQXNzZW1ibHlOYW1lKSArICI8L3NtYWxsPiI7 CisJCQkJaWYgKGNyZWF0ZUZvb3RlcikKKwkJCQkJdG9vbHRpcEluZm8uRm9vdGVyTWFya3VwID0g c2lnLkNyZWF0ZUZvb3RlciAoZGVmKTsKIAkJCQl0b29sdGlwSW5mby5TdW1tYXJ5TWFya3VwID0g QW1iaWVuY2VTZXJ2aWNlLkdldFN1bW1hcnlNYXJrdXAgKGRlZikgPz8gIiI7CiAJCQl9CiAJCQly ZXR1cm4gdG9vbHRpcEluZm87DQoNCk1vZGlmaWVkOiBtYWluL3NyYy9hZGRpbnMvQ1NoYXJwQmlu ZGluZy9Nb25vRGV2ZWxvcC5DU2hhcnAuVG9vbHRpcHMvTGFuZ3VhZ2VJdGVtVG9vbHRpcFByb3Zp ZGVyLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQpAQCAtMTQxLDcgKzE0MSw3IEBAIHByb3RlY3RlZCBvdmVycmlk ZSBHdGsuV2luZG93IENyZWF0ZVRvb2x0aXBXaW5kb3cgKE1vbm8uVGV4dEVkaXRvci5UZXh0RWRp dG9yIGVkCiAKIAkJCXZhciB0aXRlbSA9IChUb29sVGlwRGF0YSlpdGVtLkl0ZW07CiAKLQkJCXZh ciB0b29sdGlwSW5mb3JtYXRpb24gPSBDcmVhdGVUb29sdGlwICh0aXRlbSwgb2Zmc2V0LCBudWxs KTsKKwkJCXZhciB0b29sdGlwSW5mb3JtYXRpb24gPSBDcmVhdGVUb29sdGlwICh0aXRlbSwgb2Zm c2V0LCBudWxsLCBtb2RpZmllclN0YXRlKTsKIAkJCWlmICh0b29sdGlwSW5mb3JtYXRpb24gPT0g bnVsbCB8fCBzdHJpbmcuSXNOdWxsT3JFbXB0eSAodG9vbHRpcEluZm9ybWF0aW9uLlNpZ25hdHVy ZU1hcmt1cCkpCiAJCQkJcmV0dXJuIG51bGw7CiAKQEAgLTE3OSwxMiArMTc5LDEzIEBAIHB1Ymxp YyBvdmVycmlkZSBHdGsuV2luZG93IFNob3dUb29sdGlwV2luZG93IChUZXh0RWRpdG9yIGVkaXRv ciwgaW50IG9mZnNldCwgR2RrCiAJCQlyZXR1cm4gdGlwV2luZG93OwogCQl9CiAKLQkJVG9vbHRp cEluZm9ybWF0aW9uIENyZWF0ZVRvb2x0aXAgKFRvb2xUaXBEYXRhIGRhdGEsIGludCBvZmZzZXQs IEFtYmllbmNlIGFtYmllbmNlKQorCQlUb29sdGlwSW5mb3JtYXRpb24gQ3JlYXRlVG9vbHRpcCAo VG9vbFRpcERhdGEgZGF0YSwgaW50IG9mZnNldCwgQW1iaWVuY2UgYW1iaWVuY2UsIEdkay5Nb2Rp ZmllclR5cGUgbW9kaWZpZXJTdGF0ZSkKIAkJewogCQkJUmVzb2x2ZVJlc3VsdCByZXN1bHQgPSBk YXRhLlJlc3VsdDsKIAkJCXZhciBkb2MgPSBJZGVBcHAuV29ya2JlbmNoLkFjdGl2ZURvY3VtZW50 OwogCQkJaWYgKGRvYyA9PSBudWxsKQogCQkJCXJldHVybiBudWxsOworCQkJYm9vbCBjcmVhdGVG b290ZXIgPSAobW9kaWZpZXJTdGF0ZSAmIEdkay5Nb2RpZmllclR5cGUuTW9kMU1hc2spICE9IDA7 CiAJCQl0cnkgewogCiAJCQkJaWYgKHJlc3VsdCBpcyBBbGlhc05hbWVzcGFjZVJlc29sdmVSZXN1 bHQpIHsKQEAgLTI3NiwxMiArMjc3LDEzIEBAIFRvb2x0aXBJbmZvcm1hdGlvbiBDcmVhdGVUb29s dGlwIChUb29sVGlwRGF0YSBkYXRhLCBpbnQgb2Zmc2V0LCBBbWJpZW5jZSBhbWJpZW5jCiAJCQkJ CXZhciBtZXRob2QgPSBhbGxNZXRob2RzLkZpcnN0T3JEZWZhdWx0ICgpOwogCQkJCQlpZiAobWV0 aG9kICE9IG51bGwpIHsKIAkJCQkJCXJldHVybiBNZW1iZXJDb21wbGV0aW9uRGF0YS5DcmVhdGVU b29sdGlwSW5mb3JtYXRpb24gKAotCQkJCQkJZG9jLkNvbXBpbGF0aW9uLAotCQkJCQkJZG9jLlBh cnNlZERvY3VtZW50LlBhcnNlZEZpbGUgYXMgQ1NoYXJwVW5yZXNvbHZlZEZpbGUsCi0JCQkJCQlk b2MuRWRpdG9yLAotCQkJCQkJZG9jLkdldEZvcm1hdHRpbmdQb2xpY3kgKCksCi0JCQkJCQltZXRo b2QsIAotCQkJCQkJZmFsc2UpOworCQkJCQkJCWRvYy5Db21waWxhdGlvbiwKKwkJCQkJCQlkb2Mu UGFyc2VkRG9jdW1lbnQuUGFyc2VkRmlsZSBhcyBDU2hhcnBVbnJlc29sdmVkRmlsZSwKKwkJCQkJ CQlkb2MuRWRpdG9yLAorCQkJCQkJCWRvYy5HZXRGb3JtYXR0aW5nUG9saWN5ICgpLAorCQkJCQkJ CW1ldGhvZCwKKwkJCQkJCQlmYWxzZSwKKwkJCQkJCQljcmVhdGVGb290ZXIpOwogCQkJCQl9CiAJ CQkJfSBlbHNlIGlmIChyZXN1bHQgaXMgQ1NoYXJwSW52b2NhdGlvblJlc29sdmVSZXN1bHQpIHsK IAkJCQkJdmFyIGludm9jYXRpb25SZXN1bHQgPSAoQ1NoYXJwSW52b2NhdGlvblJlc29sdmVSZXN1 bHQpcmVzdWx0OwpAQCAtMjkyLDE2ICsyOTQsMTggQEAgVG9vbHRpcEluZm9ybWF0aW9uIENyZWF0 ZVRvb2x0aXAgKFRvb2xUaXBEYXRhIGRhdGEsIGludCBvZmZzZXQsIEFtYmllbmNlIGFtYmllbmMK IAkJCQkJCWRvYy5FZGl0b3IsCiAJCQkJCQlkb2MuR2V0Rm9ybWF0dGluZ1BvbGljeSAoKSwKIAkJ CQkJCW1lbWJlciwgCi0JCQkJCQlmYWxzZSk7CisJCQkJCQlmYWxzZSwKKwkJCQkJCWNyZWF0ZUZv b3Rlcik7CiAJCQkJfSBlbHNlIGlmIChyZXN1bHQgaXMgTWVtYmVyUmVzb2x2ZVJlc3VsdCkgewog CQkJCQl2YXIgbWVtYmVyID0gKChNZW1iZXJSZXNvbHZlUmVzdWx0KXJlc3VsdCkuTWVtYmVyOwog CQkJCQlyZXR1cm4gTWVtYmVyQ29tcGxldGlvbkRhdGEuQ3JlYXRlVG9vbHRpcEluZm9ybWF0aW9u ICgKLQkJCQkJZG9jLkNvbXBpbGF0aW9uLAotCQkJCQlkb2MuUGFyc2VkRG9jdW1lbnQuUGFyc2Vk RmlsZSBhcyBDU2hhcnBVbnJlc29sdmVkRmlsZSwKLQkJCQkJZG9jLkVkaXRvciwKLQkJCQkJZG9j LkdldEZvcm1hdHRpbmdQb2xpY3kgKCksCi0JCQkJCW1lbWJlciwgCi0JCQkJCWZhbHNlKTsKKwkJ CQkJCWRvYy5Db21waWxhdGlvbiwKKwkJCQkJCWRvYy5QYXJzZWREb2N1bWVudC5QYXJzZWRGaWxl IGFzIENTaGFycFVucmVzb2x2ZWRGaWxlLAorCQkJCQkJZG9jLkVkaXRvciwKKwkJCQkJCWRvYy5H ZXRGb3JtYXR0aW5nUG9saWN5ICgpLAorCQkJCQkJbWVtYmVyLCAKKwkJCQkJCWZhbHNlLAorCQkJ CQkJY3JlYXRlRm9vdGVyKTsKIAkJCQl9IGVsc2UgaWYgKHJlc3VsdCBpcyBOYW1lc3BhY2VSZXNv bHZlUmVzdWx0KSB7CiAJCQkJCXZhciB0b29sdGlwSW5mbyA9IG5ldyBUb29sdGlwSW5mb3JtYXRp b24gKCk7CiAJCQkJCXZhciByZXNvbHZlciA9IChkb2MuUGFyc2VkRG9jdW1lbnQuUGFyc2VkRmls ZSBhcyBDU2hhcnBVbnJlc29sdmVkRmlsZSkuR2V0UmVzb2x2ZXIgKGRvYy5Db21waWxhdGlvbiwg ZG9jLkVkaXRvci5DYXJldC5Mb2NhdGlvbik7CkBAIC0zMjksMTIgKzMzMywxMyBAQCBUb29sdGlw SW5mb3JtYXRpb24gQ3JlYXRlVG9vbHRpcCAoVG9vbFRpcERhdGEgZGF0YSwgaW50IG9mZnNldCwg QW1iaWVuY2UgYW1iaWVuYwogCQkJCQlyZXR1cm4gdG9vbHRpcEluZm87CiAJCQkJfSBlbHNlIHsK IAkJCQkJcmV0dXJuIE1lbWJlckNvbXBsZXRpb25EYXRhLkNyZWF0ZVRvb2x0aXBJbmZvcm1hdGlv biAoCi0JCQkJCWRvYy5Db21waWxhdGlvbiwKLQkJCQkJZG9jLlBhcnNlZERvY3VtZW50LlBhcnNl ZEZpbGUgYXMgQ1NoYXJwVW5yZXNvbHZlZEZpbGUsCi0JCQkJCWRvYy5FZGl0b3IsCi0JCQkJCWRv Yy5HZXRGb3JtYXR0aW5nUG9saWN5ICgpLAotCQkJCQlyZXN1bHQuVHlwZSwgCi0JCQkJCWZhbHNl KTsKKwkJCQkJCWRvYy5Db21waWxhdGlvbiwKKwkJCQkJCWRvYy5QYXJzZWREb2N1bWVudC5QYXJz ZWRGaWxlIGFzIENTaGFycFVucmVzb2x2ZWRGaWxlLAorCQkJCQkJZG9jLkVkaXRvciwKKwkJCQkJ CWRvYy5HZXRGb3JtYXR0aW5nUG9saWN5ICgpLAorCQkJCQkJcmVzdWx0LlR5cGUsIAorCQkJCQkJ ZmFsc2UsCisJCQkJCQljcmVhdGVGb290ZXIpOwogCQkJCX0KIAkJCX0gY2F0Y2ggKEV4Y2VwdGlv biBlKSB7CiAJCQkJTG9nZ2luZ1NlcnZpY2UuTG9nRXJyb3IgKCJFcnJvciB3aGlsZSBjcmVhdGlu ZyB0b29sdGlwLiIsIGUpOw0KDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL0NTaGFycEJpbmRp bmcvTW9ub0RldmVsb3AuQ1NoYXJwL1NpZ25hdHVyZU1hcmt1cENyZWF0b3IuY3MNCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCkBAIC0xNjExLDUgKzE2MTEsNDYgQEAgc3RyaW5nIEhpZ2hsaWdodFNlbWFudGljYWxseSAo c3RyaW5nIHN0ciwgQ2h1bmtTdHlsZSBzdHlsZSkKIAkJCQlyZXR1cm4gc3RyOwogCQkJcmV0dXJu IEhpZ2hsaWdodCAoc3RyLCBzdHlsZSk7CiAJCX0KKworCQlwdWJsaWMgc3RyaW5nIENyZWF0ZUZv b3RlciAoSUVudGl0eSBlbnRpdHkpCisJCXsKKwkJCXZhciB0eXBlID0gZW50aXR5IGFzIElUeXBl OworCQkJaWYgKHR5cGUgIT0gbnVsbCkgeworCQkJCXZhciBkZWYgPSB0eXBlLkdldERlZmluaXRp b24gKCk7CisJCQkJaWYgKGRlZiAhPSBudWxsKSB7CisJCQkJCWlmICghZGVmLlJlZ2lvbi5Jc0Vt cHR5KSB7CisJCQkJCQl2YXIgcHJvamVjdCA9IGRlZi5HZXRTb3VyY2VQcm9qZWN0ICgpOworCQkJ CQkJaWYgKHByb2plY3QgIT0gbnVsbCkgeworCQkJCQkJCXZhciByZWxQYXRoID0gRmlsZVNlcnZp Y2UuQWJzb2x1dGVUb1JlbGF0aXZlUGF0aCAocHJvamVjdC5CYXNlRGlyZWN0b3J5LCBkZWYuUmVn aW9uLkZpbGVOYW1lKTsKKwkJCQkJCQlyZXR1cm4KKwkJCQkJCQkJKHN0cmluZy5Jc051bGxPckVt cHR5IChkZWYuTmFtZXNwYWNlKSA/ICIiIDogIjxzbWFsbD4iICsgR2V0dGV4dENhdGFsb2cuR2V0 U3RyaW5nICgiTmFtZXNwYWNlOlx0ezB9IiwgQW1iaWVuY2VTZXJ2aWNlLkVzY2FwZVRleHQgKGRl Zi5OYW1lc3BhY2UpKSArICI8L3NtYWxsPiIgKyBFbnZpcm9ubWVudC5OZXdMaW5lKSArCisJCQkJ CQkJCSI8c21hbGw+IiArIEdldHRleHRDYXRhbG9nLkdldFN0cmluZyAoIlByb2plY3Q6XHR7MH0i LCBBbWJpZW5jZVNlcnZpY2UuRXNjYXBlVGV4dCAoZGVmLlBhcmVudEFzc2VtYmx5LkFzc2VtYmx5 TmFtZSkpICsgIjwvc21hbGw+IiArIEVudmlyb25tZW50Lk5ld0xpbmUgKworCQkJCQkJCQkiPHNt YWxsPiIgKyBHZXR0ZXh0Q2F0YWxvZy5HZXRTdHJpbmcgKCJGaWxlOlx0XHR7MH0gKGxpbmUgezF9 KSIsIEFtYmllbmNlU2VydmljZS5Fc2NhcGVUZXh0IChyZWxQYXRoKSwgZGVmLlJlZ2lvbi5CZWdp bi5MaW5lKSArICI8L3NtYWxsPiI7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJcmV0dXJuCisJCQkJ CQkoc3RyaW5nLklzTnVsbE9yRW1wdHkgKGRlZi5OYW1lc3BhY2UpID8gIiIgOiAiPHNtYWxsPiIg KyBHZXR0ZXh0Q2F0YWxvZy5HZXRTdHJpbmcgKCJOYW1lc3BhY2U6XHR7MH0iLCBBbWJpZW5jZVNl cnZpY2UuRXNjYXBlVGV4dCAoZGVmLk5hbWVzcGFjZSkpICsgIjwvc21hbGw+IiArIEVudmlyb25t ZW50Lk5ld0xpbmUpICsKKwkJCQkJCSI8c21hbGw+IiArIEdldHRleHRDYXRhbG9nLkdldFN0cmlu ZyAoIkFzc2VtYmx5Olx0ezB9IiwgQW1iaWVuY2VTZXJ2aWNlLkVzY2FwZVRleHQgKGRlZi5QYXJl bnRBc3NlbWJseS5Bc3NlbWJseU5hbWUpKSArICI8L3NtYWxsPiI7CisJCQkJfQorCQkJCXJldHVy biBudWxsOworCQkJfSAKKworCQkJaWYgKGVudGl0eS5EZWNsYXJpbmdUeXBlRGVmaW5pdGlvbiAh PSBudWxsKSB7CisJCQkJaWYgKCFlbnRpdHkuUmVnaW9uLklzRW1wdHkpIHsKKwkJCQkJdmFyIHBy b2plY3QgPSBlbnRpdHkuRGVjbGFyaW5nVHlwZURlZmluaXRpb24uR2V0U291cmNlUHJvamVjdCAo KTsKKwkJCQkJaWYgKHByb2plY3QgIT0gbnVsbCkgeworCQkJCQkJdmFyIHJlbFBhdGggPSBGaWxl U2VydmljZS5BYnNvbHV0ZVRvUmVsYXRpdmVQYXRoIChwcm9qZWN0LkJhc2VEaXJlY3RvcnksIGVu dGl0eS5SZWdpb24uRmlsZU5hbWUpOworCQkJCQkJcmV0dXJuCisJCQkJCQkJIjxzbWFsbD4iICsg R2V0dGV4dENhdGFsb2cuR2V0U3RyaW5nICgiUHJvamVjdDpcdHswfSIsIEFtYmllbmNlU2Vydmlj ZS5Fc2NhcGVUZXh0IChwcm9qZWN0Lk5hbWUpKSArICI8L3NtYWxsPiIgKyBFbnZpcm9ubWVudC5O ZXdMaW5lICsKKwkJCQkJCQkiPHNtYWxsPiIgKyBHZXR0ZXh0Q2F0YWxvZy5HZXRTdHJpbmcgKCJG cm9tIHR5cGU6XHR7MH0iLCBBbWJpZW5jZVNlcnZpY2UuRXNjYXBlVGV4dCAoZW50aXR5LkRlY2xh cmluZ1R5cGVEZWZpbml0aW9uLkZ1bGxOYW1lKSkgKyAiPC9zbWFsbD4iICsgRW52aXJvbm1lbnQu TmV3TGluZSArCisJCQkJCQkJIjxzbWFsbD4iICsgR2V0dGV4dENhdGFsb2cuR2V0U3RyaW5nICgi RmlsZTpcdFx0ezB9IChsaW5lIHsxfSkiLCBBbWJpZW5jZVNlcnZpY2UuRXNjYXBlVGV4dCAocmVs UGF0aCksIGVudGl0eS5SZWdpb24uQmVnaW4uTGluZSkgKyAiPC9zbWFsbD4iOworCQkJCQl9CisJ CQkJfQorCQkJCXJldHVybgorCQkJCQkiPHNtYWxsPiIgKyBHZXR0ZXh0Q2F0YWxvZy5HZXRTdHJp bmcgKCJGcm9tIHR5cGU6XHR7MH0iLCBBbWJpZW5jZVNlcnZpY2UuRXNjYXBlVGV4dCAoZW50aXR5 LkRlY2xhcmluZ1R5cGVEZWZpbml0aW9uLkZ1bGxOYW1lKSkgKyAiPC9zbWFsbD4iICsgRW52aXJv bm1lbnQuTmV3TGluZSArCisJCQkJCSI8c21hbGw+IiArIEdldHRleHRDYXRhbG9nLkdldFN0cmlu ZyAoIkFzc2VtYmx5Olx0ezB9IiwgQW1iaWVuY2VTZXJ2aWNlLkVzY2FwZVRleHQgKGVudGl0eS5E ZWNsYXJpbmdUeXBlRGVmaW5pdGlvbi5QYXJlbnRBc3NlbWJseS5Bc3NlbWJseU5hbWUpKSArICI8 L3NtYWxsPiI7CisJCQl9CisJCQlyZXR1cm4gbnVsbDsKKwkJfQogCX0KIH0NCg0KTW9kaWZpZWQ6 IG1haW4vc3JjL2FkZGlucy9Nb25vRGV2ZWxvcC5EZWJ1Z2dlci5Tb2Z0L01vbm9EZXZlbG9wLkRl YnVnZ2VyLlNvZnQuQXNwTmV0L0FzcE5ldFNvZnREZWJ1Z2dlckVuZ2luZS5jcw0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KQEAgLTU3LDcgKzU3LDcgQEAgRmlsZVBhdGggR2V0RnhEaXIgKE1vbm9UYXJnZXRSdW50aW1l IHJ1bnRpbWUsIENsclZlcnNpb24gdmVyc2lvbikKIAkJCQlyZXR1cm4gcHJlZml4LkNvbWJpbmUg KCJsaWIiLCAibW9ubyIsICIyLjAiKTsKIAkJCWNhc2UgQ2xyVmVyc2lvbi5OZXRfNF8wOgogCQkJ CXZhciBuZXQ0NVBhdGggPSBwcmVmaXguQ29tYmluZSAoImxpYiIsICJtb25vIiwgIjQuNSIpOwot CQkJCWlmIChEaXJlY3RvcnkuRXhpc3RzIChuZXQ0NVBhdGgpKSByZXR1cm4gbmV0NDVQYXRoOwor CQkJCWlmIChEaXJlY3RvcnkuRXhpc3RzIChuZXQ0NVBhdGgpICYmICFNb25vRGV2ZWxvcC5Db3Jl LlBsYXRmb3JtLklzV2luZG93cykgcmV0dXJuIG5ldDQ1UGF0aDsKIAkJCQlyZXR1cm4gcHJlZml4 LkNvbWJpbmUgKCJsaWIiLCAibW9ubyIsICI0LjAiKTsKIAkJCWNhc2UgQ2xyVmVyc2lvbi5OZXRf NF81OgogCQkJCXJldHVybiBwcmVmaXguQ29tYmluZSAoImxpYiIsICJtb25vIiwgIjQuNSIpOw0K DQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL01vbm9EZXZlbG9wLlJlZmFjdG9yaW5nL01vbm9E ZXZlbG9wLkNvZGVJc3N1ZXMvQ29kZUlzc3VlUGFkLmNzDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMjk5LDYg KzI5OSw5IEBAIHZvaWQgU2V0Tm9kZSAoVHJlZU5hdmlnYXRvciBuYXZpZ2F0b3IsIElJc3N1ZVRy ZWVOb2RlIG5vZGUpCiAKIAkJdm9pZCBDbGVhclNpYmxpbmdOb2RlcyAoVHJlZU5hdmlnYXRvciBu YXZpZ2F0b3IpCiAJCXsKKwkJCWlmIChuYXZpZ2F0b3IuQ3VycmVudFBvc2l0aW9uID09IG51bGwp CisJCQkJcmV0dXJuOworCiAJCQlkbyB7CiAJCQkJdmFyIG5vZGUgPSBuYXZpZ2F0b3IuR2V0VmFs dWUgKG5vZGVGaWVsZCk7CiAJCQkJaWYgKG5vZGUgIT0gbnVsbCkgew0KDQpNb2RpZmllZDogbWFp bi9zcmMvYWRkaW5zL01vbm9EZXZlbG9wLldlYlJlZmVyZW5jZXMvTW9ub0RldmVsb3AuV2ViUmVm ZXJlbmNlcy5EaWFsb2dzL1dDRkNvbmZpZ1dpZGdldC5jcw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTQ1LDYg KzQ1LDExIEBAIHB1YmxpYyBXQ0ZDb25maWdXaWRnZXQgKENsaWVudE9wdGlvbnMgb3B0aW9ucykK IAkJCQogCQkJZGljdFR5cGVzID0gbmV3IExpc3Q8VHlwZT4gKERlZmF1bHREaWN0aW9uYXJ5VHlw ZXMpOwogCQkJUG9wdWxhdGVCb3ggKGRpY3Rpb25hcnlDb2xsZWN0aW9uLCAiRGljdGlvbmFyeSIs IGRpY3RUeXBlcyk7CisKKwkJCWZvcmVhY2ggKHZhciBhY2Nlc3MgaW4gQWNjZXNzR2VuZXJhdGlv blR5cGVzKQorCQkJCWxpc3RBY2Nlc3MuQXBwZW5kVGV4dCAoYWNjZXNzKTsKKworCQkJbGlzdEFj Y2Vzcy5BY3RpdmUgPSBvcHRpb25zLkdlbmVyYXRlSW50ZXJuYWxUeXBlcyA/IDEgOiAwOwogCQl9 CiAJCQogCQlwdWJsaWMgQ2xpZW50T3B0aW9ucyBPcHRpb25zIHsKQEAgLTcxLDYgKzc2LDExIEBA IHB1YmxpYyBXQ0ZDb25maWdXaWRnZXQgKENsaWVudE9wdGlvbnMgb3B0aW9ucykKIAkJCXR5cGVv ZiAoU3lzdGVtLkNvbGxlY3Rpb25zLlNwZWNpYWxpemVkLkxpc3REaWN0aW9uYXJ5KSwKIAkJCXR5 cGVvZiAoU3lzdGVtLkNvbGxlY3Rpb25zLlNwZWNpYWxpemVkLk9yZGVyZWREaWN0aW9uYXJ5KQog CQl9OworCisJCXN0YXRpYyByZWFkb25seSBMaXN0PHN0cmluZz4gQWNjZXNzR2VuZXJhdGlvblR5 cGVzID0gbmV3IExpc3Q8c3RyaW5nPiB7CisJCQkiUHVibGljIiwKKwkJCSJJbnRlcm5hbCIKKwkJ fTsKIAkJCiAJCXB1YmxpYyBib29sIE1vZGlmaWVkIHsKIAkJCWdldDsKQEAgLTE2Miw2ICsxNzIs MTEgQEAgaW50ZXJuYWwgdm9pZCBVcGRhdGUgKCkKIAkJewogCQkJVXBkYXRlQm94IChsaXN0Q29s bGVjdGlvbiwgIkxpc3QiLCBsaXN0VHlwZXMpOwogCQkJVXBkYXRlQm94IChkaWN0aW9uYXJ5Q29s bGVjdGlvbiwgIkRpY3Rpb25hcnkiLCBkaWN0VHlwZXMpOworCisJCQlpZiAobGlzdEFjY2Vzcy5B Y3RpdmUgIT0gKE9wdGlvbnMuR2VuZXJhdGVJbnRlcm5hbFR5cGVzID8gMSA6IDApKSB7CisJCQkJ T3B0aW9ucy5HZW5lcmF0ZUludGVybmFsVHlwZXMgPSAhT3B0aW9ucy5HZW5lcmF0ZUludGVybmFs VHlwZXM7CisJCQkJTW9kaWZpZWQgPSB0cnVlOworCQkJfQogCQl9CiAJfQogfQ0KDQpNb2RpZmll ZDogbWFpbi9zcmMvYWRkaW5zL01vbm9EZXZlbG9wLldlYlJlZmVyZW5jZXMvZ3RrLWd1aS9Nb25v RGV2ZWxvcC5XZWJSZWZlcmVuY2VzLkRpYWxvZ3MuV0NGQ29uZmlnV2lkZ2V0LmNzDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQpAQCAtOSw4ICs5LDEwIEBAIHB1YmxpYyBwYXJ0aWFsIGNsYXNzIFdDRkNvbmZpZ1dpZGdl dAogCQlwcml2YXRlIGdsb2JhbDo6R3RrLkNvbWJvQm94IGRpY3Rpb25hcnlDb2xsZWN0aW9uOwog CQlwcml2YXRlIGdsb2JhbDo6R3RrLkxhYmVsIGxhYmVsMTsKIAkJcHJpdmF0ZSBnbG9iYWw6Okd0 ay5MYWJlbCBsYWJlbDI7CisJCXByaXZhdGUgZ2xvYmFsOjpHdGsuTGFiZWwgbGFiZWwzOworCQlw cml2YXRlIGdsb2JhbDo6R3RrLkNvbWJvQm94IGxpc3RBY2Nlc3M7CiAJCXByaXZhdGUgZ2xvYmFs OjpHdGsuQ29tYm9Cb3ggbGlzdENvbGxlY3Rpb247Ci0JCQorCiAJCXByb3RlY3RlZCB2aXJ0dWFs IHZvaWQgQnVpbGQgKCkKIAkJewogCQkJZ2xvYmFsOjpTdGV0aWMuR3VpLkluaXRpYWxpemUgKHRo aXMpOwpAQCAtNTgsMTcgKzYwLDM4IEBAIHByb3RlY3RlZCB2aXJ0dWFsIHZvaWQgQnVpbGQgKCkK IAkJCXczLlhPcHRpb25zID0gKChnbG9iYWw6Okd0ay5BdHRhY2hPcHRpb25zKSg0KSk7CiAJCQl3 My5ZT3B0aW9ucyA9ICgoZ2xvYmFsOjpHdGsuQXR0YWNoT3B0aW9ucykoNCkpOwogCQkJLy8gQ29u dGFpbmVyIGNoaWxkIHdjZk9wdGlvbnMuR3RrLlRhYmxlK1RhYmxlQ2hpbGQKKwkJCXRoaXMubGFi ZWwzID0gbmV3IGdsb2JhbDo6R3RrLkxhYmVsICgpOworCQkJdGhpcy5sYWJlbDMuTmFtZSA9ICJs YWJlbDMiOworCQkJdGhpcy5sYWJlbDMuTGFiZWxQcm9wID0gZ2xvYmFsOjpNb25vLlVuaXguQ2F0 YWxvZy5HZXRTdHJpbmcgKCJBY2Nlc3MgbGV2ZWw6Iik7CisJCQl0aGlzLndjZk9wdGlvbnMuQWRk ICh0aGlzLmxhYmVsMyk7CisJCQlnbG9iYWw6Okd0ay5UYWJsZS5UYWJsZUNoaWxkIHc0ID0gKChn bG9iYWw6Okd0ay5UYWJsZS5UYWJsZUNoaWxkKSh0aGlzLndjZk9wdGlvbnMgW3RoaXMubGFiZWwz XSkpOworCQkJdzQuVG9wQXR0YWNoID0gKCh1aW50KSgyKSk7CisJCQl3NC5Cb3R0b21BdHRhY2gg PSAoKHVpbnQpKDMpKTsKKwkJCXc0LlhPcHRpb25zID0gKChnbG9iYWw6Okd0ay5BdHRhY2hPcHRp b25zKSg0KSk7CisJCQl3NC5ZT3B0aW9ucyA9ICgoZ2xvYmFsOjpHdGsuQXR0YWNoT3B0aW9ucyko NCkpOworCQkJLy8gQ29udGFpbmVyIGNoaWxkIHdjZk9wdGlvbnMuR3RrLlRhYmxlK1RhYmxlQ2hp bGQKKwkJCXRoaXMubGlzdEFjY2VzcyA9IGdsb2JhbDo6R3RrLkNvbWJvQm94Lk5ld1RleHQgKCk7 CisJCQl0aGlzLmxpc3RBY2Nlc3MuTmFtZSA9ICJsaXN0QWNjZXNzIjsKKwkJCXRoaXMud2NmT3B0 aW9ucy5BZGQgKHRoaXMubGlzdEFjY2Vzcyk7CisJCQlnbG9iYWw6Okd0ay5UYWJsZS5UYWJsZUNo aWxkIHc1ID0gKChnbG9iYWw6Okd0ay5UYWJsZS5UYWJsZUNoaWxkKSh0aGlzLndjZk9wdGlvbnMg W3RoaXMubGlzdEFjY2Vzc10pKTsKKwkJCXc1LlRvcEF0dGFjaCA9ICgodWludCkoMikpOworCQkJ dzUuQm90dG9tQXR0YWNoID0gKCh1aW50KSgzKSk7CisJCQl3NS5MZWZ0QXR0YWNoID0gKCh1aW50 KSgxKSk7CisJCQl3NS5SaWdodEF0dGFjaCA9ICgodWludCkoMikpOworCQkJdzUuWE9wdGlvbnMg PSAoKGdsb2JhbDo6R3RrLkF0dGFjaE9wdGlvbnMpKDcpKTsKKwkJCXc1LllPcHRpb25zID0gKChn bG9iYWw6Okd0ay5BdHRhY2hPcHRpb25zKSg0KSk7CisJCQkvLyBDb250YWluZXIgY2hpbGQgd2Nm T3B0aW9ucy5HdGsuVGFibGUrVGFibGVDaGlsZAogCQkJdGhpcy5saXN0Q29sbGVjdGlvbiA9IGds b2JhbDo6R3RrLkNvbWJvQm94Lk5ld1RleHQgKCk7CiAJCQl0aGlzLmxpc3RDb2xsZWN0aW9uLk5h bWUgPSAibGlzdENvbGxlY3Rpb24iOwogCQkJdGhpcy53Y2ZPcHRpb25zLkFkZCAodGhpcy5saXN0 Q29sbGVjdGlvbik7Ci0JCQlnbG9iYWw6Okd0ay5UYWJsZS5UYWJsZUNoaWxkIHc0ID0gKChnbG9i YWw6Okd0ay5UYWJsZS5UYWJsZUNoaWxkKSh0aGlzLndjZk9wdGlvbnMgW3RoaXMubGlzdENvbGxl Y3Rpb25dKSk7Ci0JCQl3NC5MZWZ0QXR0YWNoID0gKCh1aW50KSgxKSk7Ci0JCQl3NC5SaWdodEF0 dGFjaCA9ICgodWludCkoMikpOwotCQkJdzQuWE9wdGlvbnMgPSAoKGdsb2JhbDo6R3RrLkF0dGFj aE9wdGlvbnMpKDcpKTsKLQkJCXc0LllPcHRpb25zID0gKChnbG9iYWw6Okd0ay5BdHRhY2hPcHRp b25zKSg0KSk7CisJCQlnbG9iYWw6Okd0ay5UYWJsZS5UYWJsZUNoaWxkIHc2ID0gKChnbG9iYWw6 Okd0ay5UYWJsZS5UYWJsZUNoaWxkKSh0aGlzLndjZk9wdGlvbnMgW3RoaXMubGlzdENvbGxlY3Rp b25dKSk7CisJCQl3Ni5MZWZ0QXR0YWNoID0gKCh1aW50KSgxKSk7CisJCQl3Ni5SaWdodEF0dGFj aCA9ICgodWludCkoMikpOworCQkJdzYuWE9wdGlvbnMgPSAoKGdsb2JhbDo6R3RrLkF0dGFjaE9w dGlvbnMpKDcpKTsKKwkJCXc2LllPcHRpb25zID0gKChnbG9iYWw6Okd0ay5BdHRhY2hPcHRpb25z KSg0KSk7CiAJCQl0aGlzLmRpYWxvZzFfVkJveC5BZGQgKHRoaXMud2NmT3B0aW9ucyk7Ci0JCQln bG9iYWw6Okd0ay5Cb3guQm94Q2hpbGQgdzUgPSAoKGdsb2JhbDo6R3RrLkJveC5Cb3hDaGlsZCko dGhpcy5kaWFsb2cxX1ZCb3ggW3RoaXMud2NmT3B0aW9uc10pKTsKLQkJCXc1LlBvc2l0aW9uID0g MDsKKwkJCWdsb2JhbDo6R3RrLkJveC5Cb3hDaGlsZCB3NyA9ICgoZ2xvYmFsOjpHdGsuQm94LkJv eENoaWxkKSh0aGlzLmRpYWxvZzFfVkJveCBbdGhpcy53Y2ZPcHRpb25zXSkpOworCQkJdzcuUG9z aXRpb24gPSAwOwogCQkJdGhpcy5BZGQgKHRoaXMuZGlhbG9nMV9WQm94KTsKIAkJCWlmICgodGhp cy5DaGlsZCAhPSBudWxsKSkgewogCQkJCXRoaXMuQ2hpbGQuU2hvd0FsbCAoKTsNCg0KTW9kaWZp ZWQ6IG1haW4vc3JjL2FkZGlucy9Nb25vRGV2ZWxvcC5XZWJSZWZlcmVuY2VzL2d0ay1ndWkvZ3Vp LnN0ZXRpYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KQEAgLTY0NiwxMiArNjQ2LDYgQEAKICAgICAgICAgICAgICAg PHBsYWNlaG9sZGVyIC8+CiAgICAgICAgICAgICA8L2NoaWxkPgogICAgICAgICAgICAgPGNoaWxk PgotICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIgLz4KLSAgICAgICAgICAgIDwvY2hpbGQ+Ci0g ICAgICAgICAgICA8Y2hpbGQ+Ci0gICAgICAgICAgICAgIDxwbGFjZWhvbGRlciAvPgotICAgICAg ICAgICAgPC9jaGlsZD4KLSAgICAgICAgICAgIDxjaGlsZD4KICAgICAgICAgICAgICAgPHdpZGdl dCBjbGFzcz0iR3RrLkNvbWJvQm94IiBpZD0iZGljdGlvbmFyeUNvbGxlY3Rpb24iPgogICAgICAg ICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJNZW1iZXJOYW1lIiAvPgogICAgICAgICAgICAgICAg IDxwcm9wZXJ0eSBuYW1lPSJJc1RleHRDb21ibyI+VHJ1ZTwvcHJvcGVydHk+CkBAIC03MTIsNiAr NzA2LDQ3IEBACiAgICAgICAgICAgICAgIDwvcGFja2luZz4KICAgICAgICAgICAgIDwvY2hpbGQ+ CiAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0ay5M YWJlbCIgaWQ9ImxhYmVsMyI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Ik1lbWJl ck5hbWUiIC8+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9IkxhYmVsUHJvcCIgdHJh bnNsYXRhYmxlPSJ5ZXMiPkFjY2VzcyBsZXZlbDo8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8 L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3Bl cnR5IG5hbWU9IlRvcEF0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3Bl cnR5IG5hbWU9IkJvdHRvbUF0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHBy b3BlcnR5IG5hbWU9IkF1dG9TaXplIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8 cHJvcGVydHkgbmFtZT0iWE9wdGlvbnMiPkZpbGw8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAg IDxwcm9wZXJ0eSBuYW1lPSJZT3B0aW9ucyI+RmlsbDwvcHJvcGVydHk+CisgICAgICAgICAgICAg ICAgPHByb3BlcnR5IG5hbWU9IlhFeHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAg ICAgICA8cHJvcGVydHkgbmFtZT0iWEZpbGwiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAg ICAgIDxwcm9wZXJ0eSBuYW1lPSJYU2hyaW5rIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAg ICAgICAgPHByb3BlcnR5IG5hbWU9IllFeHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAg ICAgICAgICA8cHJvcGVydHkgbmFtZT0iWUZpbGwiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAg ICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJZU2hyaW5rIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAg ICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hp bGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0ay5Db21ib0JveCIgaWQ9Imxpc3RB Y2Nlc3MiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJNZW1iZXJOYW1lIiAvPgor ICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJJc1RleHRDb21ibyI+VHJ1ZTwvcHJvcGVy dHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Ikl0ZW1zIiB0cmFuc2xhdGFibGU9 InllcyIgLz4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5n PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJUb3BBdHRhY2giPjI8L3Byb3BlcnR5 PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJCb3R0b21BdHRhY2giPjM8L3Byb3Bl cnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJMZWZ0QXR0YWNoIj4xPC9wcm9w ZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iUmlnaHRBdHRhY2giPjI8L3By b3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJBdXRvU2l6ZSI+RmFsc2U8 L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJYT3B0aW9ucyI+RXhw YW5kLCBTaHJpbmssIEZpbGw8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBu YW1lPSJZT3B0aW9ucyI+RmlsbDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5 IG5hbWU9IlhFeHBhbmQiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0 eSBuYW1lPSJYRmlsbCI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5 IG5hbWU9IlhTaHJpbmsiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0 eSBuYW1lPSJZRXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3Bl cnR5IG5hbWU9IllGaWxsIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVy dHkgbmFtZT0iWVNocmluayI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tp bmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgogICAgICAgICAg ICAgICA8d2lkZ2V0IGNsYXNzPSJHdGsuQ29tYm9Cb3giIGlkPSJsaXN0Q29sbGVjdGlvbiI+CiAg ICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Ik1lbWJlck5hbWUiIC8+CiAgICAgICAgICAg ICAgICAgPHByb3BlcnR5IG5hbWU9IklzVGV4dENvbWJvIj5UcnVlPC9wcm9wZXJ0eT4NCg0KTW9k aWZpZWQ6IG1haW4vc3JjL2FkZGlucy9WZXJzaW9uQ29udHJvbC9Nb25vRGV2ZWxvcC5WZXJzaW9u Q29udHJvbC5HaXQuVGVzdHMvQmFzZUdpdFJlcG9zaXRvcnlUZXN0cy5jcw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K QEAgLTMyLDE0ICszMiwxNCBAQAogdXNpbmcgTkdpdC5BcGk7DQogdXNpbmcgTlVuaXQuRnJhbWV3 b3JrOw0KIHVzaW5nIFN5c3RlbS5JTzsNCi11c2luZyBTeXN0ZW07DQogdXNpbmcgTkdpdC5TdG9y YWdlLkZpbGU7DQogdXNpbmcgTkdpdC5SZXZ3YWxrOw0KK3VzaW5nIFN5c3RlbS5MaW5xOw0KIA0K IG5hbWVzcGFjZSBNb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5HaXQuVGVzdHMNCiB7DQogCVtU ZXN0Rml4dHVyZV0NCi0JcHVibGljIGNsYXNzIEJhc2VHaXRVdGlsc1Rlc3QgOiBCYXNlUmVwb1V0 aWxzVGVzdA0KKwlzZWFsZWQgY2xhc3MgQmFzZUdpdFV0aWxzVGVzdCA6IEJhc2VSZXBvVXRpbHNU ZXN0DQogCXsNCiAJCVtTZXRVcF0NCiAJCXB1YmxpYyBvdmVycmlkZSB2b2lkIFNldHVwICgpDQpA QCAtNTEsMTEgKzUxLDExIEBAIHB1YmxpYyBvdmVycmlkZSB2b2lkIFNldHVwICgpCiAJCQlSZXBv TG9jYXRpb24gPSAiZmlsZTovLy8iICsgUm9vdFVybC5GdWxsUGF0aCArICJyZXBvLmdpdCI7DQog DQogCQkJLy8gSW5pdGlhbGl6ZSB0aGUgYmFyZSByZXBvLg0KLQkJCUluaXRDb21tYW5kIGNpID0g bmV3IEluaXRDb21tYW5kICgpOw0KKwkJCXZhciBjaSA9IG5ldyBJbml0Q29tbWFuZCAoKTsNCiAJ CQljaS5TZXREaXJlY3RvcnkgKG5ldyBTaGFycGVuLkZpbGVQYXRoIChSb290VXJsLkZ1bGxQYXRo ICsgInJlcG8uZ2l0IikpOw0KIAkJCWNpLlNldEJhcmUgKHRydWUpOw0KIAkJCWNpLkNhbGwgKCk7 DQotCQkJRmlsZVJlcG9zaXRvcnkgYmFyZSA9IG5ldyBGaWxlUmVwb3NpdG9yeSAobmV3IFNoYXJw ZW4uRmlsZVBhdGggKFJvb3RVcmwuRnVsbFBhdGggKyAicmVwby5naXQiKSk7DQorCQkJdmFyIGJh cmUgPSBuZXcgRmlsZVJlcG9zaXRvcnkgKG5ldyBTaGFycGVuLkZpbGVQYXRoIChSb290VXJsLkZ1 bGxQYXRoICsgInJlcG8uZ2l0IikpOw0KIAkJCXN0cmluZyBicmFuY2ggPSBDb25zdGFudHMuUl9I RUFEUyArICJtYXN0ZXIiOw0KIA0KIAkJCVJlZlVwZGF0ZSBoZWFkID0gYmFyZS5VcGRhdGVSZWYg KENvbnN0YW50cy5IRUFEKTsNCkBAIC0xMzIsMjEgKzEzMiwyMSBAQCBwdWJsaWMgb3ZlcnJpZGUg dm9pZCBNb3Zlc0RpcmVjdG9yeSAoKQogDQogCQlwcm90ZWN0ZWQgb3ZlcnJpZGUgUmV2aXNpb24g R2V0SGVhZFJldmlzaW9uICgpDQogCQl7DQotCQkJR2l0UmVwb3NpdG9yeSByZXBvMiA9IChHaXRS ZXBvc2l0b3J5KVJlcG87DQotCQkJUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrIChyZXBvMi5Sb290 UmVwb3NpdG9yeSk7DQorCQkJdmFyIHJlcG8yID0gKEdpdFJlcG9zaXRvcnkpUmVwbzsNCisJCQl2 YXIgcncgPSBuZXcgUmV2V2FsayAocmVwbzIuUm9vdFJlcG9zaXRvcnkpOw0KIAkJCU9iamVjdElk IGhlYWRJZCA9IHJlcG8yLlJvb3RSZXBvc2l0b3J5LlJlc29sdmUgKENvbnN0YW50cy5IRUFEKTsN CiAJCQlpZiAoaGVhZElkID09IG51bGwpDQogCQkJCXJldHVybiBudWxsOw0KIA0KIAkJCVJldkNv bW1pdCBjb21taXQgPSBydy5QYXJzZUNvbW1pdCAoaGVhZElkKTsNCi0JCQlHaXRSZXZpc2lvbiBy ZXYgPSBuZXcgR2l0UmV2aXNpb24gKFJlcG8sIHJlcG8yLlJvb3RSZXBvc2l0b3J5LCBjb21taXQu SWQuTmFtZSk7DQorCQkJdmFyIHJldiA9IG5ldyBHaXRSZXZpc2lvbiAoUmVwbywgcmVwbzIuUm9v dFJlcG9zaXRvcnksIGNvbW1pdC5JZC5OYW1lKTsNCiAJCQlyZXYuQ29tbWl0ID0gY29tbWl0Ow0K IAkJCXJldHVybiByZXY7DQogCQl9DQogDQogCQlwcm90ZWN0ZWQgb3ZlcnJpZGUgdm9pZCBQb3N0 Q29tbWl0IChSZXBvc2l0b3J5IHJlcG8pDQogCQl7DQotCQkJR2l0UmVwb3NpdG9yeSByZXBvMiA9 IChHaXRSZXBvc2l0b3J5KXJlcG87DQorCQkJdmFyIHJlcG8yID0gKEdpdFJlcG9zaXRvcnkpcmVw bzsNCiAJCQlyZXBvMi5QdXNoIChuZXcgTW9ub0RldmVsb3AuQ29yZS5Qcm9ncmVzc01vbml0b3Jp bmcuTnVsbFByb2dyZXNzTW9uaXRvciAoKSwgcmVwbzIuR2V0Q3VycmVudFJlbW90ZSAoKSwgcmVw bzIuR2V0Q3VycmVudEJyYW5jaCAoKSk7DQogCQl9DQogDQpAQCAtMTYxLDYgKzE2MSwxODMgQEAg cHJvdGVjdGVkIG92ZXJyaWRlIHZvaWQgQmxhbWVFeHRyYUludGVybmFscyAoQW5ub3RhdGlvbiBb XSBhbm5vdGF0aW9ucykKIAkJCUFzc2VydC5Jc1RydWUgKGFubm90YXRpb25zIFsyXS5IYXNEYXRl KTsNCiAJCX0NCiANCisJCVtUZXN0XQ0KKwkJcHVibGljIHZvaWQgVGVzdEdpdFN0YXNoICgpDQor CQl7DQorCQkJdmFyIHJlcG8yID0gKEdpdFJlcG9zaXRvcnkpUmVwbzsNCisJCQlBZGRGaWxlICgi ZmlsZTIiLCAibm90aGluZyIsIHRydWUsIHRydWUpOw0KKwkJCUFkZEZpbGUgKCJmaWxlMSIsICJ0 ZXh0IiwgdHJ1ZSwgZmFsc2UpOw0KKwkJCXJlcG8yLkdldFN0YXNoZXMgKCkuQ3JlYXRlIChuZXcg TnVsbFByb2dyZXNzTW9uaXRvciAoKSk7DQorCQkJQXNzZXJ0LklzVHJ1ZSAoIUZpbGUuRXhpc3Rz IChSb290Q2hlY2tvdXQgKyAiZmlsZTEiKSwgIlN0YXNoIGNyZWF0aW9uIGZhaWx1cmUiKTsNCisJ CQlyZXBvMi5HZXRTdGFzaGVzICgpLlBvcCAobmV3IE51bGxQcm9ncmVzc01vbml0b3IgKCkpOw0K Kw0KKwkJCVZlcnNpb25JbmZvIHZpID0gcmVwbzIuR2V0VmVyc2lvbkluZm8gKFJvb3RDaGVja291 dCArICJmaWxlMSIsIFZlcnNpb25JbmZvUXVlcnlGbGFncy5JZ25vcmVDYWNoZSk7DQorCQkJQXNz ZXJ0LkFyZUVxdWFsIChWZXJzaW9uU3RhdHVzLlNjaGVkdWxlZEFkZCwgdmkuU3RhdHVzICYgVmVy c2lvblN0YXR1cy5TY2hlZHVsZWRBZGQsICJTdGFzaCBwb3AgZmFpbHVyZSIpOw0KKwkJfQ0KKw0K KwkJW1Rlc3RdDQorCQlwdWJsaWMgdm9pZCBUZXN0R2l0QnJhbmNoQ3JlYXRpb24gKCkNCisJCXsN CisJCQl2YXIgcmVwbzIgPSAoR2l0UmVwb3NpdG9yeSlSZXBvOw0KKw0KKwkJCUFkZEZpbGUgKCJm aWxlMSIsICJ0ZXh0IiwgdHJ1ZSwgdHJ1ZSk7DQorCQkJcmVwbzIuQ3JlYXRlQnJhbmNoICgiYnJh bmNoMSIsIG51bGwpOw0KKw0KKwkJCXJlcG8yLlN3aXRjaFRvQnJhbmNoIChuZXcgTW9ub0RldmVs b3AuQ29yZS5Qcm9ncmVzc01vbml0b3JpbmcuTnVsbFByb2dyZXNzTW9uaXRvciAoKSwgImJyYW5j aDEiKTsNCisJCQlBc3NlcnQuQXJlRXF1YWwgKCJicmFuY2gxIiwgcmVwbzIuR2V0Q3VycmVudEJy YW5jaCAoKSk7DQorCQkJQXNzZXJ0LklzVHJ1ZSAoRmlsZS5FeGlzdHMgKFJvb3RDaGVja291dCAr ICJmaWxlMSIpLCAiQnJhbmNoIG5vdCBpbmhlcml0aW5nIGZyb20gY3VycmVudC4iKTsNCisNCisJ CQlBZGRGaWxlICgiZmlsZTIiLCAidGV4dCIsIHRydWUsIGZhbHNlKTsNCisJCQlyZXBvMi5DcmVh dGVCcmFuY2ggKCJicmFuY2gyIiwgbnVsbCk7DQorCQkJcmVwbzIuU3dpdGNoVG9CcmFuY2ggKG5l dyBNb25vRGV2ZWxvcC5Db3JlLlByb2dyZXNzTW9uaXRvcmluZy5OdWxsUHJvZ3Jlc3NNb25pdG9y ICgpLCAiYnJhbmNoMiIpOw0KKwkJCUFzc2VydC5Jc1RydWUgKCFGaWxlLkV4aXN0cyAoUm9vdENo ZWNrb3V0ICsgImZpbGUyIiksICJVbmNvbW1pdHRlZCBjaGFuZ2VzIHdlcmUgbm90IHN0YXNoZWQi KTsNCisJCQlyZXBvMi5HZXRTdGFzaGVzICgpLlBvcCAobmV3IE51bGxQcm9ncmVzc01vbml0b3Ig KCkpOw0KKw0KKwkJCUFzc2VydC5Jc1RydWUgKEZpbGUuRXhpc3RzIChSb290Q2hlY2tvdXQgKyAi ZmlsZTIiKSwgIlVuY29tbWl0dGVkIGNoYW5nZXMgd2VyZSBub3Qgc3Rhc2hlZCBjb3JyZWN0bHki KTsNCisNCisJCQlyZXBvMi5Td2l0Y2hUb0JyYW5jaCAobmV3IE1vbm9EZXZlbG9wLkNvcmUuUHJv Z3Jlc3NNb25pdG9yaW5nLk51bGxQcm9ncmVzc01vbml0b3IgKCksICJtYXN0ZXIiKTsNCisJCQly ZXBvMi5SZW1vdmVCcmFuY2ggKCJicmFuY2gxIik7DQorCQkJQXNzZXJ0LklzRmFsc2UgKHJlcG8y LkdldEJyYW5jaGVzICgpLkFueSAoYiA9PiBiLk5hbWUgPT0gImJyYW5jaDEiKSwgIkZhaWxlZCB0 byBkZWxldGUgYnJhbmNoIik7DQorDQorCQkJcmVwbzIuUmVuYW1lQnJhbmNoICgiYnJhbmNoMiIs ICJicmFuY2gzIik7DQorCQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuR2V0QnJhbmNoZXMgKCkuQW55 IChiID0+IGIuTmFtZSA9PSAiYnJhbmNoMyIpICYmIHJlcG8yLkdldEJyYW5jaGVzICgpLkFsbCAo YiA9PiBiLk5hbWUgIT0gImJyYW5jaDIiKSwgIkZhaWxlZCB0byByZW5hbWUgYnJhbmNoIik7DQor CQl9DQorDQorCQlbVGVzdF0NCisJCXB1YmxpYyB2b2lkIFRlc3RHaXRTeW5jQnJhbmNoZXMgKCkN CisJCXsNCisJCQl2YXIgcmVwbzIgPSAoR2l0UmVwb3NpdG9yeSlSZXBvOw0KKwkJCUFkZEZpbGUg KCJmaWxlMSIsICJ0ZXh0IiwgdHJ1ZSwgdHJ1ZSk7DQorCQkJUG9zdENvbW1pdCAocmVwbzIpOw0K Kw0KKwkJCXJlcG8yLkNyZWF0ZUJyYW5jaCAoImJyYW5jaDMiLCBudWxsKTsNCisJCQlyZXBvMi5T d2l0Y2hUb0JyYW5jaCAobmV3IE1vbm9EZXZlbG9wLkNvcmUuUHJvZ3Jlc3NNb25pdG9yaW5nLk51 bGxQcm9ncmVzc01vbml0b3IgKCksICJicmFuY2gzIik7DQorCQkJQWRkRmlsZSAoImZpbGUyIiwg ImFzZGYiLCB0cnVlLCB0cnVlKTsNCisJCQlyZXBvMi5QdXNoIChuZXcgTW9ub0RldmVsb3AuQ29y ZS5Qcm9ncmVzc01vbml0b3JpbmcuTnVsbFByb2dyZXNzTW9uaXRvciAoKSwgIm9yaWdpbiIsICJi cmFuY2gzIik7DQorDQorCQkJcmVwbzIuU3dpdGNoVG9CcmFuY2ggKG5ldyBNb25vRGV2ZWxvcC5D b3JlLlByb2dyZXNzTW9uaXRvcmluZy5OdWxsUHJvZ3Jlc3NNb25pdG9yICgpLCAibWFzdGVyIik7 DQorDQorCQkJcmVwbzIuQ3JlYXRlQnJhbmNoICgiYnJhbmNoNCIsICJvcmlnaW4vYnJhbmNoMyIp Ow0KKwkJCXJlcG8yLlN3aXRjaFRvQnJhbmNoIChuZXcgTW9ub0RldmVsb3AuQ29yZS5Qcm9ncmVz c01vbml0b3JpbmcuTnVsbFByb2dyZXNzTW9uaXRvciAoKSwgImJyYW5jaDQiKTsNCisJCQlBc3Nl cnQuSXNUcnVlIChGaWxlLkV4aXN0cyAoUm9vdENoZWNrb3V0ICsgImZpbGUyIiksICJUcmFja2lu ZyByZW1vdGUgaXMgbm90IGdyYWJiaW5nIGNvcnJlY3QgY29tbWl0cyIpOw0KKwkJfQ0KKw0KKwkJ W1Rlc3RdDQorCQlwdWJsaWMgdm9pZCBUZXN0UHVzaENoYW5nZXNldCAoKQ0KKwkJew0KKwkJCXZh ciByZXBvMiA9IChHaXRSZXBvc2l0b3J5KVJlcG87DQorCQkJQWRkRmlsZSAoImZpbGUiLCAibWVo IiwgdHJ1ZSwgdHJ1ZSk7DQorCQkJUG9zdENvbW1pdCAocmVwbzIpOw0KKw0KKwkJCUFkZEZpbGUg KCJmaWxlMSIsICJ0ZXh0IiwgdHJ1ZSwgdHJ1ZSk7DQorCQkJQWRkRmlsZSAoImZpbGUyIiwgInRl eHQyIiwgdHJ1ZSwgdHJ1ZSk7DQorDQorCQkJQ2hhbmdlU2V0IGRpZmYgPSByZXBvMi5HZXRQdXNo Q2hhbmdlU2V0ICgib3JpZ2luIiwgIm1hc3RlciIpOw0KKwkJCUFzc2VydC5BcmVFcXVhbCAoMiwg ZGlmZi5JdGVtcy5Db3VudCAoKSk7DQorDQorCQkJQ2hhbmdlU2V0SXRlbSBpdGVtID0gZGlmZi5H ZXRGaWxlSXRlbSAoUm9vdENoZWNrb3V0ICsgImZpbGUxIik7DQorCQkJQXNzZXJ0LklzTm90TnVs bCAoaXRlbSk7DQorCQkJQXNzZXJ0LkFyZUVxdWFsIChWZXJzaW9uU3RhdHVzLlNjaGVkdWxlZEFk ZCwgaXRlbS5TdGF0dXMgJiBWZXJzaW9uU3RhdHVzLlNjaGVkdWxlZEFkZCk7DQorDQorCQkJaXRl bSA9IGRpZmYuR2V0RmlsZUl0ZW0gKFJvb3RDaGVja291dCArICJmaWxlMSIpOw0KKwkJCUFzc2Vy dC5Jc05vdE51bGwgKGl0ZW0pOw0KKwkJCUFzc2VydC5BcmVFcXVhbCAoVmVyc2lvblN0YXR1cy5T Y2hlZHVsZWRBZGQsIGl0ZW0uU3RhdHVzICYgVmVyc2lvblN0YXR1cy5TY2hlZHVsZWRBZGQpOw0K KwkJfQ0KKw0KKwkJW1Rlc3RdDQorCQlbSWdub3JlICgiR2V0UHVzaERpZmYgY29udGVudCBpcyBh bHdheXMgZW1wdHkiKV0NCisJCXB1YmxpYyB2b2lkIFRlc3RQdXNoRGlmZiAoKQ0KKwkJew0KKwkJ CXZhciByZXBvMiA9IChHaXRSZXBvc2l0b3J5KVJlcG87DQorCQkJQWRkRmlsZSAoImZpbGUiLCAi bWVoIiwgdHJ1ZSwgdHJ1ZSk7DQorCQkJUG9zdENvbW1pdCAocmVwbzIpOw0KKw0KKwkJCUFkZEZp bGUgKCJmaWxlMSIsICJ0ZXh0IiwgdHJ1ZSwgdHJ1ZSk7DQorCQkJQWRkRmlsZSAoImZpbGUyIiwg InRleHQyIiwgdHJ1ZSwgdHJ1ZSk7DQorDQorCQkJRGlmZkluZm9bXSBkaWZmID0gcmVwbzIuR2V0 UHVzaERpZmYgKCJvcmlnaW4iLCAibWFzdGVyIik7DQorCQkJQXNzZXJ0LkFyZUVxdWFsICgyLCBk aWZmLkxlbmd0aCk7DQorDQorCQkJRGlmZkluZm8gaXRlbSA9IGRpZmYgWzBdOw0KKwkJCUFzc2Vy dC5Jc05vdE51bGwgKGl0ZW0pOw0KKwkJCUFzc2VydC5BcmVFcXVhbCAoImZpbGUxIiwgaXRlbS5G aWxlTmFtZS5GaWxlTmFtZSk7DQorCQkJLy9Bc3NlcnQuQXJlRXF1YWwgKCJ0ZXh0IiwgaXRlbS5D b250ZW50KTsNCisNCisJCQlpdGVtID0gZGlmZiBbMV07DQorCQkJQXNzZXJ0LklzTm90TnVsbCAo aXRlbSk7DQorCQkJQXNzZXJ0LkFyZUVxdWFsICgiZmlsZTIiLCBpdGVtLkZpbGVOYW1lLkZpbGVO YW1lKTsNCisJCQkvL0Fzc2VydC5BcmVFcXVhbCAoInRleHQyIiwgaXRlbS5Db250ZW50KTsNCisJ CX0NCisNCisJCXByb3RlY3RlZCBvdmVycmlkZSB2b2lkIFRlc3RWYWxpZFVybCAoKQ0KKwkJew0K KwkJCXZhciByZXBvMiA9IChHaXRSZXBvc2l0b3J5KVJlcG87DQorCQkJQXNzZXJ0LklzVHJ1ZSAo cmVwbzIuSXNVcmxWYWxpZCAoImdpdEBnaXRodWIuY29tOm1vbm8vbW9ub2RldmVsb3AiKSk7DQor CQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNVcmxWYWxpZCAoImdpdDovL2dpdGh1Yi5jb206ODAv bW9uby9tb25vZGV2ZWxvcC5naXQiKSk7DQorCQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNVcmxW YWxpZCAoInNzaDovL3VzZXJAaG9zdC5jb206ODAvbW9uby9tb25vZGV2ZWxvcC5naXQiKSk7DQor CQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNVcmxWYWxpZCAoImh0dHA6Ly9naXRodWIuY29tOjgw L21vbm8vbW9ub2RldmVsb3AuZ2l0IikpOw0KKwkJCUFzc2VydC5Jc1RydWUgKHJlcG8yLklzVXJs VmFsaWQgKCJodHRwczovL2dpdGh1Yi5jb206ODAvbW9uby9tb25vZGV2ZWxvcC5naXQiKSk7DQor CQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNVcmxWYWxpZCAoImZ0cDovL2dpdGh1Yi5jb206ODAv bW9uby9tb25vZGV2ZWxvcC5naXQiKSk7DQorCQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNVcmxW YWxpZCAoImZ0cHM6Ly9naXRodWIuY29tOjgwL21vbm8vbW9ub2RldmVsb3AuZ2l0IikpOw0KKwkJ CUFzc2VydC5Jc1RydWUgKHJlcG8yLklzVXJsVmFsaWQgKCJmaWxlOi8vL21vbm8vbW9ub2RldmVs b3AuZ2l0IikpOw0KKwkJCUFzc2VydC5Jc1RydWUgKHJlcG8yLklzVXJsVmFsaWQgKCJyc3luYzov L2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxwby5naXQiKSk7DQorCQl9DQorDQorCQlbVGVzdF0N CisJCXB1YmxpYyB2b2lkIFRlc3RSZW1vdGUgKCkNCisJCXsNCisJCQl2YXIgcmVwbzIgPSAoR2l0 UmVwb3NpdG9yeSlSZXBvOw0KKw0KKwkJCUFzc2VydC5BcmVFcXVhbCAoIm9yaWdpbiIsIHJlcG8y LkdldEN1cnJlbnRSZW1vdGUgKCkpOw0KKw0KKwkJCUFkZEZpbGUgKCJmaWxlMSIsICJ0ZXh0Iiwg dHJ1ZSwgdHJ1ZSk7DQorCQkJUG9zdENvbW1pdCAocmVwbzIpOw0KKwkJCXJlcG8yLkNyZWF0ZUJy YW5jaCAoImJyYW5jaDEiLCBudWxsKTsNCisJCQlyZXBvMi5Td2l0Y2hUb0JyYW5jaCAobmV3IE1v bm9EZXZlbG9wLkNvcmUuUHJvZ3Jlc3NNb25pdG9yaW5nLk51bGxQcm9ncmVzc01vbml0b3IgKCks ICJicmFuY2gxIik7DQorCQkJQWRkRmlsZSAoImZpbGUyIiwgInRleHQiLCB0cnVlLCB0cnVlKTsN CisJCQlQb3N0Q29tbWl0IChyZXBvMik7DQorCQkJQXNzZXJ0LkFyZUVxdWFsICgyLCByZXBvMi5H ZXRCcmFuY2hlcyAoKS5Db3VudCAoKSk7DQorCQkJQXNzZXJ0LkFyZUVxdWFsICgxLCByZXBvMi5H ZXRSZW1vdGVzICgpLkNvdW50ICgpKTsNCisNCisJCQlyZXBvMi5SZW5hbWVSZW1vdGUgKCJvcmln aW4iLCAib3RoZXIiKTsNCisJCQlBc3NlcnQuQXJlRXF1YWwgKCJvdGhlciIsIHJlcG8yLkdldEN1 cnJlbnRSZW1vdGUgKCkpOw0KKw0KKwkJCXJlcG8yLlJlbW92ZVJlbW90ZSAoIm90aGVyIik7DQor CQkJQXNzZXJ0LklzRmFsc2UgKHJlcG8yLkdldFJlbW90ZXMgKCkuQW55ICgpKTsNCisJCX0NCisN CisJCVtUZXN0XQ0KKwkJcHVibGljIHZvaWQgVGVzdElzTWVyZ2VkICgpDQorCQl7DQorCQkJdmFy IHJlcG8yID0gKEdpdFJlcG9zaXRvcnkpUmVwbzsNCisJCQlBZGRGaWxlICgiZmlsZTEiLCAidGV4 dCIsIHRydWUsIHRydWUpOw0KKw0KKwkJCUFzc2VydC5Jc1RydWUgKHJlcG8yLklzQnJhbmNoTWVy Z2VkICgibWFzdGVyIikpOw0KKw0KKwkJCXJlcG8yLkNyZWF0ZUJyYW5jaCAoImJyYW5jaDEiLCBu dWxsKTsNCisJCQlyZXBvMi5Td2l0Y2hUb0JyYW5jaCAobmV3IE1vbm9EZXZlbG9wLkNvcmUuUHJv Z3Jlc3NNb25pdG9yaW5nLk51bGxQcm9ncmVzc01vbml0b3IgKCksICJicmFuY2gxIik7DQorCQkJ QWRkRmlsZSAoImZpbGUyIiwgInRleHQiLCB0cnVlLCB0cnVlKTsNCisNCisJCQlyZXBvMi5Td2l0 Y2hUb0JyYW5jaCAobmV3IE1vbm9EZXZlbG9wLkNvcmUuUHJvZ3Jlc3NNb25pdG9yaW5nLk51bGxQ cm9ncmVzc01vbml0b3IgKCksICJtYXN0ZXIiKTsNCisJCQlBc3NlcnQuSXNGYWxzZSAocmVwbzIu SXNCcmFuY2hNZXJnZWQgKCJicmFuY2gxIikpOw0KKwkJCXJlcG8yLk1lcmdlICgiYnJhbmNoMSIs IEdpdFVwZGF0ZU9wdGlvbnMuTm9ybWFsVXBkYXRlLCBuZXcgTW9ub0RldmVsb3AuQ29yZS5Qcm9n cmVzc01vbml0b3JpbmcuTnVsbFByb2dyZXNzTW9uaXRvciAoKSk7DQorCQkJQXNzZXJ0LklzVHJ1 ZSAocmVwbzIuSXNCcmFuY2hNZXJnZWQgKCJicmFuY2gxIikpOw0KKwkJfQ0KKw0KKwkJW1Rlc3Rd DQorCQlwdWJsaWMgdm9pZCBUZXN0VGFncyAoKQ0KKwkJew0KKwkJCXZhciByZXBvMiA9IChHaXRS ZXBvc2l0b3J5KVJlcG87DQorCQkJQWRkRmlsZSAoImZpbGUxIiwgInRleHQiLCB0cnVlLCB0cnVl KTsNCisJCQlyZXBvMi5BZGRUYWcgKCJ0YWcxIiwgR2V0SGVhZFJldmlzaW9uICgpLCAibXktdGFn Iik7DQorCQkJQXNzZXJ0LkFyZUVxdWFsICgxLCByZXBvMi5HZXRUYWdzICgpLkNvdW50ICgpKTsN CisJCQlBc3NlcnQuQXJlRXF1YWwgKCJ0YWcxIiwgcmVwbzIuR2V0VGFncyAoKS5GaXJzdCAoKSk7 DQorCQkJcmVwbzIuUmVtb3ZlVGFnICgidGFnMSIpOw0KKwkJCUFzc2VydC5BcmVFcXVhbCAoMCwg cmVwbzIuR2V0VGFncyAoKS5Db3VudCAoKSk7DQorCQl9DQorDQorCQkvLyBUT0RPOiBUZXN0IHJl YmFzZSBhbmQgbWVyZ2UgLSBUaGlzIGlzIGJyb2tlbiBvbiBXaW5kb3dzDQorDQogCQlwcm90ZWN0 ZWQgb3ZlcnJpZGUgUmVwb3NpdG9yeSBHZXRSZXBvIChzdHJpbmcgcGF0aCwgc3RyaW5nIHVybCkN CiAJCXsNCiAJCQlyZXR1cm4gbmV3IEdpdFJlcG9zaXRvcnkgKHBhdGgsIHVybCk7DQ0KDQpNb2Rp ZmllZDogbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZlbG9wLlZlcnNpb25D b250cm9sLkdpdC5UZXN0cy9CYXNlUmVwb3NpdG9yeVRlc3RzLmNzDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAt MzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIE1vbm9EZXZlbG9wLlZlcnNpb25Db250cm9sLlRlc3Rz CiB7CiAJW1Rlc3RGaXh0dXJlXQotCXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlUmVwb1V0aWxz VGVzdAorCWFic3RyYWN0IGNsYXNzIEJhc2VSZXBvVXRpbHNUZXN0CiAJewogCQkvLyBbR2l0XSBT ZXQgdXNlciBhbmQgZW1haWwuCiAJCXByb3RlY3RlZCBjb25zdCBzdHJpbmcgQXV0aG9yID0gImF1 dGhvciI7CkBAIC0xMjUsNiArMTI1LDE0IEBAIHB1YmxpYyB2b2lkIFJpZ2h0UmVwb3NpdG9yeURl dGVjdGlvbiAoKQogCQlwcm90ZWN0ZWQgYWJzdHJhY3QgTlVuaXQuRnJhbWV3b3JrLkNvbnN0cmFp bnRzLklSZXNvbHZlQ29uc3RyYWludCBJc0NvcnJlY3RUeXBlICgpOwogCiAJCVtUZXN0XQorCQlw dWJsaWMgdm9pZCBVcmxJc1ZhbGlkICgpCisJCXsKKwkJCVRlc3RWYWxpZFVybCAoKTsKKwkJfQor CisJCXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIFRlc3RWYWxpZFVybCAoKTsKKworCQlbVGVzdF0K IAkJLy8gVGVzdHMgUmVwb3NpdG9yeS5DaGVja291dC4KIAkJcHVibGljIHZvaWQgQ2hlY2tvdXRF eGlzdHMgKCkKIAkJew0KDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9s L01vbm9EZXZlbG9wLlZlcnNpb25Db250cm9sLkdpdC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJv bC5HaXQvR2l0UmVwb3NpdG9yeS5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTE1NTcsNyArMTU1Nyw3IEBA IHB1YmxpYyBDaGFuZ2VTZXQgR2V0UHVzaENoYW5nZVNldCAoc3RyaW5nIHJlbW90ZSwgc3RyaW5n IGJyYW5jaCkKIAkJCUNoYW5nZVNldCBjc2V0ID0gQ3JlYXRlQ2hhbmdlU2V0IChSb290UGF0aCk7 CiAJCQlPYmplY3RJZCBjaWQxID0gUm9vdFJlcG9zaXRvcnkuUmVzb2x2ZSAocmVtb3RlICsgIi8i ICsgYnJhbmNoKTsKIAkJCU9iamVjdElkIGNpZDIgPSBSb290UmVwb3NpdG9yeS5SZXNvbHZlIChS b290UmVwb3NpdG9yeS5HZXRCcmFuY2ggKCkpOwotCQkJUmV2V2FsayBydyA9IG5ldyBSZXZXYWxr IChSb290UmVwb3NpdG9yeSk7CisJCQlSZXZXYWxrCXJ3ID0gbmV3IFJldldhbGsgKFJvb3RSZXBv c2l0b3J5KTsKIAkJCVJldkNvbW1pdCBjMSA9IHJ3LlBhcnNlQ29tbWl0IChjaWQxKTsKIAkJCVJl dkNvbW1pdCBjMiA9IHJ3LlBhcnNlQ29tbWl0IChjaWQyKTsKIAkJCQpAQCAtMTU4OSw3ICsxNTg5 LDcgQEAgcHVibGljIERpZmZJbmZvW10gR2V0UHVzaERpZmYgKHN0cmluZyByZW1vdGUsIHN0cmlu ZyBicmFuY2gpCiAJCQlSZXZDb21taXQgYzIgPSBydy5QYXJzZUNvbW1pdCAoY2lkMik7CiAJCQkK IAkJCUxpc3Q8RGlmZkluZm8+IGRpZmZzID0gbmV3IExpc3Q8RGlmZkluZm8+ICgpOwotCQkJZm9y ZWFjaCAodmFyIGNoYW5nZSBpbiBHaXRVdGlsLkNvbXBhcmVDb21taXRzIChSb290UmVwb3NpdG9y eSwgYzEsIGMyKSkgeworCQkJZm9yZWFjaCAodmFyIGNoYW5nZSBpbiBHaXRVdGlsLkNvbXBhcmVD b21taXRzIChSb290UmVwb3NpdG9yeSwgYzIsIGMxKSkgewogCQkJCXN0cmluZyBkaWZmOwogCQkJ CXN3aXRjaCAoY2hhbmdlLkdldENoYW5nZVR5cGUgKCkpIHsKIAkJCQljYXNlIERpZmZFbnRyeS5D aGFuZ2VUeXBlLkRFTEVURToNCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2FkZGlucy9WZXJzaW9uQ29u dHJvbC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5TdWJ2ZXJzaW9uLlRlc3RzL0Jhc2VTdm5S ZXBvc2l0b3J5VGVzdHMuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC0zMyw5ICszMyw5IEBACiBuYW1lc3Bh Y2UgTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuU3VidmVyc2lvbi5UZXN0cw0KIHsNCiAJW1Rl c3RGaXh0dXJlXQ0KLQlwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZVN2blV0aWxzVGVzdCA6IEJh c2VSZXBvVXRpbHNUZXN0DQorCWFic3RyYWN0IGNsYXNzIEJhc2VTdm5VdGlsc1Rlc3QgOiBCYXNl UmVwb1V0aWxzVGVzdA0KIAl7DQotCQlwcm90ZWN0ZWQgUHJvY2VzcyBzdm5TZXJ2ZSA9IG51bGw7 DQorCQlwcm90ZWN0ZWQgUHJvY2VzcyBTdm5TZXJ2ZSA9IG51bGw7DQogDQogCQlbU2V0VXBdDQog CQlwdWJsaWMgb3ZlcnJpZGUgdm9pZCBTZXR1cCAoKQ0KQEAgLTU5LDEzICs1OSwxMyBAQCBwdWJs aWMgb3ZlcnJpZGUgdm9pZCBTZXR1cCAoKQogCQkJLy8gQ3JlYXRlIGhvc3QgKFdpbjMyKQ0KIAkJ CS8vIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciBkb2luZyB0aGUgc3ZuQWRtaW4gY3JlYXRp b24uDQogCQkJLy8gQW5kIGJlZm9yZSBjaGVja291dC4NCi0JCQlpZiAoc3ZuU2VydmUgIT0gbnVs bCkgew0KKwkJCWlmIChTdm5TZXJ2ZSAhPSBudWxsKSB7DQogCQkJCWluZm8gPSBuZXcgUHJvY2Vz c1N0YXJ0SW5mbyAoKTsNCiAJCQkJaW5mby5GaWxlTmFtZSA9ICJzdm5zZXJ2ZSI7DQogCQkJCWlu Zm8uQXJndW1lbnRzID0gIi1kciAiICsgUm9vdFVybDsNCiAJCQkJaW5mby5XaW5kb3dTdHlsZSA9 IFByb2Nlc3NXaW5kb3dTdHlsZS5IaWRkZW47DQotCQkJCXN2blNlcnZlLlN0YXJ0SW5mbyA9IGlu Zm87DQotCQkJCXN2blNlcnZlLlN0YXJ0ICgpOw0KKwkJCQlTdm5TZXJ2ZS5TdGFydEluZm8gPSBp bmZvOw0KKwkJCQlTdm5TZXJ2ZS5TdGFydCAoKTsNCiANCiAJCQkJLy8gQ3JlYXRlIHVzZXIgdG8g YXV0aC4NCiAJCQkJdXNpbmcgKHZhciBwZXJtID0gRmlsZS4gQ3JlYXRlVGV4dCAoUm9vdFVybCAr IFBhdGguRGlyZWN0b3J5U2VwYXJhdG9yQ2hhciArICJyZXBvIiArDQpAQCAtOTMsNiArOTMsMTUg QEAgcHJvdGVjdGVkIG92ZXJyaWRlIE5Vbml0LkZyYW1ld29yay5Db25zdHJhaW50cy5JUmVzb2x2 ZUNvbnN0cmFpbnQgSXNDb3JyZWN0VHlwZQogCQkJcmV0dXJuIElzLkluc3RhbmNlT2Y8U3VidmVy c2lvblJlcG9zaXRvcnk+ICgpOw0KIAkJfQ0KIA0KKwkJcHJvdGVjdGVkIG92ZXJyaWRlIHZvaWQg VGVzdFZhbGlkVXJsICgpDQorCQl7DQorCQkJdmFyIHJlcG8yID0gKFN1YnZlcnNpb25SZXBvc2l0 b3J5KVJlcG87DQorCQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNVcmxWYWxpZCAoInN2bjovL3N2 bnJlcG8uY29tOjgwL3JlcG8iKSk7DQorCQkJQXNzZXJ0LklzVHJ1ZSAocmVwbzIuSXNVcmxWYWxp ZCAoInN2bitzc2g6Ly91c2VyQGhvc3QuY29tOjgwL3JlcG8iKSk7DQorCQkJQXNzZXJ0LklzVHJ1 ZSAocmVwbzIuSXNVcmxWYWxpZCAoImh0dHA6Ly9zdm5yZXBvLmNvbTo4MC9yZXBvIikpOw0KKwkJ CUFzc2VydC5Jc1RydWUgKHJlcG8yLklzVXJsVmFsaWQgKCJodHRwczovL3N2bnJlcG8uY29tOjgw L3JlcG8iKSk7DQorCQl9DQorDQogCQlwcm90ZWN0ZWQgb3ZlcnJpZGUgUmV2aXNpb24gR2V0SGVh ZFJldmlzaW9uICgpDQogCQl7DQogCQkJcmV0dXJuIFN2blJldmlzaW9uLkhlYWQ7DQ0KDQpNb2Rp ZmllZDogbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZlbG9wLlZlcnNpb25D b250cm9sLlN1YnZlcnNpb24uVGVzdHMvUmVwb3NpdG9yeVRlc3RzLmNzDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpA QCAtMzYsNyArMzYsNyBAQAogbmFtZXNwYWNlIFZlcnNpb25Db250cm9sLlN1YnZlcnNpb24uVW5p eC5UZXN0cwogewogCVtUZXN0Rml4dHVyZV0KLQlwdWJsaWMgY2xhc3MgVW5peFN2blV0aWxzVGVz dCA6IE1vbm9EZXZlbG9wLlZlcnNpb25Db250cm9sLlN1YnZlcnNpb24uVGVzdHMuQmFzZVN2blV0 aWxzVGVzdAorCXNlYWxlZCBjbGFzcyBVbml4U3ZuVXRpbHNUZXN0IDogTW9ub0RldmVsb3AuVmVy c2lvbkNvbnRyb2wuU3VidmVyc2lvbi5UZXN0cy5CYXNlU3ZuVXRpbHNUZXN0CiAJewogCQlTdWJ2 ZXJzaW9uQmFja2VuZCBTdm5DbGllbnQgewogCQkJZ2V0IHsgcmV0dXJuIFJlcG8uU3ZuOyB9CkBA IC0xMjcsNiArMTI3LDEyIEBAIHByb3RlY3RlZCBvdmVycmlkZSB2b2lkIFBvc3RVbmxvY2sgKCkK IAkJCX0pOwogCQl9CiAKKwkJcHJvdGVjdGVkIG92ZXJyaWRlIHZvaWQgVGVzdFZhbGlkVXJsICgp CisJCXsKKwkJCWJhc2UuVGVzdFZhbGlkVXJsICgpOworCQkJQXNzZXJ0LklzVHJ1ZSAoUmVwby5J c1VybFZhbGlkICgiZmlsZTovLy9kaXIvcmVwbyIpKTsKKwkJfQorCiAJCXByb3RlY3RlZCBvdmVy cmlkZSBSZXBvc2l0b3J5IEdldFJlcG8gKHN0cmluZyBwYXRoLCBzdHJpbmcgdXJsKQogCQl7CiAJ CQlyZXR1cm4gbmV3IFN1YnZlcnNpb25SZXBvc2l0b3J5IChuZXcgU3ZuQ2xpZW50ICgpLCB1cmws IHBhdGgpOw0KDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL1N1YnZl cnNpb24uV2luMzIuVGVzdHMvUmVwb3NpdG9yeVRlc3RzLmNzDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMzYs MjEgKzM2LDIxIEBACiBuYW1lc3BhY2UgTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuU3VidmVy c2lvbi5UZXN0cw0KIHsNCiAJW1Rlc3RGaXh0dXJlXQ0KLQlwdWJsaWMgY2xhc3MgU2hhcnBTdm5V dGlsc1Rlc3QgOiBCYXNlU3ZuVXRpbHNUZXN0DQorCXNlYWxlZCBjbGFzcyBTaGFycFN2blV0aWxz VGVzdCA6IEJhc2VTdm5VdGlsc1Rlc3QNCiAJew0KIAkJW1NldFVwXQ0KIAkJcHVibGljIG92ZXJy aWRlIHZvaWQgU2V0dXAgKCkNCiAJCXsNCiAJCQlSb290VXJsID0gbmV3IEZpbGVQYXRoIChGaWxl U2VydmljZS5DcmVhdGVUZW1wRGlyZWN0b3J5ICgpKTsNCiAJCQlSZXBvTG9jYXRpb24gPSAic3Zu Oi8vbG9jYWxob3N0OjM2OTAvcmVwbyI7DQotCQkJc3ZuU2VydmUgPSBuZXcgUHJvY2VzcyAoKTsN CisJCQlTdm5TZXJ2ZSA9IG5ldyBQcm9jZXNzICgpOw0KIAkJCWJhc2UuU2V0dXAgKCk7DQogCQl9 DQogDQogCQlbVGVhckRvd25dDQogCQlwdWJsaWMgb3ZlcnJpZGUgdm9pZCBUZWFyRG93biAoKQ0K IAkJew0KLQkJCXN2blNlcnZlLktpbGwgKCk7DQorCQkJU3ZuU2VydmUuS2lsbCAoKTsNCiANCiAJ CQliYXNlLlRlYXJEb3duICgpOw0KIAkJfQ0KQEAgLTExNyw2ICsxMTcsMTYgQEAgcHJvdGVjdGVk IG92ZXJyaWRlIHZvaWQgUG9zdFVubG9jayAoKQogCQkJfSk7DQogCQl9DQogDQorCQlbVGVzdF0N CisJCXByb3RlY3RlZCBvdmVycmlkZSB2b2lkIFRlc3RWYWxpZFVybCAoKQ0KKwkJew0KKwkJCWJh c2UuVGVzdFZhbGlkVXJsICgpOw0KKw0KKwkJCUFzc2VydC5JZ25vcmUgKCJGaWxlIHNjaGVtZSBp cyBicm9rZW4gb24gV2luZG93cyIpOw0KKwkJCXZhciByZXBvMiA9IChTdWJ2ZXJzaW9uUmVwb3Np dG9yeSlSZXBvOw0KKwkJCUFzc2VydC5Jc1RydWUgKHJlcG8yLklzVXJsVmFsaWQgKCJmaWxlOi8v L2M6L2Rpci9yZXBvIikpOw0KKwkJfQ0KKw0KIAkJcHJvdGVjdGVkIG92ZXJyaWRlIFJlcG9zaXRv cnkgR2V0UmVwbyAoc3RyaW5nIHBhdGgsIHN0cmluZyB1cmwpDQogCQl7DQogCQkJcmV0dXJuIG5l dyBTdWJ2ZXJzaW9uUmVwb3NpdG9yeSAobmV3IFN2blNoYXJwQ2xpZW50ICgpLCB1cmwsIHBhdGgp Ow0NCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuQ29yZS9Nb25vRGV2ZWxv cC5Db3JlLldlYi9DcmVkZW50aWFsU3RvcmUuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC03LDEzICs3LDYg QEAgbmFtZXNwYWNlIE1vbm9EZXZlbG9wLkNvcmUuV2ViCiAJY2xhc3MgQ3JlZGVudGlhbFN0b3Jl IDogSUNyZWRlbnRpYWxDYWNoZQogCXsKIAkJcmVhZG9ubHkgQ29uY3VycmVudERpY3Rpb25hcnk8 VXJpLCBJQ3JlZGVudGlhbHM+IGNyZWRlbnRpYWxDYWNoZSA9IG5ldyBDb25jdXJyZW50RGljdGlv bmFyeTxVcmksIElDcmVkZW50aWFscz4gKCk7Ci0JCXN0YXRpYyByZWFkb25seSBDcmVkZW50aWFs U3RvcmUgaW5zdGFuY2UgPSBuZXcgQ3JlZGVudGlhbFN0b3JlICgpOw0KLQ0KLQkJcHVibGljIHN0 YXRpYyBDcmVkZW50aWFsU3RvcmUgSW5zdGFuY2UgewotCQkJZ2V0IHsKLQkJCQlyZXR1cm4gaW5z dGFuY2U7Ci0JCQl9Ci0JCX0KIAogCQlwdWJsaWMgSUNyZWRlbnRpYWxzIEdldENyZWRlbnRpYWxz IChVcmkgdXJpLCBDcmVkZW50aWFsVHlwZSBjcmVkZW50aWFsVHlwZSkNCiAJCXsNDQoNCk1vZGlm aWVkOiBtYWluL3NyYy9jb3JlL01vbm9EZXZlbG9wLkNvcmUvTW9ub0RldmVsb3AuQ29yZS5XZWIv SUNyZWRlbnRpYWxQcm92aWRlci5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTEwLDcgKzEwLDcgQEAgbmFt ZXNwYWNlIE1vbm9EZXZlbG9wLkNvcmUuV2ViCiAJcHVibGljIGludGVyZmFjZSBJQ3JlZGVudGlh bFByb3ZpZGVyCiAJewogCQkvLy8gPHN1bW1hcnk+Ci0JCS8vLyBSZXR1cm5zIENyZWRlbnRpYWxT dGF0ZSBzdGF0ZSB0aGF0IGxldCdzIHRoZSBjb25zdW1lciBrbm93IGlmIElDcmVkZW50aWFscwor CQkvLy8gUmV0dXJucyBDcmVkZW50aWFsU3RhdGUgc3RhdGUgdGhhdCBsZXRzIHRoZSBjb25zdW1l ciBrbm93IGlmIElDcmVkZW50aWFscwogCQkvLy8gd2VyZSBkaXNjb3ZlcmVkIGJ5IHRoZSBJQ3Jl ZGVudGlhbFByb3ZpZGVyLiBUaGUgY3JlZGVudGlhbHMgYXJndW1lbnQgaXMgdGhlbgogCQkvLy8g cG9wdWxhdGVkIHdpdGggdGhlIGRpc2NvdmVyZWQgdmFsaWQgY3JlZGVudGlhbHMgdGhhdCBjYW4g YmUgdXNlZCBmb3IgdGhlIGdpdmVuIFVyaS4KIAkJLy8vIFRoZSBwcm94eSBpbnN0YW5jZSBpZiBw YXNzZWQgd2lsbCBiZSB1c2VkIHRvIGVuc3VyZSB0aGF0IHRoZSByZXF1ZXN0IGdvZXMgdGhyb3Vn aCB0aGUgcHJveHkNCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuQ29yZS9N b25vRGV2ZWxvcC5Db3JlLldlYi9Qcm94eUNhY2hlLmNzDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMTQsMTUg KzE0LDYgQEAgY2xhc3MgUHJveHlDYWNoZSA6IElQcm94eUNhY2hlCiAJCXN0YXRpYyByZWFkb25s eSBJV2ViUHJveHkgb3JpZ2luYWxTeXN0ZW1Qcm94eSA9IFdlYlJlcXVlc3QuR2V0U3lzdGVtV2Vi UHJveHkgKCk7CiAKIAkJcmVhZG9ubHkgQ29uY3VycmVudERpY3Rpb25hcnk8VXJpLCBXZWJQcm94 eT4gY2FjaGUgPSBuZXcgQ29uY3VycmVudERpY3Rpb25hcnk8VXJpLCBXZWJQcm94eT4gKCk7Ci0J CXN0YXRpYyByZWFkb25seSBMYXp5PFByb3h5Q2FjaGU+IGluc3RhbmNlID0gbmV3IExhenk8UHJv eHlDYWNoZT4gKCgpID0+IG5ldyBQcm94eUNhY2hlICgpKTsKLQotCQlwdWJsaWMgc3RhdGljIFBy b3h5Q2FjaGUgSW5zdGFuY2UgewotCQkJZ2V0IHsKLQkJCQlyZXR1cm4gaW5zdGFuY2UuVmFsdWU7 Ci0JCQl9Ci0JCX0KLQotCQlQcm94eUNhY2hlICgpIHt9CiAKIAkJcHVibGljIElXZWJQcm94eSBH ZXRQcm94eSAoVXJpIHVyaSkKIAkJew0KDQpNb2RpZmllZDogbWFpbi9zcmMvY29yZS9Nb25vRGV2 ZWxvcC5Db3JlL01vbm9EZXZlbG9wLkNvcmUuV2ViL1JlcXVlc3RIZWxwZXIuY3MNCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCkBAIC0xMyw5ICsxMyw5IEBAIHB1YmxpYyBzdGF0aWMgY2xhc3MgUmVxdWVzdEhlbHBlcgog CQkvLy8gPC9zdW1tYXJ5Pg0KIAkJaW50ZXJuYWwgc3RhdGljIFdlYlJlc3BvbnNlIEdldFJlc3Bv bnNlIChGdW5jPFdlYlJlcXVlc3Q+IGNyZWF0ZVJlcXVlc3QsIEFjdGlvbjxXZWJSZXF1ZXN0PiBw cmVwYXJlUmVxdWVzdCkNCiAJCXsNCi0JCQl2YXIgcHJveHlDYWNoZSA9IFdlYlNlcnZpY2UuSW5z dGFuY2UuUHJveHlDYWNoZTsNCi0JCQl2YXIgY3JlZGVudGlhbENhY2hlID0gV2ViU2VydmljZS5J bnN0YW5jZS5DcmVkZW50aWFsQ2FjaGU7DQotCQkJdmFyIGNyZWRlbnRpYWxQcm92aWRlciA9IFdl YlNlcnZpY2UuSW5zdGFuY2UuQ3JlZGVudGlhbFByb3ZpZGVyOw0KKwkJCXZhciBwcm94eUNhY2hl ID0gV2ViU2VydmljZS5Qcm94eUNhY2hlOworCQkJdmFyIGNyZWRlbnRpYWxDYWNoZSA9IFdlYlNl cnZpY2UuQ3JlZGVudGlhbENhY2hlOworCQkJdmFyIGNyZWRlbnRpYWxQcm92aWRlciA9IFdlYlNl cnZpY2UuQ3JlZGVudGlhbFByb3ZpZGVyOwogDQogCQkJSHR0cFdlYlJlcXVlc3QgcHJldmlvdXNS ZXF1ZXN0ID0gbnVsbDsNCiAJCQlJSHR0cFdlYlJlc3BvbnNlIHByZXZpb3VzUmVzcG9uc2UgPSBu dWxsOw0NCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuQ29yZS9Nb25vRGV2 ZWxvcC5Db3JlLldlYi9XZWJTZXJ2aWNlLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMjMsNDAgKzIzLDQy IEBACiAvLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogLy8gVEhF IFNPRlRXQVJFLgorCiB1c2luZyBTeXN0ZW07CiB1c2luZyBTeXN0ZW0uTGlucTsKIAogdXNpbmcg TW9uby5BZGRpbnM7Cit1c2luZyBTeXN0ZW0uTmV0OwogCiBuYW1lc3BhY2UgTW9ub0RldmVsb3Au Q29yZS5XZWIKIHsKLQlwdWJsaWMgY2xhc3MgV2ViU2VydmljZQorCXB1YmxpYyBzdGF0aWMgY2xh c3MgV2ViU2VydmljZQogCXsKIAkJY29uc3Qgc3RyaW5nIFdlYkNyZWRlbnRpYWxQcm92aWRlcnNQ YXRoID0gIi9Nb25vRGV2ZWxvcC9Db3JlL1dlYkNyZWRlbnRpYWxQcm92aWRlcnMiOwogCi0JCXN0 YXRpYyByZWFkb25seSBMYXp5PFdlYlNlcnZpY2U+IGluc3RhbmNlID0gbmV3IExhenk8V2ViU2Vy dmljZT4gKCgpID0+IG5ldyBXZWJTZXJ2aWNlICgpKTsKKwkJcHVibGljIHN0YXRpYyBJUHJveHlD YWNoZSBQcm94eUNhY2hlIHsgZ2V0OyBwcml2YXRlIHNldDsgfQorCQlwdWJsaWMgc3RhdGljIElD cmVkZW50aWFsQ2FjaGUgQ3JlZGVudGlhbENhY2hlIHsgZ2V0OyBwcml2YXRlIHNldDsgfQorCQlw dWJsaWMgc3RhdGljIElDcmVkZW50aWFsUHJvdmlkZXIgQ3JlZGVudGlhbFByb3ZpZGVyIHsgZ2V0 OyBwcml2YXRlIHNldDsgfQogCi0JCXB1YmxpYyBzdGF0aWMgV2ViU2VydmljZSBJbnN0YW5jZSB7 Ci0JCQlnZXQgewotCQkJCXJldHVybiBpbnN0YW5jZS5WYWx1ZTsKLQkJCX0KLQkJfQorCQlpbnRl cm5hbCBzdGF0aWMgdm9pZCBJbml0aWFsaXplICgpCisJCXsKKwkJCUNyZWRlbnRpYWxDYWNoZSA9 IG5ldyBDcmVkZW50aWFsU3RvcmUgKCk7CisJCQlQcm94eUNhY2hlID0gbmV3IFByb3h5Q2FjaGUg KCk7CisJCQlDcmVkZW50aWFsUHJvdmlkZXIgPSBBZGRpbk1hbmFnZXIuR2V0RXh0ZW5zaW9uT2Jq ZWN0czxJQ3JlZGVudGlhbFByb3ZpZGVyPiAoV2ViQ3JlZGVudGlhbFByb3ZpZGVyc1BhdGgpLkZp cnN0T3JEZWZhdWx0ICgpOwogCi0JCXB1YmxpYyBJUHJveHlDYWNoZSBQcm94eUNhY2hlIHsgZ2V0 OyBzZXQ7IH0KLQkJcHVibGljIElDcmVkZW50aWFsQ2FjaGUgQ3JlZGVudGlhbENhY2hlIHsgZ2V0 OyBzZXQ7IH0KLQkJcHVibGljIElDcmVkZW50aWFsUHJvdmlkZXIgQ3JlZGVudGlhbFByb3ZpZGVy IHsgZ2V0OyBzZXQ7IH0KKwkJCWlmIChDcmVkZW50aWFsUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJ CUxvZ2dpbmdTZXJ2aWNlLkxvZ1dhcm5pbmcgKCJObyBwcm94eSBjcmVkZW50aWFsIHByb3ZpZGVy IHdhcyBmb3VuZCIpOwogCi0JCVdlYlNlcnZpY2UgKCkge30KKwkJCX0KKwkJfQogCi0JCXB1Ymxp YyBzdGF0aWMgdm9pZCBJbml0aWFsaXplICgpCisJCWNsYXNzIE51bGxDcmVkZW50aWFsc1Byb3Zp ZGVyIDogSUNyZWRlbnRpYWxQcm92aWRlcgogCQl7Ci0JCQkvLyBXZSBjYW4gYWNjZXNzIGV4dGVu c2lvbiBwb2ludHMgbm93LCBzbyB3ZSBuZWVkIHRvIGdldCB0aGUgY3JlZGVudGlhbCBwcm92aWRl ciwgd2hpY2ggaXMgcGxhdGZvcm0tc3BlY2lmaWMuCi0JCQkvLyBUaGUgY3JlZGVudGlhbCBjYWNo ZSBhbmQgcHJveHkgY2FjaGUgYXJlIHB1cmUgbWFuYWdlZCBpbXBsZW1lbnRhdGlvbi4KLQkJCUlu c3RhbmNlLkNyZWRlbnRpYWxDYWNoZSA9IENyZWRlbnRpYWxTdG9yZS5JbnN0YW5jZTsKLQkJCUlu c3RhbmNlLlByb3h5Q2FjaGUgPSBXZWIuUHJveHlDYWNoZS5JbnN0YW5jZTsKLQotCQkJLy8gR2V0 IHRoZSBmaXJzdCByZWdpc3RlcmVkIGNyZWRlbnRpYWwgcHJvdmlkZXIKLQkJCUluc3RhbmNlLkNy ZWRlbnRpYWxQcm92aWRlciA9IEFkZGluTWFuYWdlci5HZXRFeHRlbnNpb25PYmplY3RzPElDcmVk ZW50aWFsUHJvdmlkZXI+IChXZWJDcmVkZW50aWFsUHJvdmlkZXJzUGF0aCkuRmlyc3RPckRlZmF1 bHQgKCk7CisJCQlwdWJsaWMgSUNyZWRlbnRpYWxzIEdldENyZWRlbnRpYWxzICgKKwkJCQlVcmkg dXJpLCBJV2ViUHJveHkgcHJveHksIENyZWRlbnRpYWxUeXBlIGNyZWRlbnRpYWxUeXBlLCBJQ3Jl ZGVudGlhbHMgZXhpc3RpbmdDcmVkZW50aWFscywgYm9vbCByZXRyeWluZykKKwkJCXsKKwkJCQly ZXR1cm4gbnVsbDsKKwkJCX0KIAkJfQogCX0KIH0NCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2NvcmUv TW9ub0RldmVsb3AuQ29yZS9Nb25vRGV2ZWxvcC5Db3JlLmNzcHJvag0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAg LTEyLDkgKzEyLDYgQEAKICAgICA8QnVpbGRJbmZvPi4uXC4uXC4uXGJ1aWxkXGJpblxidWlsZGlu Zm88L0J1aWxkSW5mbz4KICAgICA8VmNSZXZpc2lvbj4uLlwuLlwuLlx2Y3JldmlzaW9uPC9WY1Jl dmlzaW9uPgogICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0i JyQoQlVJTERfUkVWSVNJT04pJyAhPSAnJyI+Ci0gICAgICA8RGVmaW5lQ29uc3RhbnRzPiQoRGVm aW5lQ29uc3RhbnRzKTtFTkFCTEVfUkFZR1VOPC9EZWZpbmVDb25zdGFudHM+Ci0gIDwvUHJvcGVy dHlHcm91cD4KICAgPENob29zZT4KICAgICA8V2hlbiBDb25kaXRpb249IiBFeGlzdHMoJ2M6XFBy b2dyYW0gRmlsZXNcR2l0XGJpblxnaXQuZXhlJykgIj4KICAgICAgIDxQcm9wZXJ0eUdyb3VwPgpA QCAtNzEsNiArNjgsOSBAQAogICAgIDxHZW5lcmF0ZURvY3VtZW50YXRpb24+dHJ1ZTwvR2VuZXJh dGVEb2N1bWVudGF0aW9uPgogICAgIDxOb1dhcm4+MTU5MTsxNTczPC9Ob1dhcm4+CiAgIDwvUHJv cGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChCVUlMRF9SRVZJU0lP TiknICE9ICcnIj4KKyAgICA8RGVmaW5lQ29uc3RhbnRzPiQoRGVmaW5lQ29uc3RhbnRzKTtFTkFC TEVfUkFZR1VOPC9EZWZpbmVDb25zdGFudHM+CisgIDwvUHJvcGVydHlHcm91cD4KICAgPEl0ZW1H cm91cD4KICAgICA8UmVmZXJlbmNlIEluY2x1ZGU9IlN5c3RlbSIgLz4KICAgICA8UmVmZXJlbmNl IEluY2x1ZGU9Ik1vbm8uUG9zaXgiIC8+DQoNCk1vZGlmaWVkOiBtYWluL3NyYy9jb3JlL01vbm9E ZXZlbG9wLkNvcmUvTW9ub0RldmVsb3AuQ29yZS9Mb2dnaW5nU2VydmljZS5jcw0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KQEAgLTE4MSwyMCArMTgxLDYgQEAgaW50ZXJuYWwgc3RhdGljIHZvaWQgUmVwb3J0VW5oYW5k bGVkRXhjZXB0aW9uIChFeGNlcHRpb24gZXgsIGJvb2wgd2lsbFNodXREb3duLAogCQkJCWlmIChS ZXBvcnRDcmFzaGVzLkhhc1ZhbHVlICYmICFSZXBvcnRDcmFzaGVzLlZhbHVlKQogCQkJCQlyZXR1 cm47CiAKLQkJCQlieXRlW10gZGF0YTsKLQkJCQl1c2luZyAodmFyIHN0cmVhbSA9IG5ldyBNZW1v cnlTdHJlYW0gKCkpIHsKLQkJCQkJdXNpbmcgKHZhciB3cml0ZXIgPSBTeXN0ZW0uWG1sLlhtbFdy aXRlci5DcmVhdGUgKHN0cmVhbSkpIHsKLQkJCQkJCXdyaXRlci5Xcml0ZVN0YXJ0RWxlbWVudCAo IkNyYXNoTG9nIik7Ci0JCQkJCQl3cml0ZXIuV3JpdGVBdHRyaWJ1dGVTdHJpbmcgKCJ2ZXJzaW9u IiwgU2VydmljZVZlcnNpb24pOwotCi0JCQkJCQl3cml0ZXIuV3JpdGVFbGVtZW50U3RyaW5nICgi U3lzdGVtSW5mb3JtYXRpb24iLCBTeXN0ZW1JbmZvcm1hdGlvbi5HZXRUZXh0RGVzY3JpcHRpb24g KCkpOwotCQkJCQkJd3JpdGVyLldyaXRlRWxlbWVudFN0cmluZyAoIkV4Y2VwdGlvbiIsIGV4LlRv U3RyaW5nICgpKTsKLQotCQkJCQkJd3JpdGVyLldyaXRlRW5kRWxlbWVudCAoKTsKLQkJCQkJfQot CQkJCQlkYXRhID0gc3RyZWFtLlRvQXJyYXkgKCk7Ci0JCQkJfQotCiAJCQkJdmFyIGN1c3RvbURh dGEgPSBuZXcgSGFzaHRhYmxlICgpOwogCQkJCWN1c3RvbURhdGFbIlN5c3RlbUluZm9ybWF0aW9u Il0gPSBTeXN0ZW1JbmZvcm1hdGlvbi5HZXRUZXh0RGVzY3JpcHRpb24gKCk7CiAKQEAgLTIwNCwx NyArMTkwLDYgQEAgaW50ZXJuYWwgc3RhdGljIHZvaWQgUmVwb3J0VW5oYW5kbGVkRXhjZXB0aW9u IChFeGNlcHRpb24gZXgsIGJvb2wgd2lsbFNodXREb3duLAogCQkJCQl9KTsKIAkJCQl9CiAKLQkJ CQkvLyBMb2cgdG8gZGlzayBvbmx5IGlmIHVwbG9hZGluZyBmYWlscy4KLQkJCQl2YXIgZmlsZW5h bWUgPSBzdHJpbmcuRm9ybWF0ICgiezB9LnsxfS57Mn0uY3Jhc2hsb2ciLCBEYXRlVGltZS5VdGNO b3cuVG9TdHJpbmcgKCJ5eXl5LU1NLWRkX19ISC1tbS1zcyIpLCBTeXN0ZW1JbmZvcm1hdGlvbi5T ZXNzaW9uVXVpZCwgSW50ZXJsb2NrZWQuSW5jcmVtZW50IChyZWYgQ3Jhc2hJZCkpOwotCQkJCVRo cmVhZFBvb2wuUXVldWVVc2VyV29ya0l0ZW0gKGRlbGVnYXRlIHsKLQkJCQkJaWYgKCFUcnlVcGxv YWRSZXBvcnQgKGZpbGVuYW1lLCBkYXRhKSkgewotCQkJCQkJaWYgKCFEaXJlY3RvcnkuRXhpc3Rz IChDcmFzaExvZ0RpcmVjdG9yeSkpCi0JCQkJCQkJRGlyZWN0b3J5LkNyZWF0ZURpcmVjdG9yeSAo Q3Jhc2hMb2dEaXJlY3RvcnkpOwotCi0JCQkJCQlGaWxlLldyaXRlQWxsQnl0ZXMgKENyYXNoTG9n RGlyZWN0b3J5LkNvbWJpbmUgKGZpbGVuYW1lKSwgZGF0YSk7Ci0JCQkJCX0KLQkJCQl9KTsKLQog CQkJCS8vZW5zdXJlIHdlIGRvbid0IGxvc2UgdGhlIHNldHRpbmcKIAkJCQlpZiAoUmVwb3J0Q3Jh c2hlcyAhPSBvbGRSZXBvcnRDcmFzaGVzKSB7CiAJCQkJCVByb3BlcnR5U2VydmljZS5TYXZlUHJv cGVydGllcyAoKTsNCg0KTW9kaWZpZWQ6IG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuQ29yZS9N b25vRGV2ZWxvcC5Db3JlL1J1bnRpbWUuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC04NSw3ICs4NSw3IEBA IHB1YmxpYyBzdGF0aWMgdm9pZCBJbml0aWFsaXplIChib29sIHVwZGF0ZUFkZGluUmVnaXN0cnkp CiAJCQkJU3luY2hyb25pemF0aW9uQ29udGV4dC5TZXRTeW5jaHJvbml6YXRpb25Db250ZXh0IChu ZXcgU3luY2hyb25pemF0aW9uQ29udGV4dCAoKSk7CiAKIAkJCS8vIEhvb2sgdXAgdGhlIFNTTCBj ZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGNvZGVwYXRoCi0JCQlTeXN0ZW0uTmV0LlNlcnZpY2VQb2lu dE1hbmFnZXIuU2VydmVyQ2VydGlmaWNhdGVWYWxpZGF0aW9uQ2FsbGJhY2sgKz0gZGVsZWdhdGUo b2JqZWN0IHNlbmRlciwgWDUwOUNlcnRpZmljYXRlIGNlcnRpZmljYXRlLCBYNTA5Q2hhaW4gY2hh aW4sIFNzbFBvbGljeUVycm9ycyBzc2xQb2xpY3lFcnJvcnMpIHsKKwkJCVNlcnZpY2VQb2ludE1h bmFnZXIuU2VydmVyQ2VydGlmaWNhdGVWYWxpZGF0aW9uQ2FsbGJhY2sgKz0gZGVsZWdhdGUob2Jq ZWN0IHNlbmRlciwgWDUwOUNlcnRpZmljYXRlIGNlcnRpZmljYXRlLCBYNTA5Q2hhaW4gY2hhaW4s IFNzbFBvbGljeUVycm9ycyBzc2xQb2xpY3lFcnJvcnMpIHsKIAkJCQlpZiAoc3NsUG9saWN5RXJy b3JzID09IFNzbFBvbGljeUVycm9ycy5Ob25lKQogCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCQkKQEAg LTExMiw2ICsxMTIsNyBAQCBwdWJsaWMgc3RhdGljIHZvaWQgSW5pdGlhbGl6ZSAoYm9vbCB1cGRh dGVBZGRpblJlZ2lzdHJ5KQogCQkJCUNvdW50ZXJzLlJ1bnRpbWVJbml0aWFsaXphdGlvbi5UcmFj ZSAoIkluaXRpYWxpemVkIEFkZGluIE1hbmFnZXIiKTsKIAkJCQkKIAkJCQlQcm9wZXJ0eVNlcnZp Y2UuSW5pdGlhbGl6ZSAoKTsKKwkJCQlXZWJTZXJ2aWNlLkluaXRpYWxpemUgKCk7CiAJCQkJCiAJ CQkJLy9oYXZlIHRvIGRvIHRoaXMgYWZ0ZXIgdGhlIGFkZGluIHNlcnZpY2UgYW5kIHByb3BlcnR5 IHNlcnZpY2UgaGF2ZSBpbml0aWFsaXplZAogCQkJCWlmIChVc2VyRGF0YU1pZ3JhdGlvblNlcnZp Y2UuSGFzU291cmNlKSB7CkBAIC0xMjQsOCArMTI1LDYgQEAgcHVibGljIHN0YXRpYyB2b2lkIElu aXRpYWxpemUgKGJvb2wgdXBkYXRlQWRkaW5SZWdpc3RyeSkKIAkJCQlDb3VudGVycy5SdW50aW1l SW5pdGlhbGl6YXRpb24uVHJhY2UgKCJJbml0aWFsaXppbmcgQXNzZW1ibHkgU2VydmljZSIpOwog CQkJCXN5c3RlbUFzc2VtYmx5U2VydmljZSA9IG5ldyBTeXN0ZW1Bc3NlbWJseVNlcnZpY2UgKCk7 CiAJCQkJc3lzdGVtQXNzZW1ibHlTZXJ2aWNlLkluaXRpYWxpemUgKCk7Ci0KLQkJCQlXZWJTZXJ2 aWNlLkluaXRpYWxpemUgKCk7CiAJCQkJCiAJCQkJaW5pdGlhbGl6ZWQgPSB0cnVlOwogCQkJCQ0K DQpNb2RpZmllZDogbWFpbi9zcmMvY29yZS9Nb25vRGV2ZWxvcC5JZGUvTW9ub0RldmVsb3AuSWRl LlR5cGVTeXN0ZW0vVHlwZVN5c3RlbVNlcnZpY2UuY3MNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC0xMTI4LDE5 ICsxMTI4LDI1IEBAIHB1YmxpYyB2b2lkIEluZm9ybUZpbGVBZGRlZCAoUGFyc2VkRmlsZUV2ZW50 QXJncyBlKQogCiAJCQlbTm9uU2VyaWFsaXplZF0KIAkJCWludCBsb2FkT3BlcmF0aW9uRGVwdGgg PSAwOworCQkJW05vblNlcmlhbGl6ZWRdCisJCQlyZWFkb25seSBvYmplY3QgbG9hZE9wZXJhdGlv bkxvY2tlciA9IG5ldyBvYmplY3QgKCk7CiAKLQkJCWludGVybmFsIGludCBMb2FkT3BlcmF0aW9u RGVwdGggewotCQkJCWdldCB7Ci0JCQkJCXJldHVybiBsb2FkT3BlcmF0aW9uRGVwdGg7Ci0JCQkJ fQotCQkJCXNldCB7Ci0JCQkJCWxvYWRPcGVyYXRpb25EZXB0aCA9IHZhbHVlOwotCQkJCQlpZiAo bG9hZE9wZXJhdGlvbkRlcHRoIDwgMCkKLQkJCQkJCXRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9u RXhjZXB0aW9uICgpOwotCQkJCQlPbkxvYWQgKEV2ZW50QXJncy5FbXB0eSk7CisJCQlpbnRlcm5h bCB2b2lkIEJlZ2luTG9hZE9wZXJhdGlvbiAoKQorCQkJeworCQkJCWxvY2sgKGxvYWRPcGVyYXRp b25Mb2NrZXIpIHsKKwkJCQkJbG9hZE9wZXJhdGlvbkRlcHRoKys7CiAJCQkJfQogCQkJfQogCisJ CQlpbnRlcm5hbCB2b2lkIEVuZExvYWRPcGVyYXRpb24gKCkKKwkJCXsKKwkJCQlsb2NrIChsb2Fk T3BlcmF0aW9uTG9ja2VyKSB7CisJCQkJCWlmIChsb2FkT3BlcmF0aW9uRGVwdGggPiAwKSB7CisJ CQkJCQlsb2FkT3BlcmF0aW9uRGVwdGgtLTsKKwkJCQkJfQorCQkJCX0KKwkJCQlPbkxvYWQgKEV2 ZW50QXJncy5FbXB0eSk7CisJCQl9CiAJCQlib29sIGluTG9hZDsKIAkJCXB1YmxpYyBib29sIElu TG9hZCB7CiAJCQkJZ2V0IHsKQEAgLTEyNjksNyArMTI3NSw3IEBAIHB1YmxpYyBMYXp5UHJvamVj dExvYWRlciAoUHJvamVjdENvbnRlbnRXcmFwcGVyIHdyYXBwZXIpCiAJCQkJCXRoaXMud3JhcHBl ciA9IHdyYXBwZXI7CiAJCQkJCWNvbnRleHRUYXNrID0gVGFzay5GYWN0b3J5LlN0YXJ0TmV3IChk ZWxlZ2F0ZSB7CiAJCQkJCQl0cnkgewotCQkJCQkJCXRoaXMud3JhcHBlci5Mb2FkT3BlcmF0aW9u RGVwdGgrKzsKKwkJCQkJCQl0aGlzLndyYXBwZXIuQmVnaW5Mb2FkT3BlcmF0aW9uICgpOwogCQkJ CQkJCXZhciBwID0gdGhpcy53cmFwcGVyLlByb2plY3Q7CiAJCQkJCQkJdmFyIGNvbnRleHQgPSBM b2FkUHJvamVjdENhY2hlIChwKTsKIApAQCAtMTI4OCw3ICsxMjk0LDcgQEAgcHVibGljIExhenlQ cm9qZWN0TG9hZGVyIChQcm9qZWN0Q29udGVudFdyYXBwZXIgd3JhcHBlcikKIAkJCQkJCQlRdWV1 ZVBhcnNlSm9iICh0aGlzLndyYXBwZXIpOwogCQkJCQkJCXJldHVybiBjb250ZXh0OwogCQkJCQkJ fSBmaW5hbGx5IHsKLQkJCQkJCQl0aGlzLndyYXBwZXIuTG9hZE9wZXJhdGlvbkRlcHRoLS07CisJ CQkJCQkJdGhpcy53cmFwcGVyLkVuZExvYWRPcGVyYXRpb24gKCk7CiAJCQkJCQl9CiAJCQkJCX0p OwogCQkJCX0KQEAgLTE3MzAsNyArMTczNiw4IEBAIGludGVybmFsIHN0YXRpYyB2b2lkIFVubG9h ZFByb2plY3QgKFByb2plY3QgcHJvamVjdCkKIAkJCQkKIAkJCVByb2plY3RDb250ZW50V3JhcHBl ciB3cmFwcGVyOwogCQkJbG9jayAocHJvamVjdFdyYXBwZXJVcGRhdGVMb2NrKSB7Ci0JCQkJd3Jh cHBlciA9IHByb2plY3RDb250ZW50cyBbcHJvamVjdF07CisJCQkJaWYgKCFwcm9qZWN0Q29udGVu dHMuVHJ5R2V0VmFsdWUgKHByb2plY3QsIG91dCB3cmFwcGVyKSkKKwkJCQkJcmV0dXJuOwogCQkJ CXByb2plY3RDb250ZW50cy5SZW1vdmUgKHByb2plY3QpOwogCQkJfQogCQkJU3RvcmVQcm9qZWN0 Q2FjaGUgKHByb2plY3QsIHdyYXBwZXIpOwpAQCAtMjE1NSw3ICsyMTYyLDEwIEBAIGludGVybmFs IHZvaWQgRW5zdXJlQXNzZW1ibHlMb2FkZWQgKCkKIAkJCQlsb2NrIChhc21Mb2NrZXIpIHsKIAkJ CQkJaWYgKGFzc2VtYmx5ICE9IG51bGwpCiAJCQkJCQlyZXR1cm47Ci0JCQkJCWFzc2VtYmx5ID0g TG9hZEFzc2VtYmx5ICgpID8/IG5ldyBEZWZhdWx0VW5yZXNvbHZlZEFzc2VtYmx5IChmaWxlTmFt ZSk7CisJCQkJCWFzc2VtYmx5ID0gbmV3IERlZmF1bHRVbnJlc29sdmVkQXNzZW1ibHkgKGZpbGVO YW1lKTsKKworCQkJCQlhc3NlbWJseSA9IExvYWRBc3NlbWJseSAoKSA/PyBhc3NlbWJseTsgCisK IAkJCQkJT25Mb2FkIChFdmVudEFyZ3MuRW1wdHkpOwogCQkJCX0KIAkJCX0KQEAgLTI1MzcsNyAr MjU0Nyw3IEBAIHB1YmxpYyB2b2lkIFJ1biAoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQogCQkJ CVR5cGVTeXN0ZW1QYXJzZXIgcGFyc2VyID0gbnVsbDsKIAkJCQl2YXIgdGFncyA9IENvbnRleHQu R2V0RXh0ZW5zaW9uT2JqZWN0IDxQcm9qZWN0Q29tbWVudFRhZ3M+ICgpOwogCQkJCXRyeSB7Ci0J CQkJCUNvbnRleHQuTG9hZE9wZXJhdGlvbkRlcHRoKys7CisJCQkJCUNvbnRleHQuQmVnaW5Mb2Fk T3BlcmF0aW9uICgpOwogCQkJCQlmb3JlYWNoICh2YXIgZmlsZSBpbiAoRmlsZUxpc3QgPz8gQ29u dGV4dC5Qcm9qZWN0LkZpbGVzKSkgewogCQkJCQkJdmFyIGZpbGVOYW1lID0gZmlsZS5GaWxlUGF0 aDsKIAkJCQkJCWlmIChmaWxlc1NraXBwZWRJblBhcnNlVGhyZWFkLkFueSAoZiA9PiBmID09IGZp bGVOYW1lKSkKQEAgLTI1NTgsNyArMjU2OCw3IEBAIHB1YmxpYyB2b2lkIFJ1biAoSVByb2dyZXNz TW9uaXRvciBtb25pdG9yKQogCQkJCQkJQ29udGV4dC5JbmZvcm1GaWxlQWRkZWQgKG5ldyBQYXJz ZWRGaWxlRXZlbnRBcmdzIChwYXJzZWREb2N1bWVudC5QYXJzZWRGaWxlKSk7CiAJCQkJCX0KIAkJ CQl9IGZpbmFsbHkgewotCQkJCQlDb250ZXh0LkxvYWRPcGVyYXRpb25EZXB0aC0tOworCQkJCQlD b250ZXh0LkVuZExvYWRPcGVyYXRpb24gKCk7CiAJCQkJfQogCQkJfQogCQl9CkBAIC0yNjE0LDcg KzI2MjQsNyBAQCBzdGF0aWMgdm9pZCBRdWV1ZVBhcnNlSm9iIChQcm9qZWN0Q29udGVudFdyYXBw ZXIgY29udGV4dCwgSUVudW1lcmFibGU8UHJvamVjdEZpbAogCQkJfTsKIAkJCWxvY2sgKHBhcnNl UXVldWVMb2NrKSB7CiAJCQkJUmVtb3ZlUGFyc2VKb2IgKGNvbnRleHQpOwotCQkJCWNvbnRleHQu TG9hZE9wZXJhdGlvbkRlcHRoKys7CisJCQkJY29udGV4dC5CZWdpbkxvYWRPcGVyYXRpb24gKCk7 CiAJCQkJcGFyc2VRdWV1ZUluZGV4IFtjb250ZXh0XSA9IGpvYjsKIAkJCQlwYXJzZVF1ZXVlLkVu cXVldWUgKGpvYik7CiAJCQkJcGFyc2VFdmVudC5TZXQgKCk7CkBAIC0yNjUyLDcgKzI2NjIsNyBA QCBzdGF0aWMgdm9pZCBSZW1vdmVQYXJzZUpvYiAoUHJvamVjdENvbnRlbnRXcmFwcGVyIHByb2pl Y3QpCiAJCQkJUGFyc2luZ0pvYiBqb2I7CiAJCQkJaWYgKHBhcnNlUXVldWVJbmRleC5UcnlHZXRW YWx1ZSAocHJvamVjdCwgb3V0IGpvYikpIHsKIAkJCQkJcGFyc2VRdWV1ZUluZGV4LlJlbW92ZSAo cHJvamVjdCk7Ci0JCQkJCXByb2plY3QuTG9hZE9wZXJhdGlvbkRlcHRoLS07CisJCQkJCXByb2pl Y3QuRW5kTG9hZE9wZXJhdGlvbiAoKTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTI3MDUsNyArMjcx NSw3IEBAIHN0YXRpYyB2b2lkIENoZWNrTW9kaWZpZWRGaWxlcyAoUHJvamVjdCBwcm9qZWN0LCBQ cm9qZWN0RmlsZVtdIHByb2plY3RGaWxlcywgUHJvCiAJCXsKIAkJCWNvbnRlbnQuUnVuV2hlbkxv YWRlZCAoZGVsZWdhdGUoSVByb2plY3RDb250ZW50IGNudCkgewogCQkJCXRyeSB7Ci0JCQkJCWNv bnRlbnQuTG9hZE9wZXJhdGlvbkRlcHRoKys7CisJCQkJCWNvbnRlbnQuQmVnaW5Mb2FkT3BlcmF0 aW9uICgpOwogCQkJCQl2YXIgbW9kaWZpZWRGaWxlcyA9IG5ldyBMaXN0PFByb2plY3RGaWxlPiAo KTsKIAkJCQkJdmFyIG9sZEZpbGVOZXdGaWxlID0gbmV3IExpc3Q8VHVwbGU8UHJvamVjdEZpbGUs IElVbnJlc29sdmVkRmlsZT4+ICgpOwogCkBAIC0yNzQ3LDcgKzI3NTcsNyBAQCBzdGF0aWMgdm9p ZCBDaGVja01vZGlmaWVkRmlsZXMgKFByb2plY3QgcHJvamVjdCwgUHJvamVjdEZpbGVbXSBwcm9q ZWN0RmlsZXMsIFBybwogCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAJCQkJCUxvZ2dpbmdT ZXJ2aWNlLkxvZ0Vycm9yICgiRXhjZXB0aW9uIGluIGNoZWNrIG1vZGlmaWVkIGZpbGVzLiIsIGUp OwogCQkJCX0gZmluYWxseSB7Ci0JCQkJCWNvbnRlbnQuTG9hZE9wZXJhdGlvbkRlcHRoLS07CisJ CQkJCWNvbnRlbnQuRW5kTG9hZE9wZXJhdGlvbiAoKTsKIAkJCQl9CiAKIAkJCX0pOwpAQCAtMjgy MCw3ICsyODMwLDcgQEAgc3RhdGljIHZvaWQgQ29uc3VtZVBhcnNpbmdRdWV1ZSAoKQogCQkJCQkJ CQltb25pdG9yID0gR2V0UGFyc2VQcm9ncmVzc01vbml0b3IgKCk7CiAJCQkJCQkJbW9uaXRvci5S ZXBvcnRFcnJvciAobnVsbCwgZXgpOwogCQkJCQkJfSBmaW5hbGx5IHsKLQkJCQkJCQlqb2IuQ29u dGV4dC5Mb2FkT3BlcmF0aW9uRGVwdGgtLTsKKwkJCQkJCQlqb2IuQ29udGV4dC5FbmRMb2FkT3Bl cmF0aW9uICgpOwogCQkJCQkJfQogCQkJCQl9CiAJCQkJCQ0KDQpNb2RpZmllZDogbWFpbi90ZXN0 cy9Vbml0VGVzdHMvTW9ub0RldmVsb3AuQ1NoYXJwQmluZGluZy9PblRoZUZseUZvcm1hdHRlclRl c3RzLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQpAQCAtMjczLDYgKzI3MywyMSBAQCBwdWJsaWMgdm9pZCBUZXN0 QnVnMTYxNzRfVmlydHVhbEluZGVudCAoKQogCQkJCUNvbnNvbGUuV3JpdGVMaW5lIChuZXdUZXh0 KTsKIAkJCUFzc2VydC5BcmVFcXVhbCAoZXhwZWN0ZWQsIG5ld1RleHQpOwogCQl9CisKKworCQkv Ly8gPHN1bW1hcnk+CisJCS8vLyBCdWcgMTYyODMgLSBXcm9uZyBsaXRlcmFsIHN0cmluZyBhZGRp dGlvbgorCQkvLy8gPC9zdW1tYXJ5PgorCQlbVGVzdF0KKwkJcHVibGljIHZvaWQgVGVzdEJ1ZzE2 MjgzICgpCisJCXsKKwkJCVRlc3RWaWV3Q29udGVudCBjb250ZW50OworCQkJdmFyIGV4dCA9IFNl dHVwICgiJFwiXFxkZXZcXG51bGwgezB9XCIiLCBvdXQgY29udGVudCk7CisJCQljb250ZW50Lkdl dFRleHRFZGl0b3JEYXRhICgpLkluc2VydCAoMCwgIkAiKTsKKwkJCWV4dC5LZXlQcmVzcyAoKEdk ay5LZXkpJ0AnLCAnQCcsIEdkay5Nb2RpZmllclR5cGUuTm9uZSk7CisJCQl2YXIgbmV3VGV4dCA9 IGNvbnRlbnQuVGV4dDsKKwkJCUFzc2VydC5BcmVFcXVhbCAoIkBcIlxcZGV2XG51bGwgezB9XCIi LCBuZXdUZXh0KTsKKwkJfQogCX0KIH0KIA0KDQpNb2RpZmllZDogbWFpbi94YnVpbGQuaW5jbHVk ZQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KQEAgLTE0LDcgKzE0LDcgQEAgUFJPRklMRV9OQU1FPURlYnVnV2luMzIK IGVuZGlmCiAKIFhCVUlMRD14YnVpbGQKLVhCVUlMRF9WRVJCT1NJVFk9cXVpZXQKK1hCVUlMRF9W RVJCT1NJVFk9bm9ybWFsCiBYQlVJTERfQVJHUz0vdmVyYm9zaXR5OiQoWEJVSUxEX1ZFUkJPU0lU WSkgL25vbG9nbyAvcHJvcGVydHk6Q29kZVBhZ2U9NjUwMDEKIFhCVUlMRF9QUk9GSUxFPS9wcm9w ZXJ0eTpDb25maWd1cmF0aW9uPSQoUFJPRklMRV9OQU1FKQogDQpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNb25vLXBhdGNoZXMgbWFpbGxpc3QgIC0gIE1v bm8tcGF0Y2hlc0BsaXN0cy54aW1pYW4uY29tCmh0dHA6Ly9saXN0cy54aW1pYW4uY29tL21haWxt YW4vbGlzdGluZm8vbW9uby1wYXRjaGVzCg==