[mono/monodevelop] [17 commits] 00967611: 16307 - reset motion after actions
| Newsgroups | gmane.comp.gnome.mono.patches |
|---|---|
| Message-ID | <000001427b8c9aa2-7febb55c-6ff0-4a84-94de-37a34b396c44-000000@email.amazonses.com> |
DQogICBCcmFuY2g6IHJlZnMvaGVhZHMvbW9ub2RldmVsb3AtNC4zLjAtYnJhbmNoDQogICAgIEhv bWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wDQogIENvbXBhcmU6IGh0dHBz Oi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbXBhcmUvMGFmZmQwYWM0YjUxLi4uNDc5 OWYxYzIyYmVjDQoNCiAgIENvbW1pdDogMDA5Njc2MTEzNmRlNDc3N2NhZmRjODMwNzlmMmM4YjM0 OTQzYWI4ZA0KICAgQXV0aG9yOiBram5pbHNzb24gPGtqbmlsc3NvbkBnbWFpbC5jb20+IChram5p bHNzb24pDQogICAgIERhdGU6IDIwMTMtMTEtMTkgMTk6NDk6MTAgR01UDQogICAgICBVUkw6IGh0 dHBzOi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbW1pdC8wMDk2NzYxMTM2ZGU0Nzc3 Y2FmZGM4MzA3OWYyYzhiMzQ5NDNhYjhkDQoNCjE2MzA3IC0gcmVzZXQgbW90aW9uIGFmdGVyIGFj dGlvbnMNCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1haW4vc3JjL2NvcmUvTW9uby5UZXh0ZWRpdG9y L01vbm8uVGV4dEVkaXRvci5WaS9WaU1vZGUuY3MKDQpNb2RpZmllZDogbWFpbi9zcmMvY29yZS9N b25vLlRleHRlZGl0b3IvTW9uby5UZXh0RWRpdG9yLlZpL1ZpTW9kZS5jcw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K QEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIFJlc2V0IChzdHJpbmcgc3RhdHVzKQogCQl7CiAJCQlD dXJTdGF0ZSA9IFN0YXRlLk5vcm1hbDsKIAkJCVJlc2V0RWRpdG9yU3RhdGUgKERhdGEpOwotCQkJ CisJCQltb3Rpb24gPSBNb3Rpb24uTm9uZTsKIAkJCWNvbW1hbmRCdWZmZXIuTGVuZ3RoID0gMDsK IAkJCVN0YXR1cyA9IHN0YXR1czsKIAkJfQpAQCAtNjE3LDYgKzYxNyw3IEBAIHByb3RlY3RlZCBv dmVycmlkZSB2b2lkIEhhbmRsZUtleXByZXNzIChHZGsuS2V5IGtleSwgdWludCB1bmljb2RlS2V5 LCBHZGsuTW9kaWZpCiAJCQkJCQlSdW5BY3Rpb25zIChhY3Rpb24sIENsaXBib2FyZEFjdGlvbnMu Q3V0KTsKIAkJCQkJU3RhdHVzID0gIi0tIElOU0VSVCAtLSI7CiAJCQkJCUN1clN0YXRlID0gU3Rh dGUuSW5zZXJ0OworCQkJCQltb3Rpb24gPSBNb3Rpb24uTm9uZTsKIAkJCQkJQ2FyZXQuTW9kZSA9 IENhcmV0TW9kZS5JbnNlcnQ7CiAJCQkJfSBlbHNlIHsKIAkJCQkJUmVzZXQgKCJVbnJlY29nbmlz ZWQgbW90aW9uIik7DQoNCiAgIENvbW1pdDogNTgwN2NhYTk4MGMzNzZjOTM0YWVlMTk5ZjEyNGJh OTU3ZTVhNDNlNA0KICAgQXV0aG9yOiBNaWNoYWVsIEh1dGNoaW5zb24gPG0uai5odXRjaGluc29u QGdtYWlsLmNvbT4gKG1odXRjaCkNCiAgICAgRGF0ZTogMjAxMy0xMS0xOSAyMjo0NTozMCBHTVQN CiAgICAgIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVsb3AvY29tbWl0LzU4 MDdjYWE5ODBjMzc2YzkzNGFlZTE5OWYxMjRiYTk1N2U1YTQzZTQNCg0KTWVyZ2UgcHVsbCByZXF1 ZXN0ICM0MzggZnJvbSBram5pbHNzb24vbWFzdGVyCgoxNjMwNyAtIHZpIG1vZGUgLSByZXNldCBt b3Rpb24gYWZ0ZXIgYWN0aW9ucw0KDQpDaGFuZ2VkIHBhdGhzOgogIE0gbWFpbi9zcmMvY29yZS9N b25vLlRleHRlZGl0b3IvTW9uby5UZXh0RWRpdG9yLlZpL1ZpTW9kZS5jcwoNCk1vZGlmaWVkOiBt YWluL3NyYy9jb3JlL01vbm8uVGV4dGVkaXRvci9Nb25vLlRleHRFZGl0b3IuVmkvVmlNb2RlLmNz DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQpAQCAtMjUyLDcgKzI1Miw3IEBAIHZvaWQgUmVzZXQgKHN0cmluZyBzdGF0 dXMpCiAJCXsKIAkJCUN1clN0YXRlID0gU3RhdGUuTm9ybWFsOwogCQkJUmVzZXRFZGl0b3JTdGF0 ZSAoRGF0YSk7Ci0JCQkKKwkJCW1vdGlvbiA9IE1vdGlvbi5Ob25lOwogCQkJY29tbWFuZEJ1ZmZl ci5MZW5ndGggPSAwOwogCQkJU3RhdHVzID0gc3RhdHVzOwogCQl9CkBAIC02MTcsNiArNjE3LDcg QEAgcHJvdGVjdGVkIG92ZXJyaWRlIHZvaWQgSGFuZGxlS2V5cHJlc3MgKEdkay5LZXkga2V5LCB1 aW50IHVuaWNvZGVLZXksIEdkay5Nb2RpZmkKIAkJCQkJCVJ1bkFjdGlvbnMgKGFjdGlvbiwgQ2xp cGJvYXJkQWN0aW9ucy5DdXQpOwogCQkJCQlTdGF0dXMgPSAiLS0gSU5TRVJUIC0tIjsKIAkJCQkJ Q3VyU3RhdGUgPSBTdGF0ZS5JbnNlcnQ7CisJCQkJCW1vdGlvbiA9IE1vdGlvbi5Ob25lOwogCQkJ CQlDYXJldC5Nb2RlID0gQ2FyZXRNb2RlLkluc2VydDsKIAkJCQl9IGVsc2UgewogCQkJCQlSZXNl dCAoIlVucmVjb2duaXNlZCBtb3Rpb24iKTsNCg0KICAgQ29tbWl0OiA2ODQ4MWU4MzY5ZDY1NWMy OWQxNzI2MGJmMTMzOTFlMzdmYTcwYzc4DQogICBBdXRob3I6IFRoZXJ6b2sgPHRlcm9tYXJpb0B5 YWhvby5jb20+IChUaGVyem9rKQ0KICAgICBEYXRlOiAyMDEzLTExLTIwIDAxOjE5OjE2IEdNVA0K ICAgICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21taXQvNjg0 ODFlODM2OWQ2NTVjMjlkMTcyNjBiZjEzMzkxZTM3ZmE3MGM3OA0KDQpbTW9ub0FkZGluc10gQnVt cCByZXZpc2lvbiBmb3IgYnVnIDE0NDIxLg0KDQpDaGFuZ2VkIHBhdGhzOgogIE0gbWFpbi9leHRl cm5hbC9tb25vLWFkZGlucwoNCk1vZGlmaWVkOiBtYWluL2V4dGVybmFsL21vbm8tYWRkaW5zDQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQpAQCAtMSArMSBAQAotU3VicHJvamVjdCBjb21taXQgMGExYzBhMDZlZDczODE5 MDZhMjc0NjZhZmE5MWJkODI0Zjc1ZGUwMgorU3VicHJvamVjdCBjb21taXQgMjFkNzE1YWRlZGFh OWE4YmMxMjU1ZGU3ZGRmMGQyNDQ1NjIyYzE4Nw0KDQogICBDb21taXQ6IGQ5ZmEwYzA2OWJiYjBj MzQ0ZjFmNDBkYzUxZGVkZDhmNTBjNzhjMDINCiAgIEF1dGhvcjogTWlrZSBLcsO8Z2VyIDxta3J1 ZWdlckB4YW1hcmluLmNvbT4gKG1rcnVlZ2VyKQ0KICAgICBEYXRlOiAyMDEzLTExLTIwIDA2OjUy OjI4IEdNVA0KICAgICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9j b21taXQvZDlmYTBjMDY5YmJiMGMzNDRmMWY0MGRjNTFkZWRkOGY1MGM3OGMwMg0KDQpGaXhlZCAn QnVnIDE2MzMyIC0gRHVwbGljYXRlIEJPTSEgJy4NCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1haW4v c3JjL2FkZGlucy9Nb25vRGV2ZWxvcC5Tb3VyY2VFZGl0b3IyL01vbm9EZXZlbG9wLlNvdXJjZUVk aXRvci9Tb3VyY2VFZGl0b3JWaWV3LmNzCiAgTSBtYWluL3NyYy9jb3JlL01vbm8uVGV4dGVkaXRv ci9Nb25vLlRleHRFZGl0b3IuVXRpbHMvVGV4dEZpbGVVdGlsaXR5LmNzCiAgTSBtYWluL3NyYy9j b3JlL01vbm9EZXZlbG9wLlRleHRFZGl0b3IuVGVzdHMvTW9uby5UZXh0RWRpdG9yLlRlc3RzL1Rl eHRGaWxlUmVhZGVyVGVzdHMuY3MKDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL01vbm9EZXZl bG9wLlNvdXJjZUVkaXRvcjIvTW9ub0RldmVsb3AuU291cmNlRWRpdG9yL1NvdXJjZUVkaXRvclZp ZXcuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCkBAIC04MzUsOSArODM1LDkgQEAgcHVibGljIHZvaWQgTG9hZCAo c3RyaW5nIGZpbGVOYW1lLCBFbmNvZGluZyBsb2FkRW5jb2RpbmcsIGJvb2wgcmVsb2FkID0gZmFs c2UpCiAJCQllbHNlIHsKIAkJCQlpbkxvYWQgPSB0cnVlOwogCQkJCWlmIChsb2FkRW5jb2Rpbmcg PT0gbnVsbCkgewotCQkJCQl0ZXh0ID0gVGV4dEZpbGVVdGlsaXR5LlJlYWRBbGxUZXh0IChmaWxl TmFtZSwgb3V0IGhhZEJvbSwgb3V0IHRoaXMuZW5jb2RpbmcpOwotCQkJCX0KLQkJCQllbHNlIHsK KwkJCQkJdGV4dCA9IFRleHRGaWxlVXRpbGl0eS5SZWFkQWxsVGV4dCAoZmlsZU5hbWUsIG91dCBo YWRCb20sIG91dCBlbmNvZGluZyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZW5jb2RpbmcgPSBsb2Fk RW5jb2Rpbmc7CiAJCQkJCXRleHQgPSBUZXh0RmlsZVV0aWxpdHkuUmVhZEFsbFRleHQgKGZpbGVO YW1lLCBsb2FkRW5jb2RpbmcsIG91dCBoYWRCb20pOwogCQkJCX0KIAkJCQlpZiAocmVsb2FkKSB7 DQoNCk1vZGlmaWVkOiBtYWluL3NyYy9jb3JlL01vbm8uVGV4dGVkaXRvci9Nb25vLlRleHRFZGl0 b3IuVXRpbHMvVGV4dEZpbGVVdGlsaXR5LmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMTU2LDYgKzE1Niwy NSBAQCBwdWJsaWMgc3RhdGljIHN0cmluZyBHZXRUZXh0IChieXRlW10gYnl0ZXMsIG91dCBFbmNv ZGluZyBlbmNvZGluZywgb3V0IGJvb2wgaGFkQgogCQkJfQogCQl9CiAKKwkJcHVibGljIHN0YXRp YyBzdHJpbmcgR2V0VGV4dCAoYnl0ZVtdIGJ5dGVzLCBFbmNvZGluZyBlbmNvZGluZywgb3V0IGJv b2wgaGFkQm9tKQorCQl7CisJCQlieXRlW10gYm9tID0gZW5jb2RpbmcuR2V0UHJlYW1ibGUgKCk7 CisJCQlpZiAoYm9tICE9IG51bGwgJiYgYm9tLkxlbmd0aCA+IDAgJiYgYm9tLkxlbmd0aCA8PSBi eXRlcy5MZW5ndGgpIHsKKwkJCQloYWRCb20gPSB0cnVlOworCQkJCWZvciAoaW50IGkgPSAwOyBp IDwgYm9tLkxlbmd0aDsgaSsrKSB7CisJCQkJCWlmIChieXRlcyBbaV0gIT0gYm9tIFtpXSkgewor CQkJCQkJaGFkQm9tID0gZmFsc2U7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0g ZWxzZSB7CisJCQkJaGFkQm9tID0gZmFsc2U7CisJCQl9CisJCQlpZiAoaGFkQm9tKSAKKwkJCQly ZXR1cm4gZW5jb2RpbmcuR2V0U3RyaW5nIChieXRlcywgYm9tLkxlbmd0aCwgYnl0ZXMuTGVuZ3Ro IC0gYm9tLkxlbmd0aCk7CisJCQlyZXR1cm4gZW5jb2RpbmcuR2V0U3RyaW5nIChieXRlcyk7CisJ CX0KKwogCQlwdWJsaWMgc3RhdGljIHN0cmluZyBHZXRUZXh0IChTdHJlYW0gaW5wdXRTdHJlYW0p CiAJCXsKIAkJCXVzaW5nICh2YXIgc3RyZWFtID0gT3BlblN0cmVhbSAoaW5wdXRTdHJlYW0pKSB7 CkBAIC0zMDMsMjEgKzMyMiw4IEBAIHB1YmxpYyBzdGF0aWMgc3RyaW5nIFJlYWRBbGxUZXh0IChz dHJpbmcgZmlsZU5hbWUsIEVuY29kaW5nIGVuY29kaW5nLCBvdXQgYm9vbCBoCiAJCQkJdGhyb3cg bmV3IEFyZ3VtZW50TnVsbEV4Y2VwdGlvbiAoImVuY29kaW5nIik7CiAJCQkKIAkJCWJ5dGVbXSBj b250ZW50ID0gRmlsZS5SZWFkQWxsQnl0ZXMgKGZpbGVOYW1lKTsKLQkJCWJ5dGVbXSBib20gPSBl bmNvZGluZy5HZXRQcmVhbWJsZSAoKTsKLQkJCWlmIChib20gIT0gbnVsbCAmJiBib20uTGVuZ3Ro ID4gMCAmJiBib20uTGVuZ3RoIDw9IGNvbnRlbnQuTGVuZ3RoKSB7Ci0JCQkJaGFkQm9tID0gdHJ1 ZTsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGJvbS5MZW5ndGg7IGkrKykgewotCQkJCQlpZiAo Y29udGVudCBbaV0gIT0gYm9tIFtpXSkgewotCQkJCQkJaGFkQm9tPSBmYWxzZTsKLQkJCQkJCWJy ZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQloYWRCb20gPSBmYWxzZTsKLQkJ CX0KLQkJCXJldHVybiBlbmNvZGluZy5HZXRTdHJpbmcgKGNvbnRlbnQpOworCQkJcmV0dXJuIEdl dFRleHQgKGNvbnRlbnQsIGVuY29kaW5nLCBvdXQgaGFkQm9tKTsgCiAJCX0KLQogCQkjZW5kcmVn aW9uCiAKIAkJI3JlZ2lvbiBBU0NJSSBlbmNvZGluZyBjaGVjaw0KDQpNb2RpZmllZDogbWFpbi9z cmMvY29yZS9Nb25vRGV2ZWxvcC5UZXh0RWRpdG9yLlRlc3RzL01vbm8uVGV4dEVkaXRvci5UZXN0 cy9UZXh0RmlsZVJlYWRlclRlc3RzLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMTQzLDYgKzE0MywxOCBA QCBwdWJsaWMgdm9pZCBUZXN0R0IxODAzMCAoKQogCQkJYnl0ZVtdIGlucHV0ID0gRW5jb2Rpbmcu R2V0RW5jb2RpbmcgKDU0OTM2KS5HZXRCeXRlcyAoc3JjKTsKIAkJCUFzc2VydC5BcmVFcXVhbCAo c3JjLCBUZXh0RmlsZVV0aWxpdHkuR2V0VGV4dCAoaW5wdXQpKTsKIAkJfQorCisJCS8vLyA8c3Vt bWFyeT4KKwkJLy8vIEJ1ZyAxNjMzMiAtIER1cGxpY2F0ZSBCT00hIAorCQkvLy8gPC9zdW1tYXJ5 PgorCQlbVGVzdCgpXQorCQlwdWJsaWMgdm9pZCBUZXN0QnVnMTYzMzIgKCkJCisJCXsKKwkJCWJ5 dGVbXSBpbnB1dCA9IG5ldyBieXRlW10geyAweEVGLCAweEJCLCAweEJGLCAoYnl0ZSknYSd9Owor CQkJYm9vbCBoYWRCb207CisJCQlBc3NlcnQuQXJlRXF1YWwgKCJhIiwgVGV4dEZpbGVVdGlsaXR5 LkdldFRleHQgKGlucHV0LCBFbmNvZGluZy5VVEY4LCBvdXQgaGFkQm9tKSk7CisJCQlBc3NlcnQu SXNUcnVlIChoYWRCb20pOworCQl9CiAJfQogfQogDQoNCiAgIENvbW1pdDogZTBlZjUxNjBiYTEz MDdiZTc2NjliYTliYmVkZjY5YzZkNWI4ZTZkYQ0KICAgQXV0aG9yOiBNaWtlIEtyw7xnZXIgPG1r cnVlZ2VyQHhhbWFyaW4uY29tPiAobWtydWVnZXIpDQogICAgIERhdGU6IDIwMTMtMTEtMjAgMDc6 MDI6MTggR01UDQogICAgICBVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9w L2NvbW1pdC9lMGVmNTE2MGJhMTMwN2JlNzY2OWJhOWJiZWRmNjljNmQ1YjhlNmRhDQoNCltJZGVd IE5ld2x5IGNyZWF0ZWQgZmlsZXMgYWx3YXlzIGNyZWF0ZSBhIEJPTS4NCg0KQ2hhbmdlZCBwYXRo czoKICBNIG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuSWRlL01vbm9EZXZlbG9wLklkZS5UZW1w bGF0ZXMvU2luZ2xlRmlsZURlc2NyaXB0aW9uVGVtcGxhdGUuY3MKDQpNb2RpZmllZDogbWFpbi9z cmMvY29yZS9Nb25vRGV2ZWxvcC5JZGUvTW9ub0RldmVsb3AuSWRlLlRlbXBsYXRlcy9TaW5nbGVG aWxlRGVzY3JpcHRpb25UZW1wbGF0ZS5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTI3Miw3ICsyNzIsMTEg QEAgcHVibGljIHZpcnR1YWwgU3RyZWFtIENyZWF0ZUZpbGVDb250ZW50IChTb2x1dGlvbkl0ZW0g cG9saWN5UGFyZW50LCBQcm9qZWN0IHByb2oKIAkJCQkJY29udGVudCA9IGZvcm1hdHRlZDsKIAkJ CX0KIAkJCQotCQkJTWVtb3J5U3RyZWFtIG1zID0gbmV3IE1lbW9yeVN0cmVhbSAoKTsKKwkJCXZh ciBtcyA9IG5ldyBNZW1vcnlTdHJlYW0gKCk7CisKKwkJCXZhciBib20gPSBFbmNvZGluZy5VVEY4 LkdldFByZWFtYmxlICgpOworCQkJbXMuV3JpdGUgKGJvbSwgMCwgYm9tLkxlbmd0aCk7CisKIAkJ CWJ5dGVbXSBkYXRhOwogCQkJaWYgKEFkZFN0YW5kYXJkSGVhZGVyKSB7CiAJCQkJc3RyaW5nIGhl YWRlciA9IFN0YW5kYXJkSGVhZGVyU2VydmljZS5HZXRIZWFkZXIgKHBvbGljeVBhcmVudCwgZmls ZU5hbWUsIHRydWUpOw0KDQogICBDb21taXQ6IDZiNTMxNDRmOTkwNzQxNWFlZDJjNTY5OGJiOGQw OTJjNGY5ODQ5YmINCiAgIEF1dGhvcjogTWlrZSBLcsO8Z2VyIDxta3J1ZWdlckB4YW1hcmluLmNv bT4gKG1rcnVlZ2VyKQ0KICAgICBEYXRlOiAyMDEzLTExLTIwIDA3OjIyOjM0IEdNVA0KICAgICAg VVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21taXQvNmI1MzE0NGY5 OTA3NDE1YWVkMmM1Njk4YmI4ZDA5MmM0Zjk4NDliYg0KDQpbU291cmNlRWRpdG9yXSBGaXhlZCBh IGJ1ZyB3aGVyZSB0aGUgQk9NIGNvdWxkIGdldCByZW1vdmVkLg0KDQpDaGFuZ2VkIHBhdGhzOgog IE0gbWFpbi9zcmMvYWRkaW5zL01vbm9EZXZlbG9wLlNvdXJjZUVkaXRvcjIvTW9ub0RldmVsb3Au U291cmNlRWRpdG9yL1NvdXJjZUVkaXRvclZpZXcuY3MKICBNIG1haW4vc3JjL2FkZGlucy9Nb25v RGV2ZWxvcC5Tb3VyY2VFZGl0b3IyL01vbm9EZXZlbG9wLlNvdXJjZUVkaXRvci9Tb3VyY2VFZGl0 b3JXaWRnZXQuY3MKDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL01vbm9EZXZlbG9wLlNvdXJj ZUVkaXRvcjIvTW9ub0RldmVsb3AuU291cmNlRWRpdG9yL1NvdXJjZUVkaXRvclZpZXcuY3MNCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NCkBAIC02OTIsMTEgKzY5MiwxNSBAQCBwdWJsaWMgdm9pZCBTYXZlIChzdHJpbmcg ZmlsZU5hbWUsIEVuY29kaW5nIGVuY29kaW5nKQogCQkJCQl2YXIgd3JpdGVCb20gPSBoYWRCb207 CiAJCQkJCXZhciB3cml0ZVRleHQgPSBEb2N1bWVudC5UZXh0OwogCQkJCQlpZiAod3JpdGVFbmNv ZGluZyA9PSBudWxsKSB7Ci0JCQkJCQl3cml0ZUVuY29kaW5nID0gRW5jb2RpbmcuVVRGODsKLQkJ CQkJCS8vIERpc2FibGVkLiBTaG93cyB1cCBpbiB0aGUgc291cmNlIGNvbnRyb2wgYXMgZGlmZiwg aXQncyBhdG0gY29uZnVzaW5nIGZvciB0aGUgdXNlcnMgdG8gc2VlIGEgY2hhbmdlIHdpdGhvdXQK LQkJCQkJCS8vIGNoYW5nZWQgZmlsZXMuCi0JCQkJCQl3cml0ZUJvbSA9IGZhbHNlOwotLy8JCQkJ CQl3cml0ZUJvbSA9IU1vbm8uVGV4dEVkaXRvci5VdGlscy5UZXh0RmlsZVV0aWxpdHkuSXNBU0NJ SSAod3JpdGVUZXh0KTsKKwkJCQkJCWlmICh0aGlzLmVuY29kaW5nICE9IG51bGwpIHsKKwkJCQkJ CQl3cml0ZUVuY29kaW5nID0gdGhpcy5lbmNvZGluZzsKKwkJCQkJCX0gZWxzZSB7IAorCQkJCQkJ CXdyaXRlRW5jb2RpbmcgPSBFbmNvZGluZy5VVEY4OworCQkJCQkJCS8vIERpc2FibGVkLiBTaG93 cyB1cCBpbiB0aGUgc291cmNlIGNvbnRyb2wgYXMgZGlmZiwgaXQncyBhdG0gY29uZnVzaW5nIGZv ciB0aGUgdXNlcnMgdG8gc2VlIGEgY2hhbmdlIHdpdGhvdXQKKwkJCQkJCQkvLyBjaGFuZ2VkIGZp bGVzLgorCQkJCQkJCXdyaXRlQm9tID0gZmFsc2U7CisJLy8JCQkJCQl3cml0ZUJvbSA9IU1vbm8u VGV4dEVkaXRvci5VdGlscy5UZXh0RmlsZVV0aWxpdHkuSXNBU0NJSSAod3JpdGVUZXh0KTsKKwkJ CQkJCX0KIAkJCQkJfQogCQkJCQlNb25vLlRleHRFZGl0b3IuVXRpbHMuVGV4dEZpbGVVdGlsaXR5 LldyaXRlVGV4dCAoZmlsZU5hbWUsIHdyaXRlVGV4dCwgd3JpdGVFbmNvZGluZywgd3JpdGVCb20p OwogCQkJCX0gY2F0Y2ggKEludmFsaWRFbmNvZGluZ0V4Y2VwdGlvbikgewpAQCAtOTEwLDcgKzkx NCw3IEBAIGludGVybmFsIHZvaWQgU3RvcmVTZXR0aW5ncyAoKQogCiAJCWJvb2wgd2Fybk92ZXJ3 cml0ZSA9IGZhbHNlOwogCQlib29sIGluTG9hZCA9IGZhbHNlOwotCQlFbmNvZGluZyBlbmNvZGlu ZyA9IG51bGw7CisJCUVuY29kaW5nIGVuY29kaW5nOwogCQlib29sIGhhZEJvbSA9IGZhbHNlOwog CiAJCWludGVybmFsIHZvaWQgUmVwbGFjZUNvbnRlbnQgKHN0cmluZyBmaWxlTmFtZSwgc3RyaW5n IGNvbnRlbnQsIEVuY29kaW5nIGVuY29kaW5nKQ0KDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5z L01vbm9EZXZlbG9wLlNvdXJjZUVkaXRvcjIvTW9ub0RldmVsb3AuU291cmNlRWRpdG9yL1NvdXJj ZUVkaXRvcldpZGdldC5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTkyNyw3ICs5MjcsNyBAQCBpbnRlcm5h bCB2b2lkIENvbnZlcnRMaW5lRW5kaW5ncyAoKQogCQkJCQluZXdUZXh0LkFwcGVuZCAoY29ycmVj dEVvbCk7CiAJCQl9CiAJCQl2aWV3LlN0b3JlU2V0dGluZ3MgKCk7Ci0JCQl2aWV3LlJlcGxhY2VD b250ZW50IChEb2N1bWVudC5GaWxlTmFtZSwgbmV3VGV4dC5Ub1N0cmluZyAoKSwgbnVsbCk7CisJ CQl2aWV3LlJlcGxhY2VDb250ZW50IChEb2N1bWVudC5GaWxlTmFtZSwgbmV3VGV4dC5Ub1N0cmlu ZyAoKSwgdmlldy5Tb3VyY2VFbmNvZGluZyk7CiAJCQlEb2N1bWVudC5IYXNMaW5lRW5kaW5nTWlz bWF0Y2hPblRleHRTZXQgPSBmYWxzZTsKIAkJCXZpZXcuTG9hZFNldHRpbmdzICgpOwogCQl9CkBA IC0xMDczLDcgKzEwNzMsNyBAQCBwdWJsaWMgdm9pZCBTaG93QXV0b1NhdmVXYXJuaW5nIChzdHJp bmcgZmlsZU5hbWUpCiAJCQkJCQlBdXRvU2F2ZS5SZW1vdmVBdXRvU2F2ZUZpbGUgKGZpbGVOYW1l KTsKIAkJCQkJCVRleHRFZGl0b3IuR3JhYkZvY3VzICgpOwogCQkJCQkJdmlldy5Mb2FkIChmaWxl TmFtZSk7Ci0JCQkJCQl2aWV3LlJlcGxhY2VDb250ZW50IChmaWxlTmFtZSwgY29udGVudCwgbnVs bCk7CisJCQkJCQl2aWV3LlJlcGxhY2VDb250ZW50IChmaWxlTmFtZSwgY29udGVudCwgdmlldy5T b3VyY2VFbmNvZGluZyk7CiAJCQkJCQl2aWV3LldvcmtiZW5jaFdpbmRvdy5Eb2N1bWVudC5SZXBh cnNlRG9jdW1lbnQgKCk7CiAJCQkJCQl2aWV3LklzRGlydHkgPSB0cnVlOwogCQkJCQl9IGNhdGNo IChFeGNlcHRpb24gZXgpIHsNCg0KICAgQ29tbWl0OiA5NThjNmY0MzIyNjg4MWYwYjQ4YTI3YWE4 MGRiZGZkOTA5MGJkMzk2DQogICBBdXRob3I6IE1pa2UgS3LDvGdlciA8bWtydWVnZXJAeGFtYXJp bi5jb20+IChta3J1ZWdlcikNCiAgICAgRGF0ZTogMjAxMy0xMS0yMCAwODozNToyNyBHTVQNCiAg ICAgIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVsb3AvY29tbWl0Lzk1OGM2 ZjQzMjI2ODgxZjBiNDhhMjdhYTgwZGJkZmQ5MDkwYmQzOTYNCg0KRml4ZWQgJ0J1ZyAxNjA4MyAt ICJGaW5kIFJlZmVyZW5jZXMiIGZhaWxzIGlmIGZpbGVzIGFyZSBtb3ZlZCcuDQoNCkNoYW5nZWQg cGF0aHM6CiAgTSBtYWluL3NyYy9hZGRpbnMvQ1NoYXJwQmluZGluZy9Nb25vRGV2ZWxvcC5DU2hh cnAuUmVmYWN0b3JpbmcvQ1NoYXJwUmVmZXJlbmNlRmluZGVyLmNzCg0KTW9kaWZpZWQ6IG1haW4v c3JjL2FkZGlucy9DU2hhcnBCaW5kaW5nL01vbm9EZXZlbG9wLkNTaGFycC5SZWZhY3RvcmluZy9D U2hhcnBSZWZlcmVuY2VGaW5kZXIuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC01Miw3ICs1Miw3IEBAIGNs YXNzIENTaGFycFJlZmVyZW5jZUZpbmRlciA6IFJlZmVyZW5jZUZpbmRlcgogCQlMaXN0PEZpbGVQ YXRoPiBmaWxlcyA9IG5ldyBMaXN0PEZpbGVQYXRoPiAoKTsKIAkJTGlzdDxUdXBsZTxGaWxlUGF0 aCwgTW9ub0RldmVsb3AuSWRlLkd1aS5Eb2N1bWVudD4+IG9wZW5Eb2N1bWVudHMgPSBuZXcgTGlz dDxUdXBsZTxGaWxlUGF0aCwgTW9ub0RldmVsb3AuSWRlLkd1aS5Eb2N1bWVudD4+ICgpOwogCQkK LQkJc3RyaW5nIG1lbWJlck5hbWU7DQorCQlzdHJpbmcgbWVtYmVyTmFtZTsKIAkJc3RyaW5nIGtl eXdvcmROYW1lOwogCQkKIAkJcHVibGljIENTaGFycFJlZmVyZW5jZUZpbmRlciAoKQpAQCAtNjMs MTcgKzYzLDE3IEBAIHB1YmxpYyBDU2hhcnBSZWZlcmVuY2VGaW5kZXIgKCkKIAkJcHVibGljIHZv aWQgU2V0U2VhcmNoZWRNZW1iZXJzIChJRW51bWVyYWJsZTxvYmplY3Q+IG1lbWJlcnMpCiAJCXsK IAkJCXNlYXJjaGVkTWVtYmVycyA9IG5ldyBMaXN0PG9iamVjdD4gKG1lbWJlcnMpOwotCQkJdmFy IGZpcnN0TWVtYmVyID0gc2VhcmNoZWRNZW1iZXJzLkZpcnN0T3JEZWZhdWx0ICgpOw0KLQkJCWlm IChmaXJzdE1lbWJlciBpcyBJTmFtZWRFbGVtZW50KSB7DQorCQkJdmFyIGZpcnN0TWVtYmVyID0g c2VhcmNoZWRNZW1iZXJzLkZpcnN0T3JEZWZhdWx0ICgpOworCQkJaWYgKGZpcnN0TWVtYmVyIGlz IElOYW1lZEVsZW1lbnQpIHsKIAkJCQl2YXIgbmFtZWRFbGVtZW50ID0gKElOYW1lZEVsZW1lbnQp Zmlyc3RNZW1iZXI7CiAJCQkJdmFyIG5hbWUgPSBuYW1lZEVsZW1lbnQuTmFtZTsKIAkJCQlpZiAo bmFtZWRFbGVtZW50IGlzIElNZXRob2QgJiYgKCgoSU1ldGhvZCluYW1lZEVsZW1lbnQpLklzQ29u c3RydWN0b3IgfCAoKElNZXRob2QpbmFtZWRFbGVtZW50KS5Jc0Rlc3RydWN0b3IpKQogCQkJCQlu YW1lID0gKChJTWV0aG9kKW5hbWVkRWxlbWVudCkuRGVjbGFyaW5nVHlwZS5OYW1lOwotCQkJCW1l bWJlck5hbWUgPSBuYW1lOw0KLQ0KLQkJCQlrZXl3b3JkTmFtZSA9IENTaGFycEFtYmllbmNlLk5l dFRvQ1NoYXJwVHlwZU5hbWUgKG5hbWVkRWxlbWVudC5GdWxsTmFtZSk7DQotCQkJCWlmIChrZXl3 b3JkTmFtZSA9PSBuYW1lZEVsZW1lbnQuRnVsbE5hbWUpDQotCQkJCQlrZXl3b3JkTmFtZSA9IG51 bGw7DQorCQkJCW1lbWJlck5hbWUgPSBuYW1lOworCisJCQkJa2V5d29yZE5hbWUgPSBDU2hhcnBB bWJpZW5jZS5OZXRUb0NTaGFycFR5cGVOYW1lIChuYW1lZEVsZW1lbnQuRnVsbE5hbWUpOworCQkJ CWlmIChrZXl3b3JkTmFtZSA9PSBuYW1lZEVsZW1lbnQuRnVsbE5hbWUpCisJCQkJCWtleXdvcmRO YW1lID0gbnVsbDsKIAkJCX0KIAkJCWlmIChmaXJzdE1lbWJlciBpcyBzdHJpbmcpCiAJCQkJbWVt YmVyTmFtZSA9IGZpcnN0TWVtYmVyLlRvU3RyaW5nICgpOwpAQCAtMTc2LDcgKzE3Niw3IEBAIE1l bWJlclJlZmVyZW5jZSBHZXRSZWZlcmVuY2UgKFByb2plY3QgcHJvamVjdCwgUmVzb2x2ZVJlc3Vs dCByZXN1bHQsIEFzdE5vZGUgbm9kCiAJCXNraXA6CiAKIAkJCXZhciByZWdpb24gPSBuZXcgRG9t UmVnaW9uIChmaWxlTmFtZSwgbm9kZS5TdGFydExvY2F0aW9uLCBub2RlLkVuZExvY2F0aW9uKTsK LQ0KKwogCQkJdmFyIGxlbmd0aCA9IG5vZGUgaXMgUHJpbWl0aXZlVHlwZSA/IGtleXdvcmROYW1l Lkxlbmd0aCA6IG5vZGUuRW5kTG9jYXRpb24uQ29sdW1uIC0gbm9kZS5TdGFydExvY2F0aW9uLkNv bHVtbjsKIAkJCWlmICh2YWxpZCA9PSBudWxsKQogCQkJCXZhbGlkID0gc2VhcmNoZWRNZW1iZXJz LkZpcnN0T3JEZWZhdWx0ICgpOwpAQCAtMzA0LDcgKzMwNCwxMiBAQCBwdWJsaWMgb3ZlcnJpZGUg SUVudW1lcmFibGU8TWVtYmVyUmVmZXJlbmNlPiBGaW5kUmVmZXJlbmNlcyAoUHJvamVjdCBwcm9q ZWN0LCBJUAogCQkJZm9yZWFjaCAodmFyIGZpbGUgaW4gZmlsZXMpIHsKIAkJCQlpZiAobW9uaXRv ciAhPSBudWxsKQogCQkJCQltb25pdG9yLlN0ZXAgKDEpOwotCQkJCXN0cmluZyB0ZXh0ID0gTW9u by5UZXh0RWRpdG9yLlV0aWxzLlRleHRGaWxlVXRpbGl0eS5SZWFkQWxsVGV4dCAoZmlsZSk7CisJ CQkJc3RyaW5nIHRleHQ7CisJCQkJdHJ5IHsKKwkJCQkJdGV4dCA9IE1vbm8uVGV4dEVkaXRvci5V dGlscy5UZXh0RmlsZVV0aWxpdHkuUmVhZEFsbFRleHQgKGZpbGUpOworCQkJCX0gY2F0Y2ggKEV4 Y2VwdGlvbikgeworCQkJCQljb250aW51ZTsKKwkJCQl9CiAJCQkJaWYgKG1lbWJlck5hbWUgIT0g bnVsbCAmJiB0ZXh0LkluZGV4T2YgKG1lbWJlck5hbWUsIFN0cmluZ0NvbXBhcmlzb24uT3JkaW5h bCkgPCAwICYmCiAJCQkJCShrZXl3b3JkTmFtZSA9PSBudWxsIHx8IHRleHQuSW5kZXhPZiAoa2V5 d29yZE5hbWUsIFN0cmluZ0NvbXBhcmlzb24uT3JkaW5hbCkgPCAwKSkKIAkJCQkJY29udGludWU7 DQoNCiAgIENvbW1pdDogNTE4MzQxMGVlMmM2ZjQwY2Q0YTYwYjZjYTE4MDlhODFkOWQ4YWMyZA0K ICAgQXV0aG9yOiBNaWtlIEtyw7xnZXIgPG1rcnVlZ2VyQHhhbWFyaW4uY29tPiAobWtydWVnZXIp DQogICAgIERhdGU6IDIwMTMtMTEtMjAgMTE6MjE6MzAgR01UDQogICAgICBVUkw6IGh0dHBzOi8v Z2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbW1pdC81MTgzNDEwZWUyYzZmNDBjZDRhNjBi NmNhMTgwOWE4MWQ5ZDhhYzJkDQoNCltSZWZhY3RvcmluZ10gQWRkZWQgaW5zdHJ1bWVudGF0aW9u IHRpbWVyIGZvciBiYWNrZ3JvdW5kIGFuYWx5c2lzLg0KDQpDaGFuZ2VkIHBhdGhzOgogIE0gbWFp bi9zcmMvYWRkaW5zL01vbm9EZXZlbG9wLlJlZmFjdG9yaW5nL01vbm9EZXZlbG9wLlJlZmFjdG9y aW5nL1JlZmFjdG9yaW5nU2VydmljZS5jcwoNCk1vZGlmaWVkOiBtYWluL3NyYy9hZGRpbnMvTW9u b0RldmVsb3AuUmVmYWN0b3JpbmcvTW9ub0RldmVsb3AuUmVmYWN0b3JpbmcvUmVmYWN0b3JpbmdT ZXJ2aWNlLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQpAQCAtNDEsNiArNDEsNyBAQAogdXNpbmcgTW9uby5UZXh0 RWRpdG9yOwogdXNpbmcgTW9ub0RldmVsb3AuSWRlLlR5cGVTeXN0ZW07CiB1c2luZyBTeXN0ZW0u RGlhZ25vc3RpY3M7Cit1c2luZyBNb25vRGV2ZWxvcC5Db3JlLkluc3RydW1lbnRhdGlvbjsKIAog bmFtZXNwYWNlIE1vbm9EZXZlbG9wLlJlZmFjdG9yaW5nCiB7CkBAIC0yMDQsNDkgKzIwNSwyNiBA QCBwdWJsaWMgc3RhdGljIFRhc2s8SUVudW1lcmFibGU8Q29kZUFjdGlvbj4+IEdldFZhbGlkQWN0 aW9ucyAoRG9jdW1lbnQgZG9jLCBUZXh0TAogCQkJc3RyaW5nIGRpc2FibGVkTm9kZXMgPSBlZGl0 b3IgIT0gbnVsbCA/IFByb3BlcnR5U2VydmljZS5HZXQgKCJDb250ZXh0QWN0aW9ucy4iICsgZWRp dG9yLk1pbWVUeXBlLCAiIikgPz8gIiIgOiAiIjsKIAkJCXJldHVybiBUYXNrLkZhY3RvcnkuU3Rh cnROZXcgKGRlbGVnYXRlIHsKIAkJCQl2YXIgcmVzdWx0ID0gbmV3IExpc3Q8Q29kZUFjdGlvbj4g KCk7CisJCQkJdmFyIHRpbWVyID0gSW5zdHJ1bWVudGF0aW9uU2VydmljZS5DcmVhdGVUaW1lckNv dW50ZXIgKCJTb3VyY2UgYW5hbHlzaXMgYmFja2dyb3VuZCB0YXNrIiwgIlNvdXJjZSBhbmFseXNp cyIpOworCQkJCXRpbWVyLkJlZ2luVGltaW5nICgpOwogCQkJCXRyeSB7Ci0JCQkJCSNpZiBQUk9G SUxFCi0JCQkJCXZhciBydW5MaXN0ID0gbmV3IExpc3Q8VHVwbGU8bG9uZywgc3RyaW5nPj4gKCk7 Ci0JCQkJCXZhciBnbG9iYWxDbG9jayA9IG5ldyBTdG9wd2F0Y2goKTsKLQkJCQkJZ2xvYmFsQ2xv Y2suU3RhcnQgKCk7Ci0KLQkJCQkJI2VuZGlmCi0KIAkJCQkJdmFyIHBhcnNlZERvY3VtZW50ID0g ZG9jLlBhcnNlZERvY3VtZW50OwogCQkJCQlpZiAoZWRpdG9yICE9IG51bGwgJiYgcGFyc2VkRG9j dW1lbnQgIT0gbnVsbCAmJiBwYXJzZWREb2N1bWVudC5DcmVhdGVSZWZhY3RvcmluZ0NvbnRleHQg IT0gbnVsbCkgewogCQkJCQkJdmFyIGN0eCA9IHBhcnNlZERvY3VtZW50LkNyZWF0ZVJlZmFjdG9y aW5nQ29udGV4dCAoZG9jLCBjYW5jZWxsYXRpb25Ub2tlbik7CiAJCQkJCQlpZiAoY3R4ICE9IG51 bGwpIHsKIAkJCQkJCQlmb3JlYWNoICh2YXIgcHJvdmlkZXIgaW4gY29udGV4dEFjdGlvbnMuV2hl cmUgKGZpeCA9PiBkaXNhYmxlZE5vZGVzLkluZGV4T2YgKGZpeC5JZFN0cmluZywgU3RyaW5nQ29t cGFyaXNvbi5PcmRpbmFsKSA8IDApKSB7Ci0JCQkJCQkJCSNpZiBQUk9GSUxFCi0JCQkJCQkJCXZh ciBjbG9jayA9IG5ldyBTdG9wd2F0Y2goKTsKLQkJCQkJCQkJY2xvY2suU3RhcnQgKCk7Ci0JCQkJ CQkJCSNlbmRpZgogCQkJCQkJCQl0cnkgewogCQkJCQkJCQkJcmVzdWx0LkFkZFJhbmdlIChwcm92 aWRlci5HZXRBY3Rpb25zIChkb2MsIGN0eCwgbG9jLCBjYW5jZWxsYXRpb25Ub2tlbikpOwogCQkJ CQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKIAkJCQkJCQkJCUxvZ2dpbmdTZXJ2aWNlLkxv Z0Vycm9yICgiRXJyb3IgaW4gY29udGV4dCBhY3Rpb24gcHJvdmlkZXIgIiArIHByb3ZpZGVyLlRp dGxlLCBleCk7CiAJCQkJCQkJCX0KLQkJCQkJCQkJI2lmIFBST0ZJTEUKLQkJCQkJCQkJY2xvY2su U3RvcCAoKTsKLQkJCQkJCQkJbG9jayAocnVuTGlzdCkgewotCQkJCQkJCQkJcnVuTGlzdC5BZGQg KFR1cGxlLkNyZWF0ZSAoY2xvY2suRWxhcHNlZE1pbGxpc2Vjb25kcywgcHJvdmlkZXIuVGl0bGUp KTsgCi0JCQkJCQkJCX0KLQkJCQkJCQkJI2VuZGlmCiAJCQkJCQkJfQogCQkJCQkJfQogCQkJCQl9 Ci0JCQkJCSNpZiBQUk9GSUxFCi0JCQkJCWdsb2JhbENsb2NrLlN0b3AgKCk7Ci0JCQkJCXJ1bkxp c3QuU29ydCAoKTsKLQkJCQkJQ29uc29sZS5Xcml0ZUxpbmUgKCJBbGw6ICIgKyBnbG9iYWxDbG9j ay5FbGFwc2VkTWlsbGlzZWNvbmRzICsibXMiKTsKLQkJCQkJZm9yZWFjaCAodmFyIGl0ZW0gaW4g cnVuTGlzdCkgewotCQkJCQkJaWYgKGl0ZW0uSXRlbTEgPT0gMCkKLQkJCQkJCQljb250aW51ZTsK LQkJCQkJCUNvbnNvbGUuV3JpdGVMaW5lIChpdGVtLkl0ZW0xICsibXNcdDogIiArIGl0ZW0uSXRl bTIpOwotCQkJCQl9Ci0JCQkJCSNlbmRpZgogCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewog CQkJCQlMb2dnaW5nU2VydmljZS5Mb2dFcnJvciAoIkVycm9yIGluIGFuYWx5c2lzIHNlcnZpY2Ui LCBleCk7CisJCQkJfSBmaW5hbGx5IHsKKwkJCQkJdGltZXIuRW5kVGltaW5nICgpOwogCQkJCX0K IAkJCQlyZXR1cm4gKElFbnVtZXJhYmxlPENvZGVBY3Rpb24+KXJlc3VsdDsKIAkJCX0sIGNhbmNl bGxhdGlvblRva2VuKTsNCg0KICAgQ29tbWl0OiA2ZmMwNzIxOTcwNDg3N2JkNWM1ZDAzYzdlZjhi NWI2MDkwZjcyNWRkDQogICBBdXRob3I6IEplZmZyZXkgU3RlZGZhc3QgPGplZmZAeGFtYXJpbi5j b20+IChqc3RlZGZhc3QpDQogICAgIERhdGU6IDIwMTMtMTEtMjAgMjA6NTM6NTIgR01UDQogICAg ICBVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbW1pdC82ZmMwNzIx OTcwNDg3N2JkNWM1ZDAzYzdlZjhiNWI2MDkwZjcyNWRkDQoNCmJ1bXBlZCBtZC1hZGRpbnMNCg0K Q2hhbmdlZCBwYXRoczoKICBNIHZlcnNpb24tY2hlY2tzCg0KTW9kaWZpZWQ6IHZlcnNpb24tY2hl Y2tzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQpAQCAtMTcsNyArMTcsNyBAQCBERVBbMF09bWQtYWRkaW5zCiBERVBf TkFNRVswXT1NREFERElOUwogREVQX1BBVEhbMF09JHt0b3Bfc3JjZGlyfS8uLi9tZC1hZGRpbnMK IERFUF9NT0RVTEVbMF09Z2l0QGdpdGh1Yi5jb206eGFtYXJpbi9tZC1hZGRpbnMuZ2l0Ci1ERVBf TkVFREVEX1ZFUlNJT05bMF09ZmYyNWVhOTA3NmI3YTgwZmJiNTJiY2RhODI3OTQ1NzlmMmFhNTc1 YgorREVQX05FRURFRF9WRVJTSU9OWzBdPTM5M2JhNGJhOTQ2M2U4MmZhOWI4ZGM3OGExYjQwMWQ2 NGExNDQxNTUKIERFUF9CUkFOQ0hfQU5EX1JFTU9URVswXT0ibWFzdGVyIG9yaWdpbi9tYXN0ZXIi CiAKICMgaGVhcC1zaG90DQoNCiAgIENvbW1pdDogNTIyZjc5NTRlMTQ4NmUwY2QyMDIwZjMxYTY0 ODZiZTc2NTUyOWZlZg0KICAgQXV0aG9yOiBBbGFuIE1jR292ZXJuIDxhbGFuQHhhbWFyaW4uY29t PiAoYWxhbm1jZ292ZXJuKQ0KICAgICBEYXRlOiAyMDEzLTExLTIwIDIyOjIwOjMyIEdNVA0KICAg ICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21taXQvNTIyZjc5 NTRlMTQ4NmUwY2QyMDIwZjMxYTY0ODZiZTc2NTUyOWZlZg0KDQpbR2l0XSBEaXNhYmxlIHRoZXNl IDQgbmV3IHRlc3RzIHVudGlsIHRoZXkgY2FuIGJlIG1hZGUgZ3JlZW4gb24gTWFjDQoNCkNoYW5n ZWQgcGF0aHM6CiAgTSBtYWluL3NyYy9hZGRpbnMvVmVyc2lvbkNvbnRyb2wvTW9ub0RldmVsb3Au VmVyc2lvbkNvbnRyb2wuR2l0LlRlc3RzL0Jhc2VHaXRSZXBvc2l0b3J5VGVzdHMuY3MKDQpNb2Rp ZmllZDogbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZlbG9wLlZlcnNpb25D b250cm9sLkdpdC5UZXN0cy9CYXNlR2l0UmVwb3NpdG9yeVRlc3RzLmNzDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpA QCAtMTYyLDYgKzE2Miw3IEBAIHByb3RlY3RlZCBvdmVycmlkZSB2b2lkIEJsYW1lRXh0cmFJbnRl cm5hbHMgKEFubm90YXRpb24gW10gYW5ub3RhdGlvbnMpCiAJCX0NCiANCiAJCVtUZXN0XQ0KKwkJ W0lnbm9yZSAoInRoaXMgaXMgYSBuZXcgdGVzdCB3aGljaCBkb2Vzbid0IHBhc3Mgb24gTWFjIHll dCIpXQ0KIAkJcHVibGljIHZvaWQgVGVzdEdpdFN0YXNoICgpDQogCQl7DQogCQkJdmFyIHJlcG8y ID0gKEdpdFJlcG9zaXRvcnkpUmVwbzsNCkBAIC0xNzYsNiArMTc3LDcgQEAgcHVibGljIHZvaWQg VGVzdEdpdFN0YXNoICgpCiAJCX0NCiANCiAJCVtUZXN0XQ0KKwkJW0lnbm9yZSAoInRoaXMgaXMg YSBuZXcgdGVzdCB3aGljaCBkb2Vzbid0IHBhc3Mgb24gTWFjIHlldCIpXQ0KIAkJcHVibGljIHZv aWQgVGVzdEdpdEJyYW5jaENyZWF0aW9uICgpDQogCQl7DQogCQkJdmFyIHJlcG8yID0gKEdpdFJl cG9zaXRvcnkpUmVwbzsNCkBAIC0yMDQsNiArMjA2LDcgQEAgcHVibGljIHZvaWQgVGVzdEdpdEJy YW5jaENyZWF0aW9uICgpCiAJCX0NCiANCiAJCVtUZXN0XQ0KKwkJW0lnbm9yZSAoInRoaXMgaXMg YSBuZXcgdGVzdCB3aGljaCBkb2Vzbid0IHBhc3Mgb24gTWFjIHlldCIpXQ0KIAkJcHVibGljIHZv aWQgVGVzdEdpdFN5bmNCcmFuY2hlcyAoKQ0KIAkJew0KIAkJCXZhciByZXBvMiA9IChHaXRSZXBv c2l0b3J5KVJlcG87DQpAQCAtMzA3LDYgKzMxMCw3IEBAIHB1YmxpYyB2b2lkIFRlc3RSZW1vdGUg KCkKIAkJfQ0KIA0KIAkJW1Rlc3RdDQorCQlbSWdub3JlICgidGhpcyBpcyBhIG5ldyB0ZXN0IHdo aWNoIGRvZXNuJ3QgcGFzcyBvbiBNYWMgeWV0IildDQogCQlwdWJsaWMgdm9pZCBUZXN0SXNNZXJn ZWQgKCkNCiAJCXsNCiAJCQl2YXIgcmVwbzIgPSAoR2l0UmVwb3NpdG9yeSlSZXBvOw0NCg0KICAg Q29tbWl0OiBkYWUzYzBjYjdkMzYwMDE0ZGNhYzJlZDgwZGU0YzdmMjIwYjdjMjc1DQogICBBdXRo b3I6IFVuZ3VyZWFudSBNYXJpdXMgPHRlcm9tYXJpb0B5YWhvby5jb20+IChUaGVyem9rKQ0KICAg ICBEYXRlOiAyMDEzLTExLTIwIDIzOjA0OjM1IEdNVA0KICAgICAgVVJMOiBodHRwczovL2dpdGh1 Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21taXQvZGFlM2MwY2I3ZDM2MDAxNGRjYWMyZWQ4MGRl NGM3ZjIyMGI3YzI3NQ0KDQpbR2l0XSBSZW1vdmUga2V5Y2hhaW4gc3RvcmFnZSBmb3IgZ2l0IHBh c3N3b3JkcwoKVW50aWwgd2UgZmluZCBhIGJldHRlciB3YXkgdG8gc3RvcmUgdGhlbSBhbmQgbm90 IGJlIGNvcnJ1cHRlZC4KCkRvd25zaWRlOiBJdCByZXF1aXJlcyBwYXNzIGlucHV0IG9uIGV2ZXJ5 IHB1c2guDQoNCkNoYW5nZWQgcGF0aHM6CiAgTSBtYWluL3NyYy9hZGRpbnMvVmVyc2lvbkNvbnRy b2wvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuR2l0L01vbm9EZXZlbG9wLlZlcnNpb25Db250 cm9sLkdpdC9HaXRDcmVkZW50aWFscy5jcwoNCk1vZGlmaWVkOiBtYWluL3NyYy9hZGRpbnMvVmVy c2lvbkNvbnRyb2wvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuR2l0L01vbm9EZXZlbG9wLlZl cnNpb25Db250cm9sLkdpdC9HaXRDcmVkZW50aWFscy5jcw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTU2LDcg KzU2LDcgQEAgcHVibGljIG92ZXJyaWRlIGJvb2wgR2V0IChVUklpc2ggdXJpLCBwYXJhbXMgQ3Jl ZGVudGlhbEl0ZW1bXSBpdGVtcykKIAkJCQogCQkJLy8gV2UgYWx3YXlzIG5lZWQgdG8gcnVuIHRo ZSBUcnlHZXQqIG1ldGhvZHMgYXMgd2UgbmVlZCB0aGUgcGFzc3BocmFzZUl0ZW0vcGFzc3dvcmRJ dGVtIHBvcHVsYXRlZCBldmVuCiAJCQkvLyBpZiB0aGUgcGFzc3dvcmQgc3RvcmUgY29udGFpbnMg YW4gaW52YWxpZCBwYXNzd29yZC9ubyBwYXNzd29yZAotCQkJaWYgKFRyeUdldFVzZXJuYW1lUGFz c3dvcmQgKHVyaSwgaXRlbXMsIG91dCBwYXNzd29yZEl0ZW0pIHx8IFRyeUdldFBhc3NwaHJhc2Ug KHVyaSwgaXRlbXMsIG91dCBwYXNzcGhyYXNlSXRlbSkpIHsKKwkJCWlmICgvKlRyeUdldFVzZXJu YW1lUGFzc3dvcmQgKHVyaSwgaXRlbXMsIG91dCBwYXNzd29yZEl0ZW0pIHx8ICovVHJ5R2V0UGFz c3BocmFzZSAodXJpLCBpdGVtcywgb3V0IHBhc3NwaHJhc2VJdGVtKSkgewogCQkJCS8vIElmIHRo ZSBwYXNzd29yZCBzdG9yZSBoYXMgYSBwYXNzd29yZCBhbmQgd2UgYWxyZWFkeSB0cmllZCB1c2lu ZyBpdCwgaXQgY291bGQgYmUgaW5jb3JyZWN0LgogCQkJCS8vIElmIHRoaXMgaGFwcGVucywgZG8g bm90IHJldHVybiB0cnVlIGFuZCBhc2sgdGhlIHVzZXIgZm9yIGEgbmV3IHBhc3N3b3JkLgogCQkJ CWlmICghSGFzUmVzZXQpIHsKQEAgLTc1LDkgKzc1LDkgQEAgcHVibGljIG92ZXJyaWRlIGJvb2wg R2V0IChVUklpc2ggdXJpLCBwYXJhbXMgQ3JlZGVudGlhbEl0ZW1bXSBpdGVtcykKIAkJCQkKIAkJ CUhhc1Jlc2V0ID0gZmFsc2U7CiAJCQlpZiAocmVzdWx0KSB7Ci0JCQkJaWYgKHBhc3N3b3JkSXRl bSAhPSBudWxsKSB7CisJCQkJLyppZiAocGFzc3dvcmRJdGVtICE9IG51bGwpIHsKIAkJCQkJUGFz c3dvcmRTZXJ2aWNlLkFkZFdlYlBhc3N3b3JkIChuZXcgVXJpICh1cmkuVG9TdHJpbmcgKCkpLCBu ZXcgc3RyaW5nIChwYXNzd29yZEl0ZW0uR2V0VmFsdWUgKCkpKTsKLQkJCQl9IGVsc2UgaWYgKHBh c3NwaHJhc2VJdGVtICE9IG51bGwpIHsKKwkJCQl9IGVsc2UqLyBpZiAocGFzc3BocmFzZUl0ZW0g IT0gbnVsbCkgewogCQkJCQlQYXNzd29yZFNlcnZpY2UuQWRkV2ViUGFzc3dvcmQgKG5ldyBVcmkg KHVyaS5Ub1N0cmluZyAoKSksIHBhc3NwaHJhc2VJdGVtLkdldFZhbHVlICgpKTsKIAkJCQl9CiAJ CQl9DQoNCiAgIENvbW1pdDogZTg3YTEyY2ZiZjVhMTRjZWJmMzQ1OTc0MzkzZDlhODdkYzgxZWU3 Nw0KICAgQXV0aG9yOiBVbmd1cmVhbnUgTWFyaXVzIDx0ZXJvbWFyaW9AeWFob28uY29tPiAoVGhl cnpvaykNCiAgICAgRGF0ZTogMjAxMy0xMS0yMCAyMzoyMjo0MyBHTVQNCiAgICAgIFVSTDogaHR0 cHM6Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVsb3AvY29tbWl0L2U4N2ExMmNmYmY1YTE0Y2Vi ZjM0NTk3NDM5M2Q5YTg3ZGM4MWVlNzcNCg0KW0dpdF0gUHJvcGVybHkgZml4IGtleWNoYWluIHNh dmluZwoKRGFtbiB5b3UgaGFja2ZpeCENCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1haW4vc3JjL2Fk ZGlucy9WZXJzaW9uQ29udHJvbC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5HaXQvTW9ub0Rl dmVsb3AuVmVyc2lvbkNvbnRyb2wuR2l0L0dpdENyZWRlbnRpYWxzLmNzCg0KTW9kaWZpZWQ6IG1h aW4vc3JjL2FkZGlucy9WZXJzaW9uQ29udHJvbC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5H aXQvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuR2l0L0dpdENyZWRlbnRpYWxzLmNzDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBHZXQgKFVSSWlz aCB1cmksIHBhcmFtcyBDcmVkZW50aWFsSXRlbVtdIGl0ZW1zKQogCQkJCiAJCQkvLyBXZSBhbHdh eXMgbmVlZCB0byBydW4gdGhlIFRyeUdldCogbWV0aG9kcyBhcyB3ZSBuZWVkIHRoZSBwYXNzcGhy YXNlSXRlbS9wYXNzd29yZEl0ZW0gcG9wdWxhdGVkIGV2ZW4KIAkJCS8vIGlmIHRoZSBwYXNzd29y ZCBzdG9yZSBjb250YWlucyBhbiBpbnZhbGlkIHBhc3N3b3JkL25vIHBhc3N3b3JkCi0JCQlpZiAo LypUcnlHZXRVc2VybmFtZVBhc3N3b3JkICh1cmksIGl0ZW1zLCBvdXQgcGFzc3dvcmRJdGVtKSB8 fCAqL1RyeUdldFBhc3NwaHJhc2UgKHVyaSwgaXRlbXMsIG91dCBwYXNzcGhyYXNlSXRlbSkpIHsK KwkJCWlmIChUcnlHZXRVc2VybmFtZVBhc3N3b3JkICh1cmksIGl0ZW1zLCBvdXQgcGFzc3dvcmRJ dGVtKSB8fCBUcnlHZXRQYXNzcGhyYXNlICh1cmksIGl0ZW1zLCBvdXQgcGFzc3BocmFzZUl0ZW0p KSB7CiAJCQkJLy8gSWYgdGhlIHBhc3N3b3JkIHN0b3JlIGhhcyBhIHBhc3N3b3JkIGFuZCB3ZSBh bHJlYWR5IHRyaWVkIHVzaW5nIGl0LCBpdCBjb3VsZCBiZSBpbmNvcnJlY3QuCiAJCQkJLy8gSWYg dGhpcyBoYXBwZW5zLCBkbyBub3QgcmV0dXJuIHRydWUgYW5kIGFzayB0aGUgdXNlciBmb3IgYSBu ZXcgcGFzc3dvcmQuCiAJCQkJaWYgKCFIYXNSZXNldCkgewpAQCAtNzUsOSArNzUsMTAgQEAgcHVi bGljIG92ZXJyaWRlIGJvb2wgR2V0IChVUklpc2ggdXJpLCBwYXJhbXMgQ3JlZGVudGlhbEl0ZW1b XSBpdGVtcykKIAkJCQkKIAkJCUhhc1Jlc2V0ID0gZmFsc2U7CiAJCQlpZiAocmVzdWx0KSB7Ci0J CQkJLyppZiAocGFzc3dvcmRJdGVtICE9IG51bGwpIHsKLQkJCQkJUGFzc3dvcmRTZXJ2aWNlLkFk ZFdlYlBhc3N3b3JkIChuZXcgVXJpICh1cmkuVG9TdHJpbmcgKCkpLCBuZXcgc3RyaW5nIChwYXNz d29yZEl0ZW0uR2V0VmFsdWUgKCkpKTsKLQkJCQl9IGVsc2UqLyBpZiAocGFzc3BocmFzZUl0ZW0g IT0gbnVsbCkgeworCQkJCXZhciB1c2VyID0gaXRlbXMuT2ZUeXBlPENyZWRlbnRpYWxJdGVtLlVz ZXJuYW1lPiAoKS5GaXJzdE9yRGVmYXVsdCAoKTsKKwkJCQlpZiAocGFzc3dvcmRJdGVtICE9IG51 bGwpIHsKKwkJCQkJUGFzc3dvcmRTZXJ2aWNlLkFkZFdlYlVzZXJOYW1lQW5kUGFzc3dvcmQgKG5l dyBVcmkgKHVyaS5Ub1N0cmluZyAoKSksIHVzZXIuR2V0VmFsdWUgKCksIG5ldyBzdHJpbmcgKHBh c3N3b3JkSXRlbS5HZXRWYWx1ZSAoKSkpOworCQkJCX0gZWxzZSBpZiAocGFzc3BocmFzZUl0ZW0g IT0gbnVsbCkgewogCQkJCQlQYXNzd29yZFNlcnZpY2UuQWRkV2ViUGFzc3dvcmQgKG5ldyBVcmkg KHVyaS5Ub1N0cmluZyAoKSksIHBhc3NwaHJhc2VJdGVtLkdldFZhbHVlICgpKTsKIAkJCQl9CiAJ CQl9CkBAIC0xMTgsMTAgKzExOSwxMCBAQCBzdGF0aWMgYm9vbCBUcnlHZXRVc2VybmFtZVBhc3N3 b3JkIChVUklpc2ggdXJpLCBDcmVkZW50aWFsSXRlbVtdIGl0ZW1zLCBvdXQgQ3JlZAogCQkJaWYg KGl0ZW1zLkxlbmd0aCA9PSAyICYmIHVzZXJuYW1lICE9IG51bGwgJiYgcGFzc3dvcmQgIT0gbnVs bCkgewogCQkJCXBhc3N3b3JkSXRlbSA9IHBhc3N3b3JkOwogCi0JCQkJdmFyIHBhc3N3b3JkVmFs dWUgPSBQYXNzd29yZFNlcnZpY2UuR2V0V2ViUGFzc3dvcmQgKGFjdHVhbFVybCk7Ci0JCQkJaWYg KHBhc3N3b3JkVmFsdWUgIT0gbnVsbCkgewotCQkJCQl1c2VybmFtZS5TZXRWYWx1ZSAoYWN0dWFs VXJsLlVzZXJJbmZvKTsKLQkJCQkJcGFzc3dvcmQuU2V0VmFsdWVOb0NvcHkgKHBhc3N3b3JkVmFs dWUuVG9BcnJheSAoKSk7CisJCQkJdmFyIGNyZWQgPSBQYXNzd29yZFNlcnZpY2UuR2V0V2ViVXNl ck5hbWVBbmRQYXNzd29yZCAoYWN0dWFsVXJsKTsKKwkJCQlpZiAoY3JlZCAhPSBudWxsKSB7CisJ CQkJCXVzZXJuYW1lLlNldFZhbHVlIChjcmVkLkl0ZW0xKTsKKwkJCQkJcGFzc3dvcmQuU2V0VmFs dWVOb0NvcHkgKGNyZWQuSXRlbTIuVG9BcnJheSAoKSk7CiAJCQkJCXJldHVybiB0cnVlOwogCQkJ CX0KIAkJCX0gZWxzZSB7DQoNCiAgIENvbW1pdDogNjA3ZTk1YTdlNjYxYmFlZmE0MDRmMmI4MTQ5 YzRiOTFlODAwYzVmYw0KICAgQXV0aG9yOiBNaWtlIEtyw7xnZXIgPG1rcnVlZ2VyQHhhbWFyaW4u Y29tPiAobWtydWVnZXIpDQogICAgIERhdGU6IDIwMTMtMTEtMjEgMDY6MDU6MjMgR01UDQogICAg ICBVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbW1pdC82MDdlOTVh N2U2NjFiYWVmYTQwNGYyYjgxNDljNGI5MWU4MDBjNWZjDQoNCltTb3VyY2VFZGl0b3JdIFBhcnNl ciBlcnJvciB1bmRlcmxpbmVzIGFyZSBub3cgbW9yZSBwcmVjaXNlLg0KDQpDaGFuZ2VkIHBhdGhz OgogIE0gbWFpbi9zcmMvYWRkaW5zL01vbm9EZXZlbG9wLlNvdXJjZUVkaXRvcjIvTW9ub0RldmVs b3AuU291cmNlRWRpdG9yL1NvdXJjZUVkaXRvcldpZGdldC5jcwoNCk1vZGlmaWVkOiBtYWluL3Ny Yy9hZGRpbnMvTW9ub0RldmVsb3AuU291cmNlRWRpdG9yMi9Nb25vRGV2ZWxvcC5Tb3VyY2VFZGl0 b3IvU291cmNlRWRpdG9yV2lkZ2V0LmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMTcyMCw2ICsxNzIwLDE0 IEBAIHB1YmxpYyBFcnJvck1hcmtlciAoVGV4dERvY3VtZW50IGRvYywgRXJyb3IgaW5mbywgRG9j dW1lbnRMaW5lIGxpbmUpCiAJCQlXYXZlID0gdHJ1ZTsKIAkJCQogCQkJU3RhcnRDb2wgPSBJbmZv LlJlZ2lvbi5CZWdpbkNvbHVtbjsKKwkJCXZhciBzdGFydE9mZnNldCA9IGxpbmUuT2Zmc2V0Owor CQkJd2hpbGUgKFN0YXJ0Q29sIDwgbGluZS5MZW5ndGgpIHsKKwkJCQljaGFyIGNoID0gZG9jLkdl dENoYXJBdCAoc3RhcnRPZmZzZXQgKyBTdGFydENvbCAtIDEpOworCQkJCWlmICghY2hhci5Jc1do aXRlU3BhY2UgKGNoKSkKKwkJCQkJYnJlYWs7CisJCQkJU3RhcnRDb2wrKzsKKwkJCX0KKwogCQkJ aWYgKEluZm8uUmVnaW9uLkVuZENvbHVtbiA+IFN0YXJ0Q29sKSB7CiAJCQkJRW5kQ29sID0gSW5m by5SZWdpb24uRW5kQ29sdW1uOwogCQkJfSBlbHNlIHsNCg0KICAgQ29tbWl0OiBiNjExZmE2YzZk YmJiZmY0MmY5Yjk0ZjhjMDhlYmE1NzdmOTFkNDlhDQogICBBdXRob3I6IE1pa2UgS3LDvGdlciA8 bWtydWVnZXJAeGFtYXJpbi5jb20+IChta3J1ZWdlcikNCiAgICAgRGF0ZTogMjAxMy0xMS0yMSAw NjowNToyMyBHTVQNCiAgICAgIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVs b3AvY29tbWl0L2I2MTFmYTZjNmRiYmJmZjQyZjliOTRmOGMwOGViYTU3N2Y5MWQ0OWENCg0KRml4 ZWQgJ0J1ZyAxNjM2NiAtIEVycm9yIGhpbnRzIGFyZSBub3QgZGlzcGxheWVkIGlmIHRoZSBjb2Rl IGhhcyBzbWFsbAppbmRlbnQuJy4NCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1haW4vc3JjL2NvcmUv TW9uby5UZXh0ZWRpdG9yL01vbm8uVGV4dEVkaXRvci9HdWkvVGV4dEFyZWEuY3MKDQpNb2RpZmll ZDogbWFpbi9zcmMvY29yZS9Nb25vLlRleHRlZGl0b3IvTW9uby5UZXh0RWRpdG9yL0d1aS9UZXh0 QXJlYS5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KQEAgLTI2NTMsNyArMjY1Myw3IEBAIHB1YmxpYyBpbnQgUmVw bGFjZUFsbCAoc3RyaW5nIHdpdGhQYXR0ZXJuKQogCQkKIAkJdm9pZCBTaG93VG9vbHRpcCAoR2Rr Lk1vZGlmaWVyVHlwZSBtb2RpZmllclN0YXRlKQogCQl7Ci0JCQlpZiAobXggPCBUZXh0Vmlld01h cmdpbi5YT2Zmc2V0ICsgVGV4dFZpZXdNYXJnaW4uVGV4dFN0YXJ0UG9zaXRpb24pIHsKKwkJCWlm IChteCA8IFRleHRWaWV3TWFyZ2luLlRleHRTdGFydFBvc2l0aW9uKSB7CiAJCQkJSGlkZVRvb2x0 aXAgKCk7CiAJCQkJcmV0dXJuOwogCQkJfQ0KDQogICBDb21taXQ6IGNiODBiMGJiZmFmNjgzOGUx YjkyZTM1NmMyNjgyOWFhYWM4M2QwMDANCiAgIEF1dGhvcjogTWlrZSBLcsO8Z2VyIDxta3J1ZWdl ckB4YW1hcmluLmNvbT4gKG1rcnVlZ2VyKQ0KICAgICBEYXRlOiAyMDEzLTExLTIxIDA3OjAwOjQz IEdNVA0KICAgICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21t aXQvY2I4MGIwYmJmYWY2ODM4ZTFiOTJlMzU2YzI2ODI5YWFhYzgzZDAwMA0KDQpGaXhlZCAnQnVn IDE2MzY4IC0gRG9jdW1lbnQgZm9ybWF0dGluZzogTmV3IGxpbmUgaW5zaWRlL2Fyb3VuZCAjcmVn aW9uIGltcHJvdmVtZW50PycNCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1haW4vZXh0ZXJuYWwvbnJl ZmFjdG9yeQoNCk1vZGlmaWVkOiBtYWluL2V4dGVybmFsL25yZWZhY3RvcnkNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N CkBAIC0xICsxIEBACi1TdWJwcm9qZWN0IGNvbW1pdCBlYTc1YmFjM2YzNzQwNjFiYTNjMjhhZTAw ZjdiOTY1MTg5ZjkzZjMxCitTdWJwcm9qZWN0IGNvbW1pdCA2NTA5ZTc2NDhmNjA1NjQ5ZGNmMDFm ODI2Yzk2YTU3YzRhNTU1NjliDQoNCiAgIENvbW1pdDogMzFhZDRjMzYxYWMyNTY1ZjJmOWVmOGQ1 OWRhZmFlY2U2OGQwOTljYQ0KICAgQXV0aG9yOiBKw6lyw6ltaWUgTGF2YWwgPGplcmVtaWUubGF2 YWxAZ21haWwuY29tPiAoZ2FydW1hKQ0KICAgICBEYXRlOiAyMDEzLTExLTIxIDE2OjIxOjI1IEdN VA0KICAgICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21taXQv MzFhZDRjMzYxYWMyNTY1ZjJmOWVmOGQ1OWRhZmFlY2U2OGQwOTljYQ0KDQpbYnVpbGRdIEJ1bXAg bWQtYWRkaW5zDQoNCkNoYW5nZWQgcGF0aHM6CiAgTSB2ZXJzaW9uLWNoZWNrcwoNCk1vZGlmaWVk OiB2ZXJzaW9uLWNoZWNrcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTE3LDcgKzE3LDcgQEAgREVQWzBdPW1k LWFkZGlucwogREVQX05BTUVbMF09TURBRERJTlMKIERFUF9QQVRIWzBdPSR7dG9wX3NyY2Rpcn0v Li4vbWQtYWRkaW5zCiBERVBfTU9EVUxFWzBdPWdpdEBnaXRodWIuY29tOnhhbWFyaW4vbWQtYWRk aW5zLmdpdAotREVQX05FRURFRF9WRVJTSU9OWzBdPTM5M2JhNGJhOTQ2M2U4MmZhOWI4ZGM3OGEx YjQwMWQ2NGExNDQxNTUKK0RFUF9ORUVERURfVkVSU0lPTlswXT0wMmZjOGZhNzIzNzUzOGEwZGNk NzQ0ZWQ5ZjE0OWUzZmM2YWJjM2YyCiBERVBfQlJBTkNIX0FORF9SRU1PVEVbMF09Im1hc3RlciBv cmlnaW4vbWFzdGVyIgogCiAjIGhlYXAtc2hvdA0KDQogICBDb21taXQ6IDQ3OTlmMWMyMmJlYzU4 MTgzNWRmOWE1NjFjMjI5OWJiNDBhYmIxZDQNCiAgIEF1dGhvcjogSsOpcsOpbWllIExhdmFsIDxq ZXJlbWllLmxhdmFsQGdtYWlsLmNvbT4gKGdhcnVtYSkNCiAgICAgRGF0ZTogMjAxMy0xMS0yMSAx NjoyNzoxMiBHTVQNCiAgICAgIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVs b3AvY29tbWl0LzQ3OTlmMWMyMmJlYzU4MTgzNWRmOWE1NjFjMjI5OWJiNDBhYmIxZDQNCg0KTWVy Z2UgYnJhbmNoICdtYXN0ZXInIGludG8gbW9ub2RldmVsb3AtNC4zLjAtYnJhbmNoCgpDb25mbGlj dHM6Cgl2ZXJzaW9uLWNoZWNrcw0KDQpDaGFuZ2VkIHBhdGhzOgogIE0gbWFpbi9leHRlcm5hbC9t b25vLWFkZGlucwogIE0gbWFpbi9leHRlcm5hbC9ucmVmYWN0b3J5CiAgTSBtYWluL3NyYy9hZGRp bnMvQ1NoYXJwQmluZGluZy9Nb25vRGV2ZWxvcC5DU2hhcnAuUmVmYWN0b3JpbmcvQ1NoYXJwUmVm ZXJlbmNlRmluZGVyLmNzCiAgTSBtYWluL3NyYy9hZGRpbnMvTW9ub0RldmVsb3AuUmVmYWN0b3Jp bmcvTW9ub0RldmVsb3AuUmVmYWN0b3JpbmcvUmVmYWN0b3JpbmdTZXJ2aWNlLmNzCiAgTSBtYWlu L3NyYy9hZGRpbnMvTW9ub0RldmVsb3AuU291cmNlRWRpdG9yMi9Nb25vRGV2ZWxvcC5Tb3VyY2VF ZGl0b3IvU291cmNlRWRpdG9yVmlldy5jcwogIE0gbWFpbi9zcmMvYWRkaW5zL01vbm9EZXZlbG9w LlNvdXJjZUVkaXRvcjIvTW9ub0RldmVsb3AuU291cmNlRWRpdG9yL1NvdXJjZUVkaXRvcldpZGdl dC5jcwogIE0gbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZlbG9wLlZlcnNp b25Db250cm9sLkdpdC5UZXN0cy9CYXNlR2l0UmVwb3NpdG9yeVRlc3RzLmNzCiAgTSBtYWluL3Ny Yy9hZGRpbnMvVmVyc2lvbkNvbnRyb2wvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuR2l0L01v bm9EZXZlbG9wLlZlcnNpb25Db250cm9sLkdpdC9HaXRDcmVkZW50aWFscy5jcwogIE0gbWFpbi9z cmMvY29yZS9Nb25vLlRleHRlZGl0b3IvTW9uby5UZXh0RWRpdG9yLlV0aWxzL1RleHRGaWxlVXRp bGl0eS5jcwogIE0gbWFpbi9zcmMvY29yZS9Nb25vLlRleHRlZGl0b3IvTW9uby5UZXh0RWRpdG9y LlZpL1ZpTW9kZS5jcwogIE0gbWFpbi9zcmMvY29yZS9Nb25vLlRleHRlZGl0b3IvTW9uby5UZXh0 RWRpdG9yL0d1aS9UZXh0QXJlYS5jcwogIE0gbWFpbi9zcmMvY29yZS9Nb25vRGV2ZWxvcC5JZGUv TW9ub0RldmVsb3AuSWRlLlRlbXBsYXRlcy9TaW5nbGVGaWxlRGVzY3JpcHRpb25UZW1wbGF0ZS5j cwogIE0gbWFpbi9zcmMvY29yZS9Nb25vRGV2ZWxvcC5UZXh0RWRpdG9yLlRlc3RzL01vbm8uVGV4 dEVkaXRvci5UZXN0cy9UZXh0RmlsZVJlYWRlclRlc3RzLmNzCiAgTSB2ZXJzaW9uLWNoZWNrcwoN Ck1vZGlmaWVkOiBtYWluL2V4dGVybmFsL21vbm8tYWRkaW5zDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMSAr MSBAQAotU3VicHJvamVjdCBjb21taXQgMGExYzBhMDZlZDczODE5MDZhMjc0NjZhZmE5MWJkODI0 Zjc1ZGUwMgorU3VicHJvamVjdCBjb21taXQgMjFkNzE1YWRlZGFhOWE4YmMxMjU1ZGU3ZGRmMGQy NDQ1NjIyYzE4Nw0KDQpNb2RpZmllZDogbWFpbi9leHRlcm5hbC9ucmVmYWN0b3J5DQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQpAQCAtMSArMSBAQAotU3VicHJvamVjdCBjb21taXQgZWE3NWJhYzNmMzc0MDYxYmEzYzI4 YWUwMGY3Yjk2NTE4OWY5M2YzMQorU3VicHJvamVjdCBjb21taXQgNjUwOWU3NjQ4ZjYwNTY0OWRj ZjAxZjgyNmM5NmE1N2M0YTU1NTY5Yg0KDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL0NTaGFy cEJpbmRpbmcvTW9ub0RldmVsb3AuQ1NoYXJwLlJlZmFjdG9yaW5nL0NTaGFycFJlZmVyZW5jZUZp bmRlci5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KQEAgLTUyLDcgKzUyLDcgQEAgY2xhc3MgQ1NoYXJwUmVmZXJl bmNlRmluZGVyIDogUmVmZXJlbmNlRmluZGVyCiAJCUxpc3Q8RmlsZVBhdGg+IGZpbGVzID0gbmV3 IExpc3Q8RmlsZVBhdGg+ICgpOwogCQlMaXN0PFR1cGxlPEZpbGVQYXRoLCBNb25vRGV2ZWxvcC5J ZGUuR3VpLkRvY3VtZW50Pj4gb3BlbkRvY3VtZW50cyA9IG5ldyBMaXN0PFR1cGxlPEZpbGVQYXRo LCBNb25vRGV2ZWxvcC5JZGUuR3VpLkRvY3VtZW50Pj4gKCk7CiAJCQotCQlzdHJpbmcgbWVtYmVy TmFtZTsNCisJCXN0cmluZyBtZW1iZXJOYW1lOwogCQlzdHJpbmcga2V5d29yZE5hbWU7CiAJCQog CQlwdWJsaWMgQ1NoYXJwUmVmZXJlbmNlRmluZGVyICgpCkBAIC02MywxNyArNjMsMTcgQEAgcHVi bGljIENTaGFycFJlZmVyZW5jZUZpbmRlciAoKQogCQlwdWJsaWMgdm9pZCBTZXRTZWFyY2hlZE1l bWJlcnMgKElFbnVtZXJhYmxlPG9iamVjdD4gbWVtYmVycykKIAkJewogCQkJc2VhcmNoZWRNZW1i ZXJzID0gbmV3IExpc3Q8b2JqZWN0PiAobWVtYmVycyk7Ci0JCQl2YXIgZmlyc3RNZW1iZXIgPSBz ZWFyY2hlZE1lbWJlcnMuRmlyc3RPckRlZmF1bHQgKCk7DQotCQkJaWYgKGZpcnN0TWVtYmVyIGlz IElOYW1lZEVsZW1lbnQpIHsNCisJCQl2YXIgZmlyc3RNZW1iZXIgPSBzZWFyY2hlZE1lbWJlcnMu Rmlyc3RPckRlZmF1bHQgKCk7CisJCQlpZiAoZmlyc3RNZW1iZXIgaXMgSU5hbWVkRWxlbWVudCkg ewogCQkJCXZhciBuYW1lZEVsZW1lbnQgPSAoSU5hbWVkRWxlbWVudClmaXJzdE1lbWJlcjsKIAkJ CQl2YXIgbmFtZSA9IG5hbWVkRWxlbWVudC5OYW1lOwogCQkJCWlmIChuYW1lZEVsZW1lbnQgaXMg SU1ldGhvZCAmJiAoKChJTWV0aG9kKW5hbWVkRWxlbWVudCkuSXNDb25zdHJ1Y3RvciB8ICgoSU1l dGhvZCluYW1lZEVsZW1lbnQpLklzRGVzdHJ1Y3RvcikpCiAJCQkJCW5hbWUgPSAoKElNZXRob2Qp bmFtZWRFbGVtZW50KS5EZWNsYXJpbmdUeXBlLk5hbWU7Ci0JCQkJbWVtYmVyTmFtZSA9IG5hbWU7 DQotDQotCQkJCWtleXdvcmROYW1lID0gQ1NoYXJwQW1iaWVuY2UuTmV0VG9DU2hhcnBUeXBlTmFt ZSAobmFtZWRFbGVtZW50LkZ1bGxOYW1lKTsNCi0JCQkJaWYgKGtleXdvcmROYW1lID09IG5hbWVk RWxlbWVudC5GdWxsTmFtZSkNCi0JCQkJCWtleXdvcmROYW1lID0gbnVsbDsNCisJCQkJbWVtYmVy TmFtZSA9IG5hbWU7CisKKwkJCQlrZXl3b3JkTmFtZSA9IENTaGFycEFtYmllbmNlLk5ldFRvQ1No YXJwVHlwZU5hbWUgKG5hbWVkRWxlbWVudC5GdWxsTmFtZSk7CisJCQkJaWYgKGtleXdvcmROYW1l ID09IG5hbWVkRWxlbWVudC5GdWxsTmFtZSkKKwkJCQkJa2V5d29yZE5hbWUgPSBudWxsOwogCQkJ fQogCQkJaWYgKGZpcnN0TWVtYmVyIGlzIHN0cmluZykKIAkJCQltZW1iZXJOYW1lID0gZmlyc3RN ZW1iZXIuVG9TdHJpbmcgKCk7CkBAIC0xNzYsNyArMTc2LDcgQEAgTWVtYmVyUmVmZXJlbmNlIEdl dFJlZmVyZW5jZSAoUHJvamVjdCBwcm9qZWN0LCBSZXNvbHZlUmVzdWx0IHJlc3VsdCwgQXN0Tm9k ZSBub2QKIAkJc2tpcDoKIAogCQkJdmFyIHJlZ2lvbiA9IG5ldyBEb21SZWdpb24gKGZpbGVOYW1l LCBub2RlLlN0YXJ0TG9jYXRpb24sIG5vZGUuRW5kTG9jYXRpb24pOwotDQorCiAJCQl2YXIgbGVu Z3RoID0gbm9kZSBpcyBQcmltaXRpdmVUeXBlID8ga2V5d29yZE5hbWUuTGVuZ3RoIDogbm9kZS5F bmRMb2NhdGlvbi5Db2x1bW4gLSBub2RlLlN0YXJ0TG9jYXRpb24uQ29sdW1uOwogCQkJaWYgKHZh bGlkID09IG51bGwpCiAJCQkJdmFsaWQgPSBzZWFyY2hlZE1lbWJlcnMuRmlyc3RPckRlZmF1bHQg KCk7CkBAIC0zMDQsNyArMzA0LDEyIEBAIHB1YmxpYyBvdmVycmlkZSBJRW51bWVyYWJsZTxNZW1i ZXJSZWZlcmVuY2U+IEZpbmRSZWZlcmVuY2VzIChQcm9qZWN0IHByb2plY3QsIElQCiAJCQlmb3Jl YWNoICh2YXIgZmlsZSBpbiBmaWxlcykgewogCQkJCWlmIChtb25pdG9yICE9IG51bGwpCiAJCQkJ CW1vbml0b3IuU3RlcCAoMSk7Ci0JCQkJc3RyaW5nIHRleHQgPSBNb25vLlRleHRFZGl0b3IuVXRp bHMuVGV4dEZpbGVVdGlsaXR5LlJlYWRBbGxUZXh0IChmaWxlKTsKKwkJCQlzdHJpbmcgdGV4dDsK KwkJCQl0cnkgeworCQkJCQl0ZXh0ID0gTW9uby5UZXh0RWRpdG9yLlV0aWxzLlRleHRGaWxlVXRp bGl0eS5SZWFkQWxsVGV4dCAoZmlsZSk7CisJCQkJfSBjYXRjaCAoRXhjZXB0aW9uKSB7CisJCQkJ CWNvbnRpbnVlOworCQkJCX0KIAkJCQlpZiAobWVtYmVyTmFtZSAhPSBudWxsICYmIHRleHQuSW5k ZXhPZiAobWVtYmVyTmFtZSwgU3RyaW5nQ29tcGFyaXNvbi5PcmRpbmFsKSA8IDAgJiYKIAkJCQkJ KGtleXdvcmROYW1lID09IG51bGwgfHwgdGV4dC5JbmRleE9mIChrZXl3b3JkTmFtZSwgU3RyaW5n Q29tcGFyaXNvbi5PcmRpbmFsKSA8IDApKQogCQkJCQljb250aW51ZTsNCg0KTW9kaWZpZWQ6IG1h aW4vc3JjL2FkZGlucy9Nb25vRGV2ZWxvcC5SZWZhY3RvcmluZy9Nb25vRGV2ZWxvcC5SZWZhY3Rv cmluZy9SZWZhY3RvcmluZ1NlcnZpY2UuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC00MSw2ICs0MSw3IEBA CiB1c2luZyBNb25vLlRleHRFZGl0b3I7CiB1c2luZyBNb25vRGV2ZWxvcC5JZGUuVHlwZVN5c3Rl bTsKIHVzaW5nIFN5c3RlbS5EaWFnbm9zdGljczsKK3VzaW5nIE1vbm9EZXZlbG9wLkNvcmUuSW5z dHJ1bWVudGF0aW9uOwogCiBuYW1lc3BhY2UgTW9ub0RldmVsb3AuUmVmYWN0b3JpbmcKIHsKQEAg LTIwNCw0OSArMjA1LDI2IEBAIHB1YmxpYyBzdGF0aWMgVGFzazxJRW51bWVyYWJsZTxDb2RlQWN0 aW9uPj4gR2V0VmFsaWRBY3Rpb25zIChEb2N1bWVudCBkb2MsIFRleHRMCiAJCQlzdHJpbmcgZGlz YWJsZWROb2RlcyA9IGVkaXRvciAhPSBudWxsID8gUHJvcGVydHlTZXJ2aWNlLkdldCAoIkNvbnRl eHRBY3Rpb25zLiIgKyBlZGl0b3IuTWltZVR5cGUsICIiKSA/PyAiIiA6ICIiOwogCQkJcmV0dXJu IFRhc2suRmFjdG9yeS5TdGFydE5ldyAoZGVsZWdhdGUgewogCQkJCXZhciByZXN1bHQgPSBuZXcg TGlzdDxDb2RlQWN0aW9uPiAoKTsKKwkJCQl2YXIgdGltZXIgPSBJbnN0cnVtZW50YXRpb25TZXJ2 aWNlLkNyZWF0ZVRpbWVyQ291bnRlciAoIlNvdXJjZSBhbmFseXNpcyBiYWNrZ3JvdW5kIHRhc2si LCAiU291cmNlIGFuYWx5c2lzIik7CisJCQkJdGltZXIuQmVnaW5UaW1pbmcgKCk7CiAJCQkJdHJ5 IHsKLQkJCQkJI2lmIFBST0ZJTEUKLQkJCQkJdmFyIHJ1bkxpc3QgPSBuZXcgTGlzdDxUdXBsZTxs b25nLCBzdHJpbmc+PiAoKTsKLQkJCQkJdmFyIGdsb2JhbENsb2NrID0gbmV3IFN0b3B3YXRjaCgp OwotCQkJCQlnbG9iYWxDbG9jay5TdGFydCAoKTsKLQotCQkJCQkjZW5kaWYKLQogCQkJCQl2YXIg cGFyc2VkRG9jdW1lbnQgPSBkb2MuUGFyc2VkRG9jdW1lbnQ7CiAJCQkJCWlmIChlZGl0b3IgIT0g bnVsbCAmJiBwYXJzZWREb2N1bWVudCAhPSBudWxsICYmIHBhcnNlZERvY3VtZW50LkNyZWF0ZVJl ZmFjdG9yaW5nQ29udGV4dCAhPSBudWxsKSB7CiAJCQkJCQl2YXIgY3R4ID0gcGFyc2VkRG9jdW1l bnQuQ3JlYXRlUmVmYWN0b3JpbmdDb250ZXh0IChkb2MsIGNhbmNlbGxhdGlvblRva2VuKTsKIAkJ CQkJCWlmIChjdHggIT0gbnVsbCkgewogCQkJCQkJCWZvcmVhY2ggKHZhciBwcm92aWRlciBpbiBj b250ZXh0QWN0aW9ucy5XaGVyZSAoZml4ID0+IGRpc2FibGVkTm9kZXMuSW5kZXhPZiAoZml4Lklk U3RyaW5nLCBTdHJpbmdDb21wYXJpc29uLk9yZGluYWwpIDwgMCkpIHsKLQkJCQkJCQkJI2lmIFBS T0ZJTEUKLQkJCQkJCQkJdmFyIGNsb2NrID0gbmV3IFN0b3B3YXRjaCgpOwotCQkJCQkJCQljbG9j ay5TdGFydCAoKTsKLQkJCQkJCQkJI2VuZGlmCiAJCQkJCQkJCXRyeSB7CiAJCQkJCQkJCQlyZXN1 bHQuQWRkUmFuZ2UgKHByb3ZpZGVyLkdldEFjdGlvbnMgKGRvYywgY3R4LCBsb2MsIGNhbmNlbGxh dGlvblRva2VuKSk7CiAJCQkJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogCQkJCQkJCQkJ TG9nZ2luZ1NlcnZpY2UuTG9nRXJyb3IgKCJFcnJvciBpbiBjb250ZXh0IGFjdGlvbiBwcm92aWRl ciAiICsgcHJvdmlkZXIuVGl0bGUsIGV4KTsKIAkJCQkJCQkJfQotCQkJCQkJCQkjaWYgUFJPRklM RQotCQkJCQkJCQljbG9jay5TdG9wICgpOwotCQkJCQkJCQlsb2NrIChydW5MaXN0KSB7Ci0JCQkJ CQkJCQlydW5MaXN0LkFkZCAoVHVwbGUuQ3JlYXRlIChjbG9jay5FbGFwc2VkTWlsbGlzZWNvbmRz LCBwcm92aWRlci5UaXRsZSkpOyAKLQkJCQkJCQkJfQotCQkJCQkJCQkjZW5kaWYKIAkJCQkJCQl9 CiAJCQkJCQl9CiAJCQkJCX0KLQkJCQkJI2lmIFBST0ZJTEUKLQkJCQkJZ2xvYmFsQ2xvY2suU3Rv cCAoKTsKLQkJCQkJcnVuTGlzdC5Tb3J0ICgpOwotCQkJCQlDb25zb2xlLldyaXRlTGluZSAoIkFs bDogIiArIGdsb2JhbENsb2NrLkVsYXBzZWRNaWxsaXNlY29uZHMgKyJtcyIpOwotCQkJCQlmb3Jl YWNoICh2YXIgaXRlbSBpbiBydW5MaXN0KSB7Ci0JCQkJCQlpZiAoaXRlbS5JdGVtMSA9PSAwKQot CQkJCQkJCWNvbnRpbnVlOwotCQkJCQkJQ29uc29sZS5Xcml0ZUxpbmUgKGl0ZW0uSXRlbTEgKyJt c1x0OiAiICsgaXRlbS5JdGVtMik7Ci0JCQkJCX0KLQkJCQkJI2VuZGlmCiAJCQkJfSBjYXRjaCAo RXhjZXB0aW9uIGV4KSB7CiAJCQkJCUxvZ2dpbmdTZXJ2aWNlLkxvZ0Vycm9yICgiRXJyb3IgaW4g YW5hbHlzaXMgc2VydmljZSIsIGV4KTsKKwkJCQl9IGZpbmFsbHkgeworCQkJCQl0aW1lci5FbmRU aW1pbmcgKCk7CiAJCQkJfQogCQkJCXJldHVybiAoSUVudW1lcmFibGU8Q29kZUFjdGlvbj4pcmVz dWx0OwogCQkJfSwgY2FuY2VsbGF0aW9uVG9rZW4pOw0KDQpNb2RpZmllZDogbWFpbi9zcmMvYWRk aW5zL01vbm9EZXZlbG9wLlNvdXJjZUVkaXRvcjIvTW9ub0RldmVsb3AuU291cmNlRWRpdG9yL1Nv dXJjZUVkaXRvclZpZXcuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC02OTIsMTEgKzY5MiwxNSBAQCBwdWJs aWMgdm9pZCBTYXZlIChzdHJpbmcgZmlsZU5hbWUsIEVuY29kaW5nIGVuY29kaW5nKQogCQkJCQl2 YXIgd3JpdGVCb20gPSBoYWRCb207CiAJCQkJCXZhciB3cml0ZVRleHQgPSBEb2N1bWVudC5UZXh0 OwogCQkJCQlpZiAod3JpdGVFbmNvZGluZyA9PSBudWxsKSB7Ci0JCQkJCQl3cml0ZUVuY29kaW5n ID0gRW5jb2RpbmcuVVRGODsKLQkJCQkJCS8vIERpc2FibGVkLiBTaG93cyB1cCBpbiB0aGUgc291 cmNlIGNvbnRyb2wgYXMgZGlmZiwgaXQncyBhdG0gY29uZnVzaW5nIGZvciB0aGUgdXNlcnMgdG8g c2VlIGEgY2hhbmdlIHdpdGhvdXQKLQkJCQkJCS8vIGNoYW5nZWQgZmlsZXMuCi0JCQkJCQl3cml0 ZUJvbSA9IGZhbHNlOwotLy8JCQkJCQl3cml0ZUJvbSA9IU1vbm8uVGV4dEVkaXRvci5VdGlscy5U ZXh0RmlsZVV0aWxpdHkuSXNBU0NJSSAod3JpdGVUZXh0KTsKKwkJCQkJCWlmICh0aGlzLmVuY29k aW5nICE9IG51bGwpIHsKKwkJCQkJCQl3cml0ZUVuY29kaW5nID0gdGhpcy5lbmNvZGluZzsKKwkJ CQkJCX0gZWxzZSB7IAorCQkJCQkJCXdyaXRlRW5jb2RpbmcgPSBFbmNvZGluZy5VVEY4OworCQkJ CQkJCS8vIERpc2FibGVkLiBTaG93cyB1cCBpbiB0aGUgc291cmNlIGNvbnRyb2wgYXMgZGlmZiwg aXQncyBhdG0gY29uZnVzaW5nIGZvciB0aGUgdXNlcnMgdG8gc2VlIGEgY2hhbmdlIHdpdGhvdXQK KwkJCQkJCQkvLyBjaGFuZ2VkIGZpbGVzLgorCQkJCQkJCXdyaXRlQm9tID0gZmFsc2U7CisJLy8J CQkJCQl3cml0ZUJvbSA9IU1vbm8uVGV4dEVkaXRvci5VdGlscy5UZXh0RmlsZVV0aWxpdHkuSXNB U0NJSSAod3JpdGVUZXh0KTsKKwkJCQkJCX0KIAkJCQkJfQogCQkJCQlNb25vLlRleHRFZGl0b3Iu VXRpbHMuVGV4dEZpbGVVdGlsaXR5LldyaXRlVGV4dCAoZmlsZU5hbWUsIHdyaXRlVGV4dCwgd3Jp dGVFbmNvZGluZywgd3JpdGVCb20pOwogCQkJCX0gY2F0Y2ggKEludmFsaWRFbmNvZGluZ0V4Y2Vw dGlvbikgewpAQCAtODM1LDkgKzgzOSw5IEBAIHB1YmxpYyB2b2lkIExvYWQgKHN0cmluZyBmaWxl TmFtZSwgRW5jb2RpbmcgbG9hZEVuY29kaW5nLCBib29sIHJlbG9hZCA9IGZhbHNlKQogCQkJZWxz ZSB7CiAJCQkJaW5Mb2FkID0gdHJ1ZTsKIAkJCQlpZiAobG9hZEVuY29kaW5nID09IG51bGwpIHsK LQkJCQkJdGV4dCA9IFRleHRGaWxlVXRpbGl0eS5SZWFkQWxsVGV4dCAoZmlsZU5hbWUsIG91dCBo YWRCb20sIG91dCB0aGlzLmVuY29kaW5nKTsKLQkJCQl9Ci0JCQkJZWxzZSB7CisJCQkJCXRleHQg PSBUZXh0RmlsZVV0aWxpdHkuUmVhZEFsbFRleHQgKGZpbGVOYW1lLCBvdXQgaGFkQm9tLCBvdXQg ZW5jb2RpbmcpOworCQkJCX0gZWxzZSB7CisJCQkJCWVuY29kaW5nID0gbG9hZEVuY29kaW5nOwog CQkJCQl0ZXh0ID0gVGV4dEZpbGVVdGlsaXR5LlJlYWRBbGxUZXh0IChmaWxlTmFtZSwgbG9hZEVu Y29kaW5nLCBvdXQgaGFkQm9tKTsKIAkJCQl9CiAJCQkJaWYgKHJlbG9hZCkgewpAQCAtOTEwLDcg KzkxNCw3IEBAIGludGVybmFsIHZvaWQgU3RvcmVTZXR0aW5ncyAoKQogCiAJCWJvb2wgd2Fybk92 ZXJ3cml0ZSA9IGZhbHNlOwogCQlib29sIGluTG9hZCA9IGZhbHNlOwotCQlFbmNvZGluZyBlbmNv ZGluZyA9IG51bGw7CisJCUVuY29kaW5nIGVuY29kaW5nOwogCQlib29sIGhhZEJvbSA9IGZhbHNl OwogCiAJCWludGVybmFsIHZvaWQgUmVwbGFjZUNvbnRlbnQgKHN0cmluZyBmaWxlTmFtZSwgc3Ry aW5nIGNvbnRlbnQsIEVuY29kaW5nIGVuY29kaW5nKQ0KDQpNb2RpZmllZDogbWFpbi9zcmMvYWRk aW5zL01vbm9EZXZlbG9wLlNvdXJjZUVkaXRvcjIvTW9ub0RldmVsb3AuU291cmNlRWRpdG9yL1Nv dXJjZUVkaXRvcldpZGdldC5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTkyNyw3ICs5MjcsNyBAQCBpbnRl cm5hbCB2b2lkIENvbnZlcnRMaW5lRW5kaW5ncyAoKQogCQkJCQluZXdUZXh0LkFwcGVuZCAoY29y cmVjdEVvbCk7CiAJCQl9CiAJCQl2aWV3LlN0b3JlU2V0dGluZ3MgKCk7Ci0JCQl2aWV3LlJlcGxh Y2VDb250ZW50IChEb2N1bWVudC5GaWxlTmFtZSwgbmV3VGV4dC5Ub1N0cmluZyAoKSwgbnVsbCk7 CisJCQl2aWV3LlJlcGxhY2VDb250ZW50IChEb2N1bWVudC5GaWxlTmFtZSwgbmV3VGV4dC5Ub1N0 cmluZyAoKSwgdmlldy5Tb3VyY2VFbmNvZGluZyk7CiAJCQlEb2N1bWVudC5IYXNMaW5lRW5kaW5n TWlzbWF0Y2hPblRleHRTZXQgPSBmYWxzZTsKIAkJCXZpZXcuTG9hZFNldHRpbmdzICgpOwogCQl9 CkBAIC0xMDczLDcgKzEwNzMsNyBAQCBwdWJsaWMgdm9pZCBTaG93QXV0b1NhdmVXYXJuaW5nIChz dHJpbmcgZmlsZU5hbWUpCiAJCQkJCQlBdXRvU2F2ZS5SZW1vdmVBdXRvU2F2ZUZpbGUgKGZpbGVO YW1lKTsKIAkJCQkJCVRleHRFZGl0b3IuR3JhYkZvY3VzICgpOwogCQkJCQkJdmlldy5Mb2FkIChm aWxlTmFtZSk7Ci0JCQkJCQl2aWV3LlJlcGxhY2VDb250ZW50IChmaWxlTmFtZSwgY29udGVudCwg bnVsbCk7CisJCQkJCQl2aWV3LlJlcGxhY2VDb250ZW50IChmaWxlTmFtZSwgY29udGVudCwgdmll dy5Tb3VyY2VFbmNvZGluZyk7CiAJCQkJCQl2aWV3LldvcmtiZW5jaFdpbmRvdy5Eb2N1bWVudC5S ZXBhcnNlRG9jdW1lbnQgKCk7CiAJCQkJCQl2aWV3LklzRGlydHkgPSB0cnVlOwogCQkJCQl9IGNh dGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTE3MjAsNiArMTcyMCwxNCBAQCBwdWJsaWMgRXJyb3JN YXJrZXIgKFRleHREb2N1bWVudCBkb2MsIEVycm9yIGluZm8sIERvY3VtZW50TGluZSBsaW5lKQog CQkJV2F2ZSA9IHRydWU7CiAJCQkKIAkJCVN0YXJ0Q29sID0gSW5mby5SZWdpb24uQmVnaW5Db2x1 bW47CisJCQl2YXIgc3RhcnRPZmZzZXQgPSBsaW5lLk9mZnNldDsKKwkJCXdoaWxlIChTdGFydENv bCA8IGxpbmUuTGVuZ3RoKSB7CisJCQkJY2hhciBjaCA9IGRvYy5HZXRDaGFyQXQgKHN0YXJ0T2Zm c2V0ICsgU3RhcnRDb2wgLSAxKTsKKwkJCQlpZiAoIWNoYXIuSXNXaGl0ZVNwYWNlIChjaCkpCisJ CQkJCWJyZWFrOworCQkJCVN0YXJ0Q29sKys7CisJCQl9CisKIAkJCWlmIChJbmZvLlJlZ2lvbi5F bmRDb2x1bW4gPiBTdGFydENvbCkgewogCQkJCUVuZENvbCA9IEluZm8uUmVnaW9uLkVuZENvbHVt bjsKIAkJCX0gZWxzZSB7DQoNCk1vZGlmaWVkOiBtYWluL3NyYy9hZGRpbnMvVmVyc2lvbkNvbnRy b2wvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuR2l0LlRlc3RzL0Jhc2VHaXRSZXBvc2l0b3J5 VGVzdHMuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NCkBAIC0xNjIsNiArMTYyLDcgQEAgcHJvdGVjdGVkIG92ZXJy aWRlIHZvaWQgQmxhbWVFeHRyYUludGVybmFscyAoQW5ub3RhdGlvbiBbXSBhbm5vdGF0aW9ucykK IAkJfQ0KIA0KIAkJW1Rlc3RdDQorCQlbSWdub3JlICgidGhpcyBpcyBhIG5ldyB0ZXN0IHdoaWNo IGRvZXNuJ3QgcGFzcyBvbiBNYWMgeWV0IildDQogCQlwdWJsaWMgdm9pZCBUZXN0R2l0U3Rhc2gg KCkNCiAJCXsNCiAJCQl2YXIgcmVwbzIgPSAoR2l0UmVwb3NpdG9yeSlSZXBvOw0KQEAgLTE3Niw2 ICsxNzcsNyBAQCBwdWJsaWMgdm9pZCBUZXN0R2l0U3Rhc2ggKCkKIAkJfQ0KIA0KIAkJW1Rlc3Rd DQorCQlbSWdub3JlICgidGhpcyBpcyBhIG5ldyB0ZXN0IHdoaWNoIGRvZXNuJ3QgcGFzcyBvbiBN YWMgeWV0IildDQogCQlwdWJsaWMgdm9pZCBUZXN0R2l0QnJhbmNoQ3JlYXRpb24gKCkNCiAJCXsN CiAJCQl2YXIgcmVwbzIgPSAoR2l0UmVwb3NpdG9yeSlSZXBvOw0KQEAgLTIwNCw2ICsyMDYsNyBA QCBwdWJsaWMgdm9pZCBUZXN0R2l0QnJhbmNoQ3JlYXRpb24gKCkKIAkJfQ0KIA0KIAkJW1Rlc3Rd DQorCQlbSWdub3JlICgidGhpcyBpcyBhIG5ldyB0ZXN0IHdoaWNoIGRvZXNuJ3QgcGFzcyBvbiBN YWMgeWV0IildDQogCQlwdWJsaWMgdm9pZCBUZXN0R2l0U3luY0JyYW5jaGVzICgpDQogCQl7DQog CQkJdmFyIHJlcG8yID0gKEdpdFJlcG9zaXRvcnkpUmVwbzsNCkBAIC0zMDcsNiArMzEwLDcgQEAg cHVibGljIHZvaWQgVGVzdFJlbW90ZSAoKQogCQl9DQogDQogCQlbVGVzdF0NCisJCVtJZ25vcmUg KCJ0aGlzIGlzIGEgbmV3IHRlc3Qgd2hpY2ggZG9lc24ndCBwYXNzIG9uIE1hYyB5ZXQiKV0NCiAJ CXB1YmxpYyB2b2lkIFRlc3RJc01lcmdlZCAoKQ0KIAkJew0KIAkJCXZhciByZXBvMiA9IChHaXRS ZXBvc2l0b3J5KVJlcG87DQ0KDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250 cm9sL01vbm9EZXZlbG9wLlZlcnNpb25Db250cm9sLkdpdC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29u dHJvbC5HaXQvR2l0Q3JlZGVudGlhbHMuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC03NSw4ICs3NSw5IEBA IHB1YmxpYyBvdmVycmlkZSBib29sIEdldCAoVVJJaXNoIHVyaSwgcGFyYW1zIENyZWRlbnRpYWxJ dGVtW10gaXRlbXMpCiAJCQkJCiAJCQlIYXNSZXNldCA9IGZhbHNlOwogCQkJaWYgKHJlc3VsdCkg eworCQkJCXZhciB1c2VyID0gaXRlbXMuT2ZUeXBlPENyZWRlbnRpYWxJdGVtLlVzZXJuYW1lPiAo KS5GaXJzdE9yRGVmYXVsdCAoKTsKIAkJCQlpZiAocGFzc3dvcmRJdGVtICE9IG51bGwpIHsKLQkJ CQkJUGFzc3dvcmRTZXJ2aWNlLkFkZFdlYlBhc3N3b3JkIChuZXcgVXJpICh1cmkuVG9TdHJpbmcg KCkpLCBuZXcgc3RyaW5nIChwYXNzd29yZEl0ZW0uR2V0VmFsdWUgKCkpKTsKKwkJCQkJUGFzc3dv cmRTZXJ2aWNlLkFkZFdlYlVzZXJOYW1lQW5kUGFzc3dvcmQgKG5ldyBVcmkgKHVyaS5Ub1N0cmlu ZyAoKSksIHVzZXIuR2V0VmFsdWUgKCksIG5ldyBzdHJpbmcgKHBhc3N3b3JkSXRlbS5HZXRWYWx1 ZSAoKSkpOwogCQkJCX0gZWxzZSBpZiAocGFzc3BocmFzZUl0ZW0gIT0gbnVsbCkgewogCQkJCQlQ YXNzd29yZFNlcnZpY2UuQWRkV2ViUGFzc3dvcmQgKG5ldyBVcmkgKHVyaS5Ub1N0cmluZyAoKSks IHBhc3NwaHJhc2VJdGVtLkdldFZhbHVlICgpKTsKIAkJCQl9CkBAIC0xMTgsMTAgKzExOSwxMCBA QCBzdGF0aWMgYm9vbCBUcnlHZXRVc2VybmFtZVBhc3N3b3JkIChVUklpc2ggdXJpLCBDcmVkZW50 aWFsSXRlbVtdIGl0ZW1zLCBvdXQgQ3JlZAogCQkJaWYgKGl0ZW1zLkxlbmd0aCA9PSAyICYmIHVz ZXJuYW1lICE9IG51bGwgJiYgcGFzc3dvcmQgIT0gbnVsbCkgewogCQkJCXBhc3N3b3JkSXRlbSA9 IHBhc3N3b3JkOwogCi0JCQkJdmFyIHBhc3N3b3JkVmFsdWUgPSBQYXNzd29yZFNlcnZpY2UuR2V0 V2ViUGFzc3dvcmQgKGFjdHVhbFVybCk7Ci0JCQkJaWYgKHBhc3N3b3JkVmFsdWUgIT0gbnVsbCkg ewotCQkJCQl1c2VybmFtZS5TZXRWYWx1ZSAoYWN0dWFsVXJsLlVzZXJJbmZvKTsKLQkJCQkJcGFz c3dvcmQuU2V0VmFsdWVOb0NvcHkgKHBhc3N3b3JkVmFsdWUuVG9BcnJheSAoKSk7CisJCQkJdmFy IGNyZWQgPSBQYXNzd29yZFNlcnZpY2UuR2V0V2ViVXNlck5hbWVBbmRQYXNzd29yZCAoYWN0dWFs VXJsKTsKKwkJCQlpZiAoY3JlZCAhPSBudWxsKSB7CisJCQkJCXVzZXJuYW1lLlNldFZhbHVlIChj cmVkLkl0ZW0xKTsKKwkJCQkJcGFzc3dvcmQuU2V0VmFsdWVOb0NvcHkgKGNyZWQuSXRlbTIuVG9B cnJheSAoKSk7CiAJCQkJCXJldHVybiB0cnVlOwogCQkJCX0KIAkJCX0gZWxzZSB7DQoNCk1vZGlm aWVkOiBtYWluL3NyYy9jb3JlL01vbm8uVGV4dGVkaXRvci9Nb25vLlRleHRFZGl0b3IuVXRpbHMv VGV4dEZpbGVVdGlsaXR5LmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMTU2LDYgKzE1NiwyNSBAQCBwdWJs aWMgc3RhdGljIHN0cmluZyBHZXRUZXh0IChieXRlW10gYnl0ZXMsIG91dCBFbmNvZGluZyBlbmNv ZGluZywgb3V0IGJvb2wgaGFkQgogCQkJfQogCQl9CiAKKwkJcHVibGljIHN0YXRpYyBzdHJpbmcg R2V0VGV4dCAoYnl0ZVtdIGJ5dGVzLCBFbmNvZGluZyBlbmNvZGluZywgb3V0IGJvb2wgaGFkQm9t KQorCQl7CisJCQlieXRlW10gYm9tID0gZW5jb2RpbmcuR2V0UHJlYW1ibGUgKCk7CisJCQlpZiAo Ym9tICE9IG51bGwgJiYgYm9tLkxlbmd0aCA+IDAgJiYgYm9tLkxlbmd0aCA8PSBieXRlcy5MZW5n dGgpIHsKKwkJCQloYWRCb20gPSB0cnVlOworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYm9tLkxl bmd0aDsgaSsrKSB7CisJCQkJCWlmIChieXRlcyBbaV0gIT0gYm9tIFtpXSkgeworCQkJCQkJaGFk Qm9tID0gZmFsc2U7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJ CQkJaGFkQm9tID0gZmFsc2U7CisJCQl9CisJCQlpZiAoaGFkQm9tKSAKKwkJCQlyZXR1cm4gZW5j b2RpbmcuR2V0U3RyaW5nIChieXRlcywgYm9tLkxlbmd0aCwgYnl0ZXMuTGVuZ3RoIC0gYm9tLkxl bmd0aCk7CisJCQlyZXR1cm4gZW5jb2RpbmcuR2V0U3RyaW5nIChieXRlcyk7CisJCX0KKwogCQlw dWJsaWMgc3RhdGljIHN0cmluZyBHZXRUZXh0IChTdHJlYW0gaW5wdXRTdHJlYW0pCiAJCXsKIAkJ CXVzaW5nICh2YXIgc3RyZWFtID0gT3BlblN0cmVhbSAoaW5wdXRTdHJlYW0pKSB7CkBAIC0zMDMs MjEgKzMyMiw4IEBAIHB1YmxpYyBzdGF0aWMgc3RyaW5nIFJlYWRBbGxUZXh0IChzdHJpbmcgZmls ZU5hbWUsIEVuY29kaW5nIGVuY29kaW5nLCBvdXQgYm9vbCBoCiAJCQkJdGhyb3cgbmV3IEFyZ3Vt ZW50TnVsbEV4Y2VwdGlvbiAoImVuY29kaW5nIik7CiAJCQkKIAkJCWJ5dGVbXSBjb250ZW50ID0g RmlsZS5SZWFkQWxsQnl0ZXMgKGZpbGVOYW1lKTsKLQkJCWJ5dGVbXSBib20gPSBlbmNvZGluZy5H ZXRQcmVhbWJsZSAoKTsKLQkJCWlmIChib20gIT0gbnVsbCAmJiBib20uTGVuZ3RoID4gMCAmJiBi b20uTGVuZ3RoIDw9IGNvbnRlbnQuTGVuZ3RoKSB7Ci0JCQkJaGFkQm9tID0gdHJ1ZTsKLQkJCQlm b3IgKGludCBpID0gMDsgaSA8IGJvbS5MZW5ndGg7IGkrKykgewotCQkJCQlpZiAoY29udGVudCBb aV0gIT0gYm9tIFtpXSkgewotCQkJCQkJaGFkQm9tPSBmYWxzZTsKLQkJCQkJCWJyZWFrOwotCQkJ CQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQloYWRCb20gPSBmYWxzZTsKLQkJCX0KLQkJCXJl dHVybiBlbmNvZGluZy5HZXRTdHJpbmcgKGNvbnRlbnQpOworCQkJcmV0dXJuIEdldFRleHQgKGNv bnRlbnQsIGVuY29kaW5nLCBvdXQgaGFkQm9tKTsgCiAJCX0KLQogCQkjZW5kcmVnaW9uCiAKIAkJ I3JlZ2lvbiBBU0NJSSBlbmNvZGluZyBjaGVjaw0KDQpNb2RpZmllZDogbWFpbi9zcmMvY29yZS9N b25vLlRleHRlZGl0b3IvTW9uby5UZXh0RWRpdG9yLlZpL1ZpTW9kZS5jcw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K QEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIFJlc2V0IChzdHJpbmcgc3RhdHVzKQogCQl7CiAJCQlD dXJTdGF0ZSA9IFN0YXRlLk5vcm1hbDsKIAkJCVJlc2V0RWRpdG9yU3RhdGUgKERhdGEpOwotCQkJ CisJCQltb3Rpb24gPSBNb3Rpb24uTm9uZTsKIAkJCWNvbW1hbmRCdWZmZXIuTGVuZ3RoID0gMDsK IAkJCVN0YXR1cyA9IHN0YXR1czsKIAkJfQpAQCAtNjE3LDYgKzYxNyw3IEBAIHByb3RlY3RlZCBv dmVycmlkZSB2b2lkIEhhbmRsZUtleXByZXNzIChHZGsuS2V5IGtleSwgdWludCB1bmljb2RlS2V5 LCBHZGsuTW9kaWZpCiAJCQkJCQlSdW5BY3Rpb25zIChhY3Rpb24sIENsaXBib2FyZEFjdGlvbnMu Q3V0KTsKIAkJCQkJU3RhdHVzID0gIi0tIElOU0VSVCAtLSI7CiAJCQkJCUN1clN0YXRlID0gU3Rh dGUuSW5zZXJ0OworCQkJCQltb3Rpb24gPSBNb3Rpb24uTm9uZTsKIAkJCQkJQ2FyZXQuTW9kZSA9 IENhcmV0TW9kZS5JbnNlcnQ7CiAJCQkJfSBlbHNlIHsKIAkJCQkJUmVzZXQgKCJVbnJlY29nbmlz ZWQgbW90aW9uIik7DQoNCk1vZGlmaWVkOiBtYWluL3NyYy9jb3JlL01vbm8uVGV4dGVkaXRvci9N b25vLlRleHRFZGl0b3IvR3VpL1RleHRBcmVhLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMjY1Myw3ICsy NjUzLDcgQEAgcHVibGljIGludCBSZXBsYWNlQWxsIChzdHJpbmcgd2l0aFBhdHRlcm4pCiAJCQog CQl2b2lkIFNob3dUb29sdGlwIChHZGsuTW9kaWZpZXJUeXBlIG1vZGlmaWVyU3RhdGUpCiAJCXsK LQkJCWlmIChteCA8IFRleHRWaWV3TWFyZ2luLlhPZmZzZXQgKyBUZXh0Vmlld01hcmdpbi5UZXh0 U3RhcnRQb3NpdGlvbikgeworCQkJaWYgKG14IDwgVGV4dFZpZXdNYXJnaW4uVGV4dFN0YXJ0UG9z aXRpb24pIHsKIAkJCQlIaWRlVG9vbHRpcCAoKTsKIAkJCQlyZXR1cm47CiAJCQl9DQoNCk1vZGlm aWVkOiBtYWluL3NyYy9jb3JlL01vbm9EZXZlbG9wLklkZS9Nb25vRGV2ZWxvcC5JZGUuVGVtcGxh dGVzL1NpbmdsZUZpbGVEZXNjcmlwdGlvblRlbXBsYXRlLmNzDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMjcy LDcgKzI3MiwxMSBAQCBwdWJsaWMgdmlydHVhbCBTdHJlYW0gQ3JlYXRlRmlsZUNvbnRlbnQgKFNv bHV0aW9uSXRlbSBwb2xpY3lQYXJlbnQsIFByb2plY3QgcHJvagogCQkJCQljb250ZW50ID0gZm9y bWF0dGVkOwogCQkJfQogCQkJCi0JCQlNZW1vcnlTdHJlYW0gbXMgPSBuZXcgTWVtb3J5U3RyZWFt ICgpOworCQkJdmFyIG1zID0gbmV3IE1lbW9yeVN0cmVhbSAoKTsKKworCQkJdmFyIGJvbSA9IEVu Y29kaW5nLlVURjguR2V0UHJlYW1ibGUgKCk7CisJCQltcy5Xcml0ZSAoYm9tLCAwLCBib20uTGVu Z3RoKTsKKwogCQkJYnl0ZVtdIGRhdGE7CiAJCQlpZiAoQWRkU3RhbmRhcmRIZWFkZXIpIHsKIAkJ CQlzdHJpbmcgaGVhZGVyID0gU3RhbmRhcmRIZWFkZXJTZXJ2aWNlLkdldEhlYWRlciAocG9saWN5 UGFyZW50LCBmaWxlTmFtZSwgdHJ1ZSk7DQoNCk1vZGlmaWVkOiBtYWluL3NyYy9jb3JlL01vbm9E ZXZlbG9wLlRleHRFZGl0b3IuVGVzdHMvTW9uby5UZXh0RWRpdG9yLlRlc3RzL1RleHRGaWxlUmVh ZGVyVGVzdHMuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC0xNDMsNiArMTQzLDE4IEBAIHB1YmxpYyB2b2lk IFRlc3RHQjE4MDMwICgpCiAJCQlieXRlW10gaW5wdXQgPSBFbmNvZGluZy5HZXRFbmNvZGluZyAo NTQ5MzYpLkdldEJ5dGVzIChzcmMpOwogCQkJQXNzZXJ0LkFyZUVxdWFsIChzcmMsIFRleHRGaWxl VXRpbGl0eS5HZXRUZXh0IChpbnB1dCkpOwogCQl9CisKKwkJLy8vIDxzdW1tYXJ5PgorCQkvLy8g QnVnIDE2MzMyIC0gRHVwbGljYXRlIEJPTSEgCisJCS8vLyA8L3N1bW1hcnk+CisJCVtUZXN0KCld CisJCXB1YmxpYyB2b2lkIFRlc3RCdWcxNjMzMiAoKQkKKwkJeworCQkJYnl0ZVtdIGlucHV0ID0g bmV3IGJ5dGVbXSB7IDB4RUYsIDB4QkIsIDB4QkYsIChieXRlKSdhJ307CisJCQlib29sIGhhZEJv bTsKKwkJCUFzc2VydC5BcmVFcXVhbCAoImEiLCBUZXh0RmlsZVV0aWxpdHkuR2V0VGV4dCAoaW5w dXQsIEVuY29kaW5nLlVURjgsIG91dCBoYWRCb20pKTsKKwkJCUFzc2VydC5Jc1RydWUgKGhhZEJv bSk7CisJCX0KIAl9CiB9CiANCg0KTW9kaWZpZWQ6IHZlcnNpb24tY2hlY2tzDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQpAQCAtMTcsNyArMTcsNyBAQCBERVBbMF09bWQtYWRkaW5zCiBERVBfTkFNRVswXT1NREFERElO UwogREVQX1BBVEhbMF09JHt0b3Bfc3JjZGlyfS8uLi9tZC1hZGRpbnMKIERFUF9NT0RVTEVbMF09 Z2l0QGdpdGh1Yi5jb206eGFtYXJpbi9tZC1hZGRpbnMuZ2l0Ci1ERVBfTkVFREVEX1ZFUlNJT05b MF09MTFlNDcxZDBlNDlmMDQwYzdlYWEwYzYwNmM4YjhkOThkYTExOGNiZQorREVQX05FRURFRF9W RVJTSU9OWzBdPTAyZmM4ZmE3MjM3NTM4YTBkY2Q3NDRlZDlmMTQ5ZTNmYzZhYmMzZjIKIERFUF9C UkFOQ0hfQU5EX1JFTU9URVswXT0ibW9ub2RldmVsb3AtNC4zLjAtYnJhbmNoIG9yaWdpbi9tb25v ZGV2ZWxvcC00LjMuMC1icmFuY2giCiAKICMgaGVhcC1zaG90DQpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNb25vLXBhdGNoZXMgbWFpbGxpc3QgIC0gIE1v bm8tcGF0Y2hlc0BsaXN0cy54aW1pYW4uY29tCmh0dHA6Ly9saXN0cy54aW1pYW4uY29tL21haWxt YW4vbGlzdGluZm8vbW9uby1wYXRjaGVzCg==