ZGlmZiAtLWdpdCBhL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9wb20ueG1sIGIvdHRvcnJlbnQtbWFzdGVyL3Rlc3RzL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlmZWNhYwotLS0gL2Rldi9udWxsCisrKyBiL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9wb20ueG1sCkBAIC0wLDAgKzEsNDAgQEAKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5jb20udHVybjwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHRvcnJlbnQ8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjEuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKworICAgIDxuYW1lPnR0b3JyZW50L2NvbW1vbjwvbmFtZT4KKyAgICA8dXJsPmh0dHA6Ly90dXJuLmdpdGh1Yi5jb20vdHRvcnJlbnQvPC91cmw+CisgICAgPGFydGlmYWN0SWQ+dHRvcnJlbnQtdGVzdHM8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+MS4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLnR1cm48L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dG9ycmVudC10cmFja2VyPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNvbS50dXJuPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHRvcnJlbnQtY2xpZW50PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNvbS50dXJuPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHRvcnJlbnQtdGVzdC1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4xLjA8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDwvZGVwZW5kZW5jaWVzPgorCis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdHRvcnJlbnQtbWFzdGVyL3Rlc3RzL3NyYy90ZXN0L2phdmEvY29tL3R1cm4vdHRvcnJlbnQvQ29tbXVuaWNhdGlvbk1hbmFnZXJGYWN0b3J5LmphdmEgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvamF2YS9jb20vdHVybi90dG9ycmVudC9Db21tdW5pY2F0aW9uTWFuYWdlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdHRvcnJlbnQtbWFzdGVyL3Rlc3RzL3NyYy90ZXN0L2phdmEvY29tL3R1cm4vdHRvcnJlbnQvQ29tbXVuaWNhdGlvbk1hbmFnZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1MSBAQAorcGFja2FnZSBjb20udHVybi50dG9ycmVudDsKKworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LmNsaWVudC5Db21tdW5pY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC5jb21tb24uTG9nZ2VyVXRpbHM7CisKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNlcnZpY2U7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuTGlua2VkQmxvY2tpbmdRdWV1ZTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3I7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7CisKK3B1YmxpYyBjbGFzcyBDb21tdW5pY2F0aW9uTWFuYWdlckZhY3RvcnkgeworCisgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IERFRkFVTFRfUE9PTF9TSVpFID0gMTA7CisKKyAgcHVibGljIENvbW11bmljYXRpb25NYW5hZ2VyIGdldENsaWVudChTdHJpbmcgbmFtZSkgeworICAgIGZpbmFsIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvclNlcnZpY2UgPSBuZXcgVGhyZWFkUG9vbEV4ZWN1dG9yKAorICAgICAgICAgICAgREVGQVVMVF9QT09MX1NJWkUsIERFRkFVTFRfUE9PTF9TSVpFLAorICAgICAgICAgICAgMEwsIFRpbWVVbml0Lk1JTExJU0VDT05EUywKKyAgICAgICAgICAgIG5ldyBMaW5rZWRCbG9ja2luZ1F1ZXVlPFJ1bm5hYmxlPig0MDAwKSk7CisgICAgZmluYWwgRXhlY3V0b3JTZXJ2aWNlIHBpZWNlVmFsaWRhdG9yRXhlY3V0b3IgPSBuZXcgVGhyZWFkUG9vbEV4ZWN1dG9yKAorICAgICAgICAgICAgREVGQVVMVF9QT09MX1NJWkUsIERFRkFVTFRfUE9PTF9TSVpFLAorICAgICAgICAgICAgMEwsIFRpbWVVbml0Lk1JTExJU0VDT05EUywKKyAgICAgICAgICAgIG5ldyBMaW5rZWRCbG9ja2luZ1F1ZXVlPFJ1bm5hYmxlPig0MDApKTsKKyAgICByZXR1cm4gbmV3IENvbW11bmljYXRpb25NYW5hZ2VyKGV4ZWN1dG9yU2VydmljZSwgcGllY2VWYWxpZGF0b3JFeGVjdXRvcikgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgeworICAgICAgICBzdXBlci5zdG9wKCk7CisKKyAgICAgICAgaW50IHRpbWVvdXQgPSA2MDsKKyAgICAgICAgVGltZVVuaXQgdGltZVVuaXQgPSBUaW1lVW5pdC5TRUNPTkRTOworCisgICAgICAgIGV4ZWN1dG9yU2VydmljZS5zaHV0ZG93bigpOworICAgICAgICBwaWVjZVZhbGlkYXRvckV4ZWN1dG9yLnNodXRkb3duKCk7CisgICAgICAgIGlmICh0aW1lb3V0ID4gMCkgeworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoIXBpZWNlVmFsaWRhdG9yRXhlY3V0b3IuYXdhaXRUZXJtaW5hdGlvbih0aW1lb3V0LCB0aW1lVW5pdCkpIHsKKyAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oInVuYWJsZSB0byB0ZXJtaW5hdGUgZXhlY3V0b3Igc2VydmljZSBpbiB7fSB7fSIsIHRpbWVvdXQsIHRpbWVVbml0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2xlYW4gc2h1dGRvd25Db3JyZWN0bHkgPSBleGVjdXRvclNlcnZpY2UuYXdhaXRUZXJtaW5hdGlvbih0aW1lb3V0LCB0aW1lVW5pdCk7CisgICAgICAgICAgICBpZiAoIXNodXRkb3duQ29ycmVjdGx5KSB7CisgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJ1bmFibGUgdG8gdGVybWluYXRlIGV4ZWN1dG9yIHNlcnZpY2UgaW4ge30ge30iLCB0aW1lb3V0LCB0aW1lVW5pdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nZ2VyVXRpbHMud2FybkFuZERlYnVnRGV0YWlscyhsb2dnZXIsICJ1bmFibGUgdG8gYXdhaXQgdGVybWluYXRpb24gZXhlY3V0b3Igc2VydmljZSwgdGhyZWFkIHdhcyBpbnRlcnJ1cHRlZCIsIGUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICB9CisgICAgfTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdHRvcnJlbnQtbWFzdGVyL3Rlc3RzL3NyYy90ZXN0L2phdmEvY29tL3R1cm4vdHRvcnJlbnQvRHVtbXlQZWVyQWN0aXZpdHlMaXN0ZW5lci5qYXZhIGIvdHRvcnJlbnQtbWFzdGVyL3Rlc3RzL3NyYy90ZXN0L2phdmEvY29tL3R1cm4vdHRvcnJlbnQvRHVtbXlQZWVyQWN0aXZpdHlMaXN0ZW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YTA4YjcKLS0tIC9kZXYvbnVsbAorKysgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvamF2YS9jb20vdHVybi90dG9ycmVudC9EdW1teVBlZXJBY3Rpdml0eUxpc3RlbmVyLmphdmEKQEAgLTAsMCArMSw2MiBAQAorcGFja2FnZSBjb20udHVybi50dG9ycmVudDsKKworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LmNsaWVudC5QaWVjZTsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC5jbGllbnQucGVlci5QZWVyQWN0aXZpdHlMaXN0ZW5lcjsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC5jbGllbnQucGVlci5TaGFyaW5nUGVlcjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkJpdFNldDsKKworcHVibGljIGNsYXNzIER1bW15UGVlckFjdGl2aXR5TGlzdGVuZXIgaW1wbGVtZW50cyBQZWVyQWN0aXZpdHlMaXN0ZW5lciB7CisKKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgaGFuZGxlUGVlckNob2tlZChTaGFyaW5nUGVlciBwZWVyKSB7CisKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBoYW5kbGVQZWVyUmVhZHkoU2hhcmluZ1BlZXIgcGVlcikgeworCisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgYWZ0ZXJQZWVyUmVtb3ZlZChTaGFyaW5nUGVlciBwZWVyKSB7CisKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBoYW5kbGVQaWVjZUF2YWlsYWJpbGl0eShTaGFyaW5nUGVlciBwZWVyLCBQaWVjZSBwaWVjZSkgeworCisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgaGFuZGxlQml0ZmllbGRBdmFpbGFiaWxpdHkoU2hhcmluZ1BlZXIgcGVlciwgQml0U2V0IGF2YWlsYWJsZVBpZWNlcykgeworCisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgaGFuZGxlUGllY2VTZW50KFNoYXJpbmdQZWVyIHBlZXIsIFBpZWNlIHBpZWNlKSB7CisKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBoYW5kbGVQaWVjZUNvbXBsZXRlZChTaGFyaW5nUGVlciBwZWVyLCBQaWVjZSBwaWVjZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIGhhbmRsZVBlZXJEaXNjb25uZWN0ZWQoU2hhcmluZ1BlZXIgcGVlcikgeworCisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgaGFuZGxlSU9FeGNlcHRpb24oU2hhcmluZ1BlZXIgcGVlciwgSU9FeGNlcHRpb24gaW9lKSB7CisKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBoYW5kbGVOZXdQZWVyQ29ubmVjdGVkKFNoYXJpbmdQZWVyIHBlZXIpIHsKKworICB9Cit9CmRpZmYgLS1naXQgYS90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvamF2YS9jb20vdHVybi90dG9ycmVudC9jbGllbnQvQ29tbXVuaWNhdGlvbk1hbmFnZXJUZXN0LmphdmEgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvamF2YS9jb20vdHVybi90dG9ycmVudC9jbGllbnQvQ29tbXVuaWNhdGlvbk1hbmFnZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiYzI1YgotLS0gL2Rldi9udWxsCisrKyBiL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9qYXZhL2NvbS90dXJuL3R0b3JyZW50L2NsaWVudC9Db21tdW5pY2F0aW9uTWFuYWdlclRlc3QuamF2YQpAQCAtMCwwICsxLDE1MDggQEAKK3BhY2thZ2UgY29tLnR1cm4udHRvcnJlbnQuY2xpZW50OworCitpbXBvcnQgY29tLnR1cm4udHRvcnJlbnQuKjsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC5jbGllbnQucGVlci5TaGFyaW5nUGVlcjsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC5jbGllbnQuc3RvcmFnZS5FbXB0eVBpZWNlU3RvcmFnZUZhY3Rvcnk7CitpbXBvcnQgY29tLnR1cm4udHRvcnJlbnQuY2xpZW50LnN0b3JhZ2UuRmlsZVN0b3JhZ2U7CitpbXBvcnQgY29tLnR1cm4udHRvcnJlbnQuY2xpZW50LnN0b3JhZ2UuRnVsbHlQaWVjZVN0b3JhZ2VGYWN0b3J5OworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LmNsaWVudC5zdG9yYWdlLlBpZWNlU3RvcmFnZTsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC5jb21tb24uKjsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC5jb21tb24ucHJvdG9jb2wuUGVlck1lc3NhZ2U7CitpbXBvcnQgY29tLnR1cm4udHRvcnJlbnQubmV0d29yay5GaXJzdEF2YWlsYWJsZUNoYW5uZWw7CitpbXBvcnQgY29tLnR1cm4udHRvcnJlbnQubmV0d29yay5TZXJ2ZXJDaGFubmVsUmVnaXN0ZXI7CitpbXBvcnQgY29tLnR1cm4udHRvcnJlbnQudHJhY2tlci5UcmFja2VkUGVlcjsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC50cmFja2VyLlRyYWNrZWRUb3JyZW50OworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LnRyYWNrZXIuVHJhY2tlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzOworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouQmFzaWNDb25maWd1cmF0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Db25zb2xlQXBwZW5kZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0OworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKK2ltcG9ydCBvcmcudGVzdG5nLmFubm90YXRpb25zLkFmdGVyTWV0aG9kOworaW1wb3J0IG9yZy50ZXN0bmcuYW5ub3RhdGlvbnMuQmVmb3JlTWV0aG9kOworaW1wb3J0IG9yZy50ZXN0bmcuYW5ub3RhdGlvbnMuVGVzdDsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLm5ldC4qOworaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CitpbXBvcnQgamF2YS5uaW8uY2hhbm5lbHMuQnl0ZUNoYW5uZWw7CitpbXBvcnQgamF2YS5uaW8uY2hhbm5lbHMuQ2xvc2VkQnlJbnRlcnJ1cHRFeGNlcHRpb247CitpbXBvcnQgamF2YS5zZWN1cml0eS5EaWdlc3RJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7CitpbXBvcnQgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljQm9vbGVhbjsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljSW50ZWdlcjsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljTG9uZzsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljUmVmZXJlbmNlOworaW1wb3J0IGphdmEudXRpbC56aXAuQ1JDMzI7CitpbXBvcnQgamF2YS51dGlsLnppcC5DaGVja3N1bTsKKworaW1wb3J0IHN0YXRpYyBjb20udHVybi50dG9ycmVudC5Db21tdW5pY2F0aW9uTWFuYWdlckZhY3RvcnkuREVGQVVMVF9QT09MX1NJWkU7CitpbXBvcnQgc3RhdGljIGNvbS50dXJuLnR0b3JyZW50LnRyYWNrZXIuVHJhY2tlci5BTk5PVU5DRV9VUkw7CitpbXBvcnQgc3RhdGljIG9yZy50ZXN0bmcuQXNzZXJ0Lio7CisKKy8qKgorICogQGF1dGhvciBTZXJnZXkuUGFrCisgKiBEYXRlOiA3LzI2LzEzCisgKiBUaW1lOiAyOjMyIFBNCisgKi8KK0BUZXN0KHRpbWVPdXQgPSA2MDAwMDApCitwdWJsaWMgY2xhc3MgQ29tbXVuaWNhdGlvbk1hbmFnZXJUZXN0IHsKKworICBwcml2YXRlIENvbW11bmljYXRpb25NYW5hZ2VyRmFjdG9yeSBjb21tdW5pY2F0aW9uTWFuYWdlckZhY3Rvcnk7CisKKyAgcHJpdmF0ZSBMaXN0PENvbW11bmljYXRpb25NYW5hZ2VyPiBjb21tdW5pY2F0aW9uTWFuYWdlckxpc3Q7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1JFU09VUkNFUyA9ICJzcmMvdGVzdC9yZXNvdXJjZXMiOworICBwcml2YXRlIFRyYWNrZXIgdHJhY2tlcjsKKyAgcHJpdmF0ZSBUZW1wRmlsZXMgdGVtcEZpbGVzOworCisgIHB1YmxpYyBDb21tdW5pY2F0aW9uTWFuYWdlclRlc3QoKSB7CisgICAgY29tbXVuaWNhdGlvbk1hbmFnZXJGYWN0b3J5ID0gbmV3IENvbW11bmljYXRpb25NYW5hZ2VyRmFjdG9yeSgpOworICAgIGlmIChMb2dnZXIuZ2V0Um9vdExvZ2dlcigpLmdldEFsbEFwcGVuZGVycygpLmhhc01vcmVFbGVtZW50cygpKQorICAgICAgcmV0dXJuOworICAgIEJhc2ljQ29uZmlndXJhdG9yLmNvbmZpZ3VyZShuZXcgQ29uc29sZUFwcGVuZGVyKG5ldyBQYXR0ZXJuTGF5b3V0KCJbJWR7TU1kZCBISDptbTpzcyxTU1N9ICV0XSAlNnAgLSAlMjAuMjBjIC0gJW0gJW4iKSkpOworICB9CisKKyAgQEJlZm9yZU1ldGhvZAorICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgdGVtcEZpbGVzID0gbmV3IFRlbXBGaWxlcygpOworICAgIGNvbW11bmljYXRpb25NYW5hZ2VyTGlzdCA9IG5ldyBBcnJheUxpc3Q8Q29tbXVuaWNhdGlvbk1hbmFnZXI+KCk7CisgICAgTG9nZ2VyLmdldFJvb3RMb2dnZXIoKS5zZXRMZXZlbChVdGlscy5nZXRMb2dMZXZlbCgpKTsKKyAgICBzdGFydFRyYWNrZXIoKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBzYXZlVG9ycmVudChUb3JyZW50TWV0YWRhdGEgdG9ycmVudCwgRmlsZSBmaWxlKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZSk7CisgICAgZm9zLndyaXRlKG5ldyBUb3JyZW50U2VyaWFsaXplcigpLnNlcmlhbGl6ZSh0b3JyZW50KSk7CisgICAgZm9zLmNsb3NlKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VGhhdFNlZWRlcklzTm90UmVjZWl2ZWRIYXZlTWVzc2FnZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBFeGVjdXRvclNlcnZpY2Ugd29ya2VyRVMgPSBFeGVjdXRvcnMubmV3Rml4ZWRUaHJlYWRQb29sKDEwKTsKKyAgICBmaW5hbCBFeGVjdXRvclNlcnZpY2UgdmFsaWRhdG9yRVMgPSBFeGVjdXRvcnMubmV3Rml4ZWRUaHJlYWRQb29sKDQpOworICAgIGZpbmFsIEF0b21pY0Jvb2xlYW4gaXNTZWVkZXJSZWNlaXZlZEhhdmVNZXNzYWdlID0gbmV3IEF0b21pY0Jvb2xlYW4oZmFsc2UpOworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIHNlZWRlciA9IG5ldyBDb21tdW5pY2F0aW9uTWFuYWdlcih3b3JrZXJFUywgdmFsaWRhdG9yRVMpIHsKKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU2hhcmluZ1BlZXIgY3JlYXRlU2hhcmluZ1BlZXIoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBCeXRlQnVmZmVyIHBlZXJJZCwgU2hhcmVkVG9ycmVudCB0b3JyZW50LCBCeXRlQ2hhbm5lbCBjaGFubmVsLCBTdHJpbmcgY2xpZW50SWRlbnRpZmllciwgaW50IGNsaWVudFZlcnNpb24pIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTaGFyaW5nUGVlcihob3N0LCBwb3J0LCBwZWVySWQsIHRvcnJlbnQsIGdldENvbm5lY3Rpb25NYW5hZ2VyKCksIHRoaXMsIGNoYW5uZWwsICJUTyIsIDEyMzQpIHsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgaGFuZGxlTWVzc2FnZShQZWVyTWVzc2FnZSBtc2cpIHsKKyAgICAgICAgICAgIGlmIChtc2cgaW5zdGFuY2VvZiBQZWVyTWVzc2FnZS5IYXZlTWVzc2FnZSkgeworICAgICAgICAgICAgICBpc1NlZWRlclJlY2VpdmVkSGF2ZU1lc3NhZ2Uuc2V0KHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3VwZXIuaGFuZGxlTWVzc2FnZShtc2cpOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgeworICAgICAgICBzdXBlci5zdG9wKCk7CisgICAgICAgIHdvcmtlckVTLnNodXRkb3duKCk7CisgICAgICAgIHZhbGlkYXRvckVTLnNodXRkb3duKCk7CisgICAgICB9CisgICAgfTsKKyAgICBjb21tdW5pY2F0aW9uTWFuYWdlckxpc3QuYWRkKHNlZWRlcik7CisKKyAgICBGaWxlIHRlbXBGaWxlID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKDEwMCAqIDEwMjUgKiAxMDI0KTsKKyAgICBVUkwgYW5ub3VuY2UgPSBuZXcgVVJMKCJodHRwOi8vMTI3LjAuMC4xOjY5NjkvYW5ub3VuY2UiKTsKKyAgICBVUkkgYW5ub3VuY2VVUkkgPSBhbm5vdW5jZS50b1VSSSgpOworCisgICAgVG9ycmVudE1ldGFkYXRhIHRvcnJlbnQgPSBUb3JyZW50Q3JlYXRvci5jcmVhdGUodGVtcEZpbGUsIGFubm91bmNlVVJJLCAiVGVzdCIpOworICAgIEZpbGUgdG9ycmVudEZpbGUgPSBuZXcgRmlsZSh0ZW1wRmlsZS5nZXRQYXJlbnRGaWxlKCksIHRlbXBGaWxlLmdldE5hbWUoKSArICIudG9ycmVudCIpOworICAgIHNhdmVUb3JyZW50KHRvcnJlbnQsIHRvcnJlbnRGaWxlKTsKKworICAgIHNlZWRlci5hZGRUb3JyZW50KHRvcnJlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpLCB0ZW1wRmlsZS5nZXRQYXJlbnQoKSk7CisgICAgc2VlZGVyLnN0YXJ0KEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpKTsKKworICAgIHdhaXRGb3JTZWVkZXJJc0Fubm91bnNlZE9uVHJhY2tlcih0b3JyZW50LmdldEhleEluZm9IYXNoKCkpOworCisgICAgQ29tbXVuaWNhdGlvbk1hbmFnZXIgbGVlY2hlciA9IGNyZWF0ZUNsaWVudCgpOworICAgIGxlZWNoZXIuc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworICAgIFRvcnJlbnRNYW5hZ2VyIHRvcnJlbnRNYW5hZ2VyID0gbGVlY2hlci5hZGRUb3JyZW50KHRvcnJlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpLCB0ZW1wRmlsZXMuY3JlYXRlVGVtcERpcigpLmdldEFic29sdXRlUGF0aCgpKTsKKyAgICB3YWl0RG93bmxvYWRDb21wbGV0ZSh0b3JyZW50TWFuYWdlciwgMTUpOworICAgIGFzc2VydEZhbHNlKGlzU2VlZGVyUmVjZWl2ZWRIYXZlTWVzc2FnZS5nZXQoKSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgd2FpdERvd25sb2FkQ29tcGxldGUoVG9ycmVudE1hbmFnZXIgdG9ycmVudE1hbmFnZXIsIGludCB0aW1lb3V0U2VjKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24geworICAgIGZpbmFsIFNlbWFwaG9yZSBzZW1hcGhvcmUgPSBuZXcgU2VtYXBob3JlKDApOworICAgIFRvcnJlbnRMaXN0ZW5lcldyYXBwZXIgbGlzdGVuZXIgPSBuZXcgVG9ycmVudExpc3RlbmVyV3JhcHBlcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgZG93bmxvYWRDb21wbGV0ZSgpIHsKKyAgICAgICAgc2VtYXBob3JlLnJlbGVhc2UoKTsKKyAgICAgIH0KKyAgICB9OworICAgIHRyeSB7CisgICAgICB0b3JyZW50TWFuYWdlci5hZGRMaXN0ZW5lcihsaXN0ZW5lcik7CisgICAgICBib29sZWFuIHJlcyA9IHNlbWFwaG9yZS50cnlBY3F1aXJlKHRpbWVvdXRTZWMsIFRpbWVVbml0LlNFQ09ORFMpOworICAgICAgaWYgKCFyZXMpIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmFibGUgdG8gZG93bmxvYWQgZmlsZSBpbiAiICsgdGltZW91dFNlYyArICIgc2Vjb25kcyIpOworICAgIH0gZmluYWxseSB7CisgICAgICB0b3JyZW50TWFuYWdlci5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSB2b2lkIHdhaXRGb3JTZWVkZXJJc0Fubm91bnNlZE9uVHJhY2tlcihmaW5hbCBTdHJpbmcgaGV4SW5mb0hhc2gpIHsKKyAgICBmaW5hbCBXYWl0Rm9yIHdhaXRGb3IgPSBuZXcgV2FpdEZvcigxMCAqIDEwMDApIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gY29uZGl0aW9uKCkgeworICAgICAgICByZXR1cm4gdHJhY2tlci5nZXRUcmFja2VkVG9ycmVudChoZXhJbmZvSGFzaCkgIT0gbnVsbDsKKyAgICAgIH0KKyAgICB9OworICAgIGFzc2VydFRydWUod2FpdEZvci5pc015UmVzdWx0KCkpOworICB9CisKKworICAvLyAgQFRlc3QoaW52b2NhdGlvbkNvdW50ID0gNTApCisgIHB1YmxpYyB2b2lkIGRvd25sb2FkX211bHRpcGxlX2ZpbGVzKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgVVJJU3ludGF4RXhjZXB0aW9uIHsKKyAgICBpbnQgbnVtRmlsZXMgPSA1MDsKKyAgICB0aGlzLnRyYWNrZXIuc2V0QWNjZXB0Rm9yZWlnblRvcnJlbnRzKHRydWUpOworCisgICAgZmluYWwgRmlsZSBzcmNEaXIgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcERpcigpOworICAgIGZpbmFsIEZpbGUgZG93bmxvYWREaXIgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcERpcigpOworCisgICAgQ29tbXVuaWNhdGlvbk1hbmFnZXIgc2VlZGVyID0gY3JlYXRlQ2xpZW50KCJzZWVkZXIiKTsKKyAgICBzZWVkZXIuc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIGxlZWNoID0gbnVsbDsKKworCisgICAgdHJ5IHsKKyAgICAgIFVSTCBhbm5vdW5jZSA9IG5ldyBVUkwoImh0dHA6Ly8xMjcuMC4wLjE6Njk2OS9hbm5vdW5jZSIpOworICAgICAgVVJJIGFubm91bmNlVVJJID0gYW5ub3VuY2UudG9VUkkoKTsKKyAgICAgIGZpbmFsIFNldDxTdHJpbmc+IG5hbWVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgTGlzdDxGaWxlPiBmaWxlc1RvU2hhcmUgPSBuZXcgQXJyYXlMaXN0PEZpbGU+KCk7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUZpbGVzOyBpKyspIHsKKyAgICAgICAgRmlsZSB0ZW1wRmlsZSA9IHRlbXBGaWxlcy5jcmVhdGVUZW1wRmlsZSg1MTMgKiAxMDI0KTsKKyAgICAgICAgRmlsZSBzcmNGaWxlID0gbmV3IEZpbGUoc3JjRGlyLCB0ZW1wRmlsZS5nZXROYW1lKCkpOworICAgICAgICBhc3NlcnRUcnVlKHRlbXBGaWxlLnJlbmFtZVRvKHNyY0ZpbGUpKTsKKworICAgICAgICBUb3JyZW50TWV0YWRhdGEgdG9ycmVudCA9IFRvcnJlbnRDcmVhdG9yLmNyZWF0ZShzcmNGaWxlLCBhbm5vdW5jZVVSSSwgIlRlc3QiKTsKKyAgICAgICAgRmlsZSB0b3JyZW50RmlsZSA9IG5ldyBGaWxlKHNyY0ZpbGUuZ2V0UGFyZW50RmlsZSgpLCBzcmNGaWxlLmdldE5hbWUoKSArICIudG9ycmVudCIpOworICAgICAgICBzYXZlVG9ycmVudCh0b3JyZW50LCB0b3JyZW50RmlsZSk7CisgICAgICAgIGZpbGVzVG9TaGFyZS5hZGQoc3JjRmlsZSk7CisgICAgICAgIG5hbWVzLmFkZChzcmNGaWxlLmdldE5hbWUoKSk7CisgICAgICB9CisKKyAgICAgIGZvciAoRmlsZSBmIDogZmlsZXNUb1NoYXJlKSB7CisgICAgICAgIEZpbGUgdG9ycmVudEZpbGUgPSBuZXcgRmlsZShmLmdldFBhcmVudEZpbGUoKSwgZi5nZXROYW1lKCkgKyAiLnRvcnJlbnQiKTsKKyAgICAgICAgc2VlZGVyLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGYuZ2V0UGFyZW50KCkpOworICAgICAgfQorICAgICAgbGVlY2ggPSBjcmVhdGVDbGllbnQoImxlZWNoZXIiKTsKKyAgICAgIGxlZWNoLnN0YXJ0KG5ldyBJbmV0QWRkcmVzc1tde0luZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpfSwgNSwgbnVsbCwgbmV3IFNlbGVjdG9yRmFjdG9yeUltcGwoKSk7CisgICAgICBmb3IgKEZpbGUgZiA6IGZpbGVzVG9TaGFyZSkgeworICAgICAgICBGaWxlIHRvcnJlbnRGaWxlID0gbmV3IEZpbGUoZi5nZXRQYXJlbnRGaWxlKCksIGYuZ2V0TmFtZSgpICsgIi50b3JyZW50Iik7CisgICAgICAgIGxlZWNoLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGRvd25sb2FkRGlyLmdldEFic29sdXRlUGF0aCgpKTsKKyAgICAgIH0KKworICAgICAgbmV3IFdhaXRGb3IoNjAgKiAxMDAwKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBjb25kaXRpb24oKSB7CisKKyAgICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiBzdHJpbmdzID0gbGlzdEZpbGVOYW1lcyhkb3dubG9hZERpcik7CisgICAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gcGFydEl0ZW1zID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgICAgICAgZm9yIChTdHJpbmcgcyA6IHN0cmluZ3MpIHsKKyAgICAgICAgICAgIGlmIChzLmVuZHNXaXRoKCIucGFydCIpKSB7CisgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgIHBhcnRJdGVtcy5hZGQocyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChjb3VudCA8IDUpIHsKKworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGYoIkNvdW50OiAlZC4gSXRlbXM6ICVzJW4iLCBjb3VudCwgQXJyYXlzLnRvU3RyaW5nKHBhcnRJdGVtcy50b0FycmF5KCkpKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIHN0cmluZ3MuY29udGFpbnNBbGwobmFtZXMpOworICAgICAgICB9CisgICAgICB9OworCisgICAgICBhc3NlcnRFcXVhbHMobGlzdEZpbGVOYW1lcyhkb3dubG9hZERpciksIG5hbWVzKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgbGVlY2guc3RvcCgpOworICAgICAgc2VlZGVyLnN0b3AoKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIFNldDxTdHJpbmc+IGxpc3RGaWxlTmFtZXMoRmlsZSBkb3dubG9hZERpcikgeworICAgIGlmIChkb3dubG9hZERpciA9PSBudWxsKSByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlTZXQoKTsKKyAgICBTZXQ8U3RyaW5nPiBuYW1lcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICBGaWxlW10gZmlsZXMgPSBkb3dubG9hZERpci5saXN0RmlsZXMoKTsKKyAgICBpZiAoZmlsZXMgPT0gbnVsbCkgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5U2V0KCk7CisgICAgZm9yIChGaWxlIGYgOiBmaWxlcykgeworICAgICAgbmFtZXMuYWRkKGYuZ2V0TmFtZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIG5hbWVzOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEh1bmdTZWVkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0aGlzLnRyYWNrZXIuc2V0QWNjZXB0Rm9yZWlnblRvcnJlbnRzKHRydWUpOworCisgICAgRmlsZSB0ZW1wRmlsZSA9IHRlbXBGaWxlcy5jcmVhdGVUZW1wRmlsZSg1MDAgKiAxMDI1ICogMTAyNCk7CisgICAgVVJMIGFubm91bmNlID0gbmV3IFVSTCgiaHR0cDovLzEyNy4wLjAuMTo2OTY5L2Fubm91bmNlIik7CisgICAgVVJJIGFubm91bmNlVVJJID0gYW5ub3VuY2UudG9VUkkoKTsKKworICAgIFRvcnJlbnRNZXRhZGF0YSB0b3JyZW50ID0gVG9ycmVudENyZWF0b3IuY3JlYXRlKHRlbXBGaWxlLCBhbm5vdW5jZVVSSSwgIlRlc3QiKTsKKyAgICBGaWxlIHRvcnJlbnRGaWxlID0gbmV3IEZpbGUodGVtcEZpbGUuZ2V0UGFyZW50RmlsZSgpLCB0ZW1wRmlsZS5nZXROYW1lKCkgKyAiLnRvcnJlbnQiKTsKKyAgICBzYXZlVG9ycmVudCh0b3JyZW50LCB0b3JyZW50RmlsZSk7CisKKyAgICBDb21tdW5pY2F0aW9uTWFuYWdlciBnb29kU2VlZGVyID0gY3JlYXRlQ2xpZW50KCk7CisgICAgZ29vZFNlZWRlci5hZGRUb3JyZW50KHRvcnJlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpLCB0ZW1wRmlsZS5nZXRQYXJlbnQoKSwgRnVsbHlQaWVjZVN0b3JhZ2VGYWN0b3J5LklOU1RBTkNFKTsKKworICAgIGZpbmFsIEV4ZWN1dG9yU2VydmljZSBlcyA9IEV4ZWN1dG9ycy5uZXdGaXhlZFRocmVhZFBvb2woMTApOworICAgIGZpbmFsIEV4ZWN1dG9yU2VydmljZSB2YWxpZGF0b3JFUyA9IEV4ZWN1dG9ycy5uZXdGaXhlZFRocmVhZFBvb2woNCk7CisgICAgQ29tbXVuaWNhdGlvbk1hbmFnZXIgaHVuZ1NlZWRlciA9IG5ldyBDb21tdW5pY2F0aW9uTWFuYWdlcihlcywgdmFsaWRhdG9yRVMpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKKyAgICAgICAgc3VwZXIuc3RvcCgpOworICAgICAgICBlcy5zaHV0ZG93bk5vdygpOworICAgICAgICB2YWxpZGF0b3JFUy5zaHV0ZG93bk5vdygpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTaGFyaW5nUGVlciBjcmVhdGVTaGFyaW5nUGVlcihTdHJpbmcgaG9zdCwgaW50IHBvcnQsIEJ5dGVCdWZmZXIgcGVlcklkLCBTaGFyZWRUb3JyZW50IHRvcnJlbnQsIEJ5dGVDaGFubmVsIGNoYW5uZWwsIFN0cmluZyBjbGllbnRJZGVudGlmaWVyLCBpbnQgY2xpZW50VmVyc2lvbikgeworICAgICAgICByZXR1cm4gbmV3IFNoYXJpbmdQZWVyKGhvc3QsIHBvcnQsIHBlZXJJZCwgdG9ycmVudCwgZ2V0Q29ubmVjdGlvbk1hbmFnZXIoKSwgdGhpcywgY2hhbm5lbCwgY2xpZW50SWRlbnRpZmllciwgY2xpZW50VmVyc2lvbikgeworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoUGVlck1lc3NhZ2UgbXNnKSB7CisgICAgICAgICAgICBpZiAobXNnIGluc3RhbmNlb2YgUGVlck1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2UpIHsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3VwZXIuaGFuZGxlTWVzc2FnZShtc2cpOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgIH0KKyAgICB9OworICAgIGh1bmdTZWVkZXIuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgdGVtcEZpbGUuZ2V0UGFyZW50KCksIEZ1bGx5UGllY2VTdG9yYWdlRmFjdG9yeS5JTlNUQU5DRSk7CisKKyAgICBmaW5hbCBGaWxlIGRvd25sb2FkRGlyID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBEaXIoKTsKKyAgICBDb21tdW5pY2F0aW9uTWFuYWdlciBsZWVjaCA9IGNyZWF0ZUNsaWVudCgpOworICAgIGxlZWNoLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGRvd25sb2FkRGlyLmdldEFic29sdXRlUGF0aCgpLCBFbXB0eVBpZWNlU3RvcmFnZUZhY3RvcnkuSU5TVEFOQ0UpOworCisgICAgdHJ5IHsKKyAgICAgIGh1bmdTZWVkZXIuc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworICAgICAgZ29vZFNlZWRlci5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisgICAgICBsZWVjaC5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisKKyAgICAgIHdhaXRGb3JGaWxlSW5EaXIoZG93bmxvYWREaXIsIHRlbXBGaWxlLmdldE5hbWUoKSk7CisgICAgICBhc3NlcnRGaWxlc0VxdWFsKHRlbXBGaWxlLCBuZXcgRmlsZShkb3dubG9hZERpciwgdGVtcEZpbGUuZ2V0TmFtZSgpKSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIGdvb2RTZWVkZXIuc3RvcCgpOworICAgICAgbGVlY2guc3RvcCgpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIGxhcmdlX2ZpbGVfZG93bmxvYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIFVSSVN5bnRheEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24geworICAgIHRoaXMudHJhY2tlci5zZXRBY2NlcHRGb3JlaWduVG9ycmVudHModHJ1ZSk7CisKKyAgICBGaWxlIHRlbXBGaWxlID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKDIwMSAqIDEwMjUgKiAxMDI0KTsKKyAgICBVUkwgYW5ub3VuY2UgPSBuZXcgVVJMKCJodHRwOi8vMTI3LjAuMC4xOjY5NjkvYW5ub3VuY2UiKTsKKyAgICBVUkkgYW5ub3VuY2VVUkkgPSBhbm5vdW5jZS50b1VSSSgpOworCisgICAgVG9ycmVudE1ldGFkYXRhIHRvcnJlbnQgPSBUb3JyZW50Q3JlYXRvci5jcmVhdGUodGVtcEZpbGUsIGFubm91bmNlVVJJLCAiVGVzdCIpOworICAgIEZpbGUgdG9ycmVudEZpbGUgPSBuZXcgRmlsZSh0ZW1wRmlsZS5nZXRQYXJlbnRGaWxlKCksIHRlbXBGaWxlLmdldE5hbWUoKSArICIudG9ycmVudCIpOworICAgIHNhdmVUb3JyZW50KHRvcnJlbnQsIHRvcnJlbnRGaWxlKTsKKworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIHNlZWRlciA9IGNyZWF0ZUNsaWVudCgpOworICAgIHNlZWRlci5hZGRUb3JyZW50KHRvcnJlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpLCB0ZW1wRmlsZS5nZXRQYXJlbnQoKSwgRnVsbHlQaWVjZVN0b3JhZ2VGYWN0b3J5LklOU1RBTkNFKTsKKworICAgIGZpbmFsIEZpbGUgZG93bmxvYWREaXIgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcERpcigpOworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIGxlZWNoID0gY3JlYXRlQ2xpZW50KCk7CisgICAgbGVlY2guYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgZG93bmxvYWREaXIuZ2V0QWJzb2x1dGVQYXRoKCksIEVtcHR5UGllY2VTdG9yYWdlRmFjdG9yeS5JTlNUQU5DRSk7CisKKyAgICB0cnkgeworICAgICAgc2VlZGVyLnN0YXJ0KEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpKTsKKyAgICAgIGxlZWNoLnN0YXJ0KEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpKTsKKworICAgICAgd2FpdEZvckZpbGVJbkRpcihkb3dubG9hZERpciwgdGVtcEZpbGUuZ2V0TmFtZSgpKTsKKyAgICAgIGFzc2VydEZpbGVzRXF1YWwodGVtcEZpbGUsIG5ldyBGaWxlKGRvd25sb2FkRGlyLCB0ZW1wRmlsZS5nZXROYW1lKCkpKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgc2VlZGVyLnN0b3AoKTsKKyAgICAgIGxlZWNoLnN0b3AoKTsKKyAgICB9CisgIH0KKworICAvLyBUT0RPOiAyNC4wOS4yMDE4IGZsYWt5IHRlc3QsIGl0J3MgbmVlZGVkIHRvIGRlYnVnIGFuZCBmaXgKKyAgQFRlc3QoZW5hYmxlZCA9IGZhbHNlKQorICBwdWJsaWMgdm9pZCB0ZXN0TWFueUxlZWNoZXJzKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBVUklTeW50YXhFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKyAgICB0aGlzLnRyYWNrZXIuc2V0QWNjZXB0Rm9yZWlnblRvcnJlbnRzKHRydWUpOworCisgICAgRmlsZSB0ZW1wRmlsZSA9IHRlbXBGaWxlcy5jcmVhdGVUZW1wRmlsZSg0MDAgKiAxMDI1ICogMTAyNCk7CisgICAgVVJMIGFubm91bmNlID0gbmV3IFVSTCgiaHR0cDovLzEyNy4wLjAuMTo2OTY5L2Fubm91bmNlIik7CisgICAgVVJJIGFubm91bmNlVVJJID0gYW5ub3VuY2UudG9VUkkoKTsKKworICAgIFRvcnJlbnRNZXRhZGF0YSB0b3JyZW50ID0gVG9ycmVudENyZWF0b3IuY3JlYXRlKHRlbXBGaWxlLCBhbm5vdW5jZVVSSSwgIlRlc3QiKTsKKyAgICBGaWxlIHRvcnJlbnRGaWxlID0gbmV3IEZpbGUodGVtcEZpbGUuZ2V0UGFyZW50RmlsZSgpLCB0ZW1wRmlsZS5nZXROYW1lKCkgKyAiLnRvcnJlbnQiKTsKKyAgICBzYXZlVG9ycmVudCh0b3JyZW50LCB0b3JyZW50RmlsZSk7CisKKyAgICBDb21tdW5pY2F0aW9uTWFuYWdlciBzZWVkZXIgPSBjcmVhdGVDbGllbnQoKTsKKyAgICBzZWVkZXIuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgdGVtcEZpbGUuZ2V0UGFyZW50KCksIEZ1bGx5UGllY2VTdG9yYWdlRmFjdG9yeS5JTlNUQU5DRSk7CisKKyAgICBMaXN0PE1hcC5FbnRyeTxDb21tdW5pY2F0aW9uTWFuYWdlciwgRmlsZT4+IGxlZWNoZXJzID0gbmV3IEFycmF5TGlzdDxNYXAuRW50cnk8Q29tbXVuaWNhdGlvbk1hbmFnZXIsIEZpbGU+PigpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICBmaW5hbCBGaWxlIGRvd25sb2FkRGlyID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBEaXIoKTsKKyAgICAgIENvbW11bmljYXRpb25NYW5hZ2VyIGxlZWNoID0gY3JlYXRlQ2xpZW50KCk7CisgICAgICBsZWVjaC5hZGRUb3JyZW50KHRvcnJlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpLCBkb3dubG9hZERpci5nZXRBYnNvbHV0ZVBhdGgoKSwgRW1wdHlQaWVjZVN0b3JhZ2VGYWN0b3J5LklOU1RBTkNFKTsKKyAgICAgIGxlZWNoZXJzLmFkZChuZXcgQWJzdHJhY3RNYXAuU2ltcGxlRW50cnk8Q29tbXVuaWNhdGlvbk1hbmFnZXIsIEZpbGU+KGxlZWNoLCBkb3dubG9hZERpcikpOworICAgIH0KKworICAgIHRyeSB7CisgICAgICBzZWVkZXIuc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworICAgICAgZm9yIChNYXAuRW50cnk8Q29tbXVuaWNhdGlvbk1hbmFnZXIsIEZpbGU+IGVudHJ5IDogbGVlY2hlcnMpIHsKKyAgICAgICAgZW50cnkuZ2V0S2V5KCkuc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworICAgICAgfQorCisgICAgICBmb3IgKE1hcC5FbnRyeTxDb21tdW5pY2F0aW9uTWFuYWdlciwgRmlsZT4gbGVlY2hlciA6IGxlZWNoZXJzKSB7CisgICAgICAgIEZpbGUgZG93bmxvYWREaXIgPSBsZWVjaGVyLmdldFZhbHVlKCk7CisgICAgICAgIHdhaXRGb3JGaWxlSW5EaXIoZG93bmxvYWREaXIsIHRlbXBGaWxlLmdldE5hbWUoKSk7CisgICAgICAgIGFzc2VydEZpbGVzRXF1YWwodGVtcEZpbGUsIG5ldyBGaWxlKGRvd25sb2FkRGlyLCB0ZW1wRmlsZS5nZXROYW1lKCkpKTsKKyAgICAgIH0KKyAgICB9IGZpbmFsbHkgeworICAgICAgc2VlZGVyLnN0b3AoKTsKKyAgICAgIGZvciAoTWFwLkVudHJ5PENvbW11bmljYXRpb25NYW5hZ2VyLCBGaWxlPiBlIDogbGVlY2hlcnMpIHsKKyAgICAgICAgZS5nZXRLZXkoKS5zdG9wKCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgQFRlc3QoZW5hYmxlZCA9IGZhbHNlKQorICBwdWJsaWMgdm9pZCBlbmRnYW1lTW9kZVRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0aGlzLnRyYWNrZXIuc2V0QWNjZXB0Rm9yZWlnblRvcnJlbnRzKHRydWUpOworICAgIGZpbmFsIGludCBudW1TZWVkZXJzID0gMjsKKyAgICBMaXN0PENvbW11bmljYXRpb25NYW5hZ2VyPiBzZWVkZXJzID0gbmV3IEFycmF5TGlzdDxDb21tdW5pY2F0aW9uTWFuYWdlcj4oKTsKKyAgICBmaW5hbCBBdG9taWNJbnRlZ2VyIHNraXBQaWVjZXNDb3VudCA9IG5ldyBBdG9taWNJbnRlZ2VyKDEpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtU2VlZGVyczsgaSsrKSB7CisgICAgICBmaW5hbCBFeGVjdXRvclNlcnZpY2UgZXMgPSBFeGVjdXRvcnMubmV3Rml4ZWRUaHJlYWRQb29sKDEwKTsKKyAgICAgIGZpbmFsIEV4ZWN1dG9yU2VydmljZSB2YWxpZGF0b3JFUyA9IEV4ZWN1dG9ycy5uZXdGaXhlZFRocmVhZFBvb2woNCk7CisgICAgICBmaW5hbCBDb21tdW5pY2F0aW9uTWFuYWdlciBzZWVkZXIgPSBuZXcgQ29tbXVuaWNhdGlvbk1hbmFnZXIoZXMsIHZhbGlkYXRvckVTKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgeworICAgICAgICAgIHN1cGVyLnN0b3AoKTsKKyAgICAgICAgICBlcy5zaHV0ZG93bk5vdygpOworICAgICAgICAgIHZhbGlkYXRvckVTLnNodXRkb3duTm93KCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFNoYXJpbmdQZWVyIGNyZWF0ZVNoYXJpbmdQZWVyKFN0cmluZyBob3N0LCBpbnQgcG9ydCwgQnl0ZUJ1ZmZlciBwZWVySWQsIFNoYXJlZFRvcnJlbnQgdG9ycmVudCwgQnl0ZUNoYW5uZWwgY2hhbm5lbCwgU3RyaW5nIGNsaWVudElkZW50aWZpZXIsIGludCBjbGllbnRWZXJzaW9uKSB7CisgICAgICAgICAgcmV0dXJuIG5ldyBTaGFyaW5nUGVlcihob3N0LCBwb3J0LCBwZWVySWQsIHRvcnJlbnQsIGdldENvbm5lY3Rpb25NYW5hZ2VyKCksIHRoaXMsIGNoYW5uZWwsICJUTyIsIDEyMzQpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgc2VuZChQZWVyTWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBQZWVyTWVzc2FnZS5QaWVjZU1lc3NhZ2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2tpcFBpZWNlc0NvdW50LmdldEFuZERlY3JlbWVudCgpID4gMCkgeworICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBzdXBlci5zZW5kKG1lc3NhZ2UpOworICAgICAgICAgICAgfQorICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgIH07CisgICAgICBzZWVkZXJzLmFkZChzZWVkZXIpOworICAgICAgY29tbXVuaWNhdGlvbk1hbmFnZXJMaXN0LmFkZChzZWVkZXIpOworICAgIH0KKyAgICBGaWxlIHRlbXBGaWxlID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKDEwMjQgKiAyMCAqIDEwMjQpOworCisgICAgVG9ycmVudE1ldGFkYXRhIHRvcnJlbnQgPSBUb3JyZW50Q3JlYXRvci5jcmVhdGUodGVtcEZpbGUsIHRoaXMudHJhY2tlci5nZXRBbm5vdW5jZVVSSSgpLCAiVGVzdCIpOworICAgIEZpbGUgdG9ycmVudEZpbGUgPSBuZXcgRmlsZSh0ZW1wRmlsZS5nZXRQYXJlbnRGaWxlKCksIHRlbXBGaWxlLmdldE5hbWUoKSArICIudG9ycmVudCIpOworICAgIHNhdmVUb3JyZW50KHRvcnJlbnQsIHRvcnJlbnRGaWxlKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtU2VlZGVyczsgaSsrKSB7CisgICAgICBDb21tdW5pY2F0aW9uTWFuYWdlciBjb21tdW5pY2F0aW9uTWFuYWdlciA9IHNlZWRlcnMuZ2V0KGkpOworICAgICAgY29tbXVuaWNhdGlvbk1hbmFnZXIuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgdGVtcEZpbGUuZ2V0UGFyZW50KCkpOworICAgICAgY29tbXVuaWNhdGlvbk1hbmFnZXIuc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworICAgIH0KKworICAgIGZpbmFsIEZpbGUgZG93bmxvYWREaXIgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcERpcigpOworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIGxlZWNoID0gY3JlYXRlQ2xpZW50KCk7CisgICAgbGVlY2guc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworICAgIFRvcnJlbnRNYW5hZ2VyIHRvcnJlbnRNYW5hZ2VyID0gbGVlY2guYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgZG93bmxvYWREaXIuZ2V0UGFyZW50KCkpOworICAgIHdhaXREb3dubG9hZENvbXBsZXRlKHRvcnJlbnRNYW5hZ2VyLCAyMCk7CisKKyAgICB3YWl0Rm9yRmlsZUluRGlyKGRvd25sb2FkRGlyLCB0ZW1wRmlsZS5nZXROYW1lKCkpOworCisgIH0KKworCisgIHB1YmxpYyB2b2lkIG1vcmVfdGhhbl9vbmVfc2VlZGVyX2Zvcl9zYW1lX3RvcnJlbnQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKyAgICB0aGlzLnRyYWNrZXIuc2V0QWNjZXB0Rm9yZWlnblRvcnJlbnRzKHRydWUpOworICAgIGFzc2VydEVxdWFscygwLCB0aGlzLnRyYWNrZXIuZ2V0VHJhY2tlZFRvcnJlbnRzKCkuc2l6ZSgpKTsKKworICAgIGZpbmFsIGludCBudW1TZWVkZXJzID0gNTsKKyAgICBMaXN0PENvbW11bmljYXRpb25NYW5hZ2VyPiBzZWVkZXJzID0gbmV3IEFycmF5TGlzdDxDb21tdW5pY2F0aW9uTWFuYWdlcj4oKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVNlZWRlcnM7IGkrKykgeworICAgICAgc2VlZGVycy5hZGQoY3JlYXRlQ2xpZW50KCkpOworICAgIH0KKworICAgIHRyeSB7CisgICAgICBGaWxlIHRlbXBGaWxlID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKDEwMCAqIDEwMjQpOworCisgICAgICBUb3JyZW50TWV0YWRhdGEgdG9ycmVudCA9IFRvcnJlbnRDcmVhdG9yLmNyZWF0ZSh0ZW1wRmlsZSwgdGhpcy50cmFja2VyLmdldEFubm91bmNlVVJJKCksICJUZXN0Iik7CisgICAgICBGaWxlIHRvcnJlbnRGaWxlID0gbmV3IEZpbGUodGVtcEZpbGUuZ2V0UGFyZW50RmlsZSgpLCB0ZW1wRmlsZS5nZXROYW1lKCkgKyAiLnRvcnJlbnQiKTsKKyAgICAgIHNhdmVUb3JyZW50KHRvcnJlbnQsIHRvcnJlbnRGaWxlKTsKKworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1TZWVkZXJzOyBpKyspIHsKKyAgICAgICAgQ29tbXVuaWNhdGlvbk1hbmFnZXIgY29tbXVuaWNhdGlvbk1hbmFnZXIgPSBzZWVkZXJzLmdldChpKTsKKyAgICAgICAgY29tbXVuaWNhdGlvbk1hbmFnZXIuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgdGVtcEZpbGUuZ2V0UGFyZW50KCkpOworICAgICAgICBjb21tdW5pY2F0aW9uTWFuYWdlci5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisgICAgICB9CisKKyAgICAgIG5ldyBXYWl0Rm9yKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gY29uZGl0aW9uKCkgeworICAgICAgICAgIGZvciAoVHJhY2tlZFRvcnJlbnQgdHQgOiB0cmFja2VyLmdldFRyYWNrZWRUb3JyZW50cygpKSB7CisgICAgICAgICAgICBpZiAodHQuZ2V0UGVlcnMoKS5zaXplKCkgPT0gbnVtU2VlZGVycykgcmV0dXJuIHRydWU7CisgICAgICAgICAgfQorCisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICB9OworCisgICAgICBDb2xsZWN0aW9uPFRyYWNrZWRUb3JyZW50PiB0b3JyZW50cyA9IHRoaXMudHJhY2tlci5nZXRUcmFja2VkVG9ycmVudHMoKTsKKyAgICAgIGFzc2VydEVxdWFscyh0b3JyZW50cy5zaXplKCksIDEpOworICAgICAgYXNzZXJ0RXF1YWxzKG51bVNlZWRlcnMsIHRvcnJlbnRzLml0ZXJhdG9yKCkubmV4dCgpLnNlZWRlcnMoKSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIGZvciAoQ29tbXVuaWNhdGlvbk1hbmFnZXIgY29tbXVuaWNhdGlvbk1hbmFnZXIgOiBzZWVkZXJzKSB7CisgICAgICAgIGNvbW11bmljYXRpb25NYW5hZ2VyLnN0b3AoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUaGF0RG93bmxvYWRTdGF0aXN0aWNQcm92aWRlZFRvVHJhY2tlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvclNlcnZpY2UgPSBFeGVjdXRvcnMubmV3Rml4ZWRUaHJlYWRQb29sKDgpOworICAgIGZpbmFsIEV4ZWN1dG9yU2VydmljZSB2YWxpZGF0b3JFUyA9IEV4ZWN1dG9ycy5uZXdGaXhlZFRocmVhZFBvb2woNCk7CisgICAgZmluYWwgQXRvbWljSW50ZWdlciBjb3VudE9mVHJhY2tlclJlc3BvbnNlcyA9IG5ldyBBdG9taWNJbnRlZ2VyKDApOworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIGxlZWNoZXIgPSBuZXcgQ29tbXVuaWNhdGlvbk1hbmFnZXIoZXhlY3V0b3JTZXJ2aWNlLCB2YWxpZGF0b3JFUykgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVEaXNjb3ZlcmVkUGVlcnMoTGlzdDxQZWVyPiBwZWVycywgU3RyaW5nIGhleEluZm9IYXNoKSB7CisgICAgICAgIHN1cGVyLmhhbmRsZURpc2NvdmVyZWRQZWVycyhwZWVycywgaGV4SW5mb0hhc2gpOworICAgICAgICBjb3VudE9mVHJhY2tlclJlc3BvbnNlcy5pbmNyZW1lbnRBbmRHZXQoKTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgeworICAgICAgICBzdXBlci5zdG9wKCk7CisgICAgICAgIGV4ZWN1dG9yU2VydmljZS5zaHV0ZG93bk5vdygpOworICAgICAgICB2YWxpZGF0b3JFUy5zaHV0ZG93bk5vdygpOworICAgICAgfQorICAgIH07CisKKyAgICBjb21tdW5pY2F0aW9uTWFuYWdlckxpc3QuYWRkKGxlZWNoZXIpOworCisgICAgZmluYWwgaW50IGZpbGVTaXplID0gMiAqIDEwMjUgKiAxMDI0OworICAgIEZpbGUgdGVtcEZpbGUgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcEZpbGUoZmlsZVNpemUpOworICAgIFVSTCBhbm5vdW5jZSA9IG5ldyBVUkwoImh0dHA6Ly8xMjcuMC4wLjE6Njk2OS9hbm5vdW5jZSIpOworICAgIFVSSSBhbm5vdW5jZVVSSSA9IGFubm91bmNlLnRvVVJJKCk7CisKKyAgICBUb3JyZW50TWV0YWRhdGEgdG9ycmVudCA9IFRvcnJlbnRDcmVhdG9yLmNyZWF0ZSh0ZW1wRmlsZSwgYW5ub3VuY2VVUkksICJUZXN0Iik7CisgICAgRmlsZSB0b3JyZW50RmlsZSA9IG5ldyBGaWxlKHRlbXBGaWxlLmdldFBhcmVudEZpbGUoKSwgdGVtcEZpbGUuZ2V0TmFtZSgpICsgIi50b3JyZW50Iik7CisgICAgc2F2ZVRvcnJlbnQodG9ycmVudCwgdG9ycmVudEZpbGUpOworCisgICAgU3RyaW5nIGhhc2ggPSBsZWVjaGVyLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIHRlbXBGaWxlcy5jcmVhdGVUZW1wRGlyKCkuZ2V0QWJzb2x1dGVQYXRoKCkpLmdldEhleEluZm9IYXNoKCk7CisgICAgbGVlY2hlci5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisgICAgZmluYWwgTG9hZGVkVG9ycmVudCBhbm5vdW5jZWFibGVUb3JyZW50ID0gbGVlY2hlci5nZXRUb3JyZW50c1N0b3JhZ2UoKS5nZXRMb2FkZWRUb3JyZW50KGhhc2gpOworCisgICAgZmluYWwgU2hhcmVkVG9ycmVudCBzaGFyZWRUb3JyZW50ID0gbGVlY2hlci5nZXRUb3JyZW50c1N0b3JhZ2UoKS5wdXRJZkFic2VudEFjdGl2ZVRvcnJlbnQoYW5ub3VuY2VhYmxlVG9ycmVudC5nZXRUb3JyZW50SGFzaCgpLmdldEhleEluZm9IYXNoKCksCisgICAgICAgICAgICBsZWVjaGVyLmdldFRvcnJlbnRMb2FkZXIoKS5sb2FkVG9ycmVudChhbm5vdW5jZWFibGVUb3JyZW50KSk7CisKKyAgICBzaGFyZWRUb3JyZW50LmluaXQoKTsKKworICAgIG5ldyBXYWl0Rm9yKDEwICogMTAwMCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBjb25kaXRpb24oKSB7CisgICAgICAgIHJldHVybiBjb3VudE9mVHJhY2tlclJlc3BvbnNlcy5nZXQoKSA9PSAxOworICAgICAgfQorICAgIH07CisKKyAgICBmaW5hbCBUcmFja2VkVG9ycmVudCB0cmFja2VkVG9ycmVudCA9IHRyYWNrZXIuZ2V0VHJhY2tlZFRvcnJlbnQoYW5ub3VuY2VhYmxlVG9ycmVudC5nZXRUb3JyZW50SGFzaCgpLmdldEhleEluZm9IYXNoKCkpOworCisgICAgYXNzZXJ0RXF1YWxzKHRyYWNrZWRUb3JyZW50LmdldFBlZXJzKCkuc2l6ZSgpLCAxKTsKKworICAgIGZpbmFsIFRyYWNrZWRQZWVyIHRyYWNrZWRQZWVyID0gdHJhY2tlZFRvcnJlbnQuZ2V0UGVlcnMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKKworICAgIGFzc2VydEVxdWFscyh0cmFja2VkUGVlci5nZXRVcGxvYWRlZCgpLCAwKTsKKyAgICBhc3NlcnRFcXVhbHModHJhY2tlZFBlZXIuZ2V0RG93bmxvYWRlZCgpLCAwKTsKKyAgICBhc3NlcnRFcXVhbHModHJhY2tlZFBlZXIuZ2V0TGVmdCgpLCBmaWxlU2l6ZSk7CisKKyAgICBQaWVjZSBwaWVjZSA9IHNoYXJlZFRvcnJlbnQuZ2V0UGllY2UoMSk7CisgICAgc2hhcmVkVG9ycmVudC5oYW5kbGVQaWVjZUNvbXBsZXRlZChudWxsLCBwaWVjZSk7CisgICAgc2hhcmVkVG9ycmVudC5tYXJrQ29tcGxldGVkKHBpZWNlKTsKKworICAgIG5ldyBXYWl0Rm9yKDEwICogMTAwMCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBjb25kaXRpb24oKSB7CisgICAgICAgIHJldHVybiBjb3VudE9mVHJhY2tlclJlc3BvbnNlcy5nZXQoKSA+PSAyOworICAgICAgfQorICAgIH07CisgICAgaW50IGRvd25sb2FkZWQgPSA1MTIgKiAxMDI0Oy8vb25lIHBpZWNlCisgICAgYXNzZXJ0RXF1YWxzKHRyYWNrZWRQZWVyLmdldFVwbG9hZGVkKCksIDApOworICAgIGFzc2VydEVxdWFscyh0cmFja2VkUGVlci5nZXREb3dubG9hZGVkKCksIGRvd25sb2FkZWQpOworICAgIGFzc2VydEVxdWFscyh0cmFja2VkUGVlci5nZXRMZWZ0KCksIGZpbGVTaXplIC0gZG93bmxvYWRlZCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBub19mdWxsX3NlZWRlcl90ZXN0KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBVUklTeW50YXhFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uLCBOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24geworICAgIHRoaXMudHJhY2tlci5zZXRBY2NlcHRGb3JlaWduVG9ycmVudHModHJ1ZSk7CisKKyAgICBmaW5hbCBpbnQgcGllY2VTaXplID0gNDggKiAxMDI0OyAvLyBsb3dlciBwaWVjZSBzaXplIHRvIHJlZHVjZSBkaXNrIHVzYWdlCisgICAgZmluYWwgaW50IG51bVNlZWRlcnMgPSA2OworICAgIGZpbmFsIGludCBwaWVjZXNDb3VudCA9IG51bVNlZWRlcnMgKiAzICsgMTU7CisKKyAgICBmaW5hbCBMaXN0PENvbW11bmljYXRpb25NYW5hZ2VyPiBjbGllbnRzTGlzdDsKKyAgICBjbGllbnRzTGlzdCA9IG5ldyBBcnJheUxpc3Q8Q29tbXVuaWNhdGlvbk1hbmFnZXI+KHBpZWNlc0NvdW50KTsKKworICAgIGZpbmFsIE1lc3NhZ2VEaWdlc3QgbWQ1ID0gTWVzc2FnZURpZ2VzdC5nZXRJbnN0YW5jZSgiTUQ1Iik7CisKKyAgICB0cnkgeworICAgICAgRmlsZSB0ZW1wRmlsZSA9IHRlbXBGaWxlcy5jcmVhdGVUZW1wRmlsZShwaWVjZXNDb3VudCAqIHBpZWNlU2l6ZSk7CisgICAgICBMaXN0PEZpbGU+IHRhcmdldEZpbGVzID0gbmV3IEFycmF5TGlzdDxGaWxlPigpOworCisgICAgICBTdHJpbmcgaGFzaCA9IGNyZWF0ZU11bHRpcGxlU2VlZGVyc1dpdGhEaWZmZXJlbnRQaWVjZXModGVtcEZpbGUsIHBpZWNlc0NvdW50LCBwaWVjZVNpemUsIG51bVNlZWRlcnMsIGNsaWVudHNMaXN0LCB0YXJnZXRGaWxlcyk7CisgICAgICBTdHJpbmcgYmFzZU1ENSA9IGdldEZpbGVNRDUodGVtcEZpbGUsIG1kNSk7CisgICAgICBhc3NlcnRFcXVhbHMobnVtU2VlZGVycywgdGFyZ2V0RmlsZXMuc2l6ZSgpKTsKKworICAgICAgdmFsaWRhdGVNdWx0aXBsZUNsaWVudHNSZXN1bHRzKGNsaWVudHNMaXN0LCBtZDUsIHRlbXBGaWxlLCBiYXNlTUQ1LCBoYXNoLCB0YXJnZXRGaWxlcyk7CisKKyAgICB9IGZpbmFsbHkgeworICAgICAgZm9yIChDb21tdW5pY2F0aW9uTWFuYWdlciBjb21tdW5pY2F0aW9uTWFuYWdlciA6IGNsaWVudHNMaXN0KSB7CisgICAgICAgIGNvbW11bmljYXRpb25NYW5hZ2VyLnN0b3AoKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBAVGVzdChlbmFibGVkID0gZmFsc2UpCisgIHB1YmxpYyB2b2lkIGNvcnJ1cHRlZF9zZWVkZXJfcmVwYWlyKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBVUklTeW50YXhFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uLCBOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24geworICAgIHRoaXMudHJhY2tlci5zZXRBY2NlcHRGb3JlaWduVG9ycmVudHModHJ1ZSk7CisKKyAgICBmaW5hbCBpbnQgcGllY2VTaXplID0gNDggKiAxMDI0OyAvLyBsb3dlciBwaWVjZSBzaXplIHRvIHJlZHVjZSBkaXNrIHVzYWdlCisgICAgZmluYWwgaW50IG51bVNlZWRlcnMgPSA2OworICAgIGZpbmFsIGludCBwaWVjZXNDb3VudCA9IG51bVNlZWRlcnMgKyA3OworCisgICAgZmluYWwgTGlzdDxDb21tdW5pY2F0aW9uTWFuYWdlcj4gY2xpZW50c0xpc3Q7CisgICAgY2xpZW50c0xpc3QgPSBuZXcgQXJyYXlMaXN0PENvbW11bmljYXRpb25NYW5hZ2VyPihwaWVjZXNDb3VudCk7CisKKyAgICBmaW5hbCBNZXNzYWdlRGlnZXN0IG1kNSA9IE1lc3NhZ2VEaWdlc3QuZ2V0SW5zdGFuY2UoIk1ENSIpOworCisgICAgdHJ5IHsKKyAgICAgIEZpbGUgYmFzZUZpbGUgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcEZpbGUocGllY2VzQ291bnQgKiBwaWVjZVNpemUpOworICAgICAgTGlzdDxGaWxlPiB0YXJnZXRGaWxlcyA9IG5ldyBBcnJheUxpc3Q8RmlsZT4oKTsKKworICAgICAgU3RyaW5nIGhhc2ggPSBjcmVhdGVNdWx0aXBsZVNlZWRlcnNXaXRoRGlmZmVyZW50UGllY2VzKGJhc2VGaWxlLCBwaWVjZXNDb3VudCwgcGllY2VTaXplLCBudW1TZWVkZXJzLCBjbGllbnRzTGlzdCwgdGFyZ2V0RmlsZXMpOworICAgICAgYXNzZXJ0RXF1YWxzKG51bVNlZWRlcnMsIHRhcmdldEZpbGVzLnNpemUoKSk7CisgICAgICBTdHJpbmcgYmFzZU1ENSA9IGdldEZpbGVNRDUoYmFzZUZpbGUsIG1kNSk7CisgICAgICBmaW5hbCBDb21tdW5pY2F0aW9uTWFuYWdlciBmaXJzdENvbW11bmljYXRpb25NYW5hZ2VyID0gY2xpZW50c0xpc3QuZ2V0KDApOworCisgICAgICBuZXcgV2FpdEZvcigxMCAqIDEwMDApIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCBib29sZWFuIGNvbmRpdGlvbigpIHsKKyAgICAgICAgICByZXR1cm4gZmlyc3RDb21tdW5pY2F0aW9uTWFuYWdlci5nZXRUb3JyZW50c1N0b3JhZ2UoKS5hY3RpdmVUb3JyZW50cygpLnNpemUoKSA+PSAxOworICAgICAgICB9CisgICAgICB9OworCisgICAgICBmaW5hbCBTaGFyZWRUb3JyZW50IHRvcnJlbnQgPSBmaXJzdENvbW11bmljYXRpb25NYW5hZ2VyLmdldFRvcnJlbnRzKCkuaXRlcmF0b3IoKS5uZXh0KCk7CisgICAgICBmaW5hbCBGaWxlIGZpbGUgPSBuZXcgRmlsZSh0YXJnZXRGaWxlcy5nZXQoMCkuZ2V0UGFyZW50RmlsZSgpLCBUb3JyZW50VXRpbHMuZ2V0VG9ycmVudEZpbGVOYW1lcyh0b3JyZW50KS5nZXQoMCkpOworICAgICAgZmluYWwgaW50IG9sZEJ5dGU7CisgICAgICB7CisgICAgICAgIFJhbmRvbUFjY2Vzc0ZpbGUgcmFmID0gbmV3IFJhbmRvbUFjY2Vzc0ZpbGUoZmlsZSwgInJ3Iik7CisgICAgICAgIHJhZi5zZWVrKDApOworICAgICAgICBvbGRCeXRlID0gcmFmLnJlYWQoKTsKKyAgICAgICAgcmFmLnNlZWsoMCk7CisgICAgICAgIC8vIHJlcGxhY2luZyB0aGUgYnl0ZQorICAgICAgICBpZiAob2xkQnl0ZSAhPSAzNSkgeworICAgICAgICAgIHJhZi53cml0ZSgzNSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmFmLndyaXRlKDQ1KTsKKyAgICAgICAgfQorICAgICAgICByYWYuY2xvc2UoKTsKKyAgICAgIH0KKyAgICAgIGZpbmFsIFdhaXRGb3Igd2FpdEZvciA9IG5ldyBXYWl0Rm9yKDYwICogMTAwMCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gY29uZGl0aW9uKCkgeworICAgICAgICAgIGZvciAoQ29tbXVuaWNhdGlvbk1hbmFnZXIgY2xpZW50IDogY2xpZW50c0xpc3QpIHsKKyAgICAgICAgICAgIGZpbmFsIFNoYXJlZFRvcnJlbnQgbmV4dCA9IGNsaWVudC5nZXRUb3JyZW50cygpLml0ZXJhdG9yKCkubmV4dCgpOworICAgICAgICAgICAgaWYgKG5leHQuZ2V0Q29tcGxldGVkUGllY2VzKCkuY2FyZGluYWxpdHkoKSA8IG5leHQuZ2V0UGllY2VDb3VudCgpIC0gMSkgeworICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICB9OworCisgICAgICBpZiAoIXdhaXRGb3IuaXNNeVJlc3VsdCgpKSB7CisgICAgICAgIGZhaWwoIkFsbCBzZWVkZXJzIGRpZG4ndCBnZXQgdGhlaXIgZmlsZXMiKTsKKyAgICAgIH0KKyAgICAgIFRocmVhZC5zbGVlcCgxMCAqIDEwMDApOworICAgICAgeworICAgICAgICBieXRlW10gcGllY2UgPSBuZXcgYnl0ZVtwaWVjZVNpemVdOworICAgICAgICBGaWxlSW5wdXRTdHJlYW0gZmluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShiYXNlRmlsZSk7CisgICAgICAgIGZpbi5yZWFkKHBpZWNlKTsKKyAgICAgICAgZmluLmNsb3NlKCk7CisgICAgICAgIFJhbmRvbUFjY2Vzc0ZpbGUgcmFmOworICAgICAgICB0cnkgeworICAgICAgICAgIHJhZiA9IG5ldyBSYW5kb21BY2Nlc3NGaWxlKGZpbGUsICJydyIpOworICAgICAgICAgIHJhZi5zZWVrKDApOworICAgICAgICAgIHJhZi53cml0ZShvbGRCeXRlKTsKKyAgICAgICAgICByYWYuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgdmFsaWRhdGVNdWx0aXBsZUNsaWVudHNSZXN1bHRzKGNsaWVudHNMaXN0LCBtZDUsIGJhc2VGaWxlLCBiYXNlTUQ1LCBoYXNoLCB0YXJnZXRGaWxlcyk7CisKKyAgICB9IGZpbmFsbHkgeworICAgICAgZm9yIChDb21tdW5pY2F0aW9uTWFuYWdlciBjb21tdW5pY2F0aW9uTWFuYWdlciA6IGNsaWVudHNMaXN0KSB7CisgICAgICAgIGNvbW11bmljYXRpb25NYW5hZ2VyLnN0b3AoKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VGhhdFRvcnJlbnRzSGF2ZUxhenlJbml0QW5kUmVtb3ZpbmdBZnRlckRvd25sb2FkKCkKKyAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uLCBVUklTeW50YXhFeGNlcHRpb24geworICAgIGZpbmFsIENvbW11bmljYXRpb25NYW5hZ2VyIHNlZWRlciA9IGNyZWF0ZUNsaWVudCgpOworICAgIEZpbGUgdGVtcEZpbGUgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcEZpbGUoMTAwICogMTAyNSAqIDEwMjQpOworICAgIFVSTCBhbm5vdW5jZSA9IG5ldyBVUkwoImh0dHA6Ly8xMjcuMC4wLjE6Njk2OS9hbm5vdW5jZSIpOworICAgIFVSSSBhbm5vdW5jZVVSSSA9IGFubm91bmNlLnRvVVJJKCk7CisKKyAgICBUb3JyZW50TWV0YWRhdGEgdG9ycmVudCA9IFRvcnJlbnRDcmVhdG9yLmNyZWF0ZSh0ZW1wRmlsZSwgYW5ub3VuY2VVUkksICJUZXN0Iik7CisgICAgRmlsZSB0b3JyZW50RmlsZSA9IG5ldyBGaWxlKHRlbXBGaWxlLmdldFBhcmVudEZpbGUoKSwgdGVtcEZpbGUuZ2V0TmFtZSgpICsgIi50b3JyZW50Iik7CisgICAgc2F2ZVRvcnJlbnQodG9ycmVudCwgdG9ycmVudEZpbGUpOworICAgIHNlZWRlci5hZGRUb3JyZW50KHRvcnJlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpLCB0ZW1wRmlsZS5nZXRQYXJlbnRGaWxlKCkuZ2V0QWJzb2x1dGVQYXRoKCkpOworCisgICAgZmluYWwgQ29tbXVuaWNhdGlvbk1hbmFnZXIgbGVlY2hlciA9IGNyZWF0ZUNsaWVudCgpOworICAgIEZpbGUgZG93bmxvYWREaXIgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcERpcigpOworICAgIGxlZWNoZXIuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgZG93bmxvYWREaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOworICAgIHNlZWRlci5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoMSwgc2VlZGVyLmdldFRvcnJlbnRzU3RvcmFnZSgpLmFubm91bmNlYWJsZVRvcnJlbnRzKCkuc2l6ZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoMCwgc2VlZGVyLmdldFRvcnJlbnRzU3RvcmFnZSgpLmFjdGl2ZVRvcnJlbnRzKCkuc2l6ZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoMCwgbGVlY2hlci5nZXRUb3JyZW50c1N0b3JhZ2UoKS5hY3RpdmVUb3JyZW50cygpLnNpemUoKSk7CisKKyAgICBsZWVjaGVyLnN0YXJ0KEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpKTsKKworICAgIFdhaXRGb3Igd2FpdEZvciA9IG5ldyBXYWl0Rm9yKDEwICogMTAwMCkgeworCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBib29sZWFuIGNvbmRpdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHNlZWRlci5nZXRUb3JyZW50c1N0b3JhZ2UoKS5hY3RpdmVUb3JyZW50cygpLnNpemUoKSA9PSAxICYmCisgICAgICAgICAgICAgICAgbGVlY2hlci5nZXRUb3JyZW50c1N0b3JhZ2UoKS5hY3RpdmVUb3JyZW50cygpLnNpemUoKSA9PSAxOworICAgICAgfQorICAgIH07CisKKyAgICBhc3NlcnRUcnVlKHdhaXRGb3IuaXNNeVJlc3VsdCgpLCAiVG9ycmVudCB3YXMgbm90IHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCIpOworCisgICAgYXNzZXJ0RXF1YWxzKDEsIHNlZWRlci5nZXRUb3JyZW50c1N0b3JhZ2UoKS5hY3RpdmVUb3JyZW50cygpLnNpemUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIGxlZWNoZXIuZ2V0VG9ycmVudHNTdG9yYWdlKCkuYWN0aXZlVG9ycmVudHMoKS5zaXplKCkpOworCisgICAgd2FpdEZvckZpbGVJbkRpcihkb3dubG9hZERpciwgdGVtcEZpbGUuZ2V0TmFtZSgpKTsKKyAgICBhc3NlcnRGaWxlc0VxdWFsKHRlbXBGaWxlLCBuZXcgRmlsZShkb3dubG9hZERpciwgdGVtcEZpbGUuZ2V0TmFtZSgpKSk7CisKKyAgICB3YWl0Rm9yID0gbmV3IFdhaXRGb3IoMTAgKiAxMDAwKSB7CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gY29uZGl0aW9uKCkgeworICAgICAgICByZXR1cm4gc2VlZGVyLmdldFRvcnJlbnRzU3RvcmFnZSgpLmFjdGl2ZVRvcnJlbnRzKCkuc2l6ZSgpID09IDAgJiYKKyAgICAgICAgICAgICAgICBsZWVjaGVyLmdldFRvcnJlbnRzU3RvcmFnZSgpLmFjdGl2ZVRvcnJlbnRzKCkuc2l6ZSgpID09IDA7CisgICAgICB9CisgICAgfTsKKworICAgIGFzc2VydFRydWUod2FpdEZvci5pc015UmVzdWx0KCksICJUb3JyZW50IHdhcyBub3Qgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQiKTsKKworICAgIGFzc2VydEVxdWFscygwLCBzZWVkZXIuZ2V0VG9ycmVudHNTdG9yYWdlKCkuYWN0aXZlVG9ycmVudHMoKS5zaXplKCkpOworICAgIGFzc2VydEVxdWFscygwLCBsZWVjaGVyLmdldFRvcnJlbnRzU3RvcmFnZSgpLmFjdGl2ZVRvcnJlbnRzKCkuc2l6ZSgpKTsKKworICB9CisKKyAgcHVibGljIHZvaWQgY29ycnVwdGVkX3NlZWRlcigpIHRocm93cyBJT0V4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24sIE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiB7CisgICAgdGhpcy50cmFja2VyLnNldEFjY2VwdEZvcmVpZ25Ub3JyZW50cyh0cnVlKTsKKworICAgIGZpbmFsIGludCBwaWVjZVNpemUgPSA0OCAqIDEwMjQ7IC8vIGxvd2VyIHBpZWNlIHNpemUgdG8gcmVkdWNlIGRpc2sgdXNhZ2UKKyAgICBmaW5hbCBpbnQgcGllY2VzQ291bnQgPSAzNTsKKworICAgIGZpbmFsIExpc3Q8Q29tbXVuaWNhdGlvbk1hbmFnZXI+IGNsaWVudHNMaXN0OworICAgIGNsaWVudHNMaXN0ID0gbmV3IEFycmF5TGlzdDxDb21tdW5pY2F0aW9uTWFuYWdlcj4ocGllY2VzQ291bnQpOworCisgICAgZmluYWwgTWVzc2FnZURpZ2VzdCBtZDUgPSBNZXNzYWdlRGlnZXN0LmdldEluc3RhbmNlKCJNRDUiKTsKKworICAgIHRyeSB7CisgICAgICBmaW5hbCBGaWxlIGJhc2VGaWxlID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKHBpZWNlc0NvdW50ICogcGllY2VTaXplKTsKKyAgICAgIGZpbmFsIEZpbGUgYmFkRmlsZSA9IHRlbXBGaWxlcy5jcmVhdGVUZW1wRmlsZShwaWVjZXNDb3VudCAqIHBpZWNlU2l6ZSk7CisKKyAgICAgIGZpbmFsIENvbW11bmljYXRpb25NYW5hZ2VyIGNvbW11bmljYXRpb25NYW5hZ2VyMiA9IGNyZWF0ZUFuZFN0YXJ0Q2xpZW50KCk7CisgICAgICBmaW5hbCBGaWxlIGNsaWVudDJEaXIgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcERpcigpOworICAgICAgZmluYWwgRmlsZSBjbGllbnQyRmlsZSA9IG5ldyBGaWxlKGNsaWVudDJEaXIsIGJhc2VGaWxlLmdldE5hbWUoKSk7CisgICAgICBGaWxlVXRpbHMuY29weUZpbGUoYmFkRmlsZSwgY2xpZW50MkZpbGUpOworCisgICAgICBmaW5hbCBUb3JyZW50TWV0YWRhdGEgdG9ycmVudCA9IFRvcnJlbnRDcmVhdG9yLmNyZWF0ZShiYXNlRmlsZSwgbnVsbCwgdGhpcy50cmFja2VyLmdldEFubm91bmNlVVJJKCksIG51bGwsICJUZXN0IiwgcGllY2VTaXplKTsKKyAgICAgIGZpbmFsIEZpbGUgdG9ycmVudEZpbGUgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcEZpbGUoKTsKKyAgICAgIHNhdmVUb3JyZW50KHRvcnJlbnQsIHRvcnJlbnRGaWxlKTsKKworICAgICAgY29tbXVuaWNhdGlvbk1hbmFnZXIyLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGNsaWVudDJEaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOworCisgICAgICBmaW5hbCBDb21tdW5pY2F0aW9uTWFuYWdlciBsZWVjaCA9IGNyZWF0ZUFuZFN0YXJ0Q2xpZW50KCk7CisgICAgICBmaW5hbCBGaWxlIGxlZWNoRGVzdERpciA9IHRlbXBGaWxlcy5jcmVhdGVUZW1wRGlyKCk7CisgICAgICBmaW5hbCBBdG9taWNSZWZlcmVuY2U8RXhjZXB0aW9uPiB0aHJvd25FeGNlcHRpb24gPSBuZXcgQXRvbWljUmVmZXJlbmNlPEV4Y2VwdGlvbj4oKTsKKyAgICAgIGZpbmFsIFRocmVhZCB0aCA9IG5ldyBUaHJlYWQobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBUb3JyZW50TWFuYWdlciB0b3JyZW50TWFuYWdlciA9IGxlZWNoLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGxlZWNoRGVzdERpci5nZXRBYnNvbHV0ZVBhdGgoKSk7CisgICAgICAgICAgICB3YWl0RG93bmxvYWRDb21wbGV0ZSh0b3JyZW50TWFuYWdlciwgMTApOworICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvd25FeGNlcHRpb24uc2V0KGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIHRoLnN0YXJ0KCk7CisgICAgICBmaW5hbCBXYWl0Rm9yIHdhaXRGb3IgPSBuZXcgV2FpdEZvcigzMCAqIDEwMDApIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCBib29sZWFuIGNvbmRpdGlvbigpIHsKKyAgICAgICAgICByZXR1cm4gdGguZ2V0U3RhdGUoKSA9PSBUaHJlYWQuU3RhdGUuVEVSTUlOQVRFRDsKKyAgICAgICAgfQorICAgICAgfTsKKworICAgICAgZmluYWwgTWFwPFRocmVhZCwgU3RhY2tUcmFjZUVsZW1lbnRbXT4gYWxsU3RhY2tUcmFjZXMgPSBUaHJlYWQuZ2V0QWxsU3RhY2tUcmFjZXMoKTsKKyAgICAgIGZvciAoTWFwLkVudHJ5PFRocmVhZCwgU3RhY2tUcmFjZUVsZW1lbnRbXT4gZW50cnkgOiBhbGxTdGFja1RyYWNlcy5lbnRyeVNldCgpKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRmKCIlczolbiIsIGVudHJ5LmdldEtleSgpLmdldE5hbWUoKSk7CisgICAgICAgIGZvciAoU3RhY2tUcmFjZUVsZW1lbnQgZWxlbSA6IGVudHJ5LmdldFZhbHVlKCkpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZWxlbS50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBhc3NlcnRUcnVlKHdhaXRGb3IuaXNNeVJlc3VsdCgpKTsKKyAgICAgIGFzc2VydE5vdE51bGwodGhyb3duRXhjZXB0aW9uLmdldCgpKTsKKyAgICAgIGFzc2VydFRydWUodGhyb3duRXhjZXB0aW9uLmdldCgpLmdldE1lc3NhZ2UoKS5jb250YWlucygiVW5hYmxlIHRvIGRvd25sb2FkIikpOworCisgICAgfSBmaW5hbGx5IHsKKyAgICAgIGZvciAoQ29tbXVuaWNhdGlvbk1hbmFnZXIgY29tbXVuaWNhdGlvbk1hbmFnZXIgOiBjbGllbnRzTGlzdCkgeworICAgICAgICBjb21tdW5pY2F0aW9uTWFuYWdlci5zdG9wKCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdW5sb2NrX2ZpbGVfd2hlbl9ub19sZWVjaGVycygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIHNlZWRlciA9IGNyZWF0ZUNsaWVudCgpOworICAgIHRyYWNrZXIuc2V0QWNjZXB0Rm9yZWlnblRvcnJlbnRzKHRydWUpOworCisgICAgZmluYWwgRmlsZSBkd25sRmlsZSA9IHRlbXBGaWxlcy5jcmVhdGVUZW1wRmlsZSg1MTMgKiAxMDI0ICogNyk7CisgICAgZmluYWwgVG9ycmVudE1ldGFkYXRhIHRvcnJlbnQgPSBUb3JyZW50Q3JlYXRvci5jcmVhdGUoZHdubEZpbGUsIG51bGwsIHRyYWNrZXIuZ2V0QW5ub3VuY2VVUkkoKSwgIlRlc3QiKTsKKyAgICBmaW5hbCBGaWxlIHRvcnJlbnRGaWxlID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKCk7CisgICAgc2F2ZVRvcnJlbnQodG9ycmVudCwgdG9ycmVudEZpbGUpOworCisgICAgc2VlZGVyLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGR3bmxGaWxlLmdldFBhcmVudCgpKTsKKyAgICBzZWVkZXIuc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworCisgICAgZG93bmxvYWRBbmRTdG9wKHRvcnJlbnQsIDE1ICogMTAwMCwgY3JlYXRlQ2xpZW50KCkpOworICAgIFRocmVhZC5zbGVlcCgyICogMTAwMCk7CisgICAgYXNzZXJ0VHJ1ZShkd25sRmlsZS5leGlzdHMoKSAmJiBkd25sRmlsZS5pc0ZpbGUoKSk7CisgICAgZmluYWwgYm9vbGVhbiBkZWxldGUgPSBkd25sRmlsZS5kZWxldGUoKTsKKyAgICBhc3NlcnRUcnVlKGRlbGV0ZSAmJiAhZHdubEZpbGUuZXhpc3RzKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgZG93bmxvYWRfbWFueV90aW1lcygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIHNlZWRlciA9IGNyZWF0ZUNsaWVudCgpOworICAgIHRyYWNrZXIuc2V0QWNjZXB0Rm9yZWlnblRvcnJlbnRzKHRydWUpOworCisgICAgZmluYWwgRmlsZSBkd25sRmlsZSA9IHRlbXBGaWxlcy5jcmVhdGVUZW1wRmlsZSg1MTMgKiAxMDI0ICogNyk7CisgICAgZmluYWwgVG9ycmVudE1ldGFkYXRhIHRvcnJlbnQgPSBUb3JyZW50Q3JlYXRvci5jcmVhdGUoZHdubEZpbGUsIG51bGwsIHRyYWNrZXIuZ2V0QW5ub3VuY2VVUkkoKSwgIlRlc3QiKTsKKyAgICBmaW5hbCBGaWxlIHRvcnJlbnRGaWxlID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKCk7CisgICAgc2F2ZVRvcnJlbnQodG9ycmVudCwgdG9ycmVudEZpbGUpOworCisgICAgc2VlZGVyLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGR3bmxGaWxlLmdldFBhcmVudCgpKTsKKyAgICBzZWVkZXIuc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAgIGRvd25sb2FkQW5kU3RvcCh0b3JyZW50LCAyNTAgKiAxMDAwLCBjcmVhdGVDbGllbnQoKSk7CisgICAgICBUaHJlYWQuc2xlZXAoMyAqIDEwMDApOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25uZWN0VG9BbGxEaXNjb3ZlcmVkUGVlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cmFja2VyLnNldEFjY2VwdEZvcmVpZ25Ub3JyZW50cyh0cnVlKTsKKworICAgIGZpbmFsIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvclNlcnZpY2UgPSBFeGVjdXRvcnMubmV3Rml4ZWRUaHJlYWRQb29sKDgpOworICAgIGZpbmFsIEV4ZWN1dG9yU2VydmljZSB2YWxpZGF0b3JFUyA9IEV4ZWN1dG9ycy5uZXdGaXhlZFRocmVhZFBvb2woNCk7CisgICAgQ29tbXVuaWNhdGlvbk1hbmFnZXIgbGVlY2hlciA9IG5ldyBDb21tdW5pY2F0aW9uTWFuYWdlcihleGVjdXRvclNlcnZpY2UsIHZhbGlkYXRvckVTKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7CisgICAgICAgIHN1cGVyLnN0b3AoKTsKKyAgICAgICAgZXhlY3V0b3JTZXJ2aWNlLnNodXRkb3duTm93KCk7CisgICAgICAgIHZhbGlkYXRvckVTLnNodXRkb3duTm93KCk7CisgICAgICB9CisgICAgfTsKKyAgICBsZWVjaGVyLnNldE1heEluQ29ubmVjdGlvbnNDb3VudCgxMCk7CisgICAgbGVlY2hlci5zZXRNYXhPdXRDb25uZWN0aW9uc0NvdW50KDEwKTsKKworICAgIGZpbmFsIEZpbGUgZHdubEZpbGUgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcEZpbGUoNTEzICogMTAyNCAqIDM0KTsKKyAgICBmaW5hbCBUb3JyZW50TWV0YWRhdGEgdG9ycmVudCA9IFRvcnJlbnRDcmVhdG9yLmNyZWF0ZShkd25sRmlsZSwgbnVsbCwgdHJhY2tlci5nZXRBbm5vdW5jZVVSSSgpLCAiVGVzdCIpOworICAgIGZpbmFsIEZpbGUgdG9ycmVudEZpbGUgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcEZpbGUoKTsKKyAgICBzYXZlVG9ycmVudCh0b3JyZW50LCB0b3JyZW50RmlsZSk7CisKKyAgICBmaW5hbCBTdHJpbmcgaGV4SW5mb0hhc2ggPSBsZWVjaGVyLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIHRlbXBGaWxlcy5jcmVhdGVUZW1wRGlyKCkuZ2V0QWJzb2x1dGVQYXRoKCkpLmdldEhleEluZm9IYXNoKCk7CisgICAgZmluYWwgTGlzdDxTZXJ2ZXJTb2NrZXQ+IHNlcnZlclNvY2tldHMgPSBuZXcgQXJyYXlMaXN0PFNlcnZlclNvY2tldD4oKTsKKworICAgIGZpbmFsIGludCBzdGFydFBvcnQgPSA2ODg1OworICAgIGludCBwb3J0ID0gc3RhcnRQb3J0OworICAgIFBlZXJVSURbXSBwZWVyVWlkcyA9IG5ldyBQZWVyVUlEW117CisgICAgICAgICAgICBuZXcgUGVlclVJRChuZXcgSW5ldFNvY2tldEFkZHJlc3MoIjEyNy4wLjAuMSIsIHBvcnQrKyksIGhleEluZm9IYXNoKSwKKyAgICAgICAgICAgIG5ldyBQZWVyVUlEKG5ldyBJbmV0U29ja2V0QWRkcmVzcygiMTI3LjAuMC4xIiwgcG9ydCsrKSwgaGV4SW5mb0hhc2gpLAorICAgICAgICAgICAgbmV3IFBlZXJVSUQobmV3IEluZXRTb2NrZXRBZGRyZXNzKCIxMjcuMC4wLjEiLCBwb3J0KSwgaGV4SW5mb0hhc2gpCisgICAgfTsKKyAgICBmaW5hbCBFeGVjdXRvclNlcnZpY2UgZXMgPSBFeGVjdXRvcnMubmV3U2luZ2xlVGhyZWFkRXhlY3V0b3IoKTsKKyAgICB0cnkgeworICAgICAgbGVlY2hlci5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisKKyAgICAgIFdhaXRGb3Igd2FpdEZvciA9IG5ldyBXYWl0Rm9yKDUwMDApIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCBib29sZWFuIGNvbmRpdGlvbigpIHsKKyAgICAgICAgICByZXR1cm4gdHJhY2tlci5nZXRUcmFja2VkVG9ycmVudChoZXhJbmZvSGFzaCkgIT0gbnVsbDsKKyAgICAgICAgfQorICAgICAgfTsKKworICAgICAgYXNzZXJ0VHJ1ZSh3YWl0Rm9yLmlzTXlSZXN1bHQoKSk7CisKKyAgICAgIGZpbmFsIFRyYWNrZWRUb3JyZW50IHRyYWNrZWRUb3JyZW50ID0gdHJhY2tlci5nZXRUcmFja2VkVG9ycmVudChoZXhJbmZvSGFzaCk7CisgICAgICBNYXA8UGVlclVJRCwgVHJhY2tlZFBlZXI+IHRyYWNrZWRQZWVyTWFwID0gbmV3IEhhc2hNYXA8UGVlclVJRCwgVHJhY2tlZFBlZXI+KCk7CisKKyAgICAgIHBvcnQgPSBzdGFydFBvcnQ7CisgICAgICBmb3IgKFBlZXJVSUQgdWlkIDogcGVlclVpZHMpIHsKKyAgICAgICAgdHJhY2tlZFBlZXJNYXAucHV0KHVpZCwgbmV3IFRyYWNrZWRQZWVyKHRyYWNrZWRUb3JyZW50LCAiMTI3LjAuMC4xIiwgcG9ydCwgQnl0ZUJ1ZmZlci53cmFwKCJpZCIuZ2V0Qnl0ZXMoQ29uc3RhbnRzLkJZVEVfRU5DT0RJTkcpKSkpOworICAgICAgICBzZXJ2ZXJTb2NrZXRzLmFkZChuZXcgU2VydmVyU29ja2V0KHBvcnQpKTsKKyAgICAgICAgcG9ydCsrOworICAgICAgfQorCisgICAgICB0cmFja2VkVG9ycmVudC5nZXRQZWVycygpLnB1dEFsbCh0cmFja2VkUGVlck1hcCk7CisKKyAgICAgIC8vd2FpdCB1bnRpbCBhbGwgc2VydmVyIHNvY2tldHMgYWNjZXB0IGNvbm5lY3Rpb24gZnJvbSBsZWVjaGVyCisgICAgICBmb3IgKGZpbmFsIFNlcnZlclNvY2tldCBzcyA6IHNlcnZlclNvY2tldHMpIHsKKyAgICAgICAgZmluYWwgRnV0dXJlPD8+IGZ1dHVyZSA9IGVzLnN1Ym1pdChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgZmluYWwgU29ja2V0IHNvY2tldCA9IHNzLmFjY2VwdCgpOworICAgICAgICAgICAgICBzb2NrZXQuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImNhbiBub3QgYWNjZXB0IGNvbm5lY3Rpb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICB0cnkgeworICAgICAgICAgIGZ1dHVyZS5nZXQoMTAsIFRpbWVVbml0LlNFQ09ORFMpOworICAgICAgICB9IGNhdGNoIChFeGVjdXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICAgIGZhaWwoImdldCBleGVjdXRpb24gZXhjZXB0aW9uIG9uIGFjY2VwdCBjb25uZWN0aW9uIiwgZSk7CisgICAgICAgIH0gY2F0Y2ggKFRpbWVvdXRFeGNlcHRpb24gZSkgeworICAgICAgICAgIGZhaWwoIm5vdCByZWNlaXZlZCBjb25uZWN0aW9uIGZyb20gbGVlY2hlciBpbiBzcGVjaWZpZWQgdGltZW91dCIsIGUpOworICAgICAgICB9CisgICAgICB9CisKKyAgICB9IGZpbmFsbHkgeworICAgICAgZm9yIChTZXJ2ZXJTb2NrZXQgc3MgOiBzZXJ2ZXJTb2NrZXRzKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgc3MuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgIGZhaWwoImNhbiBub3QgY2xvc2Ugc2VydmVyIHNvY2tldCIsIGUpOworICAgICAgICB9CisgICAgICB9CisgICAgICBlcy5zaHV0ZG93bigpOworICAgICAgbGVlY2hlci5zdG9wKCk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgZG93bmxvYWRfaW9fZXJyb3IoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICB0cmFja2VyLnNldEFjY2VwdEZvcmVpZ25Ub3JyZW50cyh0cnVlKTsKKyAgICBDb21tdW5pY2F0aW9uTWFuYWdlciBzZWVkZXIgPSBjcmVhdGVDbGllbnQoKTsKKworICAgIGZpbmFsIEZpbGUgZHdubEZpbGUgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcEZpbGUoNTEzICogMTAyNCAqIDM0KTsKKyAgICBmaW5hbCBUb3JyZW50TWV0YWRhdGEgdG9ycmVudCA9IFRvcnJlbnRDcmVhdG9yLmNyZWF0ZShkd25sRmlsZSwgbnVsbCwgdHJhY2tlci5nZXRBbm5vdW5jZVVSSSgpLCAiVGVzdCIpOworICAgIGZpbmFsIEZpbGUgdG9ycmVudEZpbGUgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcEZpbGUoKTsKKyAgICBzYXZlVG9ycmVudCh0b3JyZW50LCB0b3JyZW50RmlsZSk7CisKKyAgICBzZWVkZXIuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgZHdubEZpbGUuZ2V0UGFyZW50KCkpOworICAgIHNlZWRlci5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisKKyAgICBmaW5hbCBBdG9taWNJbnRlZ2VyIGludGVycnVwdHMgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKKyAgICBmaW5hbCBFeGVjdXRvclNlcnZpY2UgZXMgPSBFeGVjdXRvcnMubmV3Rml4ZWRUaHJlYWRQb29sKERFRkFVTFRfUE9PTF9TSVpFKTsKKyAgICBmaW5hbCBFeGVjdXRvclNlcnZpY2UgdmFsaWRhdG9yRVMgPSBFeGVjdXRvcnMubmV3Rml4ZWRUaHJlYWRQb29sKDQpOworICAgIGZpbmFsIENvbW11bmljYXRpb25NYW5hZ2VyIGxlZWNoID0gbmV3IENvbW11bmljYXRpb25NYW5hZ2VyKGVzLCB2YWxpZGF0b3JFUykgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVQaWVjZUNvbXBsZXRlZChTaGFyaW5nUGVlciBwZWVyLCBQaWVjZSBwaWVjZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIuaGFuZGxlUGllY2VDb21wbGV0ZWQocGVlciwgcGllY2UpOworICAgICAgICBpZiAocGllY2UuZ2V0SW5kZXgoKSAlIDQgPT0gMCAmJiBpbnRlcnJ1cHRzLmluY3JlbWVudEFuZEdldCgpIDw9IDIpIHsKKyAgICAgICAgICBwZWVyLnVuYmluZCh0cnVlKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHN0b3AoaW50IHRpbWVvdXQsIFRpbWVVbml0IHRpbWVVbml0KSB7CisgICAgICAgIHN1cGVyLnN0b3AodGltZW91dCwgdGltZVVuaXQpOworICAgICAgICBlcy5zaHV0ZG93bigpOworICAgICAgICB2YWxpZGF0b3JFUy5zaHV0ZG93bigpOworICAgICAgfQorICAgIH07CisgICAgLy9tYW51YWxseSBhZGQgbGVlY2ggaGVyZSBmb3IgZ3JhY2VmdWwgc2h1dGRvd24uCisgICAgY29tbXVuaWNhdGlvbk1hbmFnZXJMaXN0LmFkZChsZWVjaCk7CisgICAgZG93bmxvYWRBbmRTdG9wKHRvcnJlbnQsIDQ1ICogMTAwMCwgbGVlY2gpOworICAgIFRocmVhZC5zbGVlcCgyICogMTAwMCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBkb3dubG9hZF91bmludGVycnVwdGlibHlfcG9zaXRpdmUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICB0cmFja2VyLnNldEFjY2VwdEZvcmVpZ25Ub3JyZW50cyh0cnVlKTsKKyAgICBDb21tdW5pY2F0aW9uTWFuYWdlciBzZWVkZXIgPSBjcmVhdGVDbGllbnQoKTsKKyAgICBmaW5hbCBGaWxlIGR3bmxGaWxlID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKDUxMyAqIDEwMjQgKiAyNCk7CisgICAgZmluYWwgVG9ycmVudE1ldGFkYXRhIHRvcnJlbnQgPSBUb3JyZW50Q3JlYXRvci5jcmVhdGUoZHdubEZpbGUsIG51bGwsIHRyYWNrZXIuZ2V0QW5ub3VuY2VVUkkoKSwgIlRlc3QiKTsKKworICAgIGZpbmFsIEZpbGUgdG9ycmVudEZpbGUgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcEZpbGUoKTsKKyAgICBzYXZlVG9ycmVudCh0b3JyZW50LCB0b3JyZW50RmlsZSk7CisgICAgc2VlZGVyLnN0YXJ0KEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpKTsKKyAgICBzZWVkZXIuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgZHdubEZpbGUuZ2V0UGFyZW50KCkpOworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIGxlZWNoZXIgPSBjcmVhdGVDbGllbnQoKTsKKyAgICBsZWVjaGVyLnN0YXJ0KEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpKTsKKyAgICBUb3JyZW50TWFuYWdlciB0b3JyZW50TWFuYWdlciA9IGxlZWNoZXIuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgdGVtcEZpbGVzLmNyZWF0ZVRlbXBEaXIoKS5nZXRBYnNvbHV0ZVBhdGgoKSk7CisgICAgd2FpdERvd25sb2FkQ29tcGxldGUodG9ycmVudE1hbmFnZXIsIDEwKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGRvd25sb2FkX3VuaW50ZXJydXB0aWJseV9uZWdhdGl2ZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgIHRyYWNrZXIuc2V0QWNjZXB0Rm9yZWlnblRvcnJlbnRzKHRydWUpOworICAgIGZpbmFsIEF0b21pY0ludGVnZXIgZG93bmxvYWRlZFBpZWNlc0NvdW50ID0gbmV3IEF0b21pY0ludGVnZXIoMCk7CisgICAgZmluYWwgQ29tbXVuaWNhdGlvbk1hbmFnZXIgc2VlZGVyID0gY3JlYXRlQ2xpZW50KCk7CisKKyAgICBmaW5hbCBGaWxlIGR3bmxGaWxlID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKDUxMyAqIDEwMjQgKiAyNCk7CisgICAgZmluYWwgVG9ycmVudE1ldGFkYXRhIHRvcnJlbnQgPSBUb3JyZW50Q3JlYXRvci5jcmVhdGUoZHdubEZpbGUsIG51bGwsIHRyYWNrZXIuZ2V0QW5ub3VuY2VVUkkoKSwgIlRlc3QiKTsKKworICAgIGZpbmFsIEZpbGUgdG9ycmVudEZpbGUgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcEZpbGUoKTsKKyAgICBzYXZlVG9ycmVudCh0b3JyZW50LCB0b3JyZW50RmlsZSk7CisgICAgc2VlZGVyLnN0YXJ0KEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpKTsKKyAgICBzZWVkZXIuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgZHdubEZpbGUuZ2V0UGFyZW50KCkpOworICAgIGZpbmFsIEV4ZWN1dG9yU2VydmljZSBlcyA9IEV4ZWN1dG9ycy5uZXdGaXhlZFRocmVhZFBvb2woREVGQVVMVF9QT09MX1NJWkUpOworICAgIGZpbmFsIEV4ZWN1dG9yU2VydmljZSB2YWxpZGF0b3JFUyA9IEV4ZWN1dG9ycy5uZXdGaXhlZFRocmVhZFBvb2woNCk7CisgICAgZmluYWwgQ29tbXVuaWNhdGlvbk1hbmFnZXIgbGVlY2hlciA9IG5ldyBDb21tdW5pY2F0aW9uTWFuYWdlcihlcywgdmFsaWRhdG9yRVMpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgc3RvcChpbnQgdGltZW91dCwgVGltZVVuaXQgdGltZVVuaXQpIHsKKyAgICAgICAgc3VwZXIuc3RvcCh0aW1lb3V0LCB0aW1lVW5pdCk7CisgICAgICAgIGVzLnNodXRkb3duKCk7CisgICAgICAgIHZhbGlkYXRvckVTLnNodXRkb3duKCk7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgaGFuZGxlUGllY2VDb21wbGV0ZWQoU2hhcmluZ1BlZXIgcGVlciwgUGllY2UgcGllY2UpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHN1cGVyLmhhbmRsZVBpZWNlQ29tcGxldGVkKHBlZXIsIHBpZWNlKTsKKyAgICAgICAgaWYgKGRvd25sb2FkZWRQaWVjZXNDb3VudC5pbmNyZW1lbnRBbmRHZXQoKSA+IDEwKSB7CisgICAgICAgICAgc2VlZGVyLnN0b3AoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisgICAgY29tbXVuaWNhdGlvbk1hbmFnZXJMaXN0LmFkZChsZWVjaGVyKTsKKyAgICBsZWVjaGVyLnN0YXJ0KEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpKTsKKyAgICBmaW5hbCBGaWxlIGRlc3REaXIgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcERpcigpOworICAgIFRvcnJlbnRNYW5hZ2VyIHRvcnJlbnRNYW5hZ2VyID0gbGVlY2hlci5hZGRUb3JyZW50KHRvcnJlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpLCBkZXN0RGlyLmdldEFic29sdXRlUGF0aCgpKTsKKyAgICB0cnkgeworICAgICAgd2FpdERvd25sb2FkQ29tcGxldGUodG9ycmVudE1hbmFnZXIsIDcpOworICAgICAgZmFpbCgiTXVzdCBmYWlsLCBiZWNhdXNlIGZpbGUgd2Fzbid0IGRvd25sb2FkZWQgY29tcGxldGVseSIpOworICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZXgpIHsKKworICAgICAgTG9hZGVkVG9ycmVudCBsb2FkZWRUb3JyZW50ID0gbGVlY2hlci5nZXRUb3JyZW50c1N0b3JhZ2UoKS5nZXRMb2FkZWRUb3JyZW50KHRvcnJlbnRNYW5hZ2VyLmdldEhleEluZm9IYXNoKCkpOworICAgICAgbG9hZGVkVG9ycmVudC5nZXRQaWVjZVN0b3JhZ2UoKS5jbG9zZSgpOworCisgICAgICAvLyBkZWxldGUgLnBhcnQgZmlsZQorICAgICAgRmlsZVtdIGRlc3REaXJGaWxlcyA9IGRlc3REaXIubGlzdEZpbGVzKCk7CisgICAgICBhc3NlcnROb3ROdWxsKGRlc3REaXJGaWxlcyk7CisgICAgICBhc3NlcnRFcXVhbHMoMSwgZGVzdERpckZpbGVzLmxlbmd0aCk7CisgICAgICBGaWxlIHRhcmdldEZpbGUgPSBkZXN0RGlyRmlsZXNbMF07CisgICAgICBpZiAoIXRhcmdldEZpbGUuZGVsZXRlKCkpIHsKKyAgICAgICAgZmFpbCgiVW5hYmxlIHRvIHJlbW92ZSBmaWxlICIgKyB0YXJnZXRGaWxlKTsKKyAgICAgIH0KKyAgICAgIC8vIGVuc3VyZSAucGFydCB3YXMgZGVsZXRlZDoKKyAgICAgIGRlc3REaXJGaWxlcyA9IGRlc3REaXIubGlzdEZpbGVzKCk7CisgICAgICBhc3NlcnROb3ROdWxsKGRlc3REaXJGaWxlcyk7CisgICAgICBhc3NlcnRFcXVhbHMoMCwgZGVzdERpckZpbGVzLmxlbmd0aCk7CisgICAgfQorCisgIH0KKworICBwdWJsaWMgdm9pZCBkb3dubG9hZF91bmludGVycnVwdGlibHlfdGltZW91dCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgIHRyYWNrZXIuc2V0QWNjZXB0Rm9yZWlnblRvcnJlbnRzKHRydWUpOworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIHNlZWRlciA9IGNyZWF0ZUNsaWVudCgpOworICAgIGZpbmFsIEZpbGUgZHdubEZpbGUgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcEZpbGUoNTEzICogMTAyNCAqIDI0KTsKKyAgICBmaW5hbCBUb3JyZW50TWV0YWRhdGEgdG9ycmVudCA9IFRvcnJlbnRDcmVhdG9yLmNyZWF0ZShkd25sRmlsZSwgbnVsbCwgdHJhY2tlci5nZXRBbm5vdW5jZVVSSSgpLCAiVGVzdCIpOworCisgICAgZmluYWwgRmlsZSB0b3JyZW50RmlsZSA9IHRlbXBGaWxlcy5jcmVhdGVUZW1wRmlsZSgpOworICAgIHNhdmVUb3JyZW50KHRvcnJlbnQsIHRvcnJlbnRGaWxlKTsKKyAgICBzZWVkZXIuc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworICAgIHNlZWRlci5hZGRUb3JyZW50KHRvcnJlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpLCBkd25sRmlsZS5nZXRQYXJlbnQoKSk7CisgICAgZmluYWwgQXRvbWljSW50ZWdlciBwaWVjZXNEb3dubG9hZGVkID0gbmV3IEF0b21pY0ludGVnZXIoMCk7CisgICAgZmluYWwgRXhlY3V0b3JTZXJ2aWNlIGVzID0gRXhlY3V0b3JzLm5ld0ZpeGVkVGhyZWFkUG9vbChERUZBVUxUX1BPT0xfU0laRSk7CisgICAgZmluYWwgRXhlY3V0b3JTZXJ2aWNlIHZhbGlkYXRvckVTID0gRXhlY3V0b3JzLm5ld0ZpeGVkVGhyZWFkUG9vbCg0KTsKKyAgICBDb21tdW5pY2F0aW9uTWFuYWdlciBsZWVjaGVyID0gbmV3IENvbW11bmljYXRpb25NYW5hZ2VyKGVzLCB2YWxpZGF0b3JFUykgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVQaWVjZUNvbXBsZXRlZChTaGFyaW5nUGVlciBwZWVyLCBQaWVjZSBwaWVjZSkgeworICAgICAgICBwaWVjZXNEb3dubG9hZGVkLmluY3JlbWVudEFuZEdldCgpOworICAgICAgICB0cnkgeworICAgICAgICAgIFRocmVhZC5zbGVlcChwaWVjZXNEb3dubG9hZGVkLmdldCgpICogNTAwKTsKKyAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gaWdub3JlZCkgeworCisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBzdG9wKGludCB0aW1lb3V0LCBUaW1lVW5pdCB0aW1lVW5pdCkgeworICAgICAgICBzdXBlci5zdG9wKHRpbWVvdXQsIHRpbWVVbml0KTsKKyAgICAgICAgZXMuc2h1dGRvd24oKTsKKyAgICAgICAgdmFsaWRhdG9yRVMuc2h1dGRvd24oKTsKKyAgICAgIH0KKyAgICB9OworICAgIGNvbW11bmljYXRpb25NYW5hZ2VyTGlzdC5hZGQobGVlY2hlcik7CisgICAgbGVlY2hlci5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisgICAgdHJ5IHsKKyAgICAgIFRvcnJlbnRNYW5hZ2VyIHRvcnJlbnRNYW5hZ2VyID0gbGVlY2hlci5hZGRUb3JyZW50KHRvcnJlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpLCB0ZW1wRmlsZXMuY3JlYXRlVGVtcERpcigpLmdldEFic29sdXRlUGF0aCgpKTsKKyAgICAgIHdhaXREb3dubG9hZENvbXBsZXRlKHRvcnJlbnRNYW5hZ2VyLCA3KTsKKyAgICAgIGZhaWwoIk11c3QgZmFpbCwgYmVjYXVzZSBmaWxlIHdhc24ndCBkb3dubG9hZGVkIGNvbXBsZXRlbHkiKTsKKyAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGlnbm9yZWQpIHsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCBjYW5TdGFydEFuZFN0b3BDbGllbnRUd2ljZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIEV4ZWN1dG9yU2VydmljZSBlcyA9IEV4ZWN1dG9ycy5uZXdGaXhlZFRocmVhZFBvb2woREVGQVVMVF9QT09MX1NJWkUpOworICAgIGZpbmFsIEV4ZWN1dG9yU2VydmljZSB2YWxpZGF0b3JFUyA9IEV4ZWN1dG9ycy5uZXdGaXhlZFRocmVhZFBvb2woNCk7CisgICAgZmluYWwgQ29tbXVuaWNhdGlvbk1hbmFnZXIgY29tbXVuaWNhdGlvbk1hbmFnZXIgPSBuZXcgQ29tbXVuaWNhdGlvbk1hbmFnZXIoZXMsIHZhbGlkYXRvckVTKTsKKyAgICBjb21tdW5pY2F0aW9uTWFuYWdlckxpc3QuYWRkKGNvbW11bmljYXRpb25NYW5hZ2VyKTsKKyAgICB0cnkgeworICAgICAgY29tbXVuaWNhdGlvbk1hbmFnZXIuc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworICAgICAgY29tbXVuaWNhdGlvbk1hbmFnZXIuc3RvcCgpOworICAgICAgY29tbXVuaWNhdGlvbk1hbmFnZXIuc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworICAgICAgY29tbXVuaWNhdGlvbk1hbmFnZXIuc3RvcCgpOworICAgIH0gZmluYWxseSB7CisgICAgICBlcy5zaHV0ZG93bigpOworICAgICAgdmFsaWRhdG9yRVMuc2h1dGRvd24oKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCBwZWVyX2RpZXNfZHVyaW5nX2Rvd25sb2FkKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgdHJhY2tlci5zZXRBbm5vdW5jZUludGVydmFsKDUpOworICAgIGZpbmFsIENvbW11bmljYXRpb25NYW5hZ2VyIHNlZWQxID0gY3JlYXRlQ2xpZW50KCk7CisgICAgZmluYWwgQ29tbXVuaWNhdGlvbk1hbmFnZXIgc2VlZDIgPSBjcmVhdGVDbGllbnQoKTsKKworICAgIGZpbmFsIEZpbGUgZHdubEZpbGUgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcEZpbGUoNTEzICogMTAyNCAqIDI0MCk7CisgICAgZmluYWwgVG9ycmVudE1ldGFkYXRhIHRvcnJlbnQgPSBUb3JyZW50Q3JlYXRvci5jcmVhdGUoZHdubEZpbGUsIHRyYWNrZXIuZ2V0QW5ub3VuY2VVUkkoKSwgIlRlc3QiKTsKKworICAgIGZpbmFsIEZpbGUgdG9ycmVudEZpbGUgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcEZpbGUoKTsKKyAgICBzYXZlVG9ycmVudCh0b3JyZW50LCB0b3JyZW50RmlsZSk7CisgICAgc2VlZDEuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgZHdubEZpbGUuZ2V0UGFyZW50KCkpOworICAgIHNlZWQxLnN0YXJ0KEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpKTsKKyAgICBzZWVkMS5zZXRBbm5vdW5jZUludGVydmFsKDUpOworICAgIHNlZWQyLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGR3bmxGaWxlLmdldFBhcmVudCgpKTsKKyAgICBzZWVkMi5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisgICAgc2VlZDIuc2V0QW5ub3VuY2VJbnRlcnZhbCg1KTsKKworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIGxlZWNoZXIgPSBjcmVhdGVDbGllbnQoKTsKKyAgICBsZWVjaGVyLnN0YXJ0KEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpKTsKKyAgICBsZWVjaGVyLnNldEFubm91bmNlSW50ZXJ2YWwoNSk7CisgICAgZmluYWwgRXhlY3V0b3JTZXJ2aWNlIHNlcnZpY2UgPSBFeGVjdXRvcnMubmV3Rml4ZWRUaHJlYWRQb29sKDEpOworICAgIGZpbmFsIEZ1dHVyZTw/PiBmdXR1cmUgPSBzZXJ2aWNlLnN1Ym1pdChuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBUaHJlYWQuc2xlZXAoNSAqIDEwMDApOworICAgICAgICAgIHNlZWQxLnJlbW92ZVRvcnJlbnQodG9ycmVudC5nZXRIZXhJbmZvSGFzaCgpKTsKKyAgICAgICAgICBUaHJlYWQuc2xlZXAoMyAqIDEwMDApOworICAgICAgICAgIHNlZWQxLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGR3bmxGaWxlLmdldFBhcmVudCgpKTsKKyAgICAgICAgICBzZWVkMi5yZW1vdmVUb3JyZW50KHRvcnJlbnQuZ2V0SGV4SW5mb0hhc2goKSk7CisgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworICAgIHRyeSB7CisgICAgICBUb3JyZW50TWFuYWdlciB0b3JyZW50TWFuYWdlciA9IGxlZWNoZXIuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgdGVtcEZpbGVzLmNyZWF0ZVRlbXBEaXIoKS5nZXRBYnNvbHV0ZVBhdGgoKSk7CisgICAgICB3YWl0RG93bmxvYWRDb21wbGV0ZSh0b3JyZW50TWFuYWdlciwgNjApOworICAgIH0gZmluYWxseSB7CisgICAgICBmdXR1cmUuY2FuY2VsKHRydWUpOworICAgICAgc2VydmljZS5zaHV0ZG93bigpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRvcnJlbnRMaXN0ZW5lcnNQb3NpdGl2ZVRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cmFja2VyLnNldEFjY2VwdEZvcmVpZ25Ub3JyZW50cyh0cnVlKTsKKyAgICBDb21tdW5pY2F0aW9uTWFuYWdlciBzZWVkZXIgPSBjcmVhdGVDbGllbnQoKTsKKyAgICBmaW5hbCBGaWxlIGR3bmxGaWxlID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKDUxMyAqIDEwMjQgKiAyNCArIDEpOworICAgIGZpbmFsIFRvcnJlbnRNZXRhZGF0YSB0b3JyZW50ID0gVG9ycmVudENyZWF0b3IuY3JlYXRlKGR3bmxGaWxlLCBudWxsLCB0cmFja2VyLmdldEFubm91bmNlVVJJKCksICJUZXN0Iik7CisKKyAgICBmaW5hbCBGaWxlIHRvcnJlbnRGaWxlID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKCk7CisgICAgc2F2ZVRvcnJlbnQodG9ycmVudCwgdG9ycmVudEZpbGUpOworICAgIHNlZWRlci5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisgICAgc2VlZGVyLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGR3bmxGaWxlLmdldFBhcmVudCgpKTsKKyAgICBDb21tdW5pY2F0aW9uTWFuYWdlciBsZWVjaGVyID0gY3JlYXRlQ2xpZW50KCk7CisgICAgbGVlY2hlci5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisgICAgZmluYWwgQXRvbWljSW50ZWdlciBwaWVjZUxvYWRlZEludm9jYXRpb25Db3VudCA9IG5ldyBBdG9taWNJbnRlZ2VyKCk7CisgICAgZmluYWwgQXRvbWljSW50ZWdlciBjb25uZWN0ZWRJbnZvY2F0aW9uQ291bnQgPSBuZXcgQXRvbWljSW50ZWdlcigpOworICAgIGZpbmFsIFNlbWFwaG9yZSBkaXNjb25uZWN0ZWRMb2NrID0gbmV3IFNlbWFwaG9yZSgwKTsKKyAgICBUb3JyZW50TWFuYWdlciB0b3JyZW50TWFuYWdlciA9IGxlZWNoZXIuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgdGVtcEZpbGVzLmNyZWF0ZVRlbXBEaXIoKS5nZXRBYnNvbHV0ZVBhdGgoKSk7CisgICAgZmluYWwgQXRvbWljTG9uZyB0b3RhbERvd25sb2FkZWQgPSBuZXcgQXRvbWljTG9uZygpOworICAgIHRvcnJlbnRNYW5hZ2VyLmFkZExpc3RlbmVyKG5ldyBUb3JyZW50TGlzdGVuZXJXcmFwcGVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwaWVjZURvd25sb2FkZWQoUGllY2VJbmZvcm1hdGlvbiBwaWVjZUluZm9ybWF0aW9uLCBQZWVySW5mb3JtYXRpb24gcGVlckluZm9ybWF0aW9uKSB7CisgICAgICAgIHRvdGFsRG93bmxvYWRlZC5hZGRBbmRHZXQocGllY2VJbmZvcm1hdGlvbi5nZXRTaXplKCkpOworICAgICAgICBwaWVjZUxvYWRlZEludm9jYXRpb25Db3VudC5pbmNyZW1lbnRBbmRHZXQoKTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwZWVyQ29ubmVjdGVkKFBlZXJJbmZvcm1hdGlvbiBwZWVySW5mb3JtYXRpb24pIHsKKyAgICAgICAgY29ubmVjdGVkSW52b2NhdGlvbkNvdW50LmluY3JlbWVudEFuZEdldCgpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBlZXJEaXNjb25uZWN0ZWQoUGVlckluZm9ybWF0aW9uIHBlZXJJbmZvcm1hdGlvbikgeworICAgICAgICBkaXNjb25uZWN0ZWRMb2NrLnJlbGVhc2UoKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICB3YWl0RG93bmxvYWRDb21wbGV0ZSh0b3JyZW50TWFuYWdlciwgNSk7CisgICAgYXNzZXJ0RXF1YWxzKHBpZWNlTG9hZGVkSW52b2NhdGlvbkNvdW50LmdldCgpLCB0b3JyZW50LmdldFBpZWNlc0NvdW50KCkpOworICAgIGFzc2VydEVxdWFscyhjb25uZWN0ZWRJbnZvY2F0aW9uQ291bnQuZ2V0KCksIDEpOworICAgIGFzc2VydEVxdWFscyh0b3RhbERvd25sb2FkZWQuZ2V0KCksIGR3bmxGaWxlLmxlbmd0aCgpKTsKKyAgICBpZiAoIWRpc2Nvbm5lY3RlZExvY2sudHJ5QWNxdWlyZSgxMCwgVGltZVVuaXQuU0VDT05EUykpIHsKKyAgICAgIGZhaWwoImNvbm5lY3Rpb24gd2l0aCBzZWVkZXIgbXVzdCBiZSBjbG9zZWQgYWZ0ZXIgZG93bmxvYWQiKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2luZ1BpZWNlU3RvcmFnZVdoZW5Eb3dubG9hZGluZygpIHRocm93cyBFeGNlcHRpb24geworCisgICAgdHJhY2tlci5zZXRBY2NlcHRGb3JlaWduVG9ycmVudHModHJ1ZSk7CisgICAgZmluYWwgQ29tbXVuaWNhdGlvbk1hbmFnZXIgc2VlZGVyID0gY3JlYXRlQW5kU3RhcnRDbGllbnQoKTsKKyAgICBmaW5hbCBGaWxlIGR3bmxGaWxlID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKDUxMyAqIDEwMjQgKiAyNCk7CisgICAgZmluYWwgVG9ycmVudE1ldGFkYXRhIHRvcnJlbnQgPSBUb3JyZW50Q3JlYXRvci5jcmVhdGUoZHdubEZpbGUsIG51bGwsIHRyYWNrZXIuZ2V0QW5ub3VuY2VVUkkoKSwgIlRlc3QiKTsKKyAgICBmaW5hbCBQaWVjZVN0b3JhZ2Ugc2VlZGVyU3RvcmFnZSA9IEZ1bGx5UGllY2VTdG9yYWdlRmFjdG9yeS5JTlNUQU5DRS5jcmVhdGVTdG9yYWdlKHRvcnJlbnQsIG5ldyBGaWxlU3RvcmFnZShkd25sRmlsZSwgMCwgZHdubEZpbGUubGVuZ3RoKCkpKTsKKyAgICBzZWVkZXIuYWRkVG9ycmVudChuZXcgVG9ycmVudE1ldGFkYXRhUHJvdmlkZXIoKSB7CisgICAgICBATm90TnVsbAorICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgVG9ycmVudE1ldGFkYXRhIGdldFRvcnJlbnRNZXRhZGF0YSgpIHsKKyAgICAgICAgcmV0dXJuIHRvcnJlbnQ7CisgICAgICB9CisgICAgfSwgc2VlZGVyU3RvcmFnZSk7CisKKyAgICBDb21tdW5pY2F0aW9uTWFuYWdlciBsZWVjaGVyID0gY3JlYXRlQW5kU3RhcnRDbGllbnQoKTsKKworICAgIGZpbmFsIFBpZWNlU3RvcmFnZSBsZWVjaGVyU3RvcmFnZSA9IEVtcHR5UGllY2VTdG9yYWdlRmFjdG9yeS5JTlNUQU5DRS5jcmVhdGVTdG9yYWdlKHRvcnJlbnQsIG5ldyBGaWxlU3RvcmFnZSh0ZW1wRmlsZXMuY3JlYXRlVGVtcEZpbGUoKSwgMCwgZHdubEZpbGUubGVuZ3RoKCkpKTsKKyAgICBUb3JyZW50TWFuYWdlciB0b3JyZW50TWFuYWdlciA9IGxlZWNoZXIuYWRkVG9ycmVudChuZXcgVG9ycmVudE1ldGFkYXRhUHJvdmlkZXIoKSB7CisgICAgICBATm90TnVsbAorICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgVG9ycmVudE1ldGFkYXRhIGdldFRvcnJlbnRNZXRhZGF0YSgpIHsKKyAgICAgICAgcmV0dXJuIHRvcnJlbnQ7CisgICAgICB9CisgICAgfSwgbGVlY2hlclN0b3JhZ2UpOworCisgICAgZmluYWwgQXRvbWljUmVmZXJlbmNlPFRocm93YWJsZT4gZXhjZXB0aW9uSG9sZGVyID0gbmV3IEF0b21pY1JlZmVyZW5jZTxUaHJvd2FibGU+KCk7CisgICAgdG9ycmVudE1hbmFnZXIuYWRkTGlzdGVuZXIobmV3IFRvcnJlbnRMaXN0ZW5lcldyYXBwZXIoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBpZWNlRG93bmxvYWRlZChQaWVjZUluZm9ybWF0aW9uIHBpZWNlSW5mb3JtYXRpb24sIFBlZXJJbmZvcm1hdGlvbiBwZWVySW5mb3JtYXRpb24pIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBzZWVkZXJTdG9yYWdlLmNsb3NlKCk7CisgICAgICAgICAgbGVlY2hlclN0b3JhZ2UuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgIGV4Y2VwdGlvbkhvbGRlci5zZXQoZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKworICAgIHdhaXREb3dubG9hZENvbXBsZXRlKHRvcnJlbnRNYW5hZ2VyLCAxMCk7CisgICAgVGhyb3dhYmxlIHRocm93YWJsZSA9IGV4Y2VwdGlvbkhvbGRlci5nZXQoKTsKKyAgICBpZiAodGhyb3dhYmxlICE9IG51bGwpIHsKKyAgICAgIGZhaWwoIiIsIHRocm93YWJsZSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExpc3RlbmVyc1dpdGhCYWRTZWVkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cmFja2VyLnNldEFjY2VwdEZvcmVpZ25Ub3JyZW50cyh0cnVlKTsKKyAgICBDb21tdW5pY2F0aW9uTWFuYWdlciBzZWVkZXIgPSBjcmVhdGVDbGllbnQoKTsKKyAgICBmaW5hbCBGaWxlIGR3bmxGaWxlID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKDUxMyAqIDEwMjQgKiAyNDApOworICAgIGZpbmFsIFRvcnJlbnRNZXRhZGF0YSB0b3JyZW50ID0gVG9ycmVudENyZWF0b3IuY3JlYXRlKGR3bmxGaWxlLCBudWxsLCB0cmFja2VyLmdldEFubm91bmNlVVJJKCksICJUZXN0Iik7CisKKyAgICBmaW5hbCBGaWxlIHRvcnJlbnRGaWxlID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKCk7CisgICAgc2F2ZVRvcnJlbnQodG9ycmVudCwgdG9ycmVudEZpbGUpOworICAgIHNlZWRlci5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisgICAgUmFuZG9tQWNjZXNzRmlsZSByYWYgPSBuZXcgUmFuZG9tQWNjZXNzRmlsZShkd25sRmlsZSwgInJ3Iik7CisgICAgLy9jaGFuZ2luZyBvbmUgYnl0ZSBpbiBmaWxlLiBTbyBvbmUgcGllY2UKKyAgICB0cnkgeworICAgICAgbG9uZyBwb3MgPSBkd25sRmlsZS5sZW5ndGgoKSAvIDI7CisgICAgICByYWYuc2Vlayhwb3MpOworICAgICAgaW50IG9sZEJ5dGUgPSByYWYucmVhZCgpOworICAgICAgcmFmLnNlZWsocG9zKTsKKyAgICAgIHJhZi53cml0ZShvbGRCeXRlICsgMSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIHJhZi5jbG9zZSgpOworICAgIH0KKyAgICBzZWVkZXIuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgZHdubEZpbGUuZ2V0UGFyZW50KCksIEZ1bGx5UGllY2VTdG9yYWdlRmFjdG9yeS5JTlNUQU5DRSk7CisgICAgQ29tbXVuaWNhdGlvbk1hbmFnZXIgbGVlY2hlciA9IGNyZWF0ZUNsaWVudCgpOworICAgIGxlZWNoZXIuc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworICAgIGZpbmFsIEF0b21pY0ludGVnZXIgcGllY2VMb2FkZWRJbnZvY2F0aW9uQ291bnQgPSBuZXcgQXRvbWljSW50ZWdlcigpOworICAgIFRvcnJlbnRNYW5hZ2VyIHRvcnJlbnRNYW5hZ2VyID0gbGVlY2hlci5hZGRUb3JyZW50KHRvcnJlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpLCB0ZW1wRmlsZXMuY3JlYXRlVGVtcERpcigpLmdldEFic29sdXRlUGF0aCgpKTsKKyAgICB0b3JyZW50TWFuYWdlci5hZGRMaXN0ZW5lcihuZXcgVG9ycmVudExpc3RlbmVyV3JhcHBlcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcGllY2VEb3dubG9hZGVkKFBpZWNlSW5mb3JtYXRpb24gcGllY2VJbmZvcm1hdGlvbiwgUGVlckluZm9ybWF0aW9uIHBlZXJJbmZvcm1hdGlvbikgeworICAgICAgICBwaWVjZUxvYWRlZEludm9jYXRpb25Db3VudC5pbmNyZW1lbnRBbmRHZXQoKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICB0cnkgeworICAgICAgd2FpdERvd25sb2FkQ29tcGxldGUodG9ycmVudE1hbmFnZXIsIDE1KTsKKyAgICAgIGZhaWwoIkRvd25sb2FkaW5nIG11c3QgYmUgZmFpbGVkIGJlY2F1c2Ugc2VlZGVyIGRvZXNuJ3QgaGF2ZSB2YWxpZCBwaWVjZSIpOworICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gaWdub3JlZCkgeworICAgIH0KKyAgICBhc3NlcnRFcXVhbHMocGllY2VMb2FkZWRJbnZvY2F0aW9uQ291bnQuZ2V0KCksIHRvcnJlbnQuZ2V0UGllY2VzQ291bnQoKSAtIDEpOworICB9CisKKyAgcHVibGljIHZvaWQgaW50ZXJydXB0X2Rvd25sb2FkKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CisgICAgdHJhY2tlci5zZXRBY2NlcHRGb3JlaWduVG9ycmVudHModHJ1ZSk7CisgICAgZmluYWwgQ29tbXVuaWNhdGlvbk1hbmFnZXIgc2VlZGVyID0gY3JlYXRlQ2xpZW50KCk7CisgICAgZmluYWwgRmlsZSBkd25sRmlsZSA9IHRlbXBGaWxlcy5jcmVhdGVUZW1wRmlsZSg1MTMgKiAxMDI0ICogNjApOworICAgIGZpbmFsIFRvcnJlbnRNZXRhZGF0YSB0b3JyZW50ID0gVG9ycmVudENyZWF0b3IuY3JlYXRlKGR3bmxGaWxlLCBudWxsLCB0cmFja2VyLmdldEFubm91bmNlVVJJKCksICJUZXN0Iik7CisKKyAgICBmaW5hbCBGaWxlIHRvcnJlbnRGaWxlID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKCk7CisgICAgc2F2ZVRvcnJlbnQodG9ycmVudCwgdG9ycmVudEZpbGUpOworICAgIHNlZWRlci5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisgICAgc2VlZGVyLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGR3bmxGaWxlLmdldFBhcmVudCgpKTsKKyAgICBmaW5hbCBDb21tdW5pY2F0aW9uTWFuYWdlciBsZWVjaGVyID0gY3JlYXRlQ2xpZW50KCk7CisgICAgbGVlY2hlci5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisgICAgZmluYWwgQXRvbWljQm9vbGVhbiBpbnRlcnJ1cHRlZCA9IG5ldyBBdG9taWNCb29sZWFuKCk7CisgICAgZmluYWwgVGhyZWFkIHRoID0gbmV3IFRocmVhZCgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgIFRvcnJlbnRNYW5hZ2VyIHRvcnJlbnRNYW5hZ2VyID0gbGVlY2hlci5hZGRUb3JyZW50KHRvcnJlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpLCB0ZW1wRmlsZXMuY3JlYXRlVGVtcERpcigpLmdldEFic29sdXRlUGF0aCgpKTsKKyAgICAgICAgICB3YWl0RG93bmxvYWRDb21wbGV0ZSh0b3JyZW50TWFuYWdlciwgMzApOworICAgICAgICB9IGNhdGNoIChDbG9zZWRCeUludGVycnVwdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgaW50ZXJydXB0ZWQuc2V0KHRydWUpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgIGludGVycnVwdGVkLnNldCh0cnVlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisgICAgdGguc3RhcnQoKTsKKyAgICBUaHJlYWQuc2xlZXAoMTAwKTsKKyAgICB0aC5pbnRlcnJ1cHQoKTsKKyAgICBuZXcgV2FpdEZvcigxMCAqIDEwMDApIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gY29uZGl0aW9uKCkgeworICAgICAgICByZXR1cm4gIXRoLmlzQWxpdmUoKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgYXNzZXJ0VHJ1ZShpbnRlcnJ1cHRlZC5nZXQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0X2Nvbm5lY3RfdG9fdW5rbm93bl9ob3N0KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgZmluYWwgRmlsZSB0b3JyZW50ID0gbmV3IEZpbGUoInNyYy90ZXN0L3Jlc291cmNlcy90b3JyZW50cy9maWxlMS5qYXIudG9ycmVudCIpOworICAgIGZpbmFsIFRyYWNrZWRUb3JyZW50IHR0ID0gVHJhY2tlZFRvcnJlbnQubG9hZCh0b3JyZW50KTsKKyAgICBmaW5hbCBDb21tdW5pY2F0aW9uTWFuYWdlciBzZWVkZXIgPSBjcmVhdGVBbmRTdGFydENsaWVudCgpOworICAgIGZpbmFsIENvbW11bmljYXRpb25NYW5hZ2VyIGxlZWNoZXIgPSBjcmVhdGVBbmRTdGFydENsaWVudCgpOworICAgIGZpbmFsIFRyYWNrZWRUb3JyZW50IGFubm91bmNlID0gdHJhY2tlci5hbm5vdW5jZSh0dCk7CisgICAgZmluYWwgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKKyAgICBmaW5hbCBGaWxlIGxlZWNoRm9sZGVyID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBEaXIoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDA7IGkrKykgeworICAgICAgYnl0ZVtdIGRhdGEgPSBuZXcgYnl0ZVsyMF07CisgICAgICByYW5kb20ubmV4dEJ5dGVzKGRhdGEpOworICAgICAgYW5ub3VuY2UuYWRkUGVlcihuZXcgVHJhY2tlZFBlZXIodHQsICJteV91bmtub3duX2FuZF91bnJlYWNoYWJsZWhvc3QiICsgaSwgNjg4MSwgQnl0ZUJ1ZmZlci53cmFwKGRhdGEpKSk7CisgICAgfQorICAgIEZpbGUgdG9ycmVudEZpbGUgPSBuZXcgRmlsZShURVNUX1JFU09VUkNFUyArICIvdG9ycmVudHMiLCAiZmlsZTEuamFyLnRvcnJlbnQiKTsKKyAgICBGaWxlIHBhcmVudEZpbGVzID0gbmV3IEZpbGUoVEVTVF9SRVNPVVJDRVMgKyAiL3BhcmVudEZpbGVzIik7CisgICAgc2VlZGVyLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIHBhcmVudEZpbGVzLmdldEFic29sdXRlUGF0aCgpKTsKKyAgICBsZWVjaGVyLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGxlZWNoRm9sZGVyLmdldEFic29sdXRlUGF0aCgpKTsKKyAgICB3YWl0Rm9yRmlsZUluRGlyKGxlZWNoRm9sZGVyLCAiZmlsZTEuamFyIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0X3NlZWRpbmdfZG9lc19ub3RfY2hhbmdlX2ZpbGVfbW9kaWZpY2F0aW9uX2RhdGUoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKyAgICBGaWxlIHNyY0ZpbGUgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcEZpbGUoMTAyNCk7CisgICAgbG9uZyB0aW1lID0gc3JjRmlsZS5sYXN0TW9kaWZpZWQoKTsKKworICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKKworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIHNlZWRlciA9IGNyZWF0ZUFuZFN0YXJ0Q2xpZW50KCk7CisKKyAgICBmaW5hbCBUb3JyZW50TWV0YWRhdGEgdG9ycmVudCA9IFRvcnJlbnRDcmVhdG9yLmNyZWF0ZShzcmNGaWxlLCBudWxsLCB0cmFja2VyLmdldEFubm91bmNlVVJJKCksICJUZXN0Iik7CisKKyAgICBGaWxlIHRvcnJlbnRGaWxlID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKCk7CisgICAgc2F2ZVRvcnJlbnQodG9ycmVudCwgdG9ycmVudEZpbGUpOworICAgIHNlZWRlci5hZGRUb3JyZW50KHRvcnJlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpLCBzcmNGaWxlLmdldFBhcmVudCgpLCBGdWxseVBpZWNlU3RvcmFnZUZhY3RvcnkuSU5TVEFOQ0UpOworCisgICAgZmluYWwgRmlsZSBkb3dubG9hZERpciA9IHRlbXBGaWxlcy5jcmVhdGVUZW1wRGlyKCk7CisgICAgQ29tbXVuaWNhdGlvbk1hbmFnZXIgbGVlY2ggPSBjcmVhdGVDbGllbnQoKTsKKyAgICBsZWVjaC5hZGRUb3JyZW50KHRvcnJlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpLCBkb3dubG9hZERpci5nZXRBYnNvbHV0ZVBhdGgoKSk7CisKKyAgICBsZWVjaC5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisKKyAgICB3YWl0Rm9yRmlsZUluRGlyKGRvd25sb2FkRGlyLCBzcmNGaWxlLmdldE5hbWUoKSk7CisKKyAgICBhc3NlcnRFcXVhbHModGltZSwgc3JjRmlsZS5sYXN0TW9kaWZpZWQoKSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG93bmxvYWRBbmRTdG9wKFRvcnJlbnRNZXRhZGF0YSB0b3JyZW50LCBsb25nIHRpbWVvdXQsIGZpbmFsIENvbW11bmljYXRpb25NYW5hZ2VyIGxlZWNoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIGZpbmFsIEZpbGUgdGVtcERpciA9IHRlbXBGaWxlcy5jcmVhdGVUZW1wRGlyKCk7CisgICAgRmlsZSB0b3JyZW50RmlsZSA9IHRlbXBGaWxlcy5jcmVhdGVUZW1wRmlsZSgpOworICAgIHNhdmVUb3JyZW50KHRvcnJlbnQsIHRvcnJlbnRGaWxlKTsKKyAgICBsZWVjaC5hZGRUb3JyZW50KHRvcnJlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpLCB0ZW1wRGlyLmdldEFic29sdXRlUGF0aCgpKTsKKyAgICBsZWVjaC5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisKKyAgICB3YWl0Rm9yRmlsZUluRGlyKHRlbXBEaXIsIHRvcnJlbnQuZ2V0RmlsZXMoKS5nZXQoMCkuZ2V0UmVsYXRpdmVQYXRoQXNTdHJpbmcoKSk7CisKKyAgICBsZWVjaC5zdG9wKCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgdmFsaWRhdGVNdWx0aXBsZUNsaWVudHNSZXN1bHRzKGZpbmFsIExpc3Q8Q29tbXVuaWNhdGlvbk1hbmFnZXI+IGNsaWVudHNMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VEaWdlc3QgbWQ1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEZpbGUgYmFzZUZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGJhc2VNRDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgTGlzdDxGaWxlPiB0YXJnZXRGaWxlcykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKworICAgIGZpbmFsIFdhaXRGb3Igd2FpdEZvciA9IG5ldyBXYWl0Rm9yKDc1ICogMTAwMCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBjb25kaXRpb24oKSB7CisgICAgICAgIGJvb2xlYW4gcmV0dmFsID0gdHJ1ZTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGllbnRzTGlzdC5zaXplKCk7IGkrKykgeworICAgICAgICAgIGlmICghcmV0dmFsKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgRmlsZSB0YXJnZXQgPSB0YXJnZXRGaWxlcy5nZXQoaSk7CisgICAgICAgICAgcmV0dmFsID0gdGFyZ2V0LmlzRmlsZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICB9CisgICAgfTsKKworICAgIGFzc2VydFRydWUod2FpdEZvci5pc015UmVzdWx0KCksICJBbGwgc2VlZGVycyBkaWRuJ3QgZ2V0IHRoZWlyIGZpbGVzIik7CisgICAgLy8gY2hlY2sgZmlsZSBjb250ZW50cyBoZXJlOgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xpZW50c0xpc3Quc2l6ZSgpOyBpKyspIHsKKyAgICAgIGZpbmFsIExvYWRlZFRvcnJlbnQgdG9ycmVudCA9IGNvbW11bmljYXRpb25NYW5hZ2VyTGlzdC5nZXQoaSkuZ2V0VG9ycmVudHNTdG9yYWdlKCkuZ2V0TG9hZGVkVG9ycmVudChoYXNoKTsKKyAgICAgIGZpbmFsIEZpbGUgZmlsZSA9IHRhcmdldEZpbGVzLmdldChpKTsKKyAgICAgIGFzc2VydEVxdWFscyhiYXNlTUQ1LCBnZXRGaWxlTUQ1KGZpbGUsIG1kNSksIFN0cmluZy5mb3JtYXQoIk1ENSBoYXNoIGlzIGludmFsaWQuIEM6JXMsIE86JXMgIiwKKyAgICAgICAgICAgICAgZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgYmFzZUZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWFueVNlZWRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBGaWxlIGFydGlmYWN0ID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBGaWxlKDI1NiAqIDEwMjQgKiAxMDI0KTsKKyAgICBpbnQgc2VlZGVyc0NvdW50ID0gMTU7CisgICAgVG9ycmVudE1ldGFkYXRhIHRvcnJlbnQgPSBUb3JyZW50Q3JlYXRvci5jcmVhdGUoYXJ0aWZhY3QsIHRoaXMudHJhY2tlci5nZXRBbm5vdW5jZVVSSSgpLCAidGVzdCIpOworICAgIEZpbGUgdG9ycmVudEZpbGUgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcEZpbGUoKTsKKyAgICBzYXZlVG9ycmVudCh0b3JyZW50LCB0b3JyZW50RmlsZSk7CisgICAgU2VydmVyQ2hhbm5lbFJlZ2lzdGVyIHNlcnZlckNoYW5uZWxSZWdpc3RlciA9IG5ldyBGaXJzdEF2YWlsYWJsZUNoYW5uZWwoNjg4MSwgMTAwMDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VlZGVyc0NvdW50OyBpKyspIHsKKyAgICAgIENvbW11bmljYXRpb25NYW5hZ2VyIHNlZWRlciA9IGNyZWF0ZUNsaWVudCgpOworICAgICAgc2VlZGVyLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGFydGlmYWN0LmdldFBhcmVudCgpLCBGdWxseVBpZWNlU3RvcmFnZUZhY3RvcnkuSU5TVEFOQ0UpOworICAgICAgc2VlZGVyLnN0YXJ0KG5ldyBJbmV0QWRkcmVzc1tde0luZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpfSwKKyAgICAgICAgICAgICAgQ29uc3RhbnRzLkRFRkFVTFRfQU5OT1VOQ0VfSU5URVJWQUxfU0VDLAorICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICBuZXcgU2VsZWN0b3JGYWN0b3J5SW1wbCgpLAorICAgICAgICAgICAgICBzZXJ2ZXJDaGFubmVsUmVnaXN0ZXIpOworICAgIH0KKworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIGxlZWNoZXIgPSBjcmVhdGVDbGllbnQoKTsKKyAgICBsZWVjaGVyLnN0YXJ0KG5ldyBJbmV0QWRkcmVzc1tde0luZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpfSwKKyAgICAgICAgICAgIENvbnN0YW50cy5ERUZBVUxUX0FOTk9VTkNFX0lOVEVSVkFMX1NFQywKKyAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICBuZXcgU2VsZWN0b3JGYWN0b3J5SW1wbCgpLAorICAgICAgICAgICAgc2VydmVyQ2hhbm5lbFJlZ2lzdGVyKTsKKyAgICBUb3JyZW50TWFuYWdlciB0b3JyZW50TWFuYWdlciA9IGxlZWNoZXIuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwKKyAgICAgICAgICAgIHRlbXBGaWxlcy5jcmVhdGVUZW1wRGlyKCkuZ2V0QWJzb2x1dGVQYXRoKCksCisgICAgICAgICAgICBFbXB0eVBpZWNlU3RvcmFnZUZhY3RvcnkuSU5TVEFOQ0UpOworICAgIHdhaXREb3dubG9hZENvbXBsZXRlKHRvcnJlbnRNYW5hZ2VyLCA2MCk7CisgIH0KKworICBwcml2YXRlIFN0cmluZyBjcmVhdGVNdWx0aXBsZVNlZWRlcnNXaXRoRGlmZmVyZW50UGllY2VzKEZpbGUgYmFzZUZpbGUsIGludCBwaWVjZXNDb3VudCwgaW50IHBpZWNlU2l6ZSwgaW50IG51bVNlZWRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxDb21tdW5pY2F0aW9uTWFuYWdlcj4gY29tbXVuaWNhdGlvbk1hbmFnZXJMaXN0LCBMaXN0PEZpbGU+IHRhcmdldEZpbGVzKSB0aHJvd3MgSU9FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uLCBVUklTeW50YXhFeGNlcHRpb24geworCisgICAgTGlzdDxieXRlW10+IHBpZWNlc0xpc3QgPSBuZXcgQXJyYXlMaXN0PGJ5dGVbXT4ocGllY2VzQ291bnQpOworICAgIEZpbGVJbnB1dFN0cmVhbSBmaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGJhc2VGaWxlKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBpZWNlc0NvdW50OyBpKyspIHsKKyAgICAgIGJ5dGVbXSBwaWVjZSA9IG5ldyBieXRlW3BpZWNlU2l6ZV07CisgICAgICBmaW4ucmVhZChwaWVjZSk7CisgICAgICBwaWVjZXNMaXN0LmFkZChwaWVjZSk7CisgICAgfQorICAgIGZpbi5jbG9zZSgpOworCisgICAgZmluYWwgbG9uZyB0b3JyZW50RmlsZUxlbmd0aCA9IGJhc2VGaWxlLmxlbmd0aCgpOworICAgIFRvcnJlbnRNZXRhZGF0YSB0b3JyZW50ID0gVG9ycmVudENyZWF0b3IuY3JlYXRlKGJhc2VGaWxlLCBudWxsLCB0aGlzLnRyYWNrZXIuZ2V0QW5ub3VuY2VVUkkoKSwgbnVsbCwgIlRlc3QiLCBwaWVjZVNpemUpOworICAgIEZpbGUgdG9ycmVudEZpbGUgPSBuZXcgRmlsZShiYXNlRmlsZS5nZXRQYXJlbnRGaWxlKCksIGJhc2VGaWxlLmdldE5hbWUoKSArICIudG9ycmVudCIpOworICAgIHNhdmVUb3JyZW50KHRvcnJlbnQsIHRvcnJlbnRGaWxlKTsKKworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1TZWVkZXJzOyBpKyspIHsKKyAgICAgIGZpbmFsIEZpbGUgYmFzZURpciA9IHRlbXBGaWxlcy5jcmVhdGVUZW1wRGlyKCk7CisgICAgICB0YXJnZXRGaWxlcy5hZGQobmV3IEZpbGUoYmFzZURpciwgYmFzZUZpbGUuZ2V0TmFtZSgpKSk7CisgICAgICBmaW5hbCBGaWxlIHNlZWRlclBpZWNlc0ZpbGUgPSBuZXcgRmlsZShiYXNlRGlyLCBiYXNlRmlsZS5nZXROYW1lKCkpOworICAgICAgUmFuZG9tQWNjZXNzRmlsZSByYWYgPSBuZXcgUmFuZG9tQWNjZXNzRmlsZShzZWVkZXJQaWVjZXNGaWxlLCAicnciKTsKKyAgICAgIHJhZi5zZXRMZW5ndGgodG9ycmVudEZpbGVMZW5ndGgpOworICAgICAgZm9yIChpbnQgcGllY2VJZHggPSBpOyBwaWVjZUlkeCA8IHBpZWNlc0NvdW50OyBwaWVjZUlkeCArPSBudW1TZWVkZXJzKSB7CisgICAgICAgIHJhZi5zZWVrKHBpZWNlSWR4ICogcGllY2VTaXplKTsKKyAgICAgICAgcmFmLndyaXRlKHBpZWNlc0xpc3QuZ2V0KHBpZWNlSWR4KSk7CisgICAgICB9CisgICAgICBDb21tdW5pY2F0aW9uTWFuYWdlciBjb21tdW5pY2F0aW9uTWFuYWdlciA9IGNyZWF0ZUNsaWVudCgiIGNvbW11bmljYXRpb25NYW5hZ2VyIGlkeCAiICsgaSk7CisgICAgICBjb21tdW5pY2F0aW9uTWFuYWdlckxpc3QuYWRkKGNvbW11bmljYXRpb25NYW5hZ2VyKTsKKyAgICAgIGNvbW11bmljYXRpb25NYW5hZ2VyLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGJhc2VEaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOworICAgICAgY29tbXVuaWNhdGlvbk1hbmFnZXIuc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworICAgIH0KKyAgICByZXR1cm4gdG9ycmVudC5nZXRIZXhJbmZvSGFzaCgpOworICB9CisKKyAgcHJpdmF0ZSBTdHJpbmcgZ2V0RmlsZU1ENShGaWxlIGZpbGUsIE1lc3NhZ2VEaWdlc3QgZGlnZXN0KSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIERpZ2VzdElucHV0U3RyZWFtIGRJbiA9IG5ldyBEaWdlc3RJbnB1dFN0cmVhbShuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpLCBkaWdlc3QpOworICAgIHdoaWxlIChkSW4ucmVhZCgpID49IDApIDsKKyAgICByZXR1cm4gZEluLmdldE1lc3NhZ2VEaWdlc3QoKS50b1N0cmluZygpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHdhaXRGb3JGaWxlSW5EaXIoZmluYWwgRmlsZSBkb3dubG9hZERpciwgZmluYWwgU3RyaW5nIGZpbGVOYW1lKSB7CisgICAgbmV3IFdhaXRGb3IoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBib29sZWFuIGNvbmRpdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBGaWxlKGRvd25sb2FkRGlyLCBmaWxlTmFtZSkuaXNGaWxlKCk7CisgICAgICB9CisgICAgfTsKKworICAgIGFzc2VydFRydWUobmV3IEZpbGUoZG93bmxvYWREaXIsIGZpbGVOYW1lKS5pc0ZpbGUoKSk7CisgIH0KKworCisgIEBBZnRlck1ldGhvZAorICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZvciAoQ29tbXVuaWNhdGlvbk1hbmFnZXIgY29tbXVuaWNhdGlvbk1hbmFnZXIgOiBjb21tdW5pY2F0aW9uTWFuYWdlckxpc3QpIHsKKyAgICAgIGNvbW11bmljYXRpb25NYW5hZ2VyLnN0b3AoKTsKKyAgICB9CisgICAgc3RvcFRyYWNrZXIoKTsKKyAgICB0ZW1wRmlsZXMuY2xlYW51cCgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHN0YXJ0VHJhY2tlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgaW50IHBvcnQgPSA2OTY5OworICAgIHRoaXMudHJhY2tlciA9IG5ldyBUcmFja2VyKHBvcnQsICJodHRwOi8vIiArIEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpLmdldEhvc3RBZGRyZXNzKCkgKyAiOiIgKyBwb3J0ICsgIiIgKyBBTk5PVU5DRV9VUkwpOworICAgIHRyYWNrZXIuc2V0QW5ub3VuY2VJbnRlcnZhbCg1KTsKKyAgICB0aGlzLnRyYWNrZXIuc3RhcnQodHJ1ZSk7CisgIH0KKworICBwcml2YXRlIENvbW11bmljYXRpb25NYW5hZ2VyIGNyZWF0ZUFuZFN0YXJ0Q2xpZW50KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CisgICAgQ29tbXVuaWNhdGlvbk1hbmFnZXIgY29tbXVuaWNhdGlvbk1hbmFnZXIgPSBjcmVhdGVDbGllbnQoKTsKKyAgICBjb21tdW5pY2F0aW9uTWFuYWdlci5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisgICAgcmV0dXJuIGNvbW11bmljYXRpb25NYW5hZ2VyOworICB9CisKKyAgcHJpdmF0ZSBDb21tdW5pY2F0aW9uTWFuYWdlciBjcmVhdGVDbGllbnQoU3RyaW5nIG5hbWUpIHsKKyAgICBmaW5hbCBDb21tdW5pY2F0aW9uTWFuYWdlciBjb21tdW5pY2F0aW9uTWFuYWdlciA9IGNvbW11bmljYXRpb25NYW5hZ2VyRmFjdG9yeS5nZXRDbGllbnQobmFtZSk7CisgICAgY29tbXVuaWNhdGlvbk1hbmFnZXJMaXN0LmFkZChjb21tdW5pY2F0aW9uTWFuYWdlcik7CisgICAgcmV0dXJuIGNvbW11bmljYXRpb25NYW5hZ2VyOworICB9CisKKyAgcHJpdmF0ZSBDb21tdW5pY2F0aW9uTWFuYWdlciBjcmVhdGVDbGllbnQoKSB7CisgICAgcmV0dXJuIGNyZWF0ZUNsaWVudCgiIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgc3RvcFRyYWNrZXIoKSB7CisgICAgdGhpcy50cmFja2VyLnN0b3AoKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBhc3NlcnRGaWxlc0VxdWFsKEZpbGUgZjEsIEZpbGUgZjIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgYXNzZXJ0RXF1YWxzKGYxLmxlbmd0aCgpLCBmMi5sZW5ndGgoKSwgIkZpbGVzIHNpemVzIGRpZmZlciIpOworICAgIENoZWNrc3VtIGMxID0gRmlsZVV0aWxzLmNoZWNrc3VtKGYxLCBuZXcgQ1JDMzIoKSk7CisgICAgQ2hlY2tzdW0gYzIgPSBGaWxlVXRpbHMuY2hlY2tzdW0oZjIsIG5ldyBDUkMzMigpKTsKKyAgICBhc3NlcnRFcXVhbHMoYzEuZ2V0VmFsdWUoKSwgYzIuZ2V0VmFsdWUoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9qYXZhL2NvbS90dXJuL3R0b3JyZW50L2NsaWVudC9hbm5vdW5jZS9UcmFja2VyQ2xpZW50VGVzdC5qYXZhIGIvdHRvcnJlbnQtbWFzdGVyL3Rlc3RzL3NyYy90ZXN0L2phdmEvY29tL3R1cm4vdHRvcnJlbnQvY2xpZW50L2Fubm91bmNlL1RyYWNrZXJDbGllbnRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExNWI1OQotLS0gL2Rldi9udWxsCisrKyBiL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9qYXZhL2NvbS90dXJuL3R0b3JyZW50L2NsaWVudC9hbm5vdW5jZS9UcmFja2VyQ2xpZW50VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTA0IEBACitwYWNrYWdlIGNvbS50dXJuLnR0b3JyZW50LmNsaWVudC5hbm5vdW5jZTsKKworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LlV0aWxzOworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LmNvbW1vbi5Bbm5vdW5jZWFibGVJbmZvcm1hdGlvbjsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC5jb21tb24uUGVlcjsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC5jb21tb24uVG9ycmVudFV0aWxzOworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LmNvbW1vbi5wcm90b2NvbC5Bbm5vdW5jZVJlcXVlc3RNZXNzYWdlOworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LnRyYWNrZXIuVHJhY2tlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkJhc2ljQ29uZmlndXJhdG9yOworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyOworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dDsKK2ltcG9ydCBvcmcubW9ja2l0by5Bcmd1bWVudE1hdGNoZXJzOworaW1wb3J0IG9yZy50ZXN0bmcuYW5ub3RhdGlvbnMuQWZ0ZXJNZXRob2Q7CitpbXBvcnQgb3JnLnRlc3RuZy5hbm5vdGF0aW9ucy5CZWZvcmVNZXRob2Q7CitpbXBvcnQgb3JnLnRlc3RuZy5hbm5vdGF0aW9ucy5UZXN0OworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5Db25uZWN0RXhjZXB0aW9uOworaW1wb3J0IGphdmEubmV0LkluZXRTb2NrZXRBZGRyZXNzOworaW1wb3J0IGphdmEubmV0LlVSSTsKK2ltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8uKjsKKworQFRlc3QKK3B1YmxpYyBjbGFzcyBUcmFja2VyQ2xpZW50VGVzdCB7CisKKyAgcHJpdmF0ZSBUcmFja2VyIHRyYWNrZXI7CisKKyAgcHVibGljIFRyYWNrZXJDbGllbnRUZXN0KCkgeworICAgIGlmIChMb2dnZXIuZ2V0Um9vdExvZ2dlcigpLmdldEFsbEFwcGVuZGVycygpLmhhc01vcmVFbGVtZW50cygpKQorICAgICAgcmV0dXJuOworICAgIEJhc2ljQ29uZmlndXJhdG9yLmNvbmZpZ3VyZShuZXcgQ29uc29sZUFwcGVuZGVyKG5ldyBQYXR0ZXJuTGF5b3V0KCJbJWR7TU1kZCBISDptbTpzcyxTU1N9XSAlNnAgLSAlMjAuMjBjIC0gJW0gJW4iKSkpOworICAgIExvZ2dlci5nZXRSb290TG9nZ2VyKCkuc2V0TGV2ZWwoVXRpbHMuZ2V0TG9nTGV2ZWwoKSk7CisgIH0KKworICBAQmVmb3JlTWV0aG9kCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnRUcmFja2VyKCk7CisgIH0KKworCisgIEBUZXN0CisgIHB1YmxpYyB2b2lkIG11bHRpQW5ub3VuY2VUZXN0KCkgdGhyb3dzIEFubm91bmNlRXhjZXB0aW9uLCBDb25uZWN0RXhjZXB0aW9uIHsKKyAgICBMaXN0PFBlZXI+IHBlZXJzID0gQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChuZXcgUGVlcihuZXcgSW5ldFNvY2tldEFkZHJlc3MoIjEyNy4wLjAuMSIsIDY4ODEpLCBCeXRlQnVmZmVyLmFsbG9jYXRlKDEpKSk7CisgICAgZmluYWwgVVJJIHRyYWNrZXJVUkkgPSBVUkkuY3JlYXRlKCJodHRwOi8vbG9jYWxob3N0OjY5NjkvYW5ub3VuY2UiKTsKKyAgICBUcmFja2VyQ2xpZW50IGNsaWVudCA9IG5ldyBIVFRQVHJhY2tlckNsaWVudChwZWVycywgdHJhY2tlclVSSSk7CisKKyAgICBmaW5hbCBBbm5vdW5jZWFibGVJbmZvcm1hdGlvbiBmaXJzdFRvcnJlbnQgPSBnZXRNb2NrZWRUb3JyZW50KG5ldyBieXRlW117MSwgMiwgMywgNH0pOworICAgIGZpbmFsIEFubm91bmNlYWJsZUluZm9ybWF0aW9uIHNlY29uZFRvcnJlbnQgPSBnZXRNb2NrZWRUb3JyZW50KG5ldyBieXRlW117MSwgMywgMywgMn0pOworICAgIExpc3Q8QW5ub3VuY2VhYmxlSW5mb3JtYXRpb24+IHRvcnJlbnRzID0gQXJyYXlzLmFzTGlzdChmaXJzdFRvcnJlbnQsIHNlY29uZFRvcnJlbnQpOworCisgICAgY2xpZW50Lm11bHRpQW5ub3VuY2UoQW5ub3VuY2VSZXF1ZXN0TWVzc2FnZS5SZXF1ZXN0RXZlbnQuU1RBUlRFRCwgdHJ1ZSwgdG9ycmVudHMsIHBlZXJzKTsKKworICAgIHBlZXJzID0gQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChuZXcgUGVlcihuZXcgSW5ldFNvY2tldEFkZHJlc3MoIjEyNy4wLjAuMSIsIDY4ODIpLCBCeXRlQnVmZmVyLmFsbG9jYXRlKDEpKSk7CisgICAgY2xpZW50Lm11bHRpQW5ub3VuY2UoQW5ub3VuY2VSZXF1ZXN0TWVzc2FnZS5SZXF1ZXN0RXZlbnQuU1RBUlRFRCwgdHJ1ZSwgdG9ycmVudHMsIHBlZXJzKTsKKworICAgIExpc3Q8UGVlcj4gbGVlY2hlciA9IENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QobmV3IFBlZXIobmV3IEluZXRTb2NrZXRBZGRyZXNzKCIxMjcuMC4wLjEiLCA2ODg1KSwgQnl0ZUJ1ZmZlci5hbGxvY2F0ZSgxKSkpOworICAgIGZpbmFsIEFubm91bmNlYWJsZUluZm9ybWF0aW9uIGZpcnN0VG9ycmVudExlZWNoID0gZ2V0TW9ja2VkVG9ycmVudChuZXcgYnl0ZVtdezEsIDIsIDMsIDR9KTsKKyAgICBmaW5hbCBBbm5vdW5jZWFibGVJbmZvcm1hdGlvbiBzZWNvbmRUb3JyZW50TGVlY2ggPSBnZXRNb2NrZWRUb3JyZW50KG5ldyBieXRlW117MSwgMywgMywgMn0pOworICAgIHdoZW4oZmlyc3RUb3JyZW50TGVlY2guZ2V0TGVmdCgpKS50aGVuUmV0dXJuKDEwTCk7CisgICAgd2hlbihzZWNvbmRUb3JyZW50TGVlY2guZ2V0TGVmdCgpKS50aGVuUmV0dXJuKDEwTCk7CisKKyAgICBBbm5vdW5jZVJlc3BvbnNlTGlzdGVuZXIgbGlzdGVuZXIgPSBtb2NrKEFubm91bmNlUmVzcG9uc2VMaXN0ZW5lci5jbGFzcyk7CisKKyAgICBjbGllbnQucmVnaXN0ZXIobGlzdGVuZXIpOworICAgIGNsaWVudC5tdWx0aUFubm91bmNlKEFubm91bmNlUmVxdWVzdE1lc3NhZ2UuUmVxdWVzdEV2ZW50LlNUQVJURUQsIGZhbHNlLAorICAgICAgICAgICAgQXJyYXlzLmFzTGlzdChzZWNvbmRUb3JyZW50TGVlY2gsIGZpcnN0VG9ycmVudExlZWNoKSwgbGVlY2hlcik7CisKKyAgICB2ZXJpZnkobGlzdGVuZXIsIHRpbWVzKDIpKS5oYW5kbGVBbm5vdW5jZVJlc3BvbnNlKGFueUludCgpLCBhbnlJbnQoKSwgYW55SW50KCksIGFueVN0cmluZygpKTsKKyAgICB2ZXJpZnkobGlzdGVuZXIsIHRpbWVzKDIpKS5oYW5kbGVEaXNjb3ZlcmVkUGVlcnMoQXJndW1lbnRNYXRjaGVycy48UGVlcj5hbnlMaXN0KCksIGFueVN0cmluZygpKTsKKworICB9CisKKyAgcHJpdmF0ZSBBbm5vdW5jZWFibGVJbmZvcm1hdGlvbiBnZXRNb2NrZWRUb3JyZW50KGJ5dGVbXSBoYXNoKSB7CisgICAgZmluYWwgQW5ub3VuY2VhYmxlSW5mb3JtYXRpb24gcmVzdWx0ID0gbW9jayhBbm5vdW5jZWFibGVJbmZvcm1hdGlvbi5jbGFzcyk7CisgICAgd2hlbihyZXN1bHQuZ2V0TGVmdCgpKS50aGVuUmV0dXJuKDBMKTsKKyAgICB3aGVuKHJlc3VsdC5nZXREb3dubG9hZGVkKCkpLnRoZW5SZXR1cm4oMEwpOworICAgIHdoZW4ocmVzdWx0LmdldFVwbG9hZGVkKCkpLnRoZW5SZXR1cm4oMEwpOworICAgIHdoZW4ocmVzdWx0LmdldEluZm9IYXNoKCkpLnRoZW5SZXR1cm4oaGFzaCk7CisgICAgd2hlbihyZXN1bHQuZ2V0SGV4SW5mb0hhc2goKSkudGhlblJldHVybihUb3JyZW50VXRpbHMuYnl0ZUFycmF5VG9IZXhTdHJpbmcoaGFzaCkpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBwcml2YXRlIHZvaWQgc3RhcnRUcmFja2VyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICB0aGlzLnRyYWNrZXIgPSBuZXcgVHJhY2tlcig2OTY5KTsKKyAgICB0cmFja2VyLnNldEFubm91bmNlSW50ZXJ2YWwoNSk7CisgICAgdHJhY2tlci5zZXRQZWVyQ29sbGVjdG9yRXhwaXJlVGltZW91dCgxMCk7CisgICAgdGhpcy50cmFja2VyLnN0YXJ0KHRydWUpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHN0b3BUcmFja2VyKCkgeworICAgIHRoaXMudHJhY2tlci5zdG9wKCk7CisgIH0KKworICBAQWZ0ZXJNZXRob2QKKyAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdG9wVHJhY2tlcigpOworICB9Cit9CmRpZmYgLS1naXQgYS90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvamF2YS9jb20vdHVybi90dG9ycmVudC9jb21tb24vVG9ycmVudFRlc3QuamF2YSBiL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9qYXZhL2NvbS90dXJuL3R0b3JyZW50L2NvbW1vbi9Ub3JyZW50VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OWM1MmYKLS0tIC9kZXYvbnVsbAorKysgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvamF2YS9jb20vdHVybi90dG9ycmVudC9jb21tb24vVG9ycmVudFRlc3QuamF2YQpAQCAtMCwwICsxLDc3IEBACitwYWNrYWdlIGNvbS50dXJuLnR0b3JyZW50LmNvbW1vbjsKKworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYy5iaW5hcnkuSGV4OworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlVXRpbHM7CitpbXBvcnQgb3JnLnRlc3RuZy5hbm5vdGF0aW9ucy5UZXN0OworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5uZXQuVVJJOworaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgc3RhdGljIG9yZy50ZXN0bmcuQXNzZXJ0Lio7CisKK0BUZXN0CitwdWJsaWMgY2xhc3MgVG9ycmVudFRlc3QgeworCisgIHB1YmxpYyB2b2lkIHRlc3RfY3JlYXRlX3RvcnJlbnQoKSB0aHJvd3MgVVJJU3ludGF4RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24geworICAgIFVSSSBhbm5vdW5jZVVSSSA9IG5ldyBVUkkoImh0dHA6Ly9sb2NhbGhvc3Q6Njk2OS9hbm5vdW5jZSIpOworICAgIFN0cmluZyBjcmVhdGVkQnkgPSAiVGVzdCI7CisgICAgVG9ycmVudE1ldGFkYXRhIHQgPSBUb3JyZW50Q3JlYXRvci5jcmVhdGUobmV3IEZpbGUoInNyYy90ZXN0L3Jlc291cmNlcy9wYXJlbnRGaWxlcy9maWxlMS5qYXIiKSwgYW5ub3VuY2VVUkksIGNyZWF0ZWRCeSk7CisgICAgYXNzZXJ0RXF1YWxzKGNyZWF0ZWRCeSwgdC5nZXRDcmVhdGVkQnkoKS5nZXQoKSk7CisgICAgYXNzZXJ0RXF1YWxzKGFubm91bmNlVVJJLnRvU3RyaW5nKCksIHQuZ2V0QW5ub3VuY2UoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCBsb2FkX3RvcnJlbnRfY3JlYXRlZF9ieV91dG9ycmVudCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgVG9ycmVudE1ldGFkYXRhIHQgPSBuZXcgVG9ycmVudFBhcnNlcigpLnBhcnNlRnJvbUZpbGUobmV3IEZpbGUoInNyYy90ZXN0L3Jlc291cmNlcy90b3JyZW50cy9maWxlMS5qYXIudG9ycmVudCIpKTsKKyAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly9sb2NhbGhvc3Q6Njk2OS9hbm5vdW5jZSIsIHQuZ2V0QW5ub3VuY2UoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJCOTJEMzgwNDZDNzZENzM5NDhFMTRDNDJERjk5MkNBRjI1NDg5RDA4IiwgdC5nZXRIZXhJbmZvSGFzaCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoInVUb3JyZW50LzMxMzAiLCB0LmdldENyZWF0ZWRCeSgpLmdldCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRvcnJlbnRfZnJvbV9tdWx0aXBsZV9maWxlcygpIHRocm93cyBVUklTeW50YXhFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgVVJJIGFubm91bmNlVVJJID0gbmV3IFVSSSgiaHR0cDovL2xvY2FsaG9zdDo2OTY5L2Fubm91bmNlIik7CisgICAgU3RyaW5nIGNyZWF0ZWRCeSA9ICJUZXN0MiI7CisgICAgZmluYWwgRmlsZSBwYXJlbnREaXIgPSBuZXcgRmlsZSgic3JjL3Rlc3QvcmVzb3VyY2VzL3BhcmVudEZpbGVzL3BhcmVudERpciIpOworICAgIGZpbmFsIGxvbmcgY3JlYXRpb25UaW1lU2VjcyA9IDEzNzYwNTEwMDA7CisgICAgZmluYWwgU3RyaW5nW10gZmlsZU5hbWVzID0gbmV3IFN0cmluZ1tdCisgICAgICAgICAgICB7IkFjY3VSZXZDb21tb24uamFyIiwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1vbnMtaW8tY2lvMi41XzMuamFyIiwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1vbnMtaW8tY2lvMi41XzMuamFyLmxpbmsiLAorICAgICAgICAgICAgICAgICAgICAiaW5EaXIvYXBwbGljYXRpb24ud2FkbCIsCisgICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnZlcnNpb24ifTsKKyAgICBmaW5hbCBMaXN0PEZpbGU+IGZpbGVzID0gbmV3IEFycmF5TGlzdDxGaWxlPigpOworICAgIGZvciAoU3RyaW5nIGZpbGVOYW1lIDogZmlsZU5hbWVzKSB7CisgICAgICBmaWxlcy5hZGQobmV3IEZpbGUocGFyZW50RGlyLCBmaWxlTmFtZSkpOworICAgIH0KKyAgICBUb3JyZW50TWV0YWRhdGEgY3JlYXRlZFRvcnJlbnQgPSBUb3JyZW50Q3JlYXRvci5jcmVhdGUocGFyZW50RGlyLCBmaWxlcywgYW5ub3VuY2VVUkksIG51bGwsIGNyZWF0ZWRCeSwgY3JlYXRpb25UaW1lU2VjcywgVG9ycmVudENyZWF0b3IuREVGQVVMVF9QSUVDRV9MRU5HVEgpOworICAgIEZpbGUgdG9ycmVudEZpbGVXaW4gPSBuZXcgRmlsZSgic3JjL3Rlc3QvcmVzb3VyY2VzL3RvcnJlbnRzL3BhcmVudERpci53aW4udG9ycmVudCIpOworICAgIEZpbGUgdG9ycmVudEZpbGVMaW51eCA9IG5ldyBGaWxlKCJzcmMvdGVzdC9yZXNvdXJjZXMvdG9ycmVudHMvcGFyZW50RGlyLmxpbnV4LnRvcnJlbnQiKTsKKyAgICBmaW5hbCBieXRlW10gZXhwZWN0ZWRCeXRlc1dpbiA9IEZpbGVVdGlscy5yZWFkRmlsZVRvQnl0ZUFycmF5KHRvcnJlbnRGaWxlV2luKTsKKyAgICBmaW5hbCBieXRlW10gZXhwZWN0ZWRCeXRlc0xpbnV4ID0gRmlsZVV0aWxzLnJlYWRGaWxlVG9CeXRlQXJyYXkodG9ycmVudEZpbGVMaW51eCk7CisgICAgZmluYWwgYnl0ZVtdIGFjdHVhbEJ5dGVzID0gbmV3IFRvcnJlbnRTZXJpYWxpemVyKCkuc2VyaWFsaXplKGNyZWF0ZWRUb3JyZW50KTsKKworICAgIGFzc2VydFRydWUoSGV4LmVuY29kZUhleFN0cmluZyhleHBlY3RlZEJ5dGVzV2luKS5lcXVhbHMoSGV4LmVuY29kZUhleFN0cmluZyhhY3R1YWxCeXRlcykpIHx8IEhleC5lbmNvZGVIZXhTdHJpbmcoZXhwZWN0ZWRCeXRlc0xpbnV4KS5lcXVhbHMoSGV4LmVuY29kZUhleFN0cmluZyhhY3R1YWxCeXRlcykpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWxlbmFtZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIEZpbGUgdG9ycmVudEZpbGUgPSBuZXcgRmlsZSgic3JjL3Rlc3QvcmVzb3VyY2VzL3RvcnJlbnRzL3BhcmVudERpci53aW4udG9ycmVudCIpOworICAgIFRvcnJlbnRNZXRhZGF0YSB0MiA9IG5ldyBUb3JyZW50UGFyc2VyKCkucGFyc2VGcm9tRmlsZSh0b3JyZW50RmlsZSk7CisgICAgZmluYWwgTGlzdDxUb3JyZW50RmlsZT4gdG1wRmlsZU5hbWVzID0gdDIuZ2V0RmlsZXMoKTsKKyAgICBmaW5hbCBMaXN0PFN0cmluZz4gbm9ybWFsaXplZEZpbGVuYW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPih0bXBGaWxlTmFtZXMuc2l6ZSgpKTsKKyAgICBmb3IgKFRvcnJlbnRGaWxlIHRvcnJlbnRGaWxlSW5mbyA6IHRtcEZpbGVOYW1lcykgeworICAgICAgbm9ybWFsaXplZEZpbGVuYW1lcy5hZGQodDIuZ2V0RGlyZWN0b3J5TmFtZSgpICsgIi8iICsgdG9ycmVudEZpbGVJbmZvLmdldFJlbGF0aXZlUGF0aEFzU3RyaW5nKCkucmVwbGFjZUFsbCgiXFxcXCIsICIvIikpOworICAgIH0KKyAgICBTdHJpbmdbXSBleHBlY3RlZEZpbGVuYW1lcyA9IG5ldyBTdHJpbmdbXQorICAgICAgICAgICAgeyJwYXJlbnREaXIvQWNjdVJldkNvbW1vbi5qYXIiLAorICAgICAgICAgICAgICAgICAgICAicGFyZW50RGlyL2NvbW1vbnMtaW8tY2lvMi41XzMuamFyIiwKKyAgICAgICAgICAgICAgICAgICAgInBhcmVudERpci9jb21tb25zLWlvLWNpbzIuNV8zLmphci5saW5rIiwKKyAgICAgICAgICAgICAgICAgICAgInBhcmVudERpci9pbkRpci9hcHBsaWNhdGlvbi53YWRsIiwKKyAgICAgICAgICAgICAgICAgICAgInBhcmVudERpci9zdG9yYWdlLnZlcnNpb24ifTsKKyAgICBhc3NlcnRFcXVhbHNOb09yZGVyKG5vcm1hbGl6ZWRGaWxlbmFtZXMudG9BcnJheShuZXcgU3RyaW5nW25vcm1hbGl6ZWRGaWxlbmFtZXMuc2l6ZSgpXSksIGV4cGVjdGVkRmlsZW5hbWVzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgfQorCit9CmRpZmYgLS1naXQgYS90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvamF2YS9jb20vdHVybi90dG9ycmVudC90cmFja2VyL1RyYWNrZXJBbm5vdW5jZVRlc3QuamF2YSBiL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9qYXZhL2NvbS90dXJuL3R0b3JyZW50L3RyYWNrZXIvVHJhY2tlckFubm91bmNlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYWQ4YzIKLS0tIC9kZXYvbnVsbAorKysgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvamF2YS9jb20vdHVybi90dG9ycmVudC90cmFja2VyL1RyYWNrZXJBbm5vdW5jZVRlc3QuamF2YQpAQCAtMCwwICsxLDM4IEBACitwYWNrYWdlIGNvbS50dXJuLnR0b3JyZW50LnRyYWNrZXI7CisKK2ltcG9ydCBvcmcudGVzdG5nLmFubm90YXRpb25zLkFmdGVyTWV0aG9kOworaW1wb3J0IG9yZy50ZXN0bmcuYW5ub3RhdGlvbnMuQmVmb3JlTWV0aG9kOworaW1wb3J0IG9yZy50ZXN0bmcuYW5ub3RhdGlvbnMuVGVzdDsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBzdGF0aWMgY29tLnR1cm4udHRvcnJlbnQudHJhY2tlci5UcmFja2VyVXRpbHMubG9hZFRvcnJlbnQ7CitpbXBvcnQgc3RhdGljIG9yZy50ZXN0bmcuQXNzZXJ0LmFzc2VydEVxdWFsczsKKworQFRlc3QKK3B1YmxpYyBjbGFzcyBUcmFja2VyQW5ub3VuY2VUZXN0IHsKKworICBwcml2YXRlIFRyYWNrZXIgdHJhY2tlcjsKKworICBAQmVmb3JlTWV0aG9kCisgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdGhpcy50cmFja2VyID0gbmV3IFRyYWNrZXIoNjk2OSk7CisgICAgdHJhY2tlci5zZXRBbm5vdW5jZUludGVydmFsKDUpOworICAgIHRyYWNrZXIuc2V0UGVlckNvbGxlY3RvckV4cGlyZVRpbWVvdXQoMTApOworICAgIHRoaXMudHJhY2tlci5zdGFydChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0X2Fubm91bmNlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKworICAgIGFzc2VydEVxdWFscygwLCB0aGlzLnRyYWNrZXIuZ2V0VHJhY2tlZFRvcnJlbnRzKCkuc2l6ZSgpKTsKKworICAgIHRoaXMudHJhY2tlci5hbm5vdW5jZShsb2FkVG9ycmVudCgiZmlsZTEuamFyLnRvcnJlbnQiKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoMSwgdGhpcy50cmFja2VyLmdldFRyYWNrZWRUb3JyZW50cygpLnNpemUoKSk7CisgIH0KKworICBAQWZ0ZXJNZXRob2QKKyAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0aGlzLnRyYWNrZXIuc3RvcCgpOworICB9Cit9CmRpZmYgLS1naXQgYS90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvamF2YS9jb20vdHVybi90dG9ycmVudC90cmFja2VyL1RyYWNrZXJUZXN0LmphdmEgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvamF2YS9jb20vdHVybi90dG9ycmVudC90cmFja2VyL1RyYWNrZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlkNjgwMgotLS0gL2Rldi9udWxsCisrKyBiL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9qYXZhL2NvbS90dXJuL3R0b3JyZW50L3RyYWNrZXIvVHJhY2tlclRlc3QuamF2YQpAQCAtMCwwICsxLDQyMiBAQAorcGFja2FnZSBjb20udHVybi50dG9ycmVudC50cmFja2VyOworCitpbXBvcnQgY29tLnR1cm4udHRvcnJlbnQuQ29tbXVuaWNhdGlvbk1hbmFnZXJGYWN0b3J5OworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LlRlbXBGaWxlczsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC5VdGlsczsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC5XYWl0Rm9yOworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LmNsaWVudC5Db21tdW5pY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC5jbGllbnQuU2hhcmVkVG9ycmVudDsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC5jbGllbnQuc3RvcmFnZS5GYWlyUGllY2VTdG9yYWdlRmFjdG9yeTsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC5jbGllbnQuc3RvcmFnZS5GaWxlQ29sbGVjdGlvblN0b3JhZ2U7CitpbXBvcnQgY29tLnR1cm4udHRvcnJlbnQuY29tbW9uLio7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkJhc2ljQ29uZmlndXJhdG9yOworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyOworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dDsKK2ltcG9ydCBvcmcudGVzdG5nLmFubm90YXRpb25zLkFmdGVyTWV0aG9kOworaW1wb3J0IG9yZy50ZXN0bmcuYW5ub3RhdGlvbnMuQmVmb3JlTWV0aG9kOworaW1wb3J0IG9yZy50ZXN0bmcuYW5ub3RhdGlvbnMuVGVzdDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmV0Lio7CitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLnppcC5DUkMzMjsKK2ltcG9ydCBqYXZhLnV0aWwuemlwLkNoZWNrc3VtOworCitpbXBvcnQgc3RhdGljIGNvbS50dXJuLnR0b3JyZW50LnRyYWNrZXIuVHJhY2tlci5BTk5PVU5DRV9VUkw7CitpbXBvcnQgc3RhdGljIGNvbS50dXJuLnR0b3JyZW50LnRyYWNrZXIuVHJhY2tlclV0aWxzLlRFU1RfUkVTT1VSQ0VTOworaW1wb3J0IHN0YXRpYyBvcmcudGVzdG5nLkFzc2VydC4qOworCitAVGVzdAorcHVibGljIGNsYXNzIFRyYWNrZXJUZXN0IHsKKworICBwcml2YXRlIFRyYWNrZXIgdHJhY2tlcjsKKyAgcHJpdmF0ZSBUZW1wRmlsZXMgdGVtcEZpbGVzOworICAvLyAgcHJpdmF0ZSBTdHJpbmcgbXlMb2dmaWxlOworICBwcml2YXRlIExpc3Q8Q29tbXVuaWNhdGlvbk1hbmFnZXI+IGNvbW11bmljYXRpb25NYW5hZ2VyTGlzdCA9IG5ldyBBcnJheUxpc3Q8Q29tbXVuaWNhdGlvbk1hbmFnZXI+KCk7CisKKyAgcHJpdmF0ZSBmaW5hbCBDb21tdW5pY2F0aW9uTWFuYWdlckZhY3RvcnkgY29tbXVuaWNhdGlvbk1hbmFnZXJGYWN0b3J5OworCisKKyAgcHVibGljIFRyYWNrZXJUZXN0KCkgeworICAgIGNvbW11bmljYXRpb25NYW5hZ2VyRmFjdG9yeSA9IG5ldyBDb21tdW5pY2F0aW9uTWFuYWdlckZhY3RvcnkoKTsKKyAgICBpZiAoTG9nZ2VyLmdldFJvb3RMb2dnZXIoKS5nZXRBbGxBcHBlbmRlcnMoKS5oYXNNb3JlRWxlbWVudHMoKSkKKyAgICAgIHJldHVybjsKKyAgICBCYXNpY0NvbmZpZ3VyYXRvci5jb25maWd1cmUobmV3IENvbnNvbGVBcHBlbmRlcihuZXcgUGF0dGVybkxheW91dCgiWyVke01NZGQgSEg6bW06c3MsU1NTfV0gJTZwIC0gJTIwLjIwYyAtICVtICVuIikpKTsKKyAgICBMb2dnZXIuZ2V0Um9vdExvZ2dlcigpLnNldExldmVsKFV0aWxzLmdldExvZ0xldmVsKCkpOworICB9CisKKyAgQEJlZm9yZU1ldGhvZAorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHRlbXBGaWxlcyA9IG5ldyBUZW1wRmlsZXMoKTsKKyAgICBzdGFydFRyYWNrZXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RfdHJhY2tlcl9hbGxfcG9ydHMoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIGZpbmFsIGludCBwb3J0ID0gdHJhY2tlci5nZXRBbm5vdW5jZVVSSSgpLmdldFBvcnQoKTsKKyAgICBmaW5hbCBFbnVtZXJhdGlvbjxOZXR3b3JrSW50ZXJmYWNlPiBlID0gTmV0d29ya0ludGVyZmFjZS5nZXROZXR3b3JrSW50ZXJmYWNlcygpOworICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICBmaW5hbCBOZXR3b3JrSW50ZXJmYWNlIG5pID0gZS5uZXh0RWxlbWVudCgpOworICAgICAgZmluYWwgRW51bWVyYXRpb248SW5ldEFkZHJlc3M+IGFkZHJlc3NlcyA9IG5pLmdldEluZXRBZGRyZXNzZXMoKTsKKyAgICAgIHdoaWxlIChhZGRyZXNzZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgZmluYWwgSW5ldEFkZHJlc3MgYWRkciA9IGFkZHJlc3Nlcy5uZXh0RWxlbWVudCgpOworICAgICAgICB0cnkgeworICAgICAgICAgIFNvY2tldCBzID0gbmV3IFNvY2tldChhZGRyLCBwb3J0KTsKKyAgICAgICAgICBzLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgIGlmIChTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEudmVyc2lvbiIpLnN0YXJ0c1dpdGgoIjEuNy4iKSB8fCBhZGRyIGluc3RhbmNlb2YgSW5ldDRBZGRyZXNzKSB7CisgICAgICAgICAgICBmYWlsKCJVbmFibGUgdG8gY29ubmVjdCB0byAiICsgYWRkciwgZXgpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBlZXJXaXRoTWFueUludGVyZmFjZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBMaXN0PEluZXRBZGRyZXNzPiBzZWxmQWRkcmVzc2VzID0gbmV3IEFycmF5TGlzdDxJbmV0QWRkcmVzcz4oKTsKKyAgICBmaW5hbCBFbnVtZXJhdGlvbjxOZXR3b3JrSW50ZXJmYWNlPiBuZXR3b3JrSW50ZXJmYWNlcyA9IE5ldHdvcmtJbnRlcmZhY2UuZ2V0TmV0d29ya0ludGVyZmFjZXMoKTsKKyAgICB3aGlsZSAobmV0d29ya0ludGVyZmFjZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgIE5ldHdvcmtJbnRlcmZhY2UgbmkgPSBuZXR3b3JrSW50ZXJmYWNlcy5uZXh0RWxlbWVudCgpOworICAgICAgZmluYWwgRW51bWVyYXRpb248SW5ldEFkZHJlc3M+IGluZXRBZGRyZXNzZXMgPSBuaS5nZXRJbmV0QWRkcmVzc2VzKCk7CisgICAgICB3aGlsZSAoaW5ldEFkZHJlc3Nlcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICBJbmV0QWRkcmVzcyBpbmV0QWRkcmVzcyA9IGluZXRBZGRyZXNzZXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgaWYgKGluZXRBZGRyZXNzIGluc3RhbmNlb2YgSW5ldDZBZGRyZXNzKSBjb250aW51ZTsvLyBpZ25vcmUgSVB2NiBhZGRyZXNzZXMKKworICAgICAgICBzZWxmQWRkcmVzc2VzLmFkZChpbmV0QWRkcmVzcyk7CisgICAgICB9CisgICAgfQorCisgICAgZmluYWwgSW5ldEFkZHJlc3NbXSBpbmV0QWRkcmVzc2VzID0gc2VsZkFkZHJlc3Nlcy50b0FycmF5KG5ldyBJbmV0QWRkcmVzc1tzZWxmQWRkcmVzc2VzLnNpemUoKV0pOworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIHNlZWRlciA9IGNyZWF0ZUNvbW11bmljYXRpb25NYW5hZ2VyKCk7CisgICAgRmlsZSB0b3JyZW50RmlsZSA9IG5ldyBGaWxlKFRFU1RfUkVTT1VSQ0VTICsgIi90b3JyZW50cyIsICJmaWxlMS5qYXIudG9ycmVudCIpOworICAgIEZpbGUgcGFyZW50RmlsZXMgPSBuZXcgRmlsZShURVNUX1JFU09VUkNFUyArICIvcGFyZW50RmlsZXMiKTsKKyAgICBmaW5hbCBTdHJpbmcgaGV4SW5mb0hhc2ggPSBzZWVkZXIuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgcGFyZW50RmlsZXMuZ2V0QWJzb2x1dGVQYXRoKCkpLmdldEhleEluZm9IYXNoKCk7CisgICAgc2VlZGVyLnN0YXJ0KGluZXRBZGRyZXNzZXMpOworICAgIGZpbmFsIFdhaXRGb3Igd2FpdEZvciA9IG5ldyBXYWl0Rm9yKDEwMDAwKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBib29sZWFuIGNvbmRpdGlvbigpIHsKKyAgICAgICAgZmluYWwgVHJhY2tlZFRvcnJlbnQgdHJhY2tlZFRvcnJlbnQgPSB0cmFja2VyLmdldFRyYWNrZWRUb3JyZW50KGhleEluZm9IYXNoKTsKKyAgICAgICAgcmV0dXJuIHRyYWNrZWRUb3JyZW50ICE9IG51bGwgJiYgdHJhY2tlZFRvcnJlbnQuZ2V0UGVlcnMoKS5zaXplKCkgPj0gaW5ldEFkZHJlc3Nlcy5sZW5ndGg7CisgICAgICB9CisgICAgfTsKKworICAgIGFzc2VydFRydWUod2FpdEZvci5pc015UmVzdWx0KCkpOworCisgICAgZmluYWwgVHJhY2tlZFRvcnJlbnQgdHJhY2tlZFRvcnJlbnQgPSB0cmFja2VyLmdldFRyYWNrZWRUb3JyZW50KGhleEluZm9IYXNoKTsKKworICAgIFNldDxTdHJpbmc+IGV4cGVjdGVkSXBzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworICAgIGZvciAoSW5ldEFkZHJlc3MgaW5ldEFkZHJlc3MgOiBpbmV0QWRkcmVzc2VzKSB7CisgICAgICBleHBlY3RlZElwcy5hZGQoaW5ldEFkZHJlc3MuZ2V0SG9zdEFkZHJlc3MoKSk7CisgICAgfQorICAgIFNldDxTdHJpbmc+IGFjdHVhbElwcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICBmb3IgKFRyYWNrZWRQZWVyIHBlZXIgOiB0cmFja2VkVG9ycmVudC5nZXRQZWVycygpLnZhbHVlcygpKSB7CisgICAgICBhY3R1YWxJcHMuYWRkKHBlZXIuZ2V0SXAoKSk7CisgICAgfQorCisgICAgYXNzZXJ0RXF1YWxzKGFjdHVhbElwcywgZXhwZWN0ZWRJcHMpOworICAgIGFzc2VydEVxdWFscyhpbmV0QWRkcmVzc2VzLmxlbmd0aCwgYWN0dWFsSXBzLnNpemUoKSk7CisKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3Rfc2hhcmVfYW5kX2Rvd25sb2FkKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CisgICAgZmluYWwgVHJhY2tlZFRvcnJlbnQgdHQgPSB0aGlzLnRyYWNrZXIuYW5ub3VuY2UobG9hZFRvcnJlbnQoImZpbGUxLmphci50b3JyZW50IikpOworICAgIGFzc2VydEVxdWFscygwLCB0dC5nZXRQZWVycygpLnNpemUoKSk7CisKKyAgICBDb21tdW5pY2F0aW9uTWFuYWdlciBzZWVkZXIgPSBjcmVhdGVDb21tdW5pY2F0aW9uTWFuYWdlcigpOworICAgIEZpbGUgdG9ycmVudEZpbGUgPSBuZXcgRmlsZShURVNUX1JFU09VUkNFUyArICIvdG9ycmVudHMiLCAiZmlsZTEuamFyLnRvcnJlbnQiKTsKKyAgICBGaWxlIHBhcmVudEZpbGVzID0gbmV3IEZpbGUoVEVTVF9SRVNPVVJDRVMgKyAiL3BhcmVudEZpbGVzIik7CisgICAgc2VlZGVyLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIHBhcmVudEZpbGVzLmdldEFic29sdXRlUGF0aCgpKTsKKworICAgIGFzc2VydEVxdWFscyh0dC5nZXRIZXhJbmZvSGFzaCgpLCBzZWVkZXIuZ2V0VG9ycmVudHNTdG9yYWdlKCkuYW5ub3VuY2VhYmxlVG9ycmVudHMoKS5pdGVyYXRvcigpLm5leHQoKS5nZXRIZXhJbmZvSGFzaCgpKTsKKworICAgIGZpbmFsIEZpbGUgZG93bmxvYWREaXIgPSB0ZW1wRmlsZXMuY3JlYXRlVGVtcERpcigpOworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIGxlZWNoID0gY3JlYXRlQ29tbXVuaWNhdGlvbk1hbmFnZXIoKTsKKyAgICBsZWVjaC5hZGRUb3JyZW50KHRvcnJlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpLCBkb3dubG9hZERpci5nZXRBYnNvbHV0ZVBhdGgoKSk7CisKKyAgICB0cnkgeworICAgICAgc2VlZGVyLnN0YXJ0KEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpKTsKKworICAgICAgbGVlY2guc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworCisgICAgICB3YWl0Rm9yRmlsZUluRGlyKGRvd25sb2FkRGlyLCAiZmlsZTEuamFyIik7CisgICAgICBhc3NlcnRGaWxlc0VxdWFsKG5ldyBGaWxlKFRFU1RfUkVTT1VSQ0VTICsgIi9wYXJlbnRGaWxlcy9maWxlMS5qYXIiKSwgbmV3IEZpbGUoZG93bmxvYWREaXIsICJmaWxlMS5qYXIiKSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIGxlZWNoLnN0b3AoKTsKKyAgICAgIHNlZWRlci5zdG9wKCk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdHJhY2tlcl9hY2NlcHRzX3RvcnJlbnRfZnJvbV9zZWVkZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKyAgICB0aGlzLnRyYWNrZXIuc2V0QWNjZXB0Rm9yZWlnblRvcnJlbnRzKHRydWUpOworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIHNlZWRlciA9IGNyZWF0ZUNvbW11bmljYXRpb25NYW5hZ2VyKCk7CisgICAgRmlsZSB0b3JyZW50RmlsZSA9IG5ldyBGaWxlKFRFU1RfUkVTT1VSQ0VTICsgIi90b3JyZW50cyIsICJmaWxlMS5qYXIudG9ycmVudCIpOworICAgIEZpbGUgcGFyZW50RmlsZXMgPSBuZXcgRmlsZShURVNUX1JFU09VUkNFUyArICIvcGFyZW50RmlsZXMiKTsKKyAgICBzZWVkZXIuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgcGFyZW50RmlsZXMuZ2V0QWJzb2x1dGVQYXRoKCkpOworCisgICAgdHJ5IHsKKyAgICAgIHNlZWRlci5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisKKyAgICAgIHdhaXRGb3JTZWVkZXIoc2VlZGVyLmdldFRvcnJlbnRzU3RvcmFnZSgpLmFubm91bmNlYWJsZVRvcnJlbnRzKCkuaXRlcmF0b3IoKS5uZXh0KCkuZ2V0SW5mb0hhc2goKSk7CisKKyAgICAgIENvbGxlY3Rpb248VHJhY2tlZFRvcnJlbnQ+IHRyYWNrZWRUb3JyZW50cyA9IHRoaXMudHJhY2tlci5nZXRUcmFja2VkVG9ycmVudHMoKTsKKyAgICAgIGFzc2VydEVxdWFscygxLCB0cmFja2VkVG9ycmVudHMuc2l6ZSgpKTsKKworICAgICAgVHJhY2tlZFRvcnJlbnQgdHJhY2tlZFRvcnJlbnQgPSB0cmFja2VkVG9ycmVudHMuaXRlcmF0b3IoKS5uZXh0KCk7CisgICAgICBNYXA8UGVlclVJRCwgVHJhY2tlZFBlZXI+IHBlZXJzID0gdHJhY2tlZFRvcnJlbnQuZ2V0UGVlcnMoKTsKKyAgICAgIGFzc2VydEVxdWFscygxLCBwZWVycy5zaXplKCkpOworICAgICAgYXNzZXJ0VHJ1ZShwZWVycy52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKS5pc0NvbXBsZXRlZCgpKTsgLy8gc2VlZAorICAgICAgYXNzZXJ0RXF1YWxzKDEsIHRyYWNrZWRUb3JyZW50LnNlZWRlcnMoKSk7CisgICAgICBhc3NlcnRFcXVhbHMoMCwgdHJhY2tlZFRvcnJlbnQubGVlY2hlcnMoKSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIHNlZWRlci5zdG9wKCk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdHJhY2tlcl9hY2NlcHRzX3RvcnJlbnRfZnJvbV9sZWVjaCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24geworICAgIHRoaXMudHJhY2tlci5zZXRBY2NlcHRGb3JlaWduVG9ycmVudHModHJ1ZSk7CisKKyAgICBmaW5hbCBGaWxlIGRvd25sb2FkRGlyID0gdGVtcEZpbGVzLmNyZWF0ZVRlbXBEaXIoKTsKKyAgICBDb21tdW5pY2F0aW9uTWFuYWdlciBsZWVjaCA9IGNyZWF0ZUNvbW11bmljYXRpb25NYW5hZ2VyKCk7CisgICAgRmlsZSB0b3JyZW50RmlsZSA9IG5ldyBGaWxlKFRFU1RfUkVTT1VSQ0VTICsgIi90b3JyZW50cyIsICJmaWxlMS5qYXIudG9ycmVudCIpOworICAgIGxlZWNoLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGRvd25sb2FkRGlyLmdldEFic29sdXRlUGF0aCgpKTsKKworICAgIHRyeSB7CisgICAgICBsZWVjaC5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisKKyAgICAgIG5ldyBXYWl0Rm9yKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gY29uZGl0aW9uKCkgeworICAgICAgICAgIGZvciAoVHJhY2tlZFRvcnJlbnQgdHQgOiB0cmFja2VyLmdldFRyYWNrZWRUb3JyZW50cygpKSB7CisgICAgICAgICAgICBpZiAodHQuZ2V0UGVlcnMoKS5zaXplKCkgPT0gMSkgcmV0dXJuIHRydWU7CisgICAgICAgICAgfQorCisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICB9OworCisgICAgICBDb2xsZWN0aW9uPFRyYWNrZWRUb3JyZW50PiB0cmFja2VkVG9ycmVudHMgPSB0aGlzLnRyYWNrZXIuZ2V0VHJhY2tlZFRvcnJlbnRzKCk7CisgICAgICBhc3NlcnRFcXVhbHMoMSwgdHJhY2tlZFRvcnJlbnRzLnNpemUoKSk7CisKKyAgICAgIFRyYWNrZWRUb3JyZW50IHRyYWNrZWRUb3JyZW50ID0gdHJhY2tlZFRvcnJlbnRzLml0ZXJhdG9yKCkubmV4dCgpOworICAgICAgTWFwPFBlZXJVSUQsIFRyYWNrZWRQZWVyPiBwZWVycyA9IHRyYWNrZWRUb3JyZW50LmdldFBlZXJzKCk7CisgICAgICBhc3NlcnRFcXVhbHMoMSwgcGVlcnMuc2l6ZSgpKTsKKyAgICAgIGFzc2VydEZhbHNlKHBlZXJzLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpLmlzQ29tcGxldGVkKCkpOyAvLyBsZWVjaAorICAgICAgYXNzZXJ0RXF1YWxzKDAsIHRyYWNrZWRUb3JyZW50LnNlZWRlcnMoKSk7CisgICAgICBhc3NlcnRFcXVhbHMoMSwgdHJhY2tlZFRvcnJlbnQubGVlY2hlcnMoKSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIGxlZWNoLnN0b3AoKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0cmFja2VyX3JlbW92ZXNfcGVlcl9hZnRlcl9wZWVyX3NodXRkb3duKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CisgICAgdHJhY2tlci5zZXRBY2NlcHRGb3JlaWduVG9ycmVudHModHJ1ZSk7CisgICAgRmlsZSB0b3JyZW50RmlsZSA9IG5ldyBGaWxlKFRFU1RfUkVTT1VSQ0VTICsgIi90b3JyZW50cyIsICJmaWxlMS5qYXIudG9ycmVudCIpOworICAgIEZpbGUgcGFyZW50RmlsZXMgPSBuZXcgRmlsZShURVNUX1JFU09VUkNFUyArICIvcGFyZW50RmlsZXMiKTsKKworICAgIGZpbmFsIENvbW11bmljYXRpb25NYW5hZ2VyIGMxID0gY3JlYXRlQ29tbXVuaWNhdGlvbk1hbmFnZXIoKTsKKyAgICBjMS5zdGFydChJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisgICAgYzEuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgcGFyZW50RmlsZXMuZ2V0QWJzb2x1dGVQYXRoKCkpOworCisgICAgZmluYWwgQ29tbXVuaWNhdGlvbk1hbmFnZXIgYzIgPSBjcmVhdGVDb21tdW5pY2F0aW9uTWFuYWdlcigpOworICAgIGMyLnN0YXJ0KEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpKTsKKyAgICBjMi5hZGRUb3JyZW50KHRvcnJlbnRGaWxlLmdldEFic29sdXRlUGF0aCgpLCBwYXJlbnRGaWxlcy5nZXRBYnNvbHV0ZVBhdGgoKSk7CisKKyAgICBuZXcgV2FpdEZvcigxMCAqIDEwMDApIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gY29uZGl0aW9uKCkgeworICAgICAgICByZXR1cm4gdHJhY2tlci5nZXRUcmFja2VkVG9ycmVudHMoKS5zaXplKCkgPT0gMTsKKyAgICAgIH0KKyAgICB9OworCisgICAgZmluYWwgVHJhY2tlZFRvcnJlbnQgdHQgPSB0cmFja2VyLmdldFRyYWNrZWRUb3JyZW50cygpLml0ZXJhdG9yKCkubmV4dCgpOworCisgICAgbmV3IFdhaXRGb3IoMTAgKiAxMDAwKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBib29sZWFuIGNvbmRpdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHR0LmdldFBlZXJzKCkuc2l6ZSgpID09IDI7CisgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsIEluZXRTb2NrZXRBZGRyZXNzIGMxQWRkcmVzcyA9IG5ldyBJbmV0U29ja2V0QWRkcmVzcyhJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSwgYzEuZ2V0Q29ubmVjdGlvbk1hbmFnZXIoKS5nZXRCaW5kUG9ydCgpKTsKKyAgICBmaW5hbCBJbmV0U29ja2V0QWRkcmVzcyBjMkFkZHJlc3MgPSBuZXcgSW5ldFNvY2tldEFkZHJlc3MoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCksIGMyLmdldENvbm5lY3Rpb25NYW5hZ2VyKCkuZ2V0QmluZFBvcnQoKSk7CisgICAgYXNzZXJ0VHJ1ZSh0dC5nZXRQZWVycygpLmNvbnRhaW5zS2V5KG5ldyBQZWVyVUlEKGMxQWRkcmVzcywgdHQuZ2V0SGV4SW5mb0hhc2goKSkpKTsKKyAgICBhc3NlcnRUcnVlKHR0LmdldFBlZXJzKCkuY29udGFpbnNLZXkobmV3IFBlZXJVSUQoYzJBZGRyZXNzLCB0dC5nZXRIZXhJbmZvSGFzaCgpKSkpOworCisgICAgYzIuc3RvcCgpOworICAgIG5ldyBXYWl0Rm9yKDMwICogMTAwMCkgeworCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBib29sZWFuIGNvbmRpdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHR0LmdldFBlZXJzKCkuc2l6ZSgpID09IDE7CisgICAgICB9CisgICAgfTsKKyAgICBhc3NlcnRUcnVlKHR0LmdldFBlZXJzKCkuY29udGFpbnNLZXkobmV3IFBlZXJVSUQoYzFBZGRyZXNzLCB0dC5nZXRIZXhJbmZvSGFzaCgpKSkpOworICAgIGFzc2VydEZhbHNlKHR0LmdldFBlZXJzKCkuY29udGFpbnNLZXkobmV3IFBlZXJVSUQoYzJBZGRyZXNzLCB0dC5nZXRIZXhJbmZvSGFzaCgpKSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdHJhY2tlcl9yZW1vdmVzX3BlZXJfYWZ0ZXJfdGltZW91dCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24geworICAgIHRyYWNrZXIuc2V0QWNjZXB0Rm9yZWlnblRvcnJlbnRzKHRydWUpOworICAgIHRyYWNrZXIuc3RvcCgpOworICAgIHRyYWNrZXIuc3RhcnQodHJ1ZSk7CisgICAgZmluYWwgU2hhcmVkVG9ycmVudCB0b3JyZW50ID0gY29tcGxldGVUb3JyZW50KCJmaWxlMS5qYXIudG9ycmVudCIpOworICAgIHRyYWNrZXIuc2V0UGVlckNvbGxlY3RvckV4cGlyZVRpbWVvdXQoNSk7CisKKyAgICBpbnQgcGVlclBvcnQgPSA2ODg1OworICAgIFN0cmluZyBwZWVySG9zdCA9IEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpLmdldEhvc3RBZGRyZXNzKCk7CisgICAgZmluYWwgU3RyaW5nIGFubm91bmNlVXJsQzEgPSAiaHR0cDovL2xvY2FsaG9zdDo2OTY5L2Fubm91bmNlP2luZm9faGFzaD0lQjktOCUwNGx2JUQ3OUglRTFMQiVERiU5OSUyQyVBRiUyNUglOUQlMDgmcGVlcl9pZD0tVE8wMDQyLTk3ZWMzMDhjOTYzNyYiICsKKyAgICAgICAgICAgICJwb3J0PSIgKyBwZWVyUG9ydCArICImdXBsb2FkZWQ9MCZkb3dubG9hZGVkPTAmbGVmdD0wJmNvbXBhY3Q9MSZub19wZWVyX2lkPTAmaXA9IiArIHBlZXJIb3N0OworCisgICAgdHJ5IHsKKyAgICAgIGZpbmFsIFVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG5ldyBVUkwoYW5ub3VuY2VVcmxDMSkub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgIGNvbm5lY3Rpb24uZ2V0SW5wdXRTdHJlYW0oKS5jbG9zZSgpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICBmYWlsKCIiLCBlKTsKKyAgICB9CisKKyAgICBmaW5hbCBDb21tdW5pY2F0aW9uTWFuYWdlciBjMiA9IGNyZWF0ZUNvbW11bmljYXRpb25NYW5hZ2VyKCk7CisgICAgYzIuc2V0QW5ub3VuY2VJbnRlcnZhbCgxMjApOworICAgIGMyLnN0YXJ0KEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpKTsKKyAgICBGaWxlIHRvcnJlbnRGaWxlID0gbmV3IEZpbGUoVEVTVF9SRVNPVVJDRVMgKyAiL3RvcnJlbnRzIiwgImZpbGUxLmphci50b3JyZW50Iik7CisgICAgRmlsZSBwYXJlbnRGaWxlcyA9IG5ldyBGaWxlKFRFU1RfUkVTT1VSQ0VTICsgIi9wYXJlbnRGaWxlcyIpOworICAgIGMyLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIHBhcmVudEZpbGVzLmdldEFic29sdXRlUGF0aCgpKTsKKworICAgIGZpbmFsIFRyYWNrZWRUb3JyZW50IHR0ID0gdHJhY2tlci5nZXRUcmFja2VkVG9ycmVudCh0b3JyZW50LmdldEhleEluZm9IYXNoKCkpOworICAgIG5ldyBXYWl0Rm9yKDEwICogMTAwMCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBjb25kaXRpb24oKSB7CisKKyAgICAgICAgcmV0dXJuIHR0LmdldFBlZXJzKCkuc2l6ZSgpID09IDI7CisgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsIEluZXRTb2NrZXRBZGRyZXNzIGMxQWRkcmVzcyA9IG5ldyBJbmV0U29ja2V0QWRkcmVzcyhwZWVySG9zdCwgcGVlclBvcnQpOworICAgIGZpbmFsIEluZXRTb2NrZXRBZGRyZXNzIGMyQWRkcmVzcyA9IG5ldyBJbmV0U29ja2V0QWRkcmVzcyhJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSwgYzIuZ2V0Q29ubmVjdGlvbk1hbmFnZXIoKS5nZXRCaW5kUG9ydCgpKTsKKyAgICBhc3NlcnRUcnVlKHR0LmdldFBlZXJzKCkuY29udGFpbnNLZXkobmV3IFBlZXJVSUQoYzFBZGRyZXNzLCB0dC5nZXRIZXhJbmZvSGFzaCgpKSkpOworICAgIGFzc2VydFRydWUodHQuZ2V0UGVlcnMoKS5jb250YWluc0tleShuZXcgUGVlclVJRChjMkFkZHJlc3MsIHR0LmdldEhleEluZm9IYXNoKCkpKSk7CisKKyAgICBuZXcgV2FpdEZvcigzMCAqIDEwMDApIHsKKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBjb25kaXRpb24oKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgZmluYWwgVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbmV3IFVSTChhbm5vdW5jZVVybEMxKS5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICAgIGNvbm5lY3Rpb24uZ2V0SW5wdXRTdHJlYW0oKS5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHR0LmdldFBlZXJzKCkuc2l6ZSgpID09IDE7CisgICAgICB9CisgICAgfTsKKyAgICBhc3NlcnRFcXVhbHModHQuZ2V0UGVlcnMoKS5zaXplKCksIDEpOworICAgIGFzc2VydFRydWUodHQuZ2V0UGVlcnMoKS5jb250YWluc0tleShuZXcgUGVlclVJRChjMUFkZHJlc3MsIHR0LmdldEhleEluZm9IYXNoKCkpKSk7CisgICAgYXNzZXJ0RmFsc2UodHQuZ2V0UGVlcnMoKS5jb250YWluc0tleShuZXcgUGVlclVJRChjMkFkZHJlc3MsIHR0LmdldEhleEluZm9IYXNoKCkpKSk7CisgIH0KKworICAvLyAgQFRlc3QoaW52b2NhdGlvbkNvdW50ID0gNTApCisgIHB1YmxpYyB2b2lkIHRyYWNrZXJfYWNjZXB0c190b3JyZW50X2Zyb21fc2VlZGVyX3BsdXNfbGVlY2goKSB0aHJvd3MgSU9FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKyAgICB0aGlzLnRyYWNrZXIuc2V0QWNjZXB0Rm9yZWlnblRvcnJlbnRzKHRydWUpOworICAgIGFzc2VydEVxdWFscygwLCB0aGlzLnRyYWNrZXIuZ2V0VHJhY2tlZFRvcnJlbnRzKCkuc2l6ZSgpKTsKKworICAgIENvbW11bmljYXRpb25NYW5hZ2VyIHNlZWRlciA9IGNyZWF0ZUNvbW11bmljYXRpb25NYW5hZ2VyKCk7CisgICAgRmlsZSB0b3JyZW50RmlsZSA9IG5ldyBGaWxlKFRFU1RfUkVTT1VSQ0VTICsgIi90b3JyZW50cyIsICJmaWxlMS5qYXIudG9ycmVudCIpOworICAgIEZpbGUgcGFyZW50RmlsZXMgPSBuZXcgRmlsZShURVNUX1JFU09VUkNFUyArICIvcGFyZW50RmlsZXMiKTsKKyAgICBzZWVkZXIuYWRkVG9ycmVudCh0b3JyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgcGFyZW50RmlsZXMuZ2V0QWJzb2x1dGVQYXRoKCkpOworCisgICAgZmluYWwgRmlsZSBkb3dubG9hZERpciA9IHRlbXBGaWxlcy5jcmVhdGVUZW1wRGlyKCk7CisgICAgQ29tbXVuaWNhdGlvbk1hbmFnZXIgbGVlY2ggPSBjcmVhdGVDb21tdW5pY2F0aW9uTWFuYWdlcigpOworICAgIGxlZWNoLmFkZFRvcnJlbnQodG9ycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGRvd25sb2FkRGlyLmdldEFic29sdXRlUGF0aCgpKTsKKworICAgIHRyeSB7CisgICAgICBzZWVkZXIuc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworICAgICAgbGVlY2guc3RhcnQoSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkpOworCisgICAgICB3YWl0Rm9yRmlsZUluRGlyKGRvd25sb2FkRGlyLCAiZmlsZTEuamFyIik7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIHNlZWRlci5zdG9wKCk7CisgICAgICBsZWVjaC5zdG9wKCk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBUcmFja2VkVG9ycmVudCBsb2FkVG9ycmVudChTdHJpbmcgbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBUb3JyZW50TWV0YWRhdGEgdG9ycmVudE1ldGFkYXRhID0gbmV3IFRvcnJlbnRQYXJzZXIoKS5wYXJzZUZyb21GaWxlKG5ldyBGaWxlKFRFU1RfUkVTT1VSQ0VTICsgIi90b3JyZW50cyIsIG5hbWUpKTsKKyAgICByZXR1cm4gbmV3IFRyYWNrZWRUb3JyZW50KHRvcnJlbnRNZXRhZGF0YS5nZXRJbmZvSGFzaCgpKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBzdGFydFRyYWNrZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIGludCBwb3J0ID0gNjk2OTsKKyAgICB0aGlzLnRyYWNrZXIgPSBuZXcgVHJhY2tlcihwb3J0LCAiaHR0cDovLyIgKyBJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKS5nZXRIb3N0QWRkcmVzcygpICsgIjoiICsgcG9ydCArICIiICsgQU5OT1VOQ0VfVVJMKTsKKyAgICB0cmFja2VyLnNldEFubm91bmNlSW50ZXJ2YWwoNSk7CisgICAgdHJhY2tlci5zZXRQZWVyQ29sbGVjdG9yRXhwaXJlVGltZW91dCgxMCk7CisgICAgdGhpcy50cmFja2VyLnN0YXJ0KHRydWUpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHN0b3BUcmFja2VyKCkgeworICAgIHRoaXMudHJhY2tlci5zdG9wKCk7CisgIH0KKworICBAQWZ0ZXJNZXRob2QKKyAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmb3IgKENvbW11bmljYXRpb25NYW5hZ2VyIGNvbW11bmljYXRpb25NYW5hZ2VyIDogY29tbXVuaWNhdGlvbk1hbmFnZXJMaXN0KSB7CisgICAgICBjb21tdW5pY2F0aW9uTWFuYWdlci5zdG9wKCk7CisgICAgfQorICAgIHN0b3BUcmFja2VyKCk7CisgICAgdGVtcEZpbGVzLmNsZWFudXAoKTsKKyAgfQorCisgIHByaXZhdGUgQ29tbXVuaWNhdGlvbk1hbmFnZXIgY3JlYXRlQ29tbXVuaWNhdGlvbk1hbmFnZXIoKSB7CisgICAgZmluYWwgQ29tbXVuaWNhdGlvbk1hbmFnZXIgY29tbXVuaWNhdGlvbk1hbmFnZXIgPSBjb21tdW5pY2F0aW9uTWFuYWdlckZhY3RvcnkuZ2V0Q2xpZW50KCIiKTsKKyAgICBjb21tdW5pY2F0aW9uTWFuYWdlckxpc3QuYWRkKGNvbW11bmljYXRpb25NYW5hZ2VyKTsKKyAgICByZXR1cm4gY29tbXVuaWNhdGlvbk1hbmFnZXI7CisgIH0KKworICBwcml2YXRlIHZvaWQgd2FpdEZvckZpbGVJbkRpcihmaW5hbCBGaWxlIGRvd25sb2FkRGlyLCBmaW5hbCBTdHJpbmcgZmlsZU5hbWUpIHsKKyAgICBuZXcgV2FpdEZvcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gY29uZGl0aW9uKCkgeworICAgICAgICByZXR1cm4gbmV3IEZpbGUoZG93bmxvYWREaXIsIGZpbGVOYW1lKS5pc0ZpbGUoKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgYXNzZXJ0VHJ1ZShuZXcgRmlsZShkb3dubG9hZERpciwgZmlsZU5hbWUpLmlzRmlsZSgpKTsKKyAgfQorCisgIHByaXZhdGUgU2hhcmVkVG9ycmVudCBjb21wbGV0ZVRvcnJlbnQoU3RyaW5nIG5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgRmlsZSB0b3JyZW50RmlsZSA9IG5ldyBGaWxlKFRFU1RfUkVTT1VSQ0VTICsgIi90b3JyZW50cyIsIG5hbWUpOworICAgIEZpbGUgcGFyZW50RmlsZXMgPSBuZXcgRmlsZShURVNUX1JFU09VUkNFUyArICIvcGFyZW50RmlsZXMiKTsKKyAgICBUb3JyZW50TWV0YWRhdGEgdG9ycmVudE1ldGFkYXRhID0gbmV3IFRvcnJlbnRQYXJzZXIoKS5wYXJzZUZyb21GaWxlKHRvcnJlbnRGaWxlKTsKKyAgICByZXR1cm4gU2hhcmVkVG9ycmVudC5mcm9tRmlsZSh0b3JyZW50RmlsZSwKKyAgICAgICAgICAgIEZhaXJQaWVjZVN0b3JhZ2VGYWN0b3J5LklOU1RBTkNFLmNyZWF0ZVN0b3JhZ2UodG9ycmVudE1ldGFkYXRhLCBGaWxlQ29sbGVjdGlvblN0b3JhZ2UuY3JlYXRlKHRvcnJlbnRNZXRhZGF0YSwgcGFyZW50RmlsZXMpKSwKKyAgICAgICAgICAgIG5ldyBUb3JyZW50U3RhdGlzdGljKCkpOworICB9CisKKyAgcHJpdmF0ZSBTaGFyZWRUb3JyZW50IGluY29tcGxldGVUb3JyZW50KFN0cmluZyBuYW1lLCBGaWxlIGRlc3REaXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgRmlsZSB0b3JyZW50RmlsZSA9IG5ldyBGaWxlKFRFU1RfUkVTT1VSQ0VTICsgIi90b3JyZW50cyIsIG5hbWUpOworICAgIFRvcnJlbnRNZXRhZGF0YSB0b3JyZW50TWV0YWRhdGEgPSBuZXcgVG9ycmVudFBhcnNlcigpLnBhcnNlRnJvbUZpbGUodG9ycmVudEZpbGUpOworICAgIHJldHVybiBTaGFyZWRUb3JyZW50LmZyb21GaWxlKHRvcnJlbnRGaWxlLAorICAgICAgICAgICAgICBGYWlyUGllY2VTdG9yYWdlRmFjdG9yeS5JTlNUQU5DRS5jcmVhdGVTdG9yYWdlKHRvcnJlbnRNZXRhZGF0YSwgRmlsZUNvbGxlY3Rpb25TdG9yYWdlLmNyZWF0ZSh0b3JyZW50TWV0YWRhdGEsIGRlc3REaXIpKSwKKyAgICAgICAgICAgICAgbmV3IFRvcnJlbnRTdGF0aXN0aWMoKSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgd2FpdEZvclNlZWRlcihmaW5hbCBieXRlW10gdG9ycmVudEhhc2gpIHsKKyAgICBuZXcgV2FpdEZvcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gY29uZGl0aW9uKCkgeworICAgICAgICBmb3IgKFRyYWNrZWRUb3JyZW50IHR0IDogdHJhY2tlci5nZXRUcmFja2VkVG9ycmVudHMoKSkgeworICAgICAgICAgIGlmICh0dC5zZWVkZXJzKCkgPT0gMSAmJiB0dC5nZXRIZXhJbmZvSGFzaCgpLmVxdWFscyhUb3JyZW50VXRpbHMuYnl0ZUFycmF5VG9IZXhTdHJpbmcodG9ycmVudEhhc2gpKSkgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBhc3NlcnRGaWxlc0VxdWFsKEZpbGUgZjEsIEZpbGUgZjIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgYXNzZXJ0RXF1YWxzKGYxLmxlbmd0aCgpLCBmMi5sZW5ndGgoKSwgIkZpbGVzIHNpemVzIGRpZmZlciIpOworICAgIENoZWNrc3VtIGMxID0gRmlsZVV0aWxzLmNoZWNrc3VtKGYxLCBuZXcgQ1JDMzIoKSk7CisgICAgQ2hlY2tzdW0gYzIgPSBGaWxlVXRpbHMuY2hlY2tzdW0oZjIsIG5ldyBDUkMzMigpKTsKKyAgICBhc3NlcnRFcXVhbHMoYzEuZ2V0VmFsdWUoKSwgYzIuZ2V0VmFsdWUoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9qYXZhL2NvbS90dXJuL3R0b3JyZW50L3RyYWNrZXIvVHJhY2tlclV0aWxzLmphdmEgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvamF2YS9jb20vdHVybi90dG9ycmVudC90cmFja2VyL1RyYWNrZXJVdGlscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YTdlY2IKLS0tIC9kZXYvbnVsbAorKysgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvamF2YS9jb20vdHVybi90dG9ycmVudC90cmFja2VyL1RyYWNrZXJVdGlscy5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3BhY2thZ2UgY29tLnR1cm4udHRvcnJlbnQudHJhY2tlcjsKKworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LmNvbW1vbi5Ub3JyZW50TWV0YWRhdGE7CitpbXBvcnQgY29tLnR1cm4udHRvcnJlbnQuY29tbW9uLlRvcnJlbnRQYXJzZXI7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworcHVibGljIGNsYXNzIFRyYWNrZXJVdGlscyB7CisKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9SRVNPVVJDRVMgPSAic3JjL3Rlc3QvcmVzb3VyY2VzIjsKKworICBwdWJsaWMgc3RhdGljIFRyYWNrZWRUb3JyZW50IGxvYWRUb3JyZW50KFN0cmluZyBuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIFRvcnJlbnRNZXRhZGF0YSB0b3JyZW50TWV0YWRhdGEgPSBuZXcgVG9ycmVudFBhcnNlcigpLnBhcnNlRnJvbUZpbGUobmV3IEZpbGUoVEVTVF9SRVNPVVJDRVMgKyAiL3RvcnJlbnRzIiwgbmFtZSkpOworICAgIHJldHVybiBuZXcgVHJhY2tlZFRvcnJlbnQodG9ycmVudE1ldGFkYXRhLmdldEluZm9IYXNoKCkpOworICB9CisKK30KZGlmZiAtLWdpdCBhL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvcGFyZW50RmlsZXMvZmlsZTEuamFyIGIvdHRvcnJlbnQtbWFzdGVyL3Rlc3RzL3NyYy90ZXN0L3Jlc291cmNlcy9wYXJlbnRGaWxlcy9maWxlMS5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRkMjU3NwotLS0gL2Rldi9udWxsCisrKyBiL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvcGFyZW50RmlsZXMvZmlsZTEuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvcGFyZW50RmlsZXMvZmlsZTIuamFyIGIvdHRvcnJlbnQtbWFzdGVyL3Rlc3RzL3NyYy90ZXN0L3Jlc291cmNlcy9wYXJlbnRGaWxlcy9maWxlMi5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVkOGUyMQotLS0gL2Rldi9udWxsCisrKyBiL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvcGFyZW50RmlsZXMvZmlsZTIuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvcGFyZW50RmlsZXMvcGFyZW50RGlyL0FjY3VSZXZDb21tb24uamFyIGIvdHRvcnJlbnQtbWFzdGVyL3Rlc3RzL3NyYy90ZXN0L3Jlc291cmNlcy9wYXJlbnRGaWxlcy9wYXJlbnREaXIvQWNjdVJldkNvbW1vbi5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM1ZGIyNQotLS0gL2Rldi9udWxsCisrKyBiL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvcGFyZW50RmlsZXMvcGFyZW50RGlyL0FjY3VSZXZDb21tb24uamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvcGFyZW50RmlsZXMvcGFyZW50RGlyL2NvbW1vbnMtaW8tY2lvMi41XzMuamFyIGIvdHRvcnJlbnQtbWFzdGVyL3Rlc3RzL3NyYy90ZXN0L3Jlc291cmNlcy9wYXJlbnRGaWxlcy9wYXJlbnREaXIvY29tbW9ucy1pby1jaW8yLjVfMy5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg5NmVjMAotLS0gL2Rldi9udWxsCisrKyBiL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvcGFyZW50RmlsZXMvcGFyZW50RGlyL2NvbW1vbnMtaW8tY2lvMi41XzMuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvcGFyZW50RmlsZXMvcGFyZW50RGlyL2NvbW1vbnMtaW8tY2lvMi41XzMuamFyLmxpbmsgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvcmVzb3VyY2VzL3BhcmVudEZpbGVzL3BhcmVudERpci9jb21tb25zLWlvLWNpbzIuNV8zLmphci5saW5rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZjkyZmYKLS0tIC9kZXYvbnVsbAorKysgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvcmVzb3VyY2VzL3BhcmVudEZpbGVzL3BhcmVudERpci9jb21tb25zLWlvLWNpbzIuNV8zLmphci5saW5rCkBAIC0wLDAgKzEsMiBAQAorRTpcRGV2RGF0YVxUZWFtY2l0eUJ1aWxkc1w4LjFcVGVhbUNpdHktMjkxMTdcRGF0YVxzeXN0ZW1cYXJ0aWZhY3RzXENvbW1vbnNJb1xvbmVcN1xjb21tb25zLWlvLWNpbzIuNV8zLmphcgorRTpcRGV2RGF0YVxUZWFtY2l0eUJ1aWxkc1w4LjFcVGVhbUNpdHktMjkxMTdcRGF0YVxzeXN0ZW1cYXJ0aWZhY3RzXENvbW1vbnNJb1xvbmVcN1wudGVhbWNpdHlcdG9ycmVudHNcY29tbW9ucy1pby1jaW8yLjVfMy5qYXIudG9ycmVudApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvcGFyZW50RmlsZXMvcGFyZW50RGlyL2luRGlyL2FwcGxpY2F0aW9uLndhZGwgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvcmVzb3VyY2VzL3BhcmVudEZpbGVzL3BhcmVudERpci9pbkRpci9hcHBsaWNhdGlvbi53YWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NjU1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvcmVzb3VyY2VzL3BhcmVudEZpbGVzL3BhcmVudERpci9pbkRpci9hcHBsaWNhdGlvbi53YWRsCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PjxuczI6YXBwbGljYXRpb24geG1sbnM6bnMyPSJodHRwOi8vd2FkbC5kZXYuamF2YS5uZXQvMjAwOS8wMiI+PG5zMjpkb2MgeG1sbnM6amVyc2V5PSJodHRwOi8vamVyc2V5LmphdmEubmV0LyIgamVyc2V5OmdlbmVyYXRlZEJ5PSJKZXJzZXk6IDEuMTYgMTEvMjgvMjAxMiAwMjowOSBQTSIvPjxuczI6ZG9jIHRpdGxlPSJUZWFtQ2l0eSBSRVNUIEFQSSIgeG1sOmxhbmc9ImVuIj4KKyAgICBTZWUgYWxzbyBodHRwOi8vY29uZmx1ZW5jZS5qZXRicmFpbnMubmV0L2Rpc3BsYXkvVFcvUkVTVCtBUEkrUGx1Z2luCisgIDwvbnMyOmRvYz48bnMyOmdyYW1tYXJzPjxuczI6aW5jbHVkZSBocmVmPSJhcHBsaWNhdGlvbi53YWRsL3hzZDEueHNkIj48bnMyOmRvYyB0aXRsZT0iR2VuZXJhdGVkIiB4bWw6bGFuZz0iZW4iLz48L25zMjppbmNsdWRlPjxuczI6aW5jbHVkZSBocmVmPSJhcHBsaWNhdGlvbi53YWRsL3hzZDAueHNkIj48bnMyOmRvYyB0aXRsZT0iR2VuZXJhdGVkIiB4bWw6bGFuZz0iZW4iLz48L25zMjppbmNsdWRlPjwvbnMyOmdyYW1tYXJzPjxuczI6cmVzb3VyY2VzIGJhc2U9Imh0dHA6Ly9idWlsZHNlcnZlci5sYWJzLmludGVsbGlqLm5ldC8iPjxuczI6cmVzb3VyY2UgcGF0aD0iL2FwcC9yZXN0L3Byb2plY3RzIj48bnMyOm1ldGhvZCBpZD0ic2VydmVQcm9qZWN0cyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvamVjdHMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9qZWN0cyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJjcmVhdGVQcm9qZWN0IiBuYW1lPSJQT1NUIj48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJuZXdQcm9qZWN0RGVzY3JpcHRpb24iIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJuZXdQcm9qZWN0RGVzY3JpcHRpb24iIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb2plY3QiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9qZWN0IiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9ImNyZWF0ZUVtcHR5UHJvamVjdCIgbmFtZT0iUE9TVCI+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvamVjdCIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb2plY3QiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOnJlc291cmNlIHBhdGg9Ii97cHJvamVjdExvY2F0b3J9L3RlbXBsYXRlcyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InByb2plY3RMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJjcmVhdGVCdWlsZFR5cGVUZW1wbGF0ZSIgbmFtZT0iUE9TVCI+PG5zMjpkb2M+Q3JlYXRlcyBhIG5ldyBidWlsZCBjb25maWd1cmF0aW9uIHRlbXBsYXRlIGJ5IGNvcHlpbmcgZXhpc3Rpbmcgb25lLjwvbnMyOmRvYz48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJuZXdCdWlsZFR5cGVEZXNjcmlwdGlvbiIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9Im5ld0J1aWxkVHlwZURlc2NyaXB0aW9uIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZFR5cGUiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZFR5cGUiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0ic2VydmVUZW1wbGF0ZXNJblByb2plY3QiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImJ1aWxkVHlwZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZFR5cGVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9ImNyZWF0ZUVtcHR5QnVpbGRUeXBlVGVtcGxhdGUiIG5hbWU9IlBPU1QiPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImJ1aWxkVHlwZSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImJ1aWxkVHlwZSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3twcm9qZWN0TG9jYXRvcn0vcGFyYW1ldGVycy97bmFtZX0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJwcm9qZWN0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0icHV0UGFyYW1ldGVyIiBuYW1lPSJQVVQiPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0ic2VydmVQYXJhbWV0ZXIiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0iZGVsZXRlUGFyYW1ldGVyIiBuYW1lPSJERUxFVEUiLz48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97cHJvamVjdExvY2F0b3J9Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0icHJvamVjdExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlUHJvamVjdCIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvamVjdCIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb2plY3QiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0iZGVsZXRlUHJvamVjdCIgbmFtZT0iREVMRVRFIi8+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve3Byb2plY3RMb2NhdG9yfS9wYXJlbnRQcm9qZWN0Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0icHJvamVjdExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImdldFBhcmVudFByb2plY3QiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb2plY3QtcmVmIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvamVjdC1yZWYiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0ic2V0UGFyZW50UHJvamVjdCIgbmFtZT0iUFVUIj48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9qZWN0LXJlZiIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb2plY3QtcmVmIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9qZWN0LXJlZiIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb2plY3QtcmVmIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve3Byb2plY3RMb2NhdG9yfS9idWlsZFR5cGVzIj48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0icHJvamVjdExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImNyZWF0ZUJ1aWxkVHlwZSIgbmFtZT0iUE9TVCI+PG5zMjpkb2M+Q3JlYXRlcyBhIG5ldyBidWlsZCBjb25maWd1cmF0aW9uIGJ5IGNvcHlpbmcgZXhpc3Rpbmcgb25lLjwvbnMyOmRvYz48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJuZXdCdWlsZFR5cGVEZXNjcmlwdGlvbiIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9Im5ld0J1aWxkVHlwZURlc2NyaXB0aW9uIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZFR5cGUiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZFR5cGUiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0iY3JlYXRlRW1wdHlCdWlsZFR5cGUiIG5hbWU9IlBPU1QiPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImJ1aWxkVHlwZSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImJ1aWxkVHlwZSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZUJ1aWxkVHlwZXNJblByb2plY3QiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImJ1aWxkVHlwZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZFR5cGVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve3Byb2plY3RMb2NhdG9yfS9idWlsZFR5cGVzL3tidExvY2F0b3J9Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0icHJvamVjdExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0ic2VydmVCdWlsZFR5cGUiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImJ1aWxkVHlwZSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImJ1aWxkVHlwZSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3twcm9qZWN0TG9jYXRvcn0ve2ZpZWxkfSI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImZpZWxkIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJwcm9qZWN0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0ic2V0UHJvamVjdEZpbGVkIiBuYW1lPSJQVVQiPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0ic2VydmVQcm9qZWN0RmllbGQiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97cHJvamVjdExvY2F0b3J9L3RlbXBsYXRlcy97YnRMb2NhdG9yfSI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InByb2plY3RMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlQnVpbGRUeXBlVGVtcGxhdGVzIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZFR5cGUiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZFR5cGUiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97cHJvamVjdExvY2F0b3J9L3BhcmFtZXRlcnMiPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJwcm9qZWN0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0ic2VydmVQYXJhbWV0ZXJzIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvcGVydGllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJjaGFuZ2VBbGxQYXJhbWV0ZXJzIiBuYW1lPSJQVVQiPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb3BlcnRpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvcGVydGllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJkZWxldGVBbGxQYXJhbWV0ZXJzIiBuYW1lPSJERUxFVEUiLz48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97cHJvamVjdExvY2F0b3J9L2J1aWxkVHlwZXMve2J0TG9jYXRvcn0vYnVpbGRzL3tidWlsZExvY2F0b3J9L3tmaWVsZH0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJmaWVsZCIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0icHJvamVjdExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnVpbGRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZUJ1aWxkRmllbGRXaXRoUHJvamVjdCIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3twcm9qZWN0TG9jYXRvcn0vYnVpbGRUeXBlcy97YnRMb2NhdG9yfS9idWlsZHMve2J1aWxkTG9jYXRvcn0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJwcm9qZWN0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidWlsZExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlQnVpbGRXaXRoUHJvamVjdCIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iYnVpbGQiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZCIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3twcm9qZWN0TG9jYXRvcn0vbmV3UHJvamVjdERlc2NyaXB0aW9uIj48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0icHJvamVjdExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImdldEV4YW1wbGVOZXdQcm9qZWN0RGVzY3JpcHRpb24iIG5hbWU9IkdFVCI+PG5zMjpkb2M+RXhwZXJpbWVudGFsIHN1cHBvcnQgb25seS4KKyBVc2UgdGhpcyB0byBnZXQgYW4gZXhhbXBsZSBvZiB0aGUgYmVhbiB0byBiZSBwb3N0ZWQgdG8gdGhlIC9wcm9qZWN0cyByZXF1ZXN0IHRvIGNyZWF0ZSBhIG5ldyBwcm9qZWN0PC9uczI6ZG9jPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJuZXdQcm9qZWN0RGVzY3JpcHRpb24iIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJuZXdQcm9qZWN0RGVzY3JpcHRpb24iIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97cHJvamVjdExvY2F0b3J9L2J1aWxkVHlwZXMve2J0TG9jYXRvcn0ve2ZpZWxkfSI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImZpZWxkIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJwcm9qZWN0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZUJ1aWxkVHlwZUZpZWxkV2l0aFByb2plY3QiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97cHJvamVjdExvY2F0b3J9L2J1aWxkVHlwZXMve2J0TG9jYXRvcn0vYnVpbGRzIj48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0icHJvamVjdExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0ic2VydmVCdWlsZHMiIG5hbWU9IkdFVCI+PG5zMjpkb2M+U2VydmVzIGJ1aWxkcyBtYXRjaGluZyBzdXBwbGllZCBjb25kaXRpb24uPC9uczI6ZG9jPjxuczI6cmVxdWVzdD48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ic3RhdHVzIiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJ0cmlnZ2VyZWRCeVVzZXIiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImluY2x1ZGVQZXJzb25hbCIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpib29sZWFuIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImluY2x1ZGVDYW5jZWxlZCIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpib29sZWFuIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im9ubHlQaW5uZWQiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6Ym9vbGVhbiIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJ0YWciIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImFnZW50TmFtZSIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ic2luY2VCdWlsZCIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ic2luY2VEYXRlIiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJzdGFydCIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpsb25nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImNvdW50IiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOmludCIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJsb2NhdG9yIiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOnN0cmluZyIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImJ1aWxkcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImJ1aWxkcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL2FwcC9yZXN0L3Zjcy1yb290LWluc3RhbmNlcyI+PG5zMjptZXRob2QgaWQ9InNlcnZlSW5zdGFuY2VzIiBuYW1lPSJHRVQiPjxuczI6cmVxdWVzdD48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibG9jYXRvciIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpzdHJpbmciLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3Mtcm9vdC1pbnN0YW5jZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3Mtcm9vdC1pbnN0YW5jZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOnJlc291cmNlIHBhdGg9Ii97dmNzUm9vdEluc3RhbmNlTG9jYXRvcn0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJ2Y3NSb290SW5zdGFuY2VMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZUluc3RhbmNlIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3Mtcm9vdC1pbnN0YW5jZSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InZjcy1yb290LWluc3RhbmNlIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve3Zjc1Jvb3RJbnN0YW5jZUxvY2F0b3J9L3Byb3BlcnRpZXMiPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJ2Y3NSb290SW5zdGFuY2VMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZVJvb3RJbnN0YW5jZVByb3BlcnRpZXMiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb3BlcnRpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve3Zjc1Jvb3RJbnN0YW5jZUxvY2F0b3J9L3tmaWVsZH0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJmaWVsZCIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0idmNzUm9vdEluc3RhbmNlTG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0ic2VydmVJbnN0YW5jZUZpZWxkIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9InRleHQvcGxhaW4iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9InNldEluc3RhbmNlRmllbGQiIG5hbWU9IlBVVCI+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL2FwcC9yZXN0L3VzZXJzIj48bnMyOm1ldGhvZCBpZD0iY3JlYXRlVXNlciIgbmFtZT0iUE9TVCI+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idXNlciIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InVzZXIiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InVzZXIiIG1lZGlhVHlwZT0iKi8qIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZVVzZXJzIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ1c2VycyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InVzZXJzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjpyZXNvdXJjZSBwYXRoPSIve3VzZXJMb2NhdG9yfS9yb2xlcyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InVzZXJMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJhZGRSb2xlIiBuYW1lPSJQT1NUIj48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJyb2xlIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icm9sZSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icm9sZSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InJvbGUiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0icmVwbGFjZVJvbGVzIiBuYW1lPSJQVVQiPjxuczI6ZG9jPlJlcGxhY2VzIHVzZXIncyByb2xlcyB3aXRoIHRoZSBzdWJtaXR0ZWQgb25lczwvbnMyOmRvYz48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJyb2xlcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InJvbGVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJyb2xlcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InJvbGVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9Imxpc3RSb2xlcyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icm9sZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJyb2xlcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3t1c2VyTG9jYXRvcn0vcm9sZXMve3JvbGVJZH0ve3Njb3BlfSI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InVzZXJMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJzY29wZSIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0icm9sZUlkIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJhZGRSb2xlU2ltcGxlIiBuYW1lPSJQVVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJyb2xlIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icm9sZSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJkZWxldGVSb2xlIiBuYW1lPSJERUxFVEUiLz48bnMyOm1ldGhvZCBpZD0ibGlzdFJvbGUiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InJvbGUiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJyb2xlIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9ImFkZFJvbGVTaW1wbGVQb3N0IiBuYW1lPSJQT1NUIi8+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve3VzZXJMb2NhdG9yfSI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InVzZXJMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZVVzZXIiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InVzZXIiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ1c2VyIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9InVwZGF0ZVVzZXIiIG5hbWU9IlBVVCI+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idXNlciIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InVzZXIiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InVzZXIiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ1c2VyIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve3VzZXJMb2NhdG9yfS97ZmllbGR9Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iZmllbGQiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InVzZXJMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXRVc2VyRmllbGQiIG5hbWU9IlBVVCI+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZVVzZXJGaWVsZCIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3t1c2VyTG9jYXRvcn0vcHJvcGVydGllcyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InVzZXJMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZVVzZXJQcm9wZXJ0aWVzIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvcGVydGllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3t1c2VyTG9jYXRvcn0vcHJvcGVydGllcy97bmFtZX0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJ1c2VyTG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0ic2VydmVVc2VyUHJvcGVydGllcyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJwdXRVc2VyUHJvcGVydHkiIG5hbWU9IlBVVCI+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJyZW1vdmVVc2VyUHJvcGVydHkiIG5hbWU9IkRFTEVURSIvPjwvbnMyOnJlc291cmNlPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL2FwcC9yZXN0L2NoYW5nZXMiPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZUNoYW5nZXMiIG5hbWU9IkdFVCI+PG5zMjpkb2M+TGlzdHMgY2hhbmdlcyBieSB0aGUgc3BlY2lmaWVkIGxvY2F0b3I8L25zMjpkb2M+PG5zMjpyZXF1ZXN0PjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJwcm9qZWN0IiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOnN0cmluZyI+PG5zMjpkb2M+Q2hhbmdlIGxvY2F0b3I8L25zMjpkb2M+PC9uczI6cGFyYW0+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ1aWxkVHlwZSIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpzdHJpbmciPjxuczI6ZG9jPkRlcHJlY2F0ZWQsIHVzZSAmcXVvdDtsb2NhdG9yJnF1b3Q7IHBhcmFtZXRlciBpbnN0ZWFkPC9uczI6ZG9jPjwvbnMyOnBhcmFtPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidWlsZCIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpzdHJpbmciPjxuczI6ZG9jPkRlcHJlY2F0ZWQsIHVzZSAmcXVvdDtsb2NhdG9yJnF1b3Q7IHBhcmFtZXRlciBpbnN0ZWFkPC9uczI6ZG9jPjwvbnMyOnBhcmFtPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJ2Y3NSb290IiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOnN0cmluZyI+PG5zMjpkb2M+RGVwcmVjYXRlZCwgdXNlICZxdW90O2xvY2F0b3ImcXVvdDsgcGFyYW1ldGVyIGluc3RlYWQ8L25zMjpkb2M+PC9uczI6cGFyYW0+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InNpbmNlQ2hhbmdlIiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOnN0cmluZyI+PG5zMjpkb2M+RGVwcmVjYXRlZCwgdXNlICZxdW90O2xvY2F0b3ImcXVvdDsgcGFyYW1ldGVyIGluc3RlYWQuIE5vdGUgdGhhdCBjb3JyZXNwb25kaW5nIGxvY2F0b3IgZGltZW5zaW9uIGlzICZxdW90O3Zjc1Jvb3RJbnN0YW5jZSZxdW90OzwvbnMyOmRvYz48L25zMjpwYXJhbT48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ic3RhcnQiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6bG9uZyI+PG5zMjpkb2M+RGVwcmVjYXRlZCwgdXNlICZxdW90O2xvY2F0b3ImcXVvdDsgcGFyYW1ldGVyIGluc3RlYWQ8L25zMjpkb2M+PC9uczI6cGFyYW0+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImNvdW50IiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOmludCI+PG5zMjpkb2M+RGVwcmVjYXRlZCwgdXNlICZxdW90O2xvY2F0b3ImcXVvdDsgcGFyYW1ldGVyIGluc3RlYWQ8L25zMjpkb2M+PC9uczI6cGFyYW0+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImxvY2F0b3IiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6c3RyaW5nIj48bnMyOmRvYz5EZXByZWNhdGVkLCB1c2UgJnF1b3Q7bG9jYXRvciZxdW90OyBwYXJhbWV0ZXIgaW5zdGVhZDwvbnMyOmRvYz48L25zMjpwYXJhbT48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJjaGFuZ2VzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iY2hhbmdlcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tjaGFuZ2VMb2NhdG9yfS97ZmllbGR9Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iZmllbGQiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImNoYW5nZUxvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImdldENoYW5nZUZpZWxkIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9InRleHQvcGxhaW4iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2NoYW5nZUxvY2F0b3J9L3BhcmVudC1jaGFuZ2VzIj48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iY2hhbmdlTG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0iZ2V0UGFyZW50Q2hhbmdlcyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iY2hhbmdlcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImNoYW5nZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97Y2hhbmdlTG9jYXRvcn0vcGFyZW50LXJldmlzaW9ucyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImNoYW5nZUxvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImdldENoYW5nZVBhcmVudFJldmlzaW9ucyIgbmFtZT0iR0VUIj48bnMyOmRvYz5FeHBlcmltZW50YWwgc3VwcG9ydCBvbmx5ITwvbnMyOmRvYz48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iaXRlbXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJpdGVtcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tjaGFuZ2VMb2NhdG9yfS92Y3Mtcm9vdCI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImNoYW5nZUxvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImdldENoYW5nZVZDU1Jvb3QiIG5hbWU9IkdFVCI+PG5zMjpkb2M+RXhwZXJpbWVudGFsIHN1cHBvcnQgb25seSE8L25zMjpkb2M+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InZjcy1yb290LWluc3RhbmNlLXJlZiIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InZjcy1yb290LWluc3RhbmNlLXJlZiIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tjaGFuZ2VMb2NhdG9yfS9hdHRyaWJ1dGVzIj48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iY2hhbmdlTG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0iZ2V0Q2hhbmdlQXR0cmlidXRlcyIgbmFtZT0iR0VUIj48bnMyOmRvYz5FeHBlcmltZW50YWwgc3VwcG9ydCBvbmx5ITwvbnMyOmRvYz48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvcGVydGllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb3BlcnRpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97Y2hhbmdlTG9jYXRvcn0vZHVwbGljYXRlcyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImNoYW5nZUxvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImdldENoYW5nZUR1cGxpY2F0ZXMiIG5hbWU9IkdFVCI+PG5zMjpkb2M+RXhwZXJpbWVudGFsIHN1cHBvcnQgb25seSE8L25zMjpkb2M+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImNoYW5nZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJjaGFuZ2VzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2NoYW5nZUxvY2F0b3J9L2lzc3VlcyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImNoYW5nZUxvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImdldENoYW5nZUlzc3VlIiBuYW1lPSJHRVQiPjxuczI6ZG9jPkV4cGVyaW1lbnRhbCBzdXBwb3J0IG9ubHkhPC9uczI6ZG9jPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJpc3N1ZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJpc3N1ZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97Y2hhbmdlTG9jYXRvcn0vYnVpbGRUeXBlcyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImNoYW5nZUxvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImdldFJlbGF0ZWRCdWlsZFR5cGVzIiBuYW1lPSJHRVQiPjxuczI6ZG9jPkV4cGVyaW1lbnRhbCBzdXBwb3J0IG9ubHkhPC9uczI6ZG9jPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZFR5cGVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iYnVpbGRUeXBlcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tjaGFuZ2VMb2NhdG9yfS9maXJzdEJ1aWxkcyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImNoYW5nZUxvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImdldENoYW5nZUZpcnN0QnVpbGRzIiBuYW1lPSJHRVQiPjxuczI6ZG9jPkV4cGVyaW1lbnRhbCBzdXBwb3J0IG9ubHkhPC9uczI6ZG9jPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZHMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZHMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97Y2hhbmdlTG9jYXRvcn0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJjaGFuZ2VMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZUNoYW5nZSIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iY2hhbmdlIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iY2hhbmdlIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIvYXBwL3Jlc3Qvc2VydmVyIj48bnMyOm1ldGhvZCBpZD0ic2VydmVTZXJ2ZXJJbmZvIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJzZXJ2ZXIiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJzZXJ2ZXIiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOnJlc291cmNlIHBhdGg9Ii9iYWNrdXAiPjxuczI6bWV0aG9kIGlkPSJzdGFydEJhY2t1cCIgbmFtZT0iUE9TVCI+PG5zMjpyZXF1ZXN0PjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJmaWxlTmFtZSIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYWRkVGltZXN0YW1wIiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOmJvb2xlYW4iLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iaW5jbHVkZUNvbmZpZ3MiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6Ym9vbGVhbiIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJpbmNsdWRlRGF0YWJhc2UiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6Ym9vbGVhbiIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJpbmNsdWRlQnVpbGRMb2dzIiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOmJvb2xlYW4iLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iaW5jbHVkZVBlcnNvbmFsQ2hhbmdlcyIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpib29sZWFuIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJnZXRCYWNrdXBTdGF0dXMiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii9wbHVnaW5zIj48bnMyOm1ldGhvZCBpZD0ic2VydmVQbHVnaW5zIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwbHVnaW5zIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icGx1Z2lucyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tmaWVsZH0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJmaWVsZCIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0ic2VydmVTZXJ2ZXJWZXJzaW9uIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9InRleHQvcGxhaW4iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIvYXBwL3Jlc3QvYnVpbGRUeXBlcyI+PG5zMjptZXRob2QgaWQ9InNlcnZlQnVpbGRUeXBlc1hNTCIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iYnVpbGRUeXBlcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImJ1aWxkVHlwZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOnJlc291cmNlIHBhdGg9Ii97YnRMb2NhdG9yfS9mZWF0dXJlcy97ZmVhdHVyZUlkfSI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iZmVhdHVyZUlkIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJnZXRGZWF0dXJlIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJmZWF0dXJlIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iZmVhdHVyZSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJkZWxldGVGZWF0dXJlIiBuYW1lPSJERUxFVEUiLz48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnRMb2NhdG9yfS9hcnRpZmFjdC1kZXBlbmRlbmNpZXMve2FydGlmYWN0RGVwTG9jYXRvcn0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImFydGlmYWN0RGVwTG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0iZ2V0QXJ0aWZhY3REZXAiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImFydGlmYWN0LWRlcGVuZGVuY3kiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJhcnRpZmFjdC1kZXBlbmRlbmN5IiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9ImRlbGV0ZUFydGlmYWN0RGVwIiBuYW1lPSJERUxFVEUiLz48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnRMb2NhdG9yfS9hZ2VudC1yZXF1aXJlbWVudHMve2FnZW50UmVxdWlyZW1lbnRMb2NhdG9yfSI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYWdlbnRSZXF1aXJlbWVudExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImdldEFnZW50UmVxdWlyZW1lbnQiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImFnZW50LXJlcXVpcmVtZW50IiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iYWdlbnQtcmVxdWlyZW1lbnQiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0iZGVsZXRlQWdlbnRSZXF1aXJlbWVudCIgbmFtZT0iREVMRVRFIi8+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J0TG9jYXRvcn0vc3RlcHMiPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImFkZFN0ZXAiIG5hbWU9IlBPU1QiPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InN0ZXAiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJzdGVwIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJzdGVwIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0ic3RlcCIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJyZXBsYWNlU3RlcHMiIG5hbWU9IlBVVCI+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0ic3RlcHMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJzdGVwcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0ic3RlcHMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJzdGVwcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJnZXRTdGVwcyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0ic3RlcHMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJzdGVwcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidExvY2F0b3J9L2ZlYXR1cmVzIj48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJnZXRGZWF0dXJlcyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iZmVhdHVyZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJmZWF0dXJlcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJhZGRGZWF0dXJlIiBuYW1lPSJQT1NUIj48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJmZWF0dXJlIiBtZWRpYVR5cGU9IiovKiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImZlYXR1cmUiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJmZWF0dXJlIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9InJlcGxhY2VGZWF0dXJlcyIgbmFtZT0iUFVUIj48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJmZWF0dXJlcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImZlYXR1cmVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJmZWF0dXJlcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImZlYXR1cmVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J0TG9jYXRvcn0vaW52ZXN0aWdhdGlvbnMiPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImdldEludmVzdGlnYXRpb25zIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJpbnZlc3RpZ2F0aW9ucyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImludmVzdGlnYXRpb25zIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J0TG9jYXRvcn0vdmNzLXJvb3QtZW50cmllcyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0iZ2V0VmNzUm9vdEVudHJpZXMiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InZjcy1yb290LWVudHJpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3Mtcm9vdC1lbnRyaWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9InJlcGxhY2VWY3NSb290RW50cmllcyIgbmFtZT0iUFVUIj48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3Mtcm9vdC1lbnRyaWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idmNzLXJvb3QtZW50cmllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idmNzLXJvb3QtZW50cmllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InZjcy1yb290LWVudHJpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0iYWRkVmNzUm9vdEVudHJ5IiBuYW1lPSJQT1NUIj48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3Mtcm9vdC1lbnRyeSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InZjcy1yb290LWVudHJ5IiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3Mtcm9vdC1lbnRyeSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InZjcy1yb290LWVudHJ5IiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J0TG9jYXRvcn0vdmNzLXJvb3QtZW50cmllcy97aWR9Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iaWQiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0iZ2V0VmNzUm9vdEVudHJ5IiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3Mtcm9vdC1lbnRyeSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InZjcy1yb290LWVudHJ5IiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9ImRlbGV0ZVZjc1Jvb3RFbnRyeSIgbmFtZT0iREVMRVRFIi8+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J0TG9jYXRvcn0vc25hcHNob3QtZGVwZW5kZW5jaWVzIj48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJyZXBsYWNlU25hcHNob3REZXBzIiBuYW1lPSJQVVQiPjxuczI6ZG9jPlJlcGxhY2VzIHNuYXBzaG90IGRlcGVuZGVuY3kgd2l0aCB0aG9zZSBzZW50IGluIHJlcXVlc3QuPC9uczI6ZG9jPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InNuYXBzaG90LWRlcGVuZGVuY2llcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InNuYXBzaG90LWRlcGVuZGVuY2llcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0ic25hcHNob3QtZGVwZW5kZW5jaWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0ic25hcHNob3QtZGVwZW5kZW5jaWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9ImFkZFNuYXBzaG90RGVwIiBuYW1lPSJQT1NUIj48bnMyOmRvYz5DcmVhdGVzIG5ldyBzbmFwc2hvdCBkZXBlbmRlbmN5LiAnaWQnIGF0dHJpYnV0ZSBpcyBpZ25vcmVkIGluIHRoZSBzdWJtaXR0ZWQgZGVzY3JpcHRvci4KKyBSZXBvcnRzIGVycm9yIGlmIG5ldyBkZXBlbmRlbmN5IGNhbm5vdCBiZSBjcmVhdGVkIChlLmcuIGFub3RoZXIgZGVwZW5kZW5jeSBvbiB0aGUgc3BlY2lmaWVkIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYWxyZWFkeSBleGlzdHMpLjwvbnMyOmRvYz48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJzbmFwc2hvdC1kZXBlbmRlbmN5IiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0ic25hcHNob3QtZGVwZW5kZW5jeSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0ic25hcHNob3QtZGVwZW5kZW5jeSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InNuYXBzaG90LWRlcGVuZGVuY3kiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0iZ2V0U25hcHNob3REZXBzIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJzbmFwc2hvdC1kZXBlbmRlbmNpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJzbmFwc2hvdC1kZXBlbmRlbmNpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnRMb2NhdG9yfS9zbmFwc2hvdC1kZXBlbmRlbmNpZXMve3NuYXBzaG90RGVwTG9jYXRvcn0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InNuYXBzaG90RGVwTG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0iZGVsZXRlU25hcHNob3REZXAiIG5hbWU9IkRFTEVURSIvPjxuczI6bWV0aG9kIGlkPSJnZXRTbmFwc2hvdERlcCIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0ic25hcHNob3QtZGVwZW5kZW5jeSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InNuYXBzaG90LWRlcGVuZGVuY3kiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnRMb2NhdG9yfS90cmlnZ2VycyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0icmVwbGFjZVRyaWdnZXJzIiBuYW1lPSJQVVQiPjxuczI6ZG9jPlJlcGxhY2VzIHRyaWdnZXIgd2l0aCB0aG9zZSBzZW50IGludGhlIHJlcXVlc3QuPC9uczI6ZG9jPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InRyaWdnZXJzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idHJpZ2dlcnMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InRyaWdnZXJzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idHJpZ2dlcnMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0iYWRkVHJpZ2dlciIgbmFtZT0iUE9TVCI+PG5zMjpkb2M+Q3JlYXRlcyBuZXcgdHJpZ2dlci4gJ2lkJyBhdHRyaWJ1dGUgaXMgaWdub3JlZCBpbiB0aGUgc3VibWl0dGVkIGRlc2NyaXB0b3IuCisgUmVwb3J0cyBlcnJvciBpZiBuZXcgdHJpZ2dlciBjYW5ub3QgYmUgY3JlYXRlZCAoZS5nLiBvbmx5IHNpbmdsZSB0cmlnZ2VyIG9mIHRoZSB0eXBlIGlzIGFsbG93ZWQgZm9yIGEgYnVpbGQgY29uZmlndXJhdGlvbikuPC9uczI6ZG9jPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InRyaWdnZXIiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ0cmlnZ2VyIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ0cmlnZ2VyIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idHJpZ2dlciIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJnZXRUcmlnZ2VycyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idHJpZ2dlcnMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ0cmlnZ2VycyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidExvY2F0b3J9L3RyaWdnZXJzL3t0cmlnZ2VyTG9jYXRvcn0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InRyaWdnZXJMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJkZWxldGVUcmlnZ2VyIiBuYW1lPSJERUxFVEUiLz48bnMyOm1ldGhvZCBpZD0iZ2V0VHJpZ2dlciIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idHJpZ2dlciIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InRyaWdnZXIiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnRMb2NhdG9yfS90cmlnZ2Vycy97dHJpZ2dlckxvY2F0b3J9L3tmaWVsZE5hbWV9Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJ0cmlnZ2VyTG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iZmllbGROYW1lIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJnZXRUcmlnZ2VyU2V0dGluZyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJjaGFuZ2VUcmlnZ2VyU2V0dGluZyIgbmFtZT0iUFVUIj48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9InRleHQvcGxhaW4iLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9InRleHQvcGxhaW4iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J0TG9jYXRvcn0vYWdlbnQtcmVxdWlyZW1lbnRzIj48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJyZXBsYWNlQWdlbnRSZXF1aXJlbWVudHMiIG5hbWU9IlBVVCI+PG5zMjpkb2M+UmVwbGFjZXMgYWdlbnQgcmVxdWlyZW1lbnRzIHdpdGggdGhvc2Ugc2VudCBpbiB0aGUgcmVxdWVzdC48L25zMjpkb2M+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iYWdlbnQtcmVxdWlyZW1lbnRzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iYWdlbnQtcmVxdWlyZW1lbnRzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJhZ2VudC1yZXF1aXJlbWVudHMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJhZ2VudC1yZXF1aXJlbWVudHMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0iYWRkQWdlbnRSZXF1aXJlbWVudCIgbmFtZT0iUE9TVCI+PG5zMjpkb2M+Q3JlYXRlcyBuZXcgYWdlbnQgcmVxdWlyZW1lbnQuICdpZCcgYXR0cmlidXRlIGlzIGlnbm9yZWQgaW4gdGhlIHN1Ym1pdHRlZCBkZXNjcmlwdG9yLgorIFJlcG9ydHMgZXJyb3IgaWYgbmV3IHJlcXVpcmVtZW50IGNhbm5vdCBiZSBjcmVhdGVkIChlLmcuIGFub3RoZXIgcmVxdWlyZW1lbnQgaXMgcHJlc2VudCBmb3IgdGhlIHBhcmFtZXRlcikuPC9uczI6ZG9jPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImFnZW50LXJlcXVpcmVtZW50IiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iYWdlbnQtcmVxdWlyZW1lbnQiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImFnZW50LXJlcXVpcmVtZW50IiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iYWdlbnQtcmVxdWlyZW1lbnQiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0iZ2V0QWdlbnRSZXF1aXJlbWVudHMiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImFnZW50LXJlcXVpcmVtZW50cyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImFnZW50LXJlcXVpcmVtZW50cyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidExvY2F0b3J9L3Zjcy1yb290LWluc3RhbmNlcyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0iZ2V0Q3VycmVudFZjc0luc3RhbmNlcyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idmNzLXJvb3QtaW5zdGFuY2VzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idmNzLXJvb3QtaW5zdGFuY2VzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J0TG9jYXRvcn0vYnVpbGRzL3tidWlsZExvY2F0b3J9Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidWlsZExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlQnVpbGRXaXRoUHJvamVjdCIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iYnVpbGQiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZCIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidExvY2F0b3J9L2J1aWxkcy97YnVpbGRMb2NhdG9yfS97ZmllbGR9Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iZmllbGQiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnVpbGRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZUJ1aWxkRmllbGQiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnRMb2NhdG9yfS9icmFuY2hlcyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0ic2VydmVCcmFuY2hlcyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iYnJhbmNoZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJicmFuY2hlcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidExvY2F0b3J9L3Zjcy1sYWJlbGluZyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0iZ2V0VkNTTGFiZWxpbmdPcHRpb25zIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3MtbGFiZWxpbmciIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3MtbGFiZWxpbmciIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0ic2V0VkNTTGFiZWxpbmdPcHRpb25zIiBuYW1lPSJQVVQiPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InZjcy1sYWJlbGluZyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InZjcy1sYWJlbGluZyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idmNzLWxhYmVsaW5nIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idmNzLWxhYmVsaW5nIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J0TG9jYXRvcn0vbmV3QnVpbGRUeXBlRGVzY3JpcHRpb24iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImdldEV4YW1wbGVOZXdQcm9qZWN0RGVzY3JpcHRpb24iIG5hbWU9IkdFVCI+PG5zMjpkb2M+RXhwZXJpbWVudGFsIHN1cHBvcnQgb25seS4KKyBVc2UgdGhpcyB0byBnZXQgYW4gZXhhbXBsZSBvZiB0aGUgYmVhbiB0byBiZSBwb3N0ZWQgdG8gdGhlIC9idWlsZFR5cGVzIHJlcXVlc3QgdG8gY3JlYXRlIGEgbmV3IGJ1aWxkIHR5cGU8L25zMjpkb2M+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9Im5ld0J1aWxkVHlwZURlc2NyaXB0aW9uIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0ibmV3QnVpbGRUeXBlRGVzY3JpcHRpb24iIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnRMb2NhdG9yfS9idWlsZHMiPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlQnVpbGRzIiBuYW1lPSJHRVQiPjxuczI6ZG9jPlNlcnZlcyBidWlsZHMgbWF0Y2hpbmcgc3VwcGxpZWQgY29uZGl0aW9uLjwvbnMyOmRvYz48bnMyOnJlcXVlc3Q+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InN0YXR1cyIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0idHJpZ2dlcmVkQnlVc2VyIiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJpbmNsdWRlUGVyc29uYWwiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6Ym9vbGVhbiIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJpbmNsdWRlQ2FuY2VsZWQiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6Ym9vbGVhbiIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJvbmx5UGlubmVkIiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOmJvb2xlYW4iLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0idGFnIiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJhZ2VudE5hbWUiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InNpbmNlQnVpbGQiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InNpbmNlRGF0ZSIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ic3RhcnQiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6bG9uZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJjb3VudCIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czppbnQiLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibG9jYXRvciIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpzdHJpbmciLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZHMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZHMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnRMb2NhdG9yfS9zdGVwcy97c3RlcElkfSI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ic3RlcElkIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJkZWxldGVTdGVwIiBuYW1lPSJERUxFVEUiLz48bnMyOm1ldGhvZCBpZD0iZ2V0U3RlcCIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0ic3RlcCIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InN0ZXAiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnRMb2NhdG9yfSI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0ic2VydmVCdWlsZFR5cGVYTUwiIG5hbWU9IkdFVCI+PG5zMjpkb2M+U2VydmVzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3IgdGVtcGxhdGVzIGFjY29yZGluZyB0byB0aGUgbG9jYXRvci48L25zMjpkb2M+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImJ1aWxkVHlwZSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImJ1aWxkVHlwZSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJkZWxldGVCdWlsZFR5cGUiIG5hbWU9IkRFTEVURSIvPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidExvY2F0b3J9L3tmaWVsZH0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJmaWVsZCIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZUJ1aWxkVHlwZUZpZWxkIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9InRleHQvcGxhaW4iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9InNldEJ1aWxkVHlwZUZpZWxkIiBuYW1lPSJQVVQiPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnRMb2NhdG9yfS9idWlsZFRhZ3MiPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlQnVpbGRUeXBlQnVpbGRzVGFncyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idGFncyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InRhZ3MiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnRMb2NhdG9yfS9wYXJhbWV0ZXJzIj48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZUJ1aWxkVHlwZVBhcmFtZXRlcnMiIG5hbWU9IkdFVCI+PG5zMjpyZXF1ZXN0PjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJsb2NhdG9yIiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOnN0cmluZyIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb3BlcnRpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9ImNoYW5nZUJ1aWxkVHlwZVBhcmFtZXRlcnMiIG5hbWU9IlBVVCI+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvcGVydGllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb3BlcnRpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb3BlcnRpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9ImRlbGV0ZUFsbEJ1aWxkVHlwZVBhcmFtZXRlcnMiIG5hbWU9IkRFTEVURSIvPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidExvY2F0b3J9L3BhcmFtZXRlcnMve25hbWV9Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZUJ1aWxkVHlwZVBhcmFtZXRlciIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJwdXRCdWlsZFR5cGVQYXJhbWV0ZXIiIG5hbWU9IlBVVCI+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJkZWxldGVCdWlsZFR5cGVQYXJhbWV0ZXIiIG5hbWU9IkRFTEVURSIvPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidExvY2F0b3J9L3NldHRpbmdzL3tuYW1lfSI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0ic2VydmVCdWlsZFR5cGVTZXR0aW5ncyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJwdXRCdWlsZFR5cGVTZXR0aW5nIiBuYW1lPSJQVVQiPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iKi8qIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidExvY2F0b3J9L3NldHRpbmdzIj48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZUJ1aWxkVHlwZVNldHRpbmdzIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvcGVydGllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJyZXBsYWNlQnVpbGRUeXBlU2V0dGluZ3MiIG5hbWU9IlBVVCI+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvcGVydGllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb3BlcnRpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb3BlcnRpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J0TG9jYXRvcn0vdGVtcGxhdGUiPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlQnVpbGRUeXBlVGVtcGxhdGUiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImJ1aWxkVHlwZS1yZWYiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZFR5cGUtcmVmIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9ImdldFRlbXBsYXRlQXNzb2NpYXRpb24iIG5hbWU9IlBVVCI+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iYnVpbGRUeXBlLXJlZiIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImJ1aWxkVHlwZS1yZWYiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0iZGVsZXRlVGVtcGxhdGVBc3NvY2lhdGlvbiIgbmFtZT0iREVMRVRFIi8+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J0TG9jYXRvcn0vc3RlcHMve3N0ZXBJZH0vcGFyYW1ldGVycyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ic3RlcElkIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJnZXRTdGVwUGFyYW1ldGVycyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvcGVydGllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb3BlcnRpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0icmVwbGFjZVN0ZXBQYXJhbWV0ZXJzIiBuYW1lPSJQVVQiPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb3BlcnRpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvcGVydGllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidExvY2F0b3J9L3N0ZXBzL3tzdGVwSWR9L3BhcmFtZXRlcnMve3BhcmFtZXRlck5hbWV9Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJzdGVwSWQiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InBhcmFtZXRlck5hbWUiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImdldFN0ZXBQYXJhbWV0ZXIiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0iYWRkU3RlcFBhcmFtZXRlciIgbmFtZT0iUFVUIj48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9InRleHQvcGxhaW4iLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9InRleHQvcGxhaW4iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J0TG9jYXRvcn0vc3RlcHMve3N0ZXBJZH0ve2ZpZWxkTmFtZX0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImZpZWxkTmFtZSIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ic3RlcElkIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJnZXRTdGVwU2V0dGluZyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJjaGFuZ2VTdGVwU2V0dGluZyIgbmFtZT0iUFVUIj48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9InRleHQvcGxhaW4iLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9InRleHQvcGxhaW4iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J0TG9jYXRvcn0vZmVhdHVyZXMve2ZlYXR1cmVJZH0vcGFyYW1ldGVycyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iZmVhdHVyZUlkIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJnZXRGZWF0dXJlUGFyYW1ldGVycyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvcGVydGllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb3BlcnRpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0icmVwbGFjZUZlYXR1cmVQYXJhbWV0ZXJzIiBuYW1lPSJQVVQiPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb3BlcnRpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvcGVydGllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidExvY2F0b3J9L2ZlYXR1cmVzL3tmZWF0dXJlSWR9L3BhcmFtZXRlcnMve3BhcmFtZXRlck5hbWV9Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJmZWF0dXJlSWQiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InBhcmFtZXRlck5hbWUiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImdldEZlYXR1cmVQYXJhbWV0ZXIiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0iYWRkRmVhdHVyZVBhcmFtZXRlciIgbmFtZT0iUFVUIj48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9IiovKiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnRMb2NhdG9yfS9mZWF0dXJlcy97ZmVhdHVyZUlkfS97bmFtZX0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Im5hbWUiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImZlYXR1cmVJZCIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0iZ2V0RmVhdHVyZVNldHRpbmciIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0iY2hhbmdlRmVhdHVyZVNldHRpbmciIG5hbWU9IlBVVCI+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidExvY2F0b3J9L2FydGlmYWN0LWRlcGVuZGVuY2llcyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ0TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0iZ2V0QXJ0aWZhY3REZXBzIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJhcnRpZmFjdC1kZXBlbmRlbmNpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJhcnRpZmFjdC1kZXBlbmRlbmNpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0icmVwbGFjZUFydGlmYWN0RGVwcyIgbmFtZT0iUFVUIj48bnMyOmRvYz5SZXBsYWNlcyB0aGUgZGVwZW5kZW5jaWVzIHRvIHRob3NlIHNlbnQgaW4gdGhlIHJlcXVlc3QuPC9uczI6ZG9jPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImFydGlmYWN0LWRlcGVuZGVuY2llcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImFydGlmYWN0LWRlcGVuZGVuY2llcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iYXJ0aWZhY3QtZGVwZW5kZW5jaWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iYXJ0aWZhY3QtZGVwZW5kZW5jaWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9ImFkZEFydGlmYWN0RGVwIiBuYW1lPSJQT1NUIj48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJhcnRpZmFjdC1kZXBlbmRlbmN5IiBtZWRpYVR5cGU9IiovKiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImFydGlmYWN0LWRlcGVuZGVuY3kiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJhcnRpZmFjdC1kZXBlbmRlbmN5IiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIvYXBwL3Jlc3QvdXNlckdyb3VwcyI+PG5zMjptZXRob2QgaWQ9ImFkZEdyb3VwIiBuYW1lPSJQT1NUIj48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJncm91cCIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9Imdyb3VwIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJncm91cCIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9Imdyb3VwIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9InNlcnZlR3JvdXBzIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJncm91cHMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJncm91cHMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOnJlc291cmNlIHBhdGg9Ii97Z3JvdXBMb2NhdG9yfS9yb2xlcyI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Imdyb3VwTG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0iYWRkUm9sZSIgbmFtZT0iUE9TVCI+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icm9sZSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InJvbGUiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InJvbGUiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJyb2xlIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9Imxpc3RSb2xlcyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icm9sZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJyb2xlcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJhZGRSb2xlUHV0IiBuYW1lPSJQVVQiPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InJvbGVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icm9sZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InJvbGVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icm9sZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97Z3JvdXBMb2NhdG9yfS9yb2xlcy97cm9sZUlkfS97c2NvcGV9Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iZ3JvdXBMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJzY29wZSIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0icm9sZUlkIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJhZGRSb2xlU2ltcGxlIiBuYW1lPSJQT1NUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icm9sZSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InJvbGUiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0iZGVsZXRlUm9sZSIgbmFtZT0iREVMRVRFIi8+PG5zMjptZXRob2QgaWQ9Imxpc3RSb2xlIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJyb2xlIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icm9sZSIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tncm91cExvY2F0b3J9Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iZ3JvdXBMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJkZWxldGVHcm91cCIgbmFtZT0iREVMRVRFIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlR3JvdXAiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9Imdyb3VwIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iZ3JvdXAiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii9hcHAvcmVzdC9kZWJ1ZyI+PG5zMjpkb2M+UHJvdmlkZXMgc29tZSBkZWJ1ZyBhYmlsaXRpZXMgZm9yIHRoZSBzZXJ2ZXIuIEV4cGVyaW1lbnRhbCBvbmx5LiBTaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24gb3IgYmV0dGVyIG5vdCB1c2VkIGlmIG5vdCBhZHZpc2VkIGJ5IEpldEJyYWlucworIFRoZXNlIHNob3VsZCBuZXZlciBiZSB1c2VkIGZvciBub24tZGVidWcgcHVycG9zZXMgYW5kIHRoZSBBUEkgaGVyZSBjYW4gY2hhbmdlIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBUZWFtQ2l0eSB3aXRob3V0IGFueSBub3RpY2UuPC9uczI6ZG9jPjxuczI6cmVzb3VyY2UgcGF0aD0iL2RhdGFiYXNlL3F1ZXJ5L3txdWVyeX0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJxdWVyeSIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0iZXhlY3V0ZURCUXVlcnkiIG5hbWU9IkdFVCI+PG5zMjpyZXF1ZXN0PjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJmaWVsZERlbGltaXRlciIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpzdHJpbmciIGRlZmF1bHQ9IiwgIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImNvdW50IiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOmludCIgZGVmYXVsdD0iMTAwMCIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii92Y3NDaGVja2luZ0ZvckNoYW5nZXNRdWV1ZSI+PG5zMjptZXRob2QgaWQ9InNjaGVkdWxlQ2hlY2tpbmdGb3JDaGFuZ2VzIiBuYW1lPSJQT1NUIj48bnMyOmRvYz5FeHBlcmltZW50YWwgdXNlIG9ubHkhPC9uczI6ZG9jPjxuczI6cmVxdWVzdD48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibG9jYXRvciIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpzdHJpbmciLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3Mtcm9vdC1pbnN0YW5jZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3Mtcm9vdC1pbnN0YW5jZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii9kYXRhYmFzZS90YWJsZXMiPjxuczI6bWV0aG9kIGlkPSJsaXN0REJUYWJsZXMiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii9hcHAvcmVzdC9idWlsZHMiPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZUFsbEJ1aWxkcyIgbmFtZT0iR0VUIj48bnMyOmRvYz5TZXJ2ZXMgYnVpbGRzIG1hdGNoaW5nIHN1cHBsaWVkIGNvbmRpdGlvbi48L25zMjpkb2M+PG5zMjpyZXF1ZXN0PjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidWlsZFR5cGUiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InN0YXR1cyIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0idHJpZ2dlcmVkQnlVc2VyIiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJpbmNsdWRlUGVyc29uYWwiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6Ym9vbGVhbiIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJpbmNsdWRlQ2FuY2VsZWQiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6Ym9vbGVhbiIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJvbmx5UGlubmVkIiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOmJvb2xlYW4iLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0idGFnIiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJhZ2VudE5hbWUiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InNpbmNlQnVpbGQiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InNpbmNlRGF0ZSIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ic3RhcnQiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6bG9uZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJjb3VudCIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czppbnQiLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibG9jYXRvciIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpzdHJpbmciLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZHMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZHMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOnJlc291cmNlIHBhdGg9Ii97YnVpbGRMb2NhdG9yfS9yZXN1bHRpbmctcHJvcGVydGllcy97cHJvcGVydHlOYW1lfSI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InByb3BlcnR5TmFtZSIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnVpbGRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJnZXRQYXJhbWV0ZXIiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnVpbGRMb2NhdG9yfS9hcnRpZmFjdHMiPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidWlsZExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImdldEFydGlmYWN0cyIgbmFtZT0iR0VUIj48bnMyOmRvYz5Nb3JlIHVzZXItZnJpZW5kbHkgVVJMIGZvciAmcXVvdDsve2J1aWxkTG9jYXRvcn0vYXJ0aWZhY3RzL2NoaWxkcmVuJnF1b3Q7IG9uZS48L25zMjpkb2M+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImZpbGVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iZmlsZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnVpbGRMb2NhdG9yfS9hcnRpZmFjdHMvbWV0YWRhdGF7cGF0aDooLy4qKT99Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0icGF0aCIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnVpbGRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJnZXRBcnRpZmFjdE1ldGFkYXRhIiBuYW1lPSJHRVQiPjxuczI6cmVxdWVzdD48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0icmVzb2x2ZVBhcmFtZXRlcnMiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6Ym9vbGVhbiIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJsb2NhdG9yIiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOnN0cmluZyIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImZpbGUiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJmaWxlIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J1aWxkTG9jYXRvcn0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidWlsZExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9ImRlbGV0ZUJ1aWxkIiBuYW1lPSJERUxFVEUiLz48bnMyOm1ldGhvZCBpZD0ic2VydmVCdWlsZCIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iYnVpbGQiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJidWlsZCIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidWlsZExvY2F0b3J9L3Bpbi8iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidWlsZExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InBpbkJ1aWxkIiBuYW1lPSJQVVQiPjxuczI6ZG9jPlBpbnMgYSBidWlsZDwvbnMyOmRvYz48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9InRleHQvcGxhaW4iLz48L25zMjpyZXF1ZXN0PjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0iZ2V0UGlubmVkIiBuYW1lPSJHRVQiPjxuczI6ZG9jPkZldGNoZXMgY3VycmVudCBidWlsZCBwaW5uZWQgc3RhdHVzLjwvbnMyOmRvYz48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJ1bnBpbkJ1aWxkIiBuYW1lPSJERUxFVEUiPjxuczI6ZG9jPlVucGlucyBhIGJ1aWxkPC9uczI6ZG9jPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlcXVlc3Q+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidWlsZExvY2F0b3J9L3RhZ3MvIj48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnVpbGRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZVRhZ3MiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InRhZ3MiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ0YWdzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9ImFkZFRhZ3MiIG5hbWU9IlBPU1QiPjxuczI6ZG9jPkFkZHMgYSBzZXQgb2YgdGFncyB0byBhIGJ1aWxkPC9uczI6ZG9jPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InRhZ3MiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ0YWdzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXF1ZXN0PjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0iYWRkVGFnIiBuYW1lPSJQT1NUIj48bnMyOmRvYz5BZGRzIGEgc2luZ2xlIHRhZyB0byBhIGJ1aWxkPC9uczI6ZG9jPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0icmVwbGFjZVRhZ3MiIG5hbWU9IlBVVCI+PG5zMjpkb2M+UmVwbGFjZXMgYnVpbGQncyB0YWdzLjwvbnMyOmRvYz48bnMyOnJlcXVlc3Q+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ0YWdzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idGFncyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idGFncyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InRhZ3MiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnVpbGRMb2NhdG9yfS9yZXN1bHRpbmctcHJvcGVydGllcy8iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidWlsZExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlQnVpbGRBY3R1YWxQYXJhbWV0ZXJzIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvcGVydGllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidWlsZExvY2F0b3J9L2FydGlmYWN0cy9jaGlsZHJlbntwYXRoOigvLiopP30iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJwYXRoIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIgZGVmYXVsdD0iIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ1aWxkTG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0iZ2V0QXJ0aWZhY3RDaGlsZHJlbiIgbmFtZT0iR0VUIj48bnMyOnJlcXVlc3Q+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InJlc29sdmVQYXJhbWV0ZXJzIiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOmJvb2xlYW4iLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibG9jYXRvciIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpzdHJpbmciLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJmaWxlcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImZpbGVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J1aWxkTG9jYXRvcn0vYXJ0aWZhY3RzL2NvbnRlbnR7cGF0aDooLy4qKT99Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0icGF0aCIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnVpbGRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJnZXRBcnRpZmFjdENvbnRlbnQiIG5hbWU9IkdFVCI+PG5zMjpyZXF1ZXN0PjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJyZXNvbHZlUGFyYW1ldGVycyIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpib29sZWFuIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSIqLyoiLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J1aWxkTG9jYXRvcn0vYXJ0aWZhY3RzL2ZpbGVze3BhdGg6KC8uKik/fSI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InBhdGgiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ1aWxkTG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0iZ2V0QXJ0aWZhY3RGaWxlc0NvbnRlbnQiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iKi8qIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidWlsZExvY2F0b3J9L3NvdXJjZXMvZmlsZXMve2ZpbGVOYW1lOi4rfSI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImZpbGVOYW1lIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidWlsZExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlU291cmNlRmlsZSIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J1aWxkTG9jYXRvcn0vcmVsYXRlZC1pc3N1ZXMiPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidWlsZExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlQnVpbGRSZWxhdGVkSXNzdWVzT2xkIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJpc3N1ZXNVc2FnZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJpc3N1ZXNVc2FnZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnVpbGRMb2NhdG9yfS9yZWxhdGVkSXNzdWVzIj48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnVpbGRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZUJ1aWxkUmVsYXRlZElzc3VlcyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iaXNzdWVzVXNhZ2VzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iaXNzdWVzVXNhZ2VzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J1aWxkTG9jYXRvcn0ve2ZpZWxkfSI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImZpZWxkIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidWlsZExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlQnVpbGRGaWVsZEJ5QnVpbGRPbmx5IiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9InRleHQvcGxhaW4iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J1aWxkTG9jYXRvcn0vc3RhdGlzdGljcy8iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidWlsZExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlQnVpbGRTdGF0aXN0aWNWYWx1ZXMiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb3BlcnRpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2J1aWxkTG9jYXRvcn0vc3RhdGlzdGljcy97bmFtZX0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidWlsZExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlQnVpbGRTdGF0aXN0aWNWYWx1ZSIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3tidWlsZExvY2F0b3J9L2NvbW1lbnQiPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidWlsZExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InJlcGxhY2VDb21tZW50IiBuYW1lPSJQVVQiPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlcXVlc3Q+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJkZWxldGVDb21tZW50IiBuYW1lPSJERUxFVEUiLz48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97YnVpbGRMb2NhdG9yfS9zdGF0dXNJY29uIj48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYnVpbGRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZUJ1aWxkU3RhdHVzSWNvbiIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSIqLyoiLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIvYXBwL3Jlc3QvY2N0cmF5Ij48bnMyOnJlc291cmNlIHBhdGg9Ii9wcm9qZWN0cy54bWwiPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZVByb2plY3RzIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJQcm9qZWN0cyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9IlByb2plY3RzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIvYXBwL3Jlc3QvdmNzLXJvb3RzIj48bnMyOm1ldGhvZCBpZD0iYWRkUm9vdCIgbmFtZT0iUE9TVCI+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idmNzLXJvb3QiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3Mtcm9vdCIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idmNzLXJvb3QiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3Mtcm9vdCIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZVJvb3RzIiBuYW1lPSJHRVQiPjxuczI6cmVxdWVzdD48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibG9jYXRvciIgc3R5bGU9InF1ZXJ5IiB0eXBlPSJ4czpzdHJpbmciLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3Mtcm9vdHMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3Mtcm9vdHMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOnJlc291cmNlIHBhdGg9Ii97dmNzUm9vdExvY2F0b3J9L3tmaWVsZH0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJmaWVsZCIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0idmNzUm9vdExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNldEZpZWxkIiBuYW1lPSJQVVQiPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0ic2VydmVGaWVsZCIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3t2Y3NSb290TG9jYXRvcn0vcHJvcGVydGllcy97bmFtZX0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJ2Y3NSb290TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0icHV0UGFyYW1ldGVyIiBuYW1lPSJQVVQiPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48bnMyOm1ldGhvZCBpZD0ic2VydmVQcm9wZXJ0eSIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJkZWxldGVQYXJhbWV0ZXIiIG5hbWU9IkRFTEVURSIvPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3t2Y3NSb290TG9jYXRvcn0iPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJ2Y3NSb290TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0ic2VydmVSb290IiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJ2Y3Mtcm9vdCIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InZjcy1yb290IiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9ImRlbGV0ZVJvb3QiIG5hbWU9IkRFTEVURSIvPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3t2Y3NSb290TG9jYXRvcn0vaW5zdGFuY2VzL3t2Y3NSb290SW5zdGFuY2VMb2NhdG9yfS9wcm9wZXJ0aWVzIj48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0idmNzUm9vdEluc3RhbmNlTG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0idmNzUm9vdExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlUm9vdEluc3RhbmNlUHJvcGVydGllcyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvcGVydGllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb3BlcnRpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97dmNzUm9vdExvY2F0b3J9L2luc3RhbmNlcy97dmNzUm9vdEluc3RhbmNlTG9jYXRvcn0ve2ZpZWxkfSI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImZpZWxkIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJ2Y3NSb290SW5zdGFuY2VMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJ2Y3NSb290TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0ic2VydmVJbnN0YW5jZUZpZWxkIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9InRleHQvcGxhaW4iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9InNldEluc3RhbmNlRmllbGQiIG5hbWU9IlBVVCI+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVxdWVzdD48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL3t2Y3NSb290TG9jYXRvcn0vaW5zdGFuY2VzIj48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0idmNzUm9vdExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlUm9vdEluc3RhbmNlcyIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idmNzLXJvb3QtaW5zdGFuY2VzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idmNzLXJvb3QtaW5zdGFuY2VzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve3Zjc1Jvb3RMb2NhdG9yfS9pbnN0YW5jZXMve3Zjc1Jvb3RJbnN0YW5jZUxvY2F0b3J9Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0idmNzUm9vdEluc3RhbmNlTG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0idmNzUm9vdExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIj48bnMyOmRvYz50aGlzIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQgYXMgdmNzUm9vdEluc3RhbmNlTG9jYXRvciBzaG91bGQgc3BlY2lmeSBpbnN0YW5jZSBmdWxseTwvbnMyOmRvYz48L25zMjpwYXJhbT48bnMyOm1ldGhvZCBpZD0ic2VydmVSb290SW5zdGFuY2UiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InZjcy1yb290LWluc3RhbmNlIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0idmNzLXJvb3QtaW5zdGFuY2UiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii97dmNzUm9vdExvY2F0b3J9L3Byb3BlcnRpZXMiPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJ2Y3NSb290TG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0ic2VydmVQcm9wZXJ0aWVzIiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvcGVydGllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJjaGFuZ1Byb3BlcnRpZXMiIG5hbWU9IlBVVCI+PG5zMjpyZXF1ZXN0PjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0icHJvcGVydGllcyIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb3BlcnRpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InByb3BlcnRpZXMiIG1lZGlhVHlwZT0iYXBwbGljYXRpb24veG1sIi8+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJwcm9wZXJ0aWVzIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjptZXRob2QgaWQ9ImRlbGV0ZUFsbFByb3BlcnRpZXMiIG5hbWU9IkRFTEVURSIvPjwvbnMyOnJlc291cmNlPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL2FwcC9yZXN0Ij48bnMyOm1ldGhvZCBpZD0ic2VydmVSb290IiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9InRleHQvcGxhaW4iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PG5zMjpyZXNvdXJjZSBwYXRoPSIvdmVyc2lvbiI+PG5zMjptZXRob2QgaWQ9InNlcnZlQXBpVmVyc2lvbiIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjwvbnMyOnJlc291cmNlPjxuczI6cmVzb3VyY2UgcGF0aD0iL2luZm8iPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZVBsdWdpbkluZm8iIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9InBsdWdpbiIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve3Byb2plY3RMb2NhdG9yfS97YnRMb2NhdG9yfS97YnVpbGRMb2NhdG9yfS97ZmllbGR9Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iZmllbGQiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InByb2plY3RMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJidExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImJ1aWxkTG9jYXRvciIgc3R5bGU9InRlbXBsYXRlIiB0eXBlPSJ4czpzdHJpbmciLz48bnMyOm1ldGhvZCBpZD0ic2VydmVCdWlsZEZpZWxkU2hvcnQiIG5hbWU9IkdFVCI+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48L25zMjpyZXNvdXJjZT48bnMyOnJlc291cmNlIHBhdGg9Ii9hcHAvcmVzdC9hZ2VudHMiPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZUFnZW50cyIgbmFtZT0iR0VUIj48bnMyOnJlcXVlc3Q+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImluY2x1ZGVEaXNjb25uZWN0ZWQiIHN0eWxlPSJxdWVyeSIgdHlwZT0ieHM6Ym9vbGVhbiIgZGVmYXVsdD0idHJ1ZSIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJpbmNsdWRlVW5hdXRob3JpemVkIiBzdHlsZT0icXVlcnkiIHR5cGU9InhzOmJvb2xlYW4iIGRlZmF1bHQ9InRydWUiLz48L25zMjpyZXF1ZXN0PjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJhZ2VudHMtcmVmIiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL3htbCIvPjxuczI6cmVwcmVzZW50YXRpb24gZWxlbWVudD0iYWdlbnRzLXJlZiIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6cmVzb3VyY2UgcGF0aD0iL3thZ2VudExvY2F0b3J9Ij48bnMyOnBhcmFtIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iYWdlbnRMb2NhdG9yIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6bWV0aG9kIGlkPSJzZXJ2ZUFnZW50IiBuYW1lPSJHRVQiPjxuczI6cmVzcG9uc2U+PG5zMjpyZXByZXNlbnRhdGlvbiBlbGVtZW50PSJhZ2VudCIgbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48bnMyOnJlcHJlc2VudGF0aW9uIGVsZW1lbnQ9ImFnZW50IiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz48L25zMjpyZXNwb25zZT48L25zMjptZXRob2Q+PC9uczI6cmVzb3VyY2U+PG5zMjpyZXNvdXJjZSBwYXRoPSIve2FnZW50TG9jYXRvcn0ve2ZpZWxkfSI+PG5zMjpwYXJhbSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImZpZWxkIiBzdHlsZT0idGVtcGxhdGUiIHR5cGU9InhzOnN0cmluZyIvPjxuczI6cGFyYW0geG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJhZ2VudExvY2F0b3IiIHN0eWxlPSJ0ZW1wbGF0ZSIgdHlwZT0ieHM6c3RyaW5nIi8+PG5zMjptZXRob2QgaWQ9InNlcnZlQWdlbnRGaWVsZCIgbmFtZT0iR0VUIj48bnMyOnJlc3BvbnNlPjxuczI6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJ0ZXh0L3BsYWluIi8+PC9uczI6cmVzcG9uc2U+PC9uczI6bWV0aG9kPjxuczI6bWV0aG9kIGlkPSJzZXRBZ2VudEZpZWxkIiBuYW1lPSJQVVQiPjxuczI6cmVxdWVzdD48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlcXVlc3Q+PG5zMjpyZXNwb25zZT48bnMyOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPjwvbnMyOnJlc3BvbnNlPjwvbnMyOm1ldGhvZD48L25zMjpyZXNvdXJjZT48L25zMjpyZXNvdXJjZT48L25zMjpyZXNvdXJjZXM+PC9uczI6YXBwbGljYXRpb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdHRvcnJlbnQtbWFzdGVyL3Rlc3RzL3NyYy90ZXN0L3Jlc291cmNlcy9wYXJlbnRGaWxlcy9wYXJlbnREaXIvc3RvcmFnZS52ZXJzaW9uIGIvdHRvcnJlbnQtbWFzdGVyL3Rlc3RzL3NyYy90ZXN0L3Jlc291cmNlcy9wYXJlbnRGaWxlcy9wYXJlbnREaXIvc3RvcmFnZS52ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MjYzZWUKLS0tIC9kZXYvbnVsbAorKysgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvcmVzb3VyY2VzL3BhcmVudEZpbGVzL3BhcmVudERpci9zdG9yYWdlLnZlcnNpb24KQEAgLTAsMCArMSBAQAorMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvdG9ycmVudHMvZmlsZTEuamFyLnRvcnJlbnQgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvcmVzb3VyY2VzL3RvcnJlbnRzL2ZpbGUxLmphci50b3JyZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNjk3NDQKLS0tIC9kZXYvbnVsbAorKysgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvcmVzb3VyY2VzL3RvcnJlbnRzL2ZpbGUxLmphci50b3JyZW50CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvdG9ycmVudHMvZmlsZTIuamFyLnRvcnJlbnQgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvcmVzb3VyY2VzL3RvcnJlbnRzL2ZpbGUyLmphci50b3JyZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZDNhM2EKLS0tIC9kZXYvbnVsbAorKysgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvcmVzb3VyY2VzL3RvcnJlbnRzL2ZpbGUyLmphci50b3JyZW50CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvdG9ycmVudHMvcGFyZW50RGlyLmxpbnV4LnRvcnJlbnQgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvcmVzb3VyY2VzL3RvcnJlbnRzL3BhcmVudERpci5saW51eC50b3JyZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNGNlNTYKLS0tIC9kZXYvbnVsbAorKysgYi90dG9ycmVudC1tYXN0ZXIvdGVzdHMvc3JjL3Rlc3QvcmVzb3VyY2VzL3RvcnJlbnRzL3BhcmVudERpci5saW51eC50b3JyZW50CkBAIC0wLDAgKzEgQEAKK2Q4OmFubm91bmNlMzA6aHR0cDovL2xvY2FsaG9zdDo2OTY5L2Fubm91bmNlMTA6Y3JlYXRlZCBieTU6VGVzdDIxMzpjcmVhdGlvbiBkYXRlaTEzNzYwNTEwMDBlNDppbmZvZDU6ZmlsZXNsZDY6bGVuZ3RoaTI1Mjc4OGU0OnBhdGhsMTc6QWNjdVJldkNvbW1vbi5qYXJlZWQ2Omxlbmd0aGkxODg5MTBlNDpwYXRobDIzOmNvbW1vbnMtaW8tY2lvMi41XzMuamFyZWVkNjpsZW5ndGhpMjQwZTQ6cGF0aGwyODpjb21tb25zLWlvLWNpbzIuNV8zLmphci5saW5rZWVkNjpsZW5ndGhpODIyOTdlNDpwYXRobDU6aW5EaXIxNjphcHBsaWNhdGlvbi53YWRsZWVkNjpsZW5ndGhpMWU0OnBhdGhsMTU6c3RvcmFnZS52ZXJzaW9uZWVlNDpuYW1lOTpwYXJlbnREaXIxMjpwaWVjZSBsZW5ndGhpNTI0Mjg4ZTY6cGllY2VzMjA6ngZO3Eq+Tdg9+6HRXX+LdmKmozZlZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvdG9ycmVudHMvcGFyZW50RGlyLndpbi50b3JyZW50IGIvdHRvcnJlbnQtbWFzdGVyL3Rlc3RzL3NyYy90ZXN0L3Jlc291cmNlcy90b3JyZW50cy9wYXJlbnREaXIud2luLnRvcnJlbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEwMjkyZAotLS0gL2Rldi9udWxsCisrKyBiL3R0b3JyZW50LW1hc3Rlci90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvdG9ycmVudHMvcGFyZW50RGlyLndpbi50b3JyZW50CkBAIC0wLDAgKzEgQEAKK2Q4OmFubm91bmNlMzA6aHR0cDovL2xvY2FsaG9zdDo2OTY5L2Fubm91bmNlMTA6Y3JlYXRlZCBieTU6VGVzdDIxMzpjcmVhdGlvbiBkYXRlaTEzNzYwNTEwMDBlNDppbmZvZDU6ZmlsZXNsZDY6bGVuZ3RoaTI1Mjc4OGU0OnBhdGhsMTc6QWNjdVJldkNvbW1vbi5qYXJlZWQ2Omxlbmd0aGkxODg5MTBlNDpwYXRobDIzOmNvbW1vbnMtaW8tY2lvMi41XzMuamFyZWVkNjpsZW5ndGhpMjQxZTQ6cGF0aGwyODpjb21tb25zLWlvLWNpbzIuNV8zLmphci5saW5rZWVkNjpsZW5ndGhpODIzMDVlNDpwYXRobDU6aW5EaXIxNjphcHBsaWNhdGlvbi53YWRsZWVkNjpsZW5ndGhpMWU0OnBhdGhsMTU6c3RvcmFnZS52ZXJzaW9uZWVlNDpuYW1lOTpwYXJlbnREaXIxMjpwaWVjZSBsZW5ndGhpNTI0Mjg4ZTY6cGllY2VzMjA6VHZoZOle+c12l5ykfe/aSxIXRrFlZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK